{"version":3,"file":"webex.min.js","mappings":"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,OAAO,IAAIjuF,WAAW,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,I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,UAAUngV,aAI3Bp/I,OAAOD,QAAUgsI,Q,+BCv7CjB,MAAMuzV,EAAU,EAAQ,OAClBz+d,EAAO,EAAQ,OAWrB,MAAMkrI,EAAW,CAChBq2V,SAVDr7b,eAAwBsO,GACvB,MAAMoqb,QAAkBH,EAAQ8C,SAAS/sb,GACzC,IACC,aAAax0C,EAAK6+d,cAAcD,EACjC,CAAE,cACKA,EAAUxld,OACjB,CACD,GAMAtY,OAAOmX,OAAOizH,EAAUlrI,GAExBc,OAAOC,eAAemqI,EAAU,aAAc,CAC7ClqI,IAAG,IACKhB,EAAK67J,aAId/6J,OAAOC,eAAemqI,EAAU,YAAa,CAC5ClqI,IAAG,IACKhB,EAAKu+I,YAIdp/I,EAAOD,QAAUgsI,C,yBC7BjB/rI,EAAOD,QAAU,CAChB28J,WAAY,CACX,MACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,QACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,SACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,IACA,KACA,MACA,MACA,MACA,QACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OAEDtd,UAAW,CACV,aACA,YACA,YACA,aACA,aACA,cACA,oBACA,oBACA,aACA,YACA,qBACA,4BACA,yBACA,uBACA,0BACA,0CACA,iDACA,kDACA,0EACA,4EACA,oEACA,kBACA,oBACA,+BACA,mBACA,sBACA,8BACA,gCACA,6BACA,YACA,aACA,mBACA,aACA,kBACA,gBACA,iBACA,cACA,iBACA,iBACA,yBACA,aACA,aACA,aACA,YACA,aACA,YACA,YACA,kBACA,eACA,YACA,gBACA,YACA,kBACA,2BACA,gCACA,kBACA,mBACA,YACA,aACA,gCACA,WACA,WACA,eACA,cACA,yBACA,kBACA,mBACA,wBACA,iCACA,wCACA,oCACA,oBACA,6BACA,oBACA,yBACA,qBACA,oBACA,oBACA,kBACA,aACA,wBACA,YACA,YACA,YACA,YACA,YACA,aACA,kBACA,iCACA,aACA,sBACA,aACA,sBACA,aACA,YACA,oBACA,mBACA,gBACA,aACA,oBACA,+BACA,cACA,4BACA,4BACA,cACA,yBACA,cACA,aACA,sBACA,mBACA,oBACA,oBACA,wBACA,uBACA,cACA,cACA,2BACA,YACA,aACA,cACA,aACA,aACA,aACA,+BACA,aACA,+BACA,4BACA,qBACA,YACA,8BACA,YACA,YACA,oB,6BClRFr/I,EAAQgge,cAAgBjud,GAAU,IAAIA,GAAQqU,KAAIk8c,GAAaA,EAAUtkd,WAAW,KASpFhe,EAAQgie,yBAA2B,CAACv9c,EAAQI,EAAS,KACpD,MAAM09c,EAAU1xc,SAASpM,EAAOlf,SAAS,OAAQ,IAAK,KAAKqL,QAAQ,QAAS,IAAI4O,OAAQ,GACxF,GAAI8B,MAAMihd,GACT,OAAO,EAGR,IAAIpzc,EAAM,IAEV,IAAK,IAAI3mB,EAAIqc,EAAQrc,EAAIqc,EAAS,IAAKrc,IACtC2mB,GAAO1K,EAAOjc,GAGf,IAAK,IAAIA,EAAIqc,EAAS,IAAKrc,EAAIqc,EAAS,IAAKrc,IAC5C2mB,GAAO1K,EAAOjc,GAGf,OAAO+5d,IAAYpzc,CAAG,EAOvBnvB,EAAQsge,oBAAsB,CAC7Bx+d,IAAK,CAAC2iB,EAAQI,IACgB,IAArBJ,EAAOI,EAAS,GAAeJ,EAAOI,EAAS,I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","sources":["webpack://webex-js-sdk/webpack/universalModuleDefinition","webpack://webex-js-sdk/./node_modules/@babel/polyfill/lib/index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/lib/noConflict.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/es6/index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/array/flat-map.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/array/includes.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/object/entries.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/object/values.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/promise/finally.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/string/pad-end.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/string/pad-start.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/string/trim-end.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/string/trim-start.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/fn/symbol/async-iterator.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/fn/global.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_a-function.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_an-object.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_core.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_ctx.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_dom-create.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_export.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_fails.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_global.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_has.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_hide.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_is-object.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_object-dp.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_property-desc.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/_to-primitive.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/library/modules/es7.global.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_a-function.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_a-number-value.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_add-to-unscopables.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_advance-string-index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_an-instance.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_an-object.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-copy-within.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-fill.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-includes.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-methods.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-reduce.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-species-constructor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_array-species-create.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_bind.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_classof.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_cof.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_collection-strong.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_collection-weak.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_collection.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_core.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_create-property.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_ctx.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_date-to-iso-string.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_date-to-primitive.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_defined.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_dom-create.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_enum-bug-keys.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_enum-keys.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_export.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_fails-is-regexp.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_fails.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_fix-re-wks.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_flags.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_flatten-into-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_for-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_function-to-string.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_global.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_has.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_hide.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_html.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_ie8-dom-define.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_inherit-if-required.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_invoke.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iobject.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_is-array-iter.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_is-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_is-integer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_is-object.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_is-regexp.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iter-call.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iter-create.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iter-define.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iter-detect.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iter-step.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_iterators.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_library.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_math-expm1.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_math-fround.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_math-log1p.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_math-sign.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_meta.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_microtask.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_new-promise-capability.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-assign.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-create.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-dp.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-dps.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-gopd.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-gopn-ext.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-gopn.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-gops.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-gpo.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-keys-internal.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-keys.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-pie.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-sap.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_object-to-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_own-keys.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_parse-float.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_perform.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_promise-resolve.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_property-desc.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_redefine-all.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_redefine.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_regexp-exec.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_same-value.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_set-proto.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_set-species.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_set-to-string-tag.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_shared-key.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_shared.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_species-constructor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_strict-method.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-at.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-context.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-html.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-pad.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-repeat.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-trim.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_string-ws.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_task.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-absolute-index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-integer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-iobject.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-length.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-object.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_to-primitive.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_typed-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_typed-buffer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_typed.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_uid.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_user-agent.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_validate-collection.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_wks-define.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_wks-ext.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/_wks.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/core.get-iterator-method.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.copy-within.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.every.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.fill.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.filter.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.find-index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.find.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.for-each.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.from.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.index-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.is-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.iterator.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.join.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.last-index-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.map.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.reduce-right.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.reduce.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.slice.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.some.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.sort.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.array.species.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.date.now.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.date.to-json.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.date.to-primitive.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.date.to-string.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.function.bind.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.function.has-instance.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.function.name.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.map.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.acosh.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.asinh.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.atanh.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.cbrt.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.clz32.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.cosh.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.expm1.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.fround.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.hypot.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.imul.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.log10.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.log1p.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.log2.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.sign.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.sinh.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.tanh.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.math.trunc.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.constructor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.epsilon.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.is-finite.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.is-integer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.is-nan.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.parse-float.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.to-fixed.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.number.to-precision.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.assign.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.create.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.define-properties.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.define-property.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.freeze.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.is-extensible.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.is-frozen.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.is-sealed.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.is.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.keys.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.seal.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.object.to-string.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.parse-float.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.promise.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.apply.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.construct.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.define-property.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.get.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.has.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.reflect.set.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.constructor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.exec.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.flags.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.match.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.replace.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.search.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.split.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.regexp.to-string.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.set.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.anchor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.big.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.blink.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.bold.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.code-point-at.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.ends-with.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.fixed.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.fontcolor.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.fontsize.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.from-code-point.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.includes.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.italics.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.iterator.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.link.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.raw.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.repeat.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.small.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.starts-with.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.strike.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.sub.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.sup.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.string.trim.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.symbol.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.data-view.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.float32-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.float64-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.int16-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.int32-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.int8-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.weak-map.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es6.weak-set.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.array.flat-map.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.array.includes.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.object.entries.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.object.values.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.promise.finally.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.string.pad-end.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.string.pad-start.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.string.trim-left.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.string.trim-right.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/web.dom.iterable.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/web.immediate.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/modules/web.timers.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/core-js/web/index.js","webpack://webex-js-sdk/./node_modules/@babel/polyfill/node_modules/regenerator-runtime/runtime.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/array/from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/array/is-array.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/date/now.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/json/stringify.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/map.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/number/is-integer.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/number/is-nan.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/assign.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/create.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/define-properties.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/define-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/entries.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/freeze.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/get-own-property-descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/get-own-property-symbols.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/get-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/set-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/object/values.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/promise.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/reflect/apply.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/reflect/construct.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/reflect/define-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/reflect/delete-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/reflect/get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/reflect/get.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/set.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/symbol/index.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/symbol/iterator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/symbol/to-primitive.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/fn/weak-map.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_a-function.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_add-to-unscopables.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_an-instance.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_an-object.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-from-iterable.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-includes.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-methods.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-species-constructor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_array-species-create.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_bind.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_classof.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_cof.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection-strong.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection-to-json.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection-weak.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_collection.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_core.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_create-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_ctx.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_defined.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_dom-create.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_enum-bug-keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_enum-keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_export.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_fails.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_for-of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_global.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_has.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_hide.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_html.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_invoke.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iobject.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-array-iter.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-array.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-integer.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_is-object.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-call.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-create.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-define.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-detect.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iter-step.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_iterators.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_library.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_meta.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_microtask.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_new-promise-capability.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-assign.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-create.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-dp.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-dps.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gopd.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gopn-ext.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gopn.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gops.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-gpo.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-keys-internal.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-pie.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-sap.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_object-to-array.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_own-keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_perform.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_promise-resolve.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_property-desc.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_redefine-all.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_redefine.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-collection-from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-collection-of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-proto.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-species.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_set-to-string-tag.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_shared-key.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_shared.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_species-constructor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_string-at.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_string-trim.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_string-ws.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_task.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-absolute-index.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-integer.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-iobject.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-length.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-object.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_to-primitive.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_uid.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_user-agent.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_validate-collection.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_wks-define.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_wks-ext.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/_wks.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/core.get-iterator-method.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.array.from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.array.is-array.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.array.iterator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.date.now.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.map.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.number.is-integer.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.number.is-nan.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.assign.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.create.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.define-properties.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.define-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.freeze.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.get-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.object.set-prototype-of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.promise.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.reflect.apply.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.reflect.construct.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.reflect.define-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.reflect.delete-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.reflect.get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.reflect.get.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.set.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.string.iterator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.symbol.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es6.weak-map.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.map.from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.map.of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.map.to-json.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.object.entries.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.object.get-own-property-descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.object.values.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.promise.finally.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.promise.try.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.set.from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.set.of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.set.to-json.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.symbol.async-iterator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.symbol.observable.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.weak-map.from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/es7.weak-map.of.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/node_modules/core-js/library/modules/web.dom.iterable.js","webpack://webex-js-sdk/./node_modules/@webex/web-media-effects/dist/esm/index.js","webpack://webex-js-sdk/./node_modules/ampersand-class-extend/ampersand-class-extend.js","webpack://webex-js-sdk/./node_modules/ampersand-collection/ampersand-collection.js","webpack://webex-js-sdk/./node_modules/ampersand-events/ampersand-events.js","webpack://webex-js-sdk/./node_modules/ampersand-events/libs/utils.js","webpack://webex-js-sdk/./node_modules/ampersand-state/ampersand-state.js","webpack://webex-js-sdk/./node_modules/array-next/array-next.js","webpack://webex-js-sdk/./packages/@webex/common-timers/src/index.ts","webpack://webex-js-sdk/./packages/@webex/common/src/isBuffer.js","webpack://webex-js-sdk/./packages/@webex/common/src/base64.js","webpack://webex-js-sdk/./packages/@webex/common/src/capped-debounce.js","webpack://webex-js-sdk/./packages/@webex/common/src/check-required.js","webpack://webex-js-sdk/./packages/@webex/common/src/defer.js","webpack://webex-js-sdk/./packages/@webex/common/src/make-state-datatype.js","webpack://webex-js-sdk/./packages/@webex/common/src/template-container.js","webpack://webex-js-sdk/./packages/@webex/common/src/one-flight.js","webpack://webex-js-sdk/./packages/@webex/common/src/patterns.js","webpack://webex-js-sdk/./packages/@webex/common/src/events.js","webpack://webex-js-sdk/./packages/@webex/common/src/constants.js","webpack://webex-js-sdk/./packages/@webex/common/src/event-envelope.js","webpack://webex-js-sdk/./packages/@webex/common/src/retry.js","webpack://webex-js-sdk/./packages/@webex/common/src/tap.js","webpack://webex-js-sdk/./packages/@webex/common/src/while-in-flight.js","webpack://webex-js-sdk/./packages/@webex/common/src/exception.js","webpack://webex-js-sdk/./packages/@webex/common/src/deprecated.js","webpack://webex-js-sdk/./packages/@webex/common/src/in-browser/browser.js","webpack://webex-js-sdk/./packages/@webex/common/src/browser-detection.js","webpack://webex-js-sdk/./packages/@webex/common/src/uuid-utils.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/http-error-subtypes.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/http-error.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/lib/interceptor.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/interceptors/http-status.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/lib/xhr.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/lib/detect.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/request/request.shim.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/request/utils.ts","webpack://webex-js-sdk/./packages/@webex/http-core/src/index.js","webpack://webex-js-sdk/./packages/@webex/http-core/src/request/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/util.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/collection.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/constants.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/calendar.encrypt.helper.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/calendar.decrypt.helper.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/calendar.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-calendar/src/index.js","webpack://webex-js-sdk/./packages/@webex/helper-html/src/html.shim.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/OverloadYield.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/awaitAsyncGenerator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/AsyncGenerator.js","webpack://webex-js-sdk/./packages/@webex/helper-image/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/convo-error.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/share-activity.js","webpack://webex-js-sdk/./packages/@webex/helper-image/src/detect-filetype.js","webpack://webex-js-sdk/./packages/@webex/helper-image/src/process-image.browser.js","webpack://webex-js-sdk/./packages/@webex/helper-image/src/orient.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/activities.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/activity-thread-ordering.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/conversation.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/constants.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/wrapAsyncGenerator.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/to-array.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/encryption-transforms.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/decryption-transforms.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-conversation/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/metrics.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/constants.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/features/feature-model.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/features/feature-collection.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/features/features-model.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/ipNetworkDetector.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/device.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/interceptors/device-url.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-device/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/ensure-buffer.browser.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/constants.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/kms-errors.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/kms-batcher.js","webpack://webex-js-sdk/./node_modules/pvutils/build/utils.es.js","webpack://webex-js-sdk/./node_modules/asn1js/src/asn1.js","webpack://webex-js-sdk/./node_modules/pkijs/node_modules/asn1js/build/index.es.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AlgorithmIdentifier.js","webpack://webex-js-sdk/./node_modules/pkijs/src/ECNamedCurves.js","webpack://webex-js-sdk/./node_modules/pkijs/src/ECPublicKey.js","webpack://webex-js-sdk/./node_modules/pkijs/src/RSAPublicKey.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PublicKeyInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/Attribute.js","webpack://webex-js-sdk/./node_modules/pkijs/src/ECPrivateKey.js","webpack://webex-js-sdk/./node_modules/pkijs/src/OtherPrimeInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/RSAPrivateKey.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PrivateKeyInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/EncryptedContentInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/RSASSAPSSParams.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PBKDF2Params.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PBES2Params.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CryptoEngine.js","webpack://webex-js-sdk/./node_modules/pkijs/src/common.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AttributeTypeAndValue.js","webpack://webex-js-sdk/./node_modules/pkijs/src/RelativeDistinguishedNames.js","webpack://webex-js-sdk/./node_modules/pkijs/src/GeneralName.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AccessDescription.js","webpack://webex-js-sdk/./node_modules/pkijs/src/Accuracy.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AltName.js","webpack://webex-js-sdk/./node_modules/pkijs/src/Time.js","webpack://webex-js-sdk/./node_modules/pkijs/src/SubjectDirectoryAttributes.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PrivateKeyUsagePeriod.js","webpack://webex-js-sdk/./node_modules/pkijs/src/BasicConstraints.js","webpack://webex-js-sdk/./node_modules/pkijs/src/IssuingDistributionPoint.js","webpack://webex-js-sdk/./node_modules/pkijs/src/GeneralNames.js","webpack://webex-js-sdk/./node_modules/pkijs/src/GeneralSubtree.js","webpack://webex-js-sdk/./node_modules/pkijs/src/NameConstraints.js","webpack://webex-js-sdk/./node_modules/pkijs/src/DistributionPoint.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CRLDistributionPoints.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PolicyQualifierInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PolicyInformation.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CertificatePolicies.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PolicyMapping.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PolicyMappings.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AuthorityKeyIdentifier.js","webpack://webex-js-sdk/./node_modules/pkijs/src/PolicyConstraints.js","webpack://webex-js-sdk/./node_modules/pkijs/src/ExtKeyUsage.js","webpack://webex-js-sdk/./node_modules/pkijs/src/InfoAccess.js","webpack://webex-js-sdk/./node_modules/bytestreamjs/build/mjs/byte_stream.js","webpack://webex-js-sdk/./node_modules/bytestreamjs/build/mjs/seq_stream.js","webpack://webex-js-sdk/./node_modules/pkijs/src/SignedCertificateTimestampList.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CertificateTemplate.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CAVersion.js","webpack://webex-js-sdk/./node_modules/pkijs/src/QCStatements.js","webpack://webex-js-sdk/./node_modules/pkijs/src/Extension.js","webpack://webex-js-sdk/./node_modules/pkijs/src/Extensions.js","webpack://webex-js-sdk/./node_modules/pkijs/src/Certificate.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AttributeCertificateV1.js","webpack://webex-js-sdk/./node_modules/pkijs/src/AttributeCertificateV2.js","webpack://webex-js-sdk/./node_modules/pkijs/src/RevokedCertificate.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CertificateRevocationList.js","webpack://webex-js-sdk/./node_modules/pkijs/src/OtherCertificateFormat.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CertificateSet.js","webpack://webex-js-sdk/./node_modules/pkijs/src/OtherRevocationInfoFormat.js","webpack://webex-js-sdk/./node_modules/pkijs/src/RevocationInfoChoices.js","webpack://webex-js-sdk/./node_modules/pkijs/src/IssuerAndSerialNumber.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CertID.js","webpack://webex-js-sdk/./node_modules/pkijs/src/SingleResponse.js","webpack://webex-js-sdk/./node_modules/pkijs/src/ResponseData.js","webpack://webex-js-sdk/./node_modules/pkijs/src/CertificateChainValidationEngine.js","webpack://webex-js-sdk/./node_modules/pkijs/src/BasicOCSPResponse.js","webpack://webex-js-sdk/./node_modules/pkijs/src/EncapsulatedContentInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/MessageImprint.js","webpack://webex-js-sdk/./node_modules/pkijs/src/SignedAndUnsignedAttributes.js","webpack://webex-js-sdk/./node_modules/pkijs/src/SignerInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/TSTInfo.js","webpack://webex-js-sdk/./node_modules/pkijs/src/SignedData.js","webpack://webex-js-sdk/./node_modules/isomorphic-webcrypto/src/webcrypto-shim.mjs","webpack://webex-js-sdk/./node_modules/isomorphic-webcrypto/src/browser.mjs","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/kms-certificate-validation.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/kms.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/encryption.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-encryption/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-feature/src/feature.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-feature/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-feature/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-llm/src/llm.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-llm/src/constants.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-llm/src/index.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-mercury/src/errors.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-mercury/src/socket/socket-base.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-mercury/src/socket/socket.shim.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-mercury/src/mercury.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-mercury/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-mercury/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/batcher.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/client-metrics-batcher.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/call-diagnostic/config.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics.util.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/utils.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/prelogin-metrics-batcher.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/client-metrics-prelogin-batcher.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/metrics.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics-batcher.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/behavioral/behavioral-metrics.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/behavioral/config.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/call-diagnostic/call-diagnostic-metrics-latencies.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/new-metrics.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-metrics/src/index.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-presence/src/presence-batcher.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-presence/src/constants.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-presence/src/presence-worker.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-presence/src/presence.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-presence/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-presence/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-support/src/support.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-support/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-support/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-user/src/user-uuid-batcher.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-user/src/user-uuid-store.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-user/src/user.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-user/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-user/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-voicea/src/constants.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-voicea/src/utils.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-voicea/src/voicea.ts","webpack://webex-js-sdk/./packages/@webex/internal-plugin-voicea/src/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-attachment-actions/src/attachmentActions.js","webpack://webex-js-sdk/./packages/@webex/plugin-attachment-actions/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-authorization-browser/src/authorization.js","webpack://webex-js-sdk/./packages/@webex/plugin-authorization-browser/src/config.js","webpack://webex-js-sdk/./packages/@webex/plugin-authorization-browser/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-lyra/src/space.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-lyra/src/device.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-lyra/src/lyra.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-lyra/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-lyra/src/config.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-search/src/search.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-search/src/index.js","webpack://webex-js-sdk/./packages/@webex/internal-plugin-search/src/config.js","webpack://webex-js-sdk/./packages/@webex/plugin-device-manager/src/collection.js","webpack://webex-js-sdk/./packages/@webex/plugin-device-manager/src/device-manager.js","webpack://webex-js-sdk/./packages/@webex/plugin-device-manager/src/constants.js","webpack://webex-js-sdk/./packages/@webex/plugin-device-manager/src/config.js","webpack://webex-js-sdk/./packages/@webex/plugin-device-manager/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-logger/src/logger.js","webpack://webex-js-sdk/./packages/@webex/plugin-logger/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-logger/src/config.js","webpack://webex-js-sdk/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://webex-js-sdk/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://webex-js-sdk/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://webex-js-sdk/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://webex-js-sdk/./node_modules/@webex/internal-media-core/dist/esm/index.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/get.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/superPropBase.js","webpack://webex-js-sdk/./node_modules/@webex/ts-events/dist/esm/index.js","webpack://webex-js-sdk/./packages/@webex/media-helpers/src/webrtc-core.ts","webpack://webex-js-sdk/./packages/@webex/media-helpers/src/constants.ts","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/utils.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/safari/safari_shim.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/common_shim.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/adapter_factory.js","webpack://webex-js-sdk/./node_modules/webrtc-adapter/src/js/adapter_core.js","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/metrics/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/logs/logger-config.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/config.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/logs/logger-proxy.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/logs/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/constants.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/parameter.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/events/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/events/trigger-proxy.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/config.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/browser-detection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/rtcMetrics/constants.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/rtcMetrics/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/media/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/webex-meetings-error.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/webex-errors.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/intent-to-join.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/join-meeting.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/permission.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/password-error.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/captcha-error.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/metrics/constants.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting-info/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting-info/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting-info/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting-info/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting-info/utilv2.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting-info/meeting-info-v2.ts","webpack://webex-js-sdk/./node_modules/jwt-decode/build/jwt-decode.esm.js","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/voicea-meeting.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/events/events-scope.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/networkQualityMonitor/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/roap/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/roap/turnDiscovery.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/roap/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/media/MediaConnectionAwaiter.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/media/properties.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/state.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/muteState.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/infoUtils.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/fullState.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/selfUtils.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/hostUtils.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/controlsUtils.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/embeddedAppsUtils.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/mediaSharesUtils.ts","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/taggedTemplateLiteral.js","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/queue.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/parser.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/locus-info/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/reconnection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/reconnection-not-started.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reconnection-manager/index.ts","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/objectWithoutProperties.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/objectWithoutPropertiesLoose.js","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/member/types.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/member/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/member/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/reclaim-host-role-errors.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/members/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/members/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/members/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/members/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meetings/meetings.types.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meetings/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/recording-controller/enums.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/recording-controller/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/controls-options-manager/enums.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/controls-options-manager/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/media/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reactions/reactions.ts","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/classExtractFieldDescriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/classPrivateFieldGet.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/classApplyDescriptorGet.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/classPrivateFieldSet.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/classApplyDescriptorSet.js","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/receiveSlot.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/receiveSlotManager.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/sendSlotManager.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/remoteMedia.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/mediaRequestManager.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/remoteMediaGroup.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/multistream/remoteMediaManager.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/edit-lock-error.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/utils.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/events.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/breakout.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/breakouts/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/interpretation/siLanguage.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/interpretation/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/interpretation/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/annotation/constants.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/annotation/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/webinar/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/webinar/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/in-meeting-actions.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reactions/constants.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/recording-controller/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/controls-options-manager/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/controls-options-manager/constants.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/locusMediaRequest.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/connectionStateHandler.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meeting/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/personal-meeting-room/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/personal-meeting-room/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/personal-meeting-room/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reachability/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reachability/util.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reachability/clusterReachability.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/reachability/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meetings/request.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meetings/collection.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/common/errors/no-meeting-info.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/meetings/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/interceptors/locusRetry.ts","webpack://webex-js-sdk/./packages/@webex/plugin-meetings/src/index.ts","webpack://webex-js-sdk/./packages/@webex/plugin-memberships/src/memberships.js","webpack://webex-js-sdk/./packages/@webex/plugin-memberships/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-messages/src/messages.js","webpack://webex-js-sdk/./packages/@webex/plugin-messages/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-people/src/people-batcher.js","webpack://webex-js-sdk/./packages/@webex/plugin-people/src/people.js","webpack://webex-js-sdk/./packages/@webex/plugin-people/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-people/src/config.js","webpack://webex-js-sdk/./packages/@webex/plugin-rooms/src/rooms.js","webpack://webex-js-sdk/./packages/@webex/plugin-rooms/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-team-memberships/src/team-memberships.js","webpack://webex-js-sdk/./packages/@webex/plugin-team-memberships/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-teams/src/teams.js","webpack://webex-js-sdk/./packages/@webex/plugin-teams/src/index.js","webpack://webex-js-sdk/./packages/@webex/plugin-webhooks/src/webhooks.js","webpack://webex-js-sdk/./packages/@webex/plugin-webhooks/src/index.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/storage/errors.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/storage/decorators.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/storage/make-webex-store.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/storage/make-webex-plugin-store.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/storage/memory-store-adapter.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/webex-plugin.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/auth.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/network-timing.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/payload-transformer.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/redirect.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/request-event.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/request-logger.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/request-timing.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/response-logger.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/webex-http-error.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/user-agent.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/webex-tracking-id.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/webex-user-agent.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/rate-limit.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/embargo.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/interceptors/default-options.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/credentials-config.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/config.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/webex-core-plugin-mixin.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/webex-internal-core.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/webex-core.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/webex-internal-core-plugin-mixin.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/plugins/logger.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/credentials/grant-errors.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/credentials/scope.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/credentials/token.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/credentials/token-collection.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/constants.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/credentials/index.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/credentials/credentials.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/constants.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/metrics.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/service-url.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/service-catalog.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/service-host.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/service-registry.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/service-state.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/service-fed-ramp.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/services.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/interceptors/server-error.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/interceptors/service.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/services/index.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/stateless-webex-plugin.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/initializerDefineProperty.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/batcher.js","webpack://webex-js-sdk/./packages/@webex/webex-core/src/lib/page.js","webpack://webex-js-sdk/./packages/@webex/storage-adapter-local-storage/src/index.js","webpack://webex-js-sdk/./packages/webex/src/config-storage.shim.js","webpack://webex-js-sdk/./packages/webex/src/config.js","webpack://webex-js-sdk/./packages/webex/src/index.js","webpack://webex-js-sdk/./packages/webex/src/webex.js","webpack://webex-js-sdk/./node_modules/backoff/index.js","webpack://webex-js-sdk/./node_modules/backoff/lib/backoff.js","webpack://webex-js-sdk/./node_modules/backoff/lib/function_call.js","webpack://webex-js-sdk/./node_modules/backoff/lib/strategy/exponential.js","webpack://webex-js-sdk/./node_modules/backoff/lib/strategy/fibonacci.js","webpack://webex-js-sdk/./node_modules/backoff/lib/strategy/strategy.js","webpack://webex-js-sdk/./node_modules/base64-js/index.js","webpack://webex-js-sdk/./node_modules/base64url/dist/base64url.js","webpack://webex-js-sdk/./node_modules/base64url/dist/pad-string.js","webpack://webex-js-sdk/./node_modules/base64url/index.js","webpack://webex-js-sdk/./node_modules/bowser/es5.js","webpack://webex-js-sdk/./node_modules/btoa/index.js","webpack://webex-js-sdk/./node_modules/buffer-equal-constant-time/index.js","webpack://webex-js-sdk/./node_modules/buffer/index.js","webpack://webex-js-sdk/./node_modules/call-bind/callBound.js","webpack://webex-js-sdk/./node_modules/call-bind/index.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/lazy-initialize.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/private/utils.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/override.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/deprecate.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/suppress-warnings.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/memoize.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/autobind.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/readonly.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/debounce.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/throttle.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/decorate.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/mixin.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/time.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/extendDescriptor.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/profile.js","webpack://webex-js-sdk/./node_modules/core-decorators/es/applyDecorators.js","webpack://webex-js-sdk/./node_modules/crypto-js/core.js","webpack://webex-js-sdk/./node_modules/crypto-js/enc-hex.js","webpack://webex-js-sdk/./node_modules/crypto-js/hmac-sha256.js","webpack://webex-js-sdk/./node_modules/crypto-js/hmac.js","webpack://webex-js-sdk/./node_modules/crypto-js/sha256.js","webpack://webex-js-sdk/./node_modules/debug/node_modules/ms/index.js","webpack://webex-js-sdk/./node_modules/debug/src/browser.js","webpack://webex-js-sdk/./node_modules/debug/src/common.js","webpack://webex-js-sdk/./node_modules/define-data-property/index.js","webpack://webex-js-sdk/./node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js","webpack://webex-js-sdk/./node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js","webpack://webex-js-sdk/./node_modules/es6-promise/dist/es6-promise.js","webpack://webex-js-sdk/./node_modules/events/events.js","webpack://webex-js-sdk/./node_modules/exifr/dist/lite.umd.js","webpack://webex-js-sdk/./node_modules/file-type/core.js","webpack://webex-js-sdk/./node_modules/file-type/index.js","webpack://webex-js-sdk/./node_modules/file-type/supported.js","webpack://webex-js-sdk/./node_modules/file-type/util.js","webpack://webex-js-sdk/./node_modules/for-each/index.js","webpack://webex-js-sdk/./node_modules/function-bind/implementation.js","webpack://webex-js-sdk/./node_modules/function-bind/index.js","webpack://webex-js-sdk/./node_modules/get-intrinsic/index.js","webpack://webex-js-sdk/./node_modules/global/window.js","webpack://webex-js-sdk/./node_modules/gopd/index.js","webpack://webex-js-sdk/./node_modules/has-property-descriptors/index.js","webpack://webex-js-sdk/./node_modules/has-proto/index.js","webpack://webex-js-sdk/./node_modules/has-symbols/index.js","webpack://webex-js-sdk/./node_modules/has-symbols/shams.js","webpack://webex-js-sdk/./node_modules/has-tostringtag/shams.js","webpack://webex-js-sdk/./node_modules/hasown/index.js","webpack://webex-js-sdk/./node_modules/ieee754/index.js","webpack://webex-js-sdk/./node_modules/inherits/inherits_browser.js","webpack://webex-js-sdk/./node_modules/ip-anonymize/index.js","webpack://webex-js-sdk/./node_modules/is-arguments/index.js","webpack://webex-js-sdk/./node_modules/is-callable/index.js","webpack://webex-js-sdk/./node_modules/is-function/index.js","webpack://webex-js-sdk/./node_modules/is-generator-function/index.js","webpack://webex-js-sdk/./node_modules/is-typed-array/index.js","webpack://webex-js-sdk/./node_modules/javascript-state-machine/lib/history.js","webpack://webex-js-sdk/./node_modules/javascript-state-machine/lib/state-machine.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/decode.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/index.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/JsonWebTokenError.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/NotBeforeError.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/TokenExpiredError.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/asymmetricKeyDetailsSupported.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/psSupported.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/rsaPssKeyDetailsSupported.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/timespan.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/lib/validateAsymmetricKey.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/sign.js","webpack://webex-js-sdk/./node_modules/jsonwebtoken/verify.js","webpack://webex-js-sdk/./node_modules/jwa/index.js","webpack://webex-js-sdk/./node_modules/jws/index.js","webpack://webex-js-sdk/./node_modules/jws/lib/data-stream.js","webpack://webex-js-sdk/./node_modules/jws/lib/sign-stream.js","webpack://webex-js-sdk/./node_modules/jws/lib/tostring.js","webpack://webex-js-sdk/./node_modules/jws/lib/verify-stream.js","webpack://webex-js-sdk/./node_modules/key-tree-store/key-tree-store.js","webpack://webex-js-sdk/./node_modules/lodash._arraycopy/index.js","webpack://webex-js-sdk/./node_modules/lodash._arrayeach/index.js","webpack://webex-js-sdk/./node_modules/lodash._baseassign/index.js","webpack://webex-js-sdk/./node_modules/lodash._baseclone/index.js","webpack://webex-js-sdk/./node_modules/lodash._basecopy/index.js","webpack://webex-js-sdk/./node_modules/lodash._basefor/index.js","webpack://webex-js-sdk/./node_modules/lodash._bindcallback/index.js","webpack://webex-js-sdk/./node_modules/lodash._getnative/index.js","webpack://webex-js-sdk/./node_modules/lodash._isiterateecall/index.js","webpack://webex-js-sdk/./node_modules/lodash.clone/index.js","webpack://webex-js-sdk/./node_modules/lodash.includes/index.js","webpack://webex-js-sdk/./node_modules/lodash.isarguments/index.js","webpack://webex-js-sdk/./node_modules/lodash.isarray/index.js","webpack://webex-js-sdk/./node_modules/lodash.isboolean/index.js","webpack://webex-js-sdk/./node_modules/lodash.isinteger/index.js","webpack://webex-js-sdk/./node_modules/lodash.isnumber/index.js","webpack://webex-js-sdk/./node_modules/lodash.isplainobject/index.js","webpack://webex-js-sdk/./node_modules/lodash.isstring/index.js","webpack://webex-js-sdk/./node_modules/lodash.keys/index.js","webpack://webex-js-sdk/./node_modules/lodash.once/index.js","webpack://webex-js-sdk/./node_modules/lodash/_DataView.js","webpack://webex-js-sdk/./node_modules/lodash/_Hash.js","webpack://webex-js-sdk/./node_modules/lodash/_LazyWrapper.js","webpack://webex-js-sdk/./node_modules/lodash/_ListCache.js","webpack://webex-js-sdk/./node_modules/lodash/_LodashWrapper.js","webpack://webex-js-sdk/./node_modules/lodash/_Map.js","webpack://webex-js-sdk/./node_modules/lodash/_MapCache.js","webpack://webex-js-sdk/./node_modules/lodash/_Promise.js","webpack://webex-js-sdk/./node_modules/lodash/_Set.js","webpack://webex-js-sdk/./node_modules/lodash/_SetCache.js","webpack://webex-js-sdk/./node_modules/lodash/_Stack.js","webpack://webex-js-sdk/./node_modules/lodash/_Symbol.js","webpack://webex-js-sdk/./node_modules/lodash/_Uint8Array.js","webpack://webex-js-sdk/./node_modules/lodash/_WeakMap.js","webpack://webex-js-sdk/./node_modules/lodash/_apply.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayAggregator.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayEach.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayFilter.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayIncludes.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayIncludesWith.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayLikeKeys.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayMap.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayPush.js","webpack://webex-js-sdk/./node_modules/lodash/_arrayReduce.js","webpack://webex-js-sdk/./node_modules/lodash/_arraySome.js","webpack://webex-js-sdk/./node_modules/lodash/_asciiToArray.js","webpack://webex-js-sdk/./node_modules/lodash/_asciiWords.js","webpack://webex-js-sdk/./node_modules/lodash/_assignMergeValue.js","webpack://webex-js-sdk/./node_modules/lodash/_assignValue.js","webpack://webex-js-sdk/./node_modules/lodash/_assocIndexOf.js","webpack://webex-js-sdk/./node_modules/lodash/_baseAggregator.js","webpack://webex-js-sdk/./node_modules/lodash/_baseAssign.js","webpack://webex-js-sdk/./node_modules/lodash/_baseAssignIn.js","webpack://webex-js-sdk/./node_modules/lodash/_baseAssignValue.js","webpack://webex-js-sdk/./node_modules/lodash/_baseClamp.js","webpack://webex-js-sdk/./node_modules/lodash/_baseClone.js","webpack://webex-js-sdk/./node_modules/lodash/_baseCreate.js","webpack://webex-js-sdk/./node_modules/lodash/_baseDelay.js","webpack://webex-js-sdk/./node_modules/lodash/_baseDifference.js","webpack://webex-js-sdk/./node_modules/lodash/_baseEach.js","webpack://webex-js-sdk/./node_modules/lodash/_baseFill.js","webpack://webex-js-sdk/./node_modules/lodash/_baseFilter.js","webpack://webex-js-sdk/./node_modules/lodash/_baseFindIndex.js","webpack://webex-js-sdk/./node_modules/lodash/_baseFlatten.js","webpack://webex-js-sdk/./node_modules/lodash/_baseFor.js","webpack://webex-js-sdk/./node_modules/lodash/_baseForOwn.js","webpack://webex-js-sdk/./node_modules/lodash/_baseGet.js","webpack://webex-js-sdk/./node_modules/lodash/_baseGetAllKeys.js","webpack://webex-js-sdk/./node_modules/lodash/_baseGetTag.js","webpack://webex-js-sdk/./node_modules/lodash/_baseHas.js","webpack://webex-js-sdk/./node_modules/lodash/_baseHasIn.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIndexOf.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIntersection.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsArguments.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsDate.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsEqual.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsEqualDeep.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsMap.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsMatch.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsNaN.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsNative.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsSet.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIsTypedArray.js","webpack://webex-js-sdk/./node_modules/lodash/_baseIteratee.js","webpack://webex-js-sdk/./node_modules/lodash/_baseKeys.js","webpack://webex-js-sdk/./node_modules/lodash/_baseKeysIn.js","webpack://webex-js-sdk/./node_modules/lodash/_baseLodash.js","webpack://webex-js-sdk/./node_modules/lodash/_baseMap.js","webpack://webex-js-sdk/./node_modules/lodash/_baseMatches.js","webpack://webex-js-sdk/./node_modules/lodash/_baseMatchesProperty.js","webpack://webex-js-sdk/./node_modules/lodash/_baseMean.js","webpack://webex-js-sdk/./node_modules/lodash/_baseMerge.js","webpack://webex-js-sdk/./node_modules/lodash/_baseMergeDeep.js","webpack://webex-js-sdk/./node_modules/lodash/_baseOrderBy.js","webpack://webex-js-sdk/./node_modules/lodash/_basePick.js","webpack://webex-js-sdk/./node_modules/lodash/_basePickBy.js","webpack://webex-js-sdk/./node_modules/lodash/_baseProperty.js","webpack://webex-js-sdk/./node_modules/lodash/_basePropertyDeep.js","webpack://webex-js-sdk/./node_modules/lodash/_basePropertyOf.js","webpack://webex-js-sdk/./node_modules/lodash/_basePullAt.js","webpack://webex-js-sdk/./node_modules/lodash/_baseReduce.js","webpack://webex-js-sdk/./node_modules/lodash/_baseRest.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSet.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSetData.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSetToString.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSlice.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSome.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSortBy.js","webpack://webex-js-sdk/./node_modules/lodash/_baseSum.js","webpack://webex-js-sdk/./node_modules/lodash/_baseTimes.js","webpack://webex-js-sdk/./node_modules/lodash/_baseToString.js","webpack://webex-js-sdk/./node_modules/lodash/_baseTrim.js","webpack://webex-js-sdk/./node_modules/lodash/_baseUnary.js","webpack://webex-js-sdk/./node_modules/lodash/_baseUniq.js","webpack://webex-js-sdk/./node_modules/lodash/_baseUnset.js","webpack://webex-js-sdk/./node_modules/lodash/_baseValues.js","webpack://webex-js-sdk/./node_modules/lodash/_cacheHas.js","webpack://webex-js-sdk/./node_modules/lodash/_castArrayLikeObject.js","webpack://webex-js-sdk/./node_modules/lodash/_castFunction.js","webpack://webex-js-sdk/./node_modules/lodash/_castPath.js","webpack://webex-js-sdk/./node_modules/lodash/_castSlice.js","webpack://webex-js-sdk/./node_modules/lodash/_cloneArrayBuffer.js","webpack://webex-js-sdk/./node_modules/lodash/_cloneBuffer.js","webpack://webex-js-sdk/./node_modules/lodash/_cloneDataView.js","webpack://webex-js-sdk/./node_modules/lodash/_cloneRegExp.js","webpack://webex-js-sdk/./node_modules/lodash/_cloneSymbol.js","webpack://webex-js-sdk/./node_modules/lodash/_cloneTypedArray.js","webpack://webex-js-sdk/./node_modules/lodash/_compareAscending.js","webpack://webex-js-sdk/./node_modules/lodash/_compareMultiple.js","webpack://webex-js-sdk/./node_modules/lodash/_composeArgs.js","webpack://webex-js-sdk/./node_modules/lodash/_composeArgsRight.js","webpack://webex-js-sdk/./node_modules/lodash/_copyArray.js","webpack://webex-js-sdk/./node_modules/lodash/_copyObject.js","webpack://webex-js-sdk/./node_modules/lodash/_copySymbols.js","webpack://webex-js-sdk/./node_modules/lodash/_copySymbolsIn.js","webpack://webex-js-sdk/./node_modules/lodash/_coreJsData.js","webpack://webex-js-sdk/./node_modules/lodash/_countHolders.js","webpack://webex-js-sdk/./node_modules/lodash/_createAggregator.js","webpack://webex-js-sdk/./node_modules/lodash/_createAssigner.js","webpack://webex-js-sdk/./node_modules/lodash/_createBaseEach.js","webpack://webex-js-sdk/./node_modules/lodash/_createBaseFor.js","webpack://webex-js-sdk/./node_modules/lodash/_createBind.js","webpack://webex-js-sdk/./node_modules/lodash/_createCaseFirst.js","webpack://webex-js-sdk/./node_modules/lodash/_createCompounder.js","webpack://webex-js-sdk/./node_modules/lodash/_createCtor.js","webpack://webex-js-sdk/./node_modules/lodash/_createCurry.js","webpack://webex-js-sdk/./node_modules/lodash/_createFind.js","webpack://webex-js-sdk/./node_modules/lodash/_createHybrid.js","webpack://webex-js-sdk/./node_modules/lodash/_createPartial.js","webpack://webex-js-sdk/./node_modules/lodash/_createRecurry.js","webpack://webex-js-sdk/./node_modules/lodash/_createSet.js","webpack://webex-js-sdk/./node_modules/lodash/_createWrap.js","webpack://webex-js-sdk/./node_modules/lodash/_customDefaultsMerge.js","webpack://webex-js-sdk/./node_modules/lodash/_customOmitClone.js","webpack://webex-js-sdk/./node_modules/lodash/_deburrLetter.js","webpack://webex-js-sdk/./node_modules/lodash/_defineProperty.js","webpack://webex-js-sdk/./node_modules/lodash/_equalArrays.js","webpack://webex-js-sdk/./node_modules/lodash/_equalByTag.js","webpack://webex-js-sdk/./node_modules/lodash/_equalObjects.js","webpack://webex-js-sdk/./node_modules/lodash/_escapeHtmlChar.js","webpack://webex-js-sdk/./node_modules/lodash/_flatRest.js","webpack://webex-js-sdk/./node_modules/lodash/_freeGlobal.js","webpack://webex-js-sdk/./node_modules/lodash/_getAllKeys.js","webpack://webex-js-sdk/./node_modules/lodash/_getAllKeysIn.js","webpack://webex-js-sdk/./node_modules/lodash/_getData.js","webpack://webex-js-sdk/./node_modules/lodash/_getFuncName.js","webpack://webex-js-sdk/./node_modules/lodash/_getHolder.js","webpack://webex-js-sdk/./node_modules/lodash/_getMapData.js","webpack://webex-js-sdk/./node_modules/lodash/_getMatchData.js","webpack://webex-js-sdk/./node_modules/lodash/_getNative.js","webpack://webex-js-sdk/./node_modules/lodash/_getPrototype.js","webpack://webex-js-sdk/./node_modules/lodash/_getRawTag.js","webpack://webex-js-sdk/./node_modules/lodash/_getSymbols.js","webpack://webex-js-sdk/./node_modules/lodash/_getSymbolsIn.js","webpack://webex-js-sdk/./node_modules/lodash/_getTag.js","webpack://webex-js-sdk/./node_modules/lodash/_getValue.js","webpack://webex-js-sdk/./node_modules/lodash/_getWrapDetails.js","webpack://webex-js-sdk/./node_modules/lodash/_hasPath.js","webpack://webex-js-sdk/./node_modules/lodash/_hasUnicode.js","webpack://webex-js-sdk/./node_modules/lodash/_hasUnicodeWord.js","webpack://webex-js-sdk/./node_modules/lodash/_hashClear.js","webpack://webex-js-sdk/./node_modules/lodash/_hashDelete.js","webpack://webex-js-sdk/./node_modules/lodash/_hashGet.js","webpack://webex-js-sdk/./node_modules/lodash/_hashHas.js","webpack://webex-js-sdk/./node_modules/lodash/_hashSet.js","webpack://webex-js-sdk/./node_modules/lodash/_initCloneArray.js","webpack://webex-js-sdk/./node_modules/lodash/_initCloneByTag.js","webpack://webex-js-sdk/./node_modules/lodash/_initCloneObject.js","webpack://webex-js-sdk/./node_modules/lodash/_insertWrapDetails.js","webpack://webex-js-sdk/./node_modules/lodash/_isFlattenable.js","webpack://webex-js-sdk/./node_modules/lodash/_isIndex.js","webpack://webex-js-sdk/./node_modules/lodash/_isIterateeCall.js","webpack://webex-js-sdk/./node_modules/lodash/_isKey.js","webpack://webex-js-sdk/./node_modules/lodash/_isKeyable.js","webpack://webex-js-sdk/./node_modules/lodash/_isLaziable.js","webpack://webex-js-sdk/./node_modules/lodash/_isMasked.js","webpack://webex-js-sdk/./node_modules/lodash/_isPrototype.js","webpack://webex-js-sdk/./node_modules/lodash/_isStrictComparable.js","webpack://webex-js-sdk/./node_modules/lodash/_listCacheClear.js","webpack://webex-js-sdk/./node_modules/lodash/_listCacheDelete.js","webpack://webex-js-sdk/./node_modules/lodash/_listCacheGet.js","webpack://webex-js-sdk/./node_modules/lodash/_listCacheHas.js","webpack://webex-js-sdk/./node_modules/lodash/_listCacheSet.js","webpack://webex-js-sdk/./node_modules/lodash/_mapCacheClear.js","webpack://webex-js-sdk/./node_modules/lodash/_mapCacheDelete.js","webpack://webex-js-sdk/./node_modules/lodash/_mapCacheGet.js","webpack://webex-js-sdk/./node_modules/lodash/_mapCacheHas.js","webpack://webex-js-sdk/./node_modules/lodash/_mapCacheSet.js","webpack://webex-js-sdk/./node_modules/lodash/_mapToArray.js","webpack://webex-js-sdk/./node_modules/lodash/_matchesStrictComparable.js","webpack://webex-js-sdk/./node_modules/lodash/_memoizeCapped.js","webpack://webex-js-sdk/./node_modules/lodash/_mergeData.js","webpack://webex-js-sdk/./node_modules/lodash/_metaMap.js","webpack://webex-js-sdk/./node_modules/lodash/_nativeCreate.js","webpack://webex-js-sdk/./node_modules/lodash/_nativeKeys.js","webpack://webex-js-sdk/./node_modules/lodash/_nativeKeysIn.js","webpack://webex-js-sdk/./node_modules/lodash/_nodeUtil.js","webpack://webex-js-sdk/./node_modules/lodash/_objectToString.js","webpack://webex-js-sdk/./node_modules/lodash/_overArg.js","webpack://webex-js-sdk/./node_modules/lodash/_overRest.js","webpack://webex-js-sdk/./node_modules/lodash/_parent.js","webpack://webex-js-sdk/./node_modules/lodash/_realNames.js","webpack://webex-js-sdk/./node_modules/lodash/_reorder.js","webpack://webex-js-sdk/./node_modules/lodash/_replaceHolders.js","webpack://webex-js-sdk/./node_modules/lodash/_root.js","webpack://webex-js-sdk/./node_modules/lodash/_safeGet.js","webpack://webex-js-sdk/./node_modules/lodash/_setCacheAdd.js","webpack://webex-js-sdk/./node_modules/lodash/_setCacheHas.js","webpack://webex-js-sdk/./node_modules/lodash/_setData.js","webpack://webex-js-sdk/./node_modules/lodash/_setToArray.js","webpack://webex-js-sdk/./node_modules/lodash/_setToString.js","webpack://webex-js-sdk/./node_modules/lodash/_setWrapToString.js","webpack://webex-js-sdk/./node_modules/lodash/_shortOut.js","webpack://webex-js-sdk/./node_modules/lodash/_stackClear.js","webpack://webex-js-sdk/./node_modules/lodash/_stackDelete.js","webpack://webex-js-sdk/./node_modules/lodash/_stackGet.js","webpack://webex-js-sdk/./node_modules/lodash/_stackHas.js","webpack://webex-js-sdk/./node_modules/lodash/_stackSet.js","webpack://webex-js-sdk/./node_modules/lodash/_strictIndexOf.js","webpack://webex-js-sdk/./node_modules/lodash/_stringToArray.js","webpack://webex-js-sdk/./node_modules/lodash/_stringToPath.js","webpack://webex-js-sdk/./node_modules/lodash/_toKey.js","webpack://webex-js-sdk/./node_modules/lodash/_toSource.js","webpack://webex-js-sdk/./node_modules/lodash/_trimmedEndIndex.js","webpack://webex-js-sdk/./node_modules/lodash/_unicodeToArray.js","webpack://webex-js-sdk/./node_modules/lodash/_unicodeWords.js","webpack://webex-js-sdk/./node_modules/lodash/_updateWrapDetails.js","webpack://webex-js-sdk/./node_modules/lodash/_wrapperClone.js","webpack://webex-js-sdk/./node_modules/lodash/assign.js","webpack://webex-js-sdk/./node_modules/lodash/assignWith.js","webpack://webex-js-sdk/./node_modules/lodash/before.js","webpack://webex-js-sdk/./node_modules/lodash/bind.js","webpack://webex-js-sdk/./node_modules/lodash/camelCase.js","webpack://webex-js-sdk/./node_modules/lodash/capitalize.js","webpack://webex-js-sdk/./node_modules/lodash/clone.js","webpack://webex-js-sdk/./node_modules/lodash/cloneDeep.js","webpack://webex-js-sdk/./node_modules/lodash/cloneDeepWith.js","webpack://webex-js-sdk/./node_modules/lodash/constant.js","webpack://webex-js-sdk/./node_modules/lodash/curry.js","webpack://webex-js-sdk/./node_modules/lodash/debounce.js","webpack://webex-js-sdk/./node_modules/lodash/deburr.js","webpack://webex-js-sdk/./node_modules/lodash/defaults.js","webpack://webex-js-sdk/./node_modules/lodash/defaultsDeep.js","webpack://webex-js-sdk/./node_modules/lodash/defer.js","webpack://webex-js-sdk/./node_modules/lodash/difference.js","webpack://webex-js-sdk/./node_modules/lodash/eq.js","webpack://webex-js-sdk/./node_modules/lodash/escape.js","webpack://webex-js-sdk/./node_modules/lodash/fill.js","webpack://webex-js-sdk/./node_modules/lodash/filter.js","webpack://webex-js-sdk/./node_modules/lodash/find.js","webpack://webex-js-sdk/./node_modules/lodash/findIndex.js","webpack://webex-js-sdk/./node_modules/lodash/flatten.js","webpack://webex-js-sdk/./node_modules/lodash/forEach.js","webpack://webex-js-sdk/./node_modules/lodash/forOwn.js","webpack://webex-js-sdk/./node_modules/lodash/get.js","webpack://webex-js-sdk/./node_modules/lodash/has.js","webpack://webex-js-sdk/./node_modules/lodash/hasIn.js","webpack://webex-js-sdk/./node_modules/lodash/identity.js","webpack://webex-js-sdk/./node_modules/lodash/includes.js","webpack://webex-js-sdk/./node_modules/lodash/intersection.js","webpack://webex-js-sdk/./node_modules/lodash/isArguments.js","webpack://webex-js-sdk/./node_modules/lodash/isArray.js","webpack://webex-js-sdk/./node_modules/lodash/isArrayLike.js","webpack://webex-js-sdk/./node_modules/lodash/isArrayLikeObject.js","webpack://webex-js-sdk/./node_modules/lodash/isBuffer.js","webpack://webex-js-sdk/./node_modules/lodash/isDate.js","webpack://webex-js-sdk/./node_modules/lodash/isEmpty.js","webpack://webex-js-sdk/./node_modules/lodash/isEqual.js","webpack://webex-js-sdk/./node_modules/lodash/isFunction.js","webpack://webex-js-sdk/./node_modules/lodash/isLength.js","webpack://webex-js-sdk/./node_modules/lodash/isMap.js","webpack://webex-js-sdk/./node_modules/lodash/isNumber.js","webpack://webex-js-sdk/./node_modules/lodash/isObject.js","webpack://webex-js-sdk/./node_modules/lodash/isObjectLike.js","webpack://webex-js-sdk/./node_modules/lodash/isPlainObject.js","webpack://webex-js-sdk/./node_modules/lodash/isSet.js","webpack://webex-js-sdk/./node_modules/lodash/isString.js","webpack://webex-js-sdk/./node_modules/lodash/isSymbol.js","webpack://webex-js-sdk/./node_modules/lodash/isTypedArray.js","webpack://webex-js-sdk/./node_modules/lodash/keys.js","webpack://webex-js-sdk/./node_modules/lodash/keysIn.js","webpack://webex-js-sdk/./node_modules/lodash/last.js","webpack://webex-js-sdk/./node_modules/lodash/map.js","webpack://webex-js-sdk/./node_modules/lodash/mapValues.js","webpack://webex-js-sdk/./node_modules/lodash/mean.js","webpack://webex-js-sdk/./node_modules/lodash/memoize.js","webpack://webex-js-sdk/./node_modules/lodash/merge.js","webpack://webex-js-sdk/./node_modules/lodash/mergeWith.js","webpack://webex-js-sdk/./node_modules/lodash/noop.js","webpack://webex-js-sdk/./node_modules/lodash/now.js","webpack://webex-js-sdk/./node_modules/lodash/omit.js","webpack://webex-js-sdk/./node_modules/lodash/once.js","webpack://webex-js-sdk/./node_modules/lodash/partial.js","webpack://webex-js-sdk/./node_modules/lodash/partialRight.js","webpack://webex-js-sdk/./node_modules/lodash/partition.js","webpack://webex-js-sdk/./node_modules/lodash/pick.js","webpack://webex-js-sdk/./node_modules/lodash/property.js","webpack://webex-js-sdk/./node_modules/lodash/reduce.js","webpack://webex-js-sdk/./node_modules/lodash/remove.js","webpack://webex-js-sdk/./node_modules/lodash/result.js","webpack://webex-js-sdk/./node_modules/lodash/set.js","webpack://webex-js-sdk/./node_modules/lodash/some.js","webpack://webex-js-sdk/./node_modules/lodash/sortBy.js","webpack://webex-js-sdk/./node_modules/lodash/stubArray.js","webpack://webex-js-sdk/./node_modules/lodash/stubFalse.js","webpack://webex-js-sdk/./node_modules/lodash/toFinite.js","webpack://webex-js-sdk/./node_modules/lodash/toInteger.js","webpack://webex-js-sdk/./node_modules/lodash/toLength.js","webpack://webex-js-sdk/./node_modules/lodash/toNumber.js","webpack://webex-js-sdk/./node_modules/lodash/toPlainObject.js","webpack://webex-js-sdk/./node_modules/lodash/toString.js","webpack://webex-js-sdk/./node_modules/lodash/union.js","webpack://webex-js-sdk/./node_modules/lodash/uniq.js","webpack://webex-js-sdk/./node_modules/lodash/uniqueId.js","webpack://webex-js-sdk/./node_modules/lodash/unset.js","webpack://webex-js-sdk/./node_modules/lodash/upperFirst.js","webpack://webex-js-sdk/./node_modules/lodash/values.js","webpack://webex-js-sdk/./node_modules/lodash/words.js","webpack://webex-js-sdk/./node_modules/lodash/wrap.js","webpack://webex-js-sdk/./node_modules/lodash/wrapperLodash.js","webpack://webex-js-sdk/./node_modules/lru-cache/index.js","webpack://webex-js-sdk/./node_modules/mime/Mime.js","webpack://webex-js-sdk/./node_modules/mime/index.js","webpack://webex-js-sdk/./node_modules/mime/types/other.js","webpack://webex-js-sdk/./node_modules/mime/types/standard.js","webpack://webex-js-sdk/./node_modules/ms/index.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/aes.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/asn1.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/baseN.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/cipher.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/cipherModes.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/des.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/forge.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/hmac.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/jsbn.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/md.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/mgf.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/mgf1.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/oids.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pbe.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pbkdf2.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pem.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pkcs1.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pkcs12.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pkcs7.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pkcs7asn1.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pki.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/prime.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/prng.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/pss.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/random.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/rc2.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/rsa.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/sha1.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/sha256.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/sha512.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/util.js","webpack://webex-js-sdk/./node_modules/node-forge/lib/x509.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/aes-cbc-hmac-sha2.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/aes-gcm.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/aes-kw.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/concat.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/constants.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/dir.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/ec-util.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/ecdh.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/ecdsa.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/helpers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/hkdf.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/hmac.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/pbes2.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/rsa-util.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/rsaes.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/rsassa.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/algorithms/sha.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ciphermodes/gcm/helpers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ciphermodes/gcm/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ciphermodes/gcm/multipliers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ciphermodes/helpers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ciphermodes/pack.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ecc/curves.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ecc/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/ecc/math.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/deps/forge.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwe/decrypt.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwe/defaults.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwe/encrypt.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwe/helpers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwe/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/basekey.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/constants.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/eckey.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/helpers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/keystore.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/octkey.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jwk/rsakey.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jws/defaults.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jws/helpers.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jws/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jws/sign.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/jws/verify.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/parse/compact.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/parse/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/parse/json.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/util/algconfig.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/util/base64url.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/util/databuffer.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/util/index.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/util/merge.js","webpack://webex-js-sdk/./node_modules/node-jose/lib/util/utf8.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/index.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/deflate.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/inflate.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/utils/common.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/utils/strings.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/adler32.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/constants.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/crc32.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/deflate.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/gzheader.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/inffast.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/inflate.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/inftrees.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/messages.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/trees.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/pako/lib/zlib/zstream.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/index.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/md5.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/native.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/nil.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/parse.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/regex.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/rng.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/sha1.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/stringify.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/v1.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/v3.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/v35.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/v4.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/v5.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/validate.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/uuid/dist/commonjs-browser/version.js","webpack://webex-js-sdk/./node_modules/node-kms/lib/context.js","webpack://webex-js-sdk/./node_modules/node-kms/lib/index.js","webpack://webex-js-sdk/./node_modules/node-kms/lib/keyobject.js","webpack://webex-js-sdk/./node_modules/node-kms/lib/request.js","webpack://webex-js-sdk/./node_modules/node-kms/lib/response.js","webpack://webex-js-sdk/./node_modules/node-kms/node_modules/lodash.clonedeep/index.js","webpack://webex-js-sdk/./node_modules/node-kms/node_modules/uuid/rng-browser.js","webpack://webex-js-sdk/./node_modules/node-kms/node_modules/uuid/uuid.js","webpack://webex-js-sdk/./node_modules/node-scr/lib/index.js","webpack://webex-js-sdk/./node_modules/object-inspect/index.js","webpack://webex-js-sdk/./node_modules/os-browserify/main.js","webpack://webex-js-sdk/./node_modules/parse-headers/parse-headers.js","webpack://webex-js-sdk/./node_modules/peek-readable/lib/Deferred.js","webpack://webex-js-sdk/./node_modules/peek-readable/lib/EndOfFileStream.js","webpack://webex-js-sdk/./node_modules/peek-readable/lib/StreamReader.js","webpack://webex-js-sdk/./node_modules/peek-readable/lib/index.js","webpack://webex-js-sdk/./node_modules/precond/index.js","webpack://webex-js-sdk/./node_modules/precond/lib/checks.js","webpack://webex-js-sdk/./node_modules/precond/lib/errors.js","webpack://webex-js-sdk/./node_modules/process/browser.js","webpack://webex-js-sdk/./node_modules/pvtsutils/build/index.js","webpack://webex-js-sdk/./node_modules/qs/lib/formats.js","webpack://webex-js-sdk/./node_modules/qs/lib/index.js","webpack://webex-js-sdk/./node_modules/qs/lib/parse.js","webpack://webex-js-sdk/./node_modules/qs/lib/stringify.js","webpack://webex-js-sdk/./node_modules/qs/lib/utils.js","webpack://webex-js-sdk/./node_modules/querystring-es3/decode.js","webpack://webex-js-sdk/./node_modules/querystring-es3/encode.js","webpack://webex-js-sdk/./node_modules/querystring-es3/index.js","webpack://webex-js-sdk/./node_modules/readable-stream/errors-browser.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/_stream_readable.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/_stream_transform.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/_stream_writable.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://webex-js-sdk/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://webex-js-sdk/./node_modules/safe-buffer/index.js","webpack://webex-js-sdk/./node_modules/sdp/sdp.js","webpack://webex-js-sdk/./node_modules/semver/classes/comparator.js","webpack://webex-js-sdk/./node_modules/semver/classes/range.js","webpack://webex-js-sdk/./node_modules/semver/classes/semver.js","webpack://webex-js-sdk/./node_modules/semver/functions/clean.js","webpack://webex-js-sdk/./node_modules/semver/functions/cmp.js","webpack://webex-js-sdk/./node_modules/semver/functions/coerce.js","webpack://webex-js-sdk/./node_modules/semver/functions/compare-build.js","webpack://webex-js-sdk/./node_modules/semver/functions/compare-loose.js","webpack://webex-js-sdk/./node_modules/semver/functions/compare.js","webpack://webex-js-sdk/./node_modules/semver/functions/diff.js","webpack://webex-js-sdk/./node_modules/semver/functions/eq.js","webpack://webex-js-sdk/./node_modules/semver/functions/gt.js","webpack://webex-js-sdk/./node_modules/semver/functions/gte.js","webpack://webex-js-sdk/./node_modules/semver/functions/inc.js","webpack://webex-js-sdk/./node_modules/semver/functions/lt.js","webpack://webex-js-sdk/./node_modules/semver/functions/lte.js","webpack://webex-js-sdk/./node_modules/semver/functions/major.js","webpack://webex-js-sdk/./node_modules/semver/functions/minor.js","webpack://webex-js-sdk/./node_modules/semver/functions/neq.js","webpack://webex-js-sdk/./node_modules/semver/functions/parse.js","webpack://webex-js-sdk/./node_modules/semver/functions/patch.js","webpack://webex-js-sdk/./node_modules/semver/functions/prerelease.js","webpack://webex-js-sdk/./node_modules/semver/functions/rcompare.js","webpack://webex-js-sdk/./node_modules/semver/functions/rsort.js","webpack://webex-js-sdk/./node_modules/semver/functions/satisfies.js","webpack://webex-js-sdk/./node_modules/semver/functions/sort.js","webpack://webex-js-sdk/./node_modules/semver/functions/valid.js","webpack://webex-js-sdk/./node_modules/semver/index.js","webpack://webex-js-sdk/./node_modules/semver/internal/constants.js","webpack://webex-js-sdk/./node_modules/semver/internal/debug.js","webpack://webex-js-sdk/./node_modules/semver/internal/identifiers.js","webpack://webex-js-sdk/./node_modules/semver/internal/parse-options.js","webpack://webex-js-sdk/./node_modules/semver/internal/re.js","webpack://webex-js-sdk/./node_modules/semver/ranges/gtr.js","webpack://webex-js-sdk/./node_modules/semver/ranges/intersects.js","webpack://webex-js-sdk/./node_modules/semver/ranges/ltr.js","webpack://webex-js-sdk/./node_modules/semver/ranges/max-satisfying.js","webpack://webex-js-sdk/./node_modules/semver/ranges/min-satisfying.js","webpack://webex-js-sdk/./node_modules/semver/ranges/min-version.js","webpack://webex-js-sdk/./node_modules/semver/ranges/outside.js","webpack://webex-js-sdk/./node_modules/semver/ranges/simplify.js","webpack://webex-js-sdk/./node_modules/semver/ranges/subset.js","webpack://webex-js-sdk/./node_modules/semver/ranges/to-comparators.js","webpack://webex-js-sdk/./node_modules/semver/ranges/valid.js","webpack://webex-js-sdk/./node_modules/set-function-length/index.js","webpack://webex-js-sdk/./node_modules/side-channel/index.js","webpack://webex-js-sdk/./node_modules/stream-browserify/index.js","webpack://webex-js-sdk/./node_modules/string_decoder/lib/string_decoder.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/AbstractTokenizer.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/BufferTokenizer.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/FileTokenizer.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/FsPromise.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/ReadStreamTokenizer.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/core.js","webpack://webex-js-sdk/./node_modules/strtok3/lib/index.js","webpack://webex-js-sdk/./node_modules/token-types/lib/index.js","webpack://webex-js-sdk/./node_modules/url/node_modules/punycode/punycode.js","webpack://webex-js-sdk/./node_modules/url/url.js","webpack://webex-js-sdk/./node_modules/urlsafe-base64/index.js","webpack://webex-js-sdk/./node_modules/urlsafe-base64/lib/urlsafe-base64.js","webpack://webex-js-sdk/./node_modules/util-deprecate/browser.js","webpack://webex-js-sdk/./node_modules/util/support/isBufferBrowser.js","webpack://webex-js-sdk/./node_modules/util/support/types.js","webpack://webex-js-sdk/./node_modules/util/util.js","webpack://webex-js-sdk/./node_modules/uuid/index.js","webpack://webex-js-sdk/./node_modules/uuid/lib/bytesToUuid.js","webpack://webex-js-sdk/./node_modules/uuid/lib/rng-browser.js","webpack://webex-js-sdk/./node_modules/uuid/v1.js","webpack://webex-js-sdk/./node_modules/uuid/v4.js","webpack://webex-js-sdk/./node_modules/valid-url/index.js","webpack://webex-js-sdk/./node_modules/which-typed-array/index.js","webpack://webex-js-sdk/./node_modules/xtend/immutable.js","webpack://webex-js-sdk/./node_modules/yallist/iterator.js","webpack://webex-js-sdk/./node_modules/yallist/yallist.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/array/from.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/array/is-array.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/date/now.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/json/stringify.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/map.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/number/is-integer.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/number/is-nan.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/assign.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/define-properties.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/define-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/entries.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/freeze.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptors.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-symbols.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/keys.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/object/values.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/parse-int.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/promise.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/reflect/apply.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/reflect/construct.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/reflect/define-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/reflect/delete-property.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/reflect/get-own-property-descriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/set.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/symbol.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/symbol/iterator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/core-js/weak-map.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/regeneratorRuntime.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/typeof.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/regenerator/index.js","webpack://webex-js-sdk/./node_modules/available-typed-arrays/index.js","webpack://webex-js-sdk/./node_modules/node-jose/node_modules/long/umd/index.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/applyDecoratedDescriptor.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/arrayLikeToArray.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/assertThisInitialized.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/asyncToGenerator.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/classCallCheck.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/construct.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/isNativeReflectConstruct.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/createClass.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/defineProperty.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/getPrototypeOf.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/inherits.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/possibleConstructorReturn.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/setPrototypeOf.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/slicedToArray.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/arrayWithHoles.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/iterableToArrayLimit.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/nonIterableRest.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/toConsumableArray.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/arrayWithoutHoles.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/iterableToArray.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/nonIterableSpread.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/toPropertyKey.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/toPrimitive.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/typeof.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/unsupportedIterableToArray.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/wrapNativeSuper.js","webpack://webex-js-sdk/./node_modules/@babel/runtime-corejs2/helpers/esm/isNativeFunction.js","webpack://webex-js-sdk/webpack/bootstrap","webpack://webex-js-sdk/webpack/runtime/compat get default export","webpack://webex-js-sdk/webpack/runtime/define property getters","webpack://webex-js-sdk/webpack/runtime/global","webpack://webex-js-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://webex-js-sdk/webpack/runtime/make namespace object","webpack://webex-js-sdk/webpack/runtime/node module decorator","webpack://webex-js-sdk/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Webex\"] = factory();\n\telse\n\t\troot[\"Webex\"] = factory();\n})(self, () => {\nreturn ","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* 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","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","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(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 (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* 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 dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\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","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","require('./_set-species')('Array');\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('./_wks-define')('asyncIterator');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","require('../../modules/es6.array.is-array');\nmodule.exports = require('../../modules/_core').Array.isArray;\n","require('../../modules/es6.date.now');\nmodule.exports = require('../../modules/_core').Date.now;\n","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.map');\nrequire('../modules/es7.map.to-json');\nrequire('../modules/es7.map.of');\nrequire('../modules/es7.map.from');\nmodule.exports = require('../modules/_core').Map;\n","require('../../modules/es6.number.is-integer');\nmodule.exports = require('../../modules/_core').Number.isInteger;\n","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n","require('../../modules/es6.object.define-properties');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperties(T, D) {\n return $Object.defineProperties(T, D);\n};\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","require('../../modules/es6.object.freeze');\nmodule.exports = require('../../modules/_core').Object.freeze;\n","require('../../modules/es6.object.get-own-property-descriptor');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key) {\n return $Object.getOwnPropertyDescriptor(it, key);\n};\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","require('../../modules/es6.symbol');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertySymbols;\n","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","require('../modules/es6.parse-int');\nmodule.exports = require('../modules/_core').parseInt;\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","require('../../modules/es6.reflect.apply');\nmodule.exports = require('../../modules/_core').Reflect.apply;\n","require('../../modules/es6.reflect.construct');\nmodule.exports = require('../../modules/_core').Reflect.construct;\n","require('../../modules/es6.reflect.define-property');\nmodule.exports = require('../../modules/_core').Reflect.defineProperty;\n","require('../../modules/es6.reflect.delete-property');\nmodule.exports = require('../../modules/_core').Reflect.deleteProperty;\n","require('../../modules/es6.reflect.get-own-property-descriptor');\nmodule.exports = require('../../modules/_core').Reflect.getOwnPropertyDescriptor;\n","require('../../modules/es6.reflect.get');\nmodule.exports = require('../../modules/_core').Reflect.get;\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.set');\nrequire('../modules/es7.set.to-json');\nrequire('../modules/es7.set.of');\nrequire('../modules/es7.set.from');\nmodule.exports = require('../modules/_core').Set;\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","module.exports = require('../../modules/_wks-ext').f('toPrimitive');\n","require('../modules/es6.object.to-string');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es7.weak-map.of');\nrequire('../modules/es7.weak-map.from');\nmodule.exports = require('../modules/_core').WeakMap;\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","module.exports = function () { /* empty */ };\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(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 (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar meta = require('./_meta');\nvar fails = require('./_fails');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar setToStringTag = require('./_set-to-string-tag');\nvar dP = require('./_object-dp').f;\nvar each = require('./_array-methods')(0);\nvar DESCRIPTORS = require('./_descriptors');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME, '_c');\n target._c = new Base();\n if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);\n });\n each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {\n anInstance(this, C, KEY);\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n IS_WEAK || dP(C.prototype, 'size', {\n get: function () {\n return this._c.size;\n }\n });\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F, O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = true;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* 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 dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\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","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","module.exports = require('./_hide');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","/**\n * Copyright (c) 2024 Cisco Systems, Inc. and/or its affiliated entities.\n * \n * Your use of the AI effects in this library (e.g., noise reduction, virtual background, etc.) are subject to the Cisco End User License Agreement located at: https://www.cisco.com/c/dam/en_us/about/doing_business/legal/eula/cisco_end_user_license_agreement-eng.pdf\n */\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter$6(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nfunction unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nvar native = {\n randomUUID\n};\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar events = {exports: {}};\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter$1() {\n EventEmitter$1.init.call(this);\n}\nevents.exports = EventEmitter$1;\nevents.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter$1.EventEmitter = EventEmitter$1;\n\nEventEmitter$1.prototype._events = undefined;\nEventEmitter$1.prototype._eventsCount = 0;\nEventEmitter$1.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter$1, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter$1.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter$1.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter$1.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter$1.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter$1.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter$1.prototype.on = EventEmitter$1.prototype.addListener;\n\nEventEmitter$1.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter$1.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter$1.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter$1.prototype.off = EventEmitter$1.prototype.removeListener;\n\nEventEmitter$1.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter$1.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter$1.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter$1.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter$1.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter$1.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\nclass EventEmitter extends events.exports.EventEmitter {\r\n}\n\nvar logger$1 = {exports: {}};\n\n/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\n\n(function (module) {\n(function (global) {\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\r\n\tLogger.setDefaults = Logger.useDefaults;\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(commonjsGlobal));\n}(logger$1));\n\nvar Logger = logger$1.exports;\n\nconst logger = Logger.get('web-media-effects');\r\nconst consoleLogHandler = Logger.createDefaultHandler({\r\n formatter: (msg, context) => {\r\n msg.unshift(context.name);\r\n },\r\n});\r\nLogger.setHandler(consoleLogHandler);\n\nvar EffectEnv;\r\n(function (EffectEnv) {\r\n EffectEnv[\"Prod\"] = \"prod\";\r\n EffectEnv[\"Int\"] = \"int\";\r\n})(EffectEnv || (EffectEnv = {}));\r\nvar EffectEvent;\r\n(function (EffectEvent) {\r\n EffectEvent[\"TrackUpdated\"] = \"track-updated\";\r\n EffectEvent[\"Enabled\"] = \"enabled\";\r\n EffectEvent[\"Disabled\"] = \"disabled\";\r\n EffectEvent[\"Disposed\"] = \"disposed\";\r\n})(EffectEvent || (EffectEvent = {}));\r\nclass BaseEffect extends EventEmitter {\r\n get underlyingStream() {\r\n return this.getUnderlyingStream();\r\n }\r\n get inputTrack() {\r\n var _a;\r\n return (_a = this.inputStream) === null || _a === void 0 ? void 0 : _a.getTracks()[0];\r\n }\r\n constructor() {\r\n super();\r\n this.id = v4();\r\n this.isEnabled = false;\r\n const constructor = this.constructor;\r\n if (constructor.kind === undefined) {\r\n throw new Error(\"base effect: derived class must define a static 'kind' property.\");\r\n }\r\n this.kind = constructor.kind;\r\n }\r\n getOutputTrack() {\r\n return this.outputTrack;\r\n }\r\n getOutputStream() {\r\n return this.outputStream;\r\n }\r\n getUnderlyingStream() {\r\n logger.warn('getUnderlyingStream() is deprecated and will be removed in a future major release. Please use getOutputStream() instead.');\r\n return this.getOutputStream();\r\n }\r\n preloadAssets() {\r\n return __awaiter$6(this, void 0, void 0, function* () { });\r\n }\r\n load(input) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!input) {\r\n throw new Error('base effect: track is a required parameter');\r\n }\r\n if (input instanceof MediaStream) {\r\n return this.loadMediaStream(input);\r\n }\r\n if (input instanceof MediaStreamTrack) {\r\n return this.loadMediaStreamTrack(input);\r\n }\r\n this.isEnabled = false;\r\n throw new Error('base effect: invalid argument type');\r\n });\r\n }\r\n loadMediaStream(input) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield this.loadMedia(input.getTracks()[0], input);\r\n if (!this.outputStream) {\r\n throw new Error('base effect: load failed to create output stream');\r\n }\r\n return this.outputStream;\r\n });\r\n }\r\n loadMediaStreamTrack(input) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield this.loadMedia(input);\r\n if (!this.outputTrack) {\r\n throw new Error('base effect: load failed to create output track');\r\n }\r\n return this.outputTrack;\r\n });\r\n }\r\n loadMedia(inputTrack, inputStream) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n this.outputTrack = inputTrack;\r\n if (!inputStream) {\r\n this.inputStream = new MediaStream([inputTrack]);\r\n return;\r\n }\r\n this.inputStream = inputStream;\r\n this.outputStream = new MediaStream();\r\n this.outputStream.addTrack(this.outputTrack);\r\n });\r\n }\r\n replaceInputTrack(track) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!track) {\r\n throw new Error('base effect: track is a required parameter');\r\n }\r\n if (this.inputStream && this.inputTrack) {\r\n this.inputStream.removeTrack(this.inputTrack);\r\n }\r\n if (this.inputStream) {\r\n this.inputStream.addTrack(track);\r\n }\r\n });\r\n }\r\n enable() {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.effectTrack) {\r\n throw new Error('base effect: effect track is undefined');\r\n }\r\n this.isEnabled = true;\r\n this.outputTrack = this.effectTrack;\r\n this.emit(EffectEvent.Enabled);\r\n this.emit(EffectEvent.TrackUpdated, this.effectTrack);\r\n });\r\n }\r\n disable() {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.inputTrack) {\r\n throw new Error('base effect: input track is undefined');\r\n }\r\n this.isEnabled = false;\r\n this.outputTrack = this.inputTrack;\r\n this.emit(EffectEvent.Disabled);\r\n this.emit(EffectEvent.TrackUpdated, this.inputTrack);\r\n });\r\n }\r\n dispose() {\r\n var _a;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n (_a = this.effectTrack) === null || _a === void 0 ? void 0 : _a.stop();\r\n delete this.outputTrack;\r\n delete this.effectTrack;\r\n this.removeAllListeners();\r\n });\r\n }\r\n setEnabled(enable) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (enable) {\r\n yield this.enable();\r\n }\r\n else {\r\n yield this.disable();\r\n }\r\n });\r\n }\r\n}\r\nconst createEffect = (EffectClass, options = {}, preloadAssets = false) => __awaiter$6(void 0, void 0, void 0, function* () {\r\n const effectInstance = new EffectClass(options);\r\n if (preloadAssets) {\r\n yield effectInstance.preloadAssets().catch((e) => {\r\n logger.error('base effect: effect preload failed:', e);\r\n throw e;\r\n });\r\n }\r\n return effectInstance;\r\n});\n\nclass BaseCameraEffect extends BaseEffect {\r\n}\n\nclass BaseMicrophoneEffect extends BaseEffect {\r\n constructor(audioCtx) {\r\n super();\r\n this.audioContext = audioCtx || new AudioContext();\r\n }\r\n}\n\nconst defaultOptions$2 = {\r\n maxGain: 2,\r\n rampTime: 1,\r\n};\r\nclass GainEffect extends BaseMicrophoneEffect {\r\n constructor(options) {\r\n super(options.audioContext);\r\n this.gainValue = 1;\r\n this.options = Object.assign(Object.assign({}, defaultOptions$2), options);\r\n logger.log('GainEffect init', { options: this.options });\r\n }\r\n loadMediaStream(input) {\r\n const _super = Object.create(null, {\r\n loadMediaStream: { get: () => super.loadMediaStream }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield _super.loadMediaStream.call(this, input);\r\n this.outputStream = yield this.createOutputStream();\r\n if (!this.outputStream) {\r\n throw new Error('gain effect: failed to create output stream');\r\n }\r\n this.outputStream.getAudioTracks()[0].enabled = input.getTracks()[0].enabled;\r\n return this.outputStream;\r\n });\r\n }\r\n loadMediaStreamTrack(input) {\r\n const _super = Object.create(null, {\r\n loadMediaStreamTrack: { get: () => super.loadMediaStreamTrack }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield _super.loadMediaStreamTrack.call(this, input);\r\n [this.outputTrack] = (yield this.createOutputStream()).getTracks();\r\n if (!this.outputTrack) {\r\n throw new Error('gain effect: failed to create output track');\r\n }\r\n return this.outputTrack;\r\n });\r\n }\r\n createOutputStream() {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.inputStream) {\r\n throw new Error('gain effect: failed to create input stream');\r\n }\r\n const source = this.audioContext.createMediaStreamSource(this.inputStream);\r\n this.gainNode = new GainNode(this.audioContext);\r\n source.connect(this.gainNode);\r\n const mediaStreamDestination = this.audioContext.createMediaStreamDestination();\r\n this.gainNode.connect(mediaStreamDestination);\r\n [this.effectTrack] = mediaStreamDestination.stream.getTracks();\r\n return mediaStreamDestination.stream;\r\n });\r\n }\r\n setGainValue(value) {\r\n if (value > this.options.maxGain) {\r\n value = this.options.maxGain;\r\n }\r\n this.gainValue = value;\r\n this.gainNode.gain.linearRampToValueAtTime(value, this.audioContext.currentTime + this.options.rampTime);\r\n }\r\n enable() {\r\n const _super = Object.create(null, {\r\n enable: { get: () => super.enable }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n this.gainNode.gain.linearRampToValueAtTime(this.gainValue, this.audioContext.currentTime + this.options.rampTime);\r\n yield _super.enable.call(this);\r\n });\r\n }\r\n disable() {\r\n const _super = Object.create(null, {\r\n disable: { get: () => super.disable }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n this.gainNode.gain.linearRampToValueAtTime(1, this.audioContext.currentTime + this.options.rampTime);\r\n yield _super.disable.call(this);\r\n });\r\n }\r\n dispose() {\r\n const _super = Object.create(null, {\r\n dispose: { get: () => super.dispose }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n this.gainNode.disconnect();\r\n yield _super.dispose.call(this);\r\n });\r\n }\r\n}\r\nGainEffect.kind = 'gain-effect';\n\nconst appendScript = (url) => __awaiter$6(void 0, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n var _a;\r\n const fs = document.getElementsByTagName('script')[0];\r\n const s = document.createElement('script');\r\n s.type = 'text/javascript';\r\n s.async = true;\r\n s.src = url;\r\n s.onload = resolve;\r\n s.onerror = reject;\r\n (_a = fs.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(s, fs);\r\n });\r\n});\n\nconst fetchUrls = (paths, token, env) => {\r\n const url = (env === EffectEnv.Int\r\n ? \"https://models-auth.us-east-2.int.infra.intelligence.webex.com/generate\"\r\n : \"https://models-auth.intelligence.webex.com/generate\");\r\n const body = { items: Array.isArray(paths) ? paths : [paths] };\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify(body),\r\n };\r\n return fetch(url, options).then((resp) => {\r\n if (!resp.ok) {\r\n throw resp;\r\n }\r\n return resp.json();\r\n });\r\n};\r\nconst fetchSignedUrl = (path, token, env) => __awaiter$6(void 0, void 0, void 0, function* () {\r\n return fetchUrls(path, token, env)\r\n .then((resp) => { var _a, _b; return (_b = (_a = resp.items) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.url; })\r\n .catch(() => {\r\n throw new Error('Fetching signed url failed. Please check the auth token and try again.');\r\n });\r\n});\r\nconst memoizeBlobUrl = (func) => {\r\n const cache = new Map();\r\n function memoizedFunc(...args) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n const cacheKey = JSON.stringify(args);\r\n const cachedResult = cache.get(cacheKey);\r\n if (cachedResult !== undefined) {\r\n return cachedResult;\r\n }\r\n const result = yield func.apply(this, args);\r\n const item = yield fetch(result);\r\n const url = URL.createObjectURL(yield item.blob());\r\n cache.set(cacheKey, url);\r\n return url;\r\n });\r\n }\r\n memoizedFunc.clearCache = () => {\r\n cache.clear();\r\n };\r\n return memoizedFunc;\r\n};\r\nconst memoizedFetchSignedUrl = memoizeBlobUrl(fetchSignedUrl);\n\nvar FutureState;\r\n(function (FutureState) {\r\n FutureState[\"Pending\"] = \"pending\";\r\n FutureState[\"Resolved\"] = \"resolved\";\r\n FutureState[\"Rejected\"] = \"rejected\";\r\n})(FutureState || (FutureState = {}));\r\nclass Future {\r\n constructor(promise) {\r\n this.state = FutureState.Pending;\r\n this.promise =\r\n promise !== null && promise !== void 0 ? promise : new Promise((resolve, reject) => {\r\n this.resolve = (arg) => {\r\n this.state = FutureState.Resolved;\r\n resolve(arg);\r\n };\r\n this.reject = (e) => {\r\n this.state = FutureState.Rejected;\r\n reject(e);\r\n };\r\n });\r\n }\r\n}\n\nconst hasSimdSupport = () => __awaiter$6(void 0, void 0, void 0, function* () {\r\n return WebAssembly.validate(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, 1, 8, 0, 65, 0, 253,\r\n 15, 253, 98, 11,\r\n ]));\r\n});\n\nconst omitKey = (key, obj) => Object.fromEntries(Object.entries(obj).filter((i) => i[0] !== key));\n\nvar NoiseReductionMode;\r\n(function (NoiseReductionMode) {\r\n NoiseReductionMode[\"Legacy\"] = \"LEGACY\";\r\n NoiseReductionMode[\"Worklet\"] = \"WORKLET\";\r\n})(NoiseReductionMode || (NoiseReductionMode = {}));\r\nconst defaultOptions$1 = Object.freeze({\r\n mode: NoiseReductionMode.Worklet,\r\n avoidSimd: false,\r\n authToken: '',\r\n env: EffectEnv.Prod,\r\n});\r\nclass NoiseReductionEffect extends BaseMicrophoneEffect {\r\n get isLoaded() {\r\n return !!this.loadFuture;\r\n }\r\n constructor(options) {\r\n super(options === null || options === void 0 ? void 0 : options.audioContext);\r\n this.isReady = false;\r\n this.disableFuture = new Future();\r\n this.enableFuture = new Future();\r\n this.options = Object.assign(Object.assign({}, defaultOptions$1), options);\r\n logger.log('noise reduction: init effect', omitKey('authToken', this.options));\r\n }\r\n fetchUrl(url) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n let validatedUrl = url;\r\n if (!this.options.authToken) {\r\n throw new Error('noise reduction: auth token is required');\r\n }\r\n if (!this.options.avoidSimd && (yield NoiseReductionEffect.supportsSimd())) {\r\n validatedUrl = url.replace('.js', '.simd.js');\r\n }\r\n return memoizedFetchSignedUrl(validatedUrl, this.options.authToken, this.options.env).catch((e) => {\r\n throw new Error(`noise reduction: ${e.message}`);\r\n });\r\n });\r\n }\r\n loadMediaStream(input) {\r\n const _super = Object.create(null, {\r\n loadMedia: { get: () => super.loadMedia }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('noise reduction: load stream', input);\r\n const [audioTrack] = input.getAudioTracks();\r\n if (!audioTrack) {\r\n throw new Error('noise reduction: load stream failed, no audio track found');\r\n }\r\n yield _super.loadMedia.call(this, audioTrack, input);\r\n this.outputStream = yield this.createOutputStream();\r\n if (!this.outputStream) {\r\n throw new Error('noise reduction: failed to create output stream');\r\n }\r\n this.outputStream.getAudioTracks()[0].enabled = audioTrack.enabled;\r\n return this.outputStream;\r\n });\r\n }\r\n loadMediaStreamTrack(input) {\r\n const _super = Object.create(null, {\r\n loadMediaStreamTrack: { get: () => super.loadMediaStreamTrack }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield _super.loadMediaStreamTrack.call(this, input);\r\n [this.outputTrack] = (yield this.createOutputStream()).getTracks();\r\n if (!this.outputTrack) {\r\n throw new Error('noise reduction: failed to create output track');\r\n }\r\n return this.outputTrack;\r\n });\r\n }\r\n createOutputStream() {\r\n var _a;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.inputStream) {\r\n throw new Error('noise reduction: failed to create input stream');\r\n }\r\n const mediaStreamDestination = this.audioContext.createMediaStreamDestination();\r\n [this.effectTrack] = mediaStreamDestination.stream.getTracks();\r\n if (this.loadFuture) {\r\n return this.loadFuture.promise;\r\n }\r\n this.loadFuture = new Future();\r\n yield ((_a = this.disposeFuture) === null || _a === void 0 ? void 0 : _a.promise);\r\n this.disposeFuture = new Future();\r\n if (this.options.mode === NoiseReductionMode.Legacy) {\r\n return this.loadLegacy(this.inputStream, mediaStreamDestination);\r\n }\r\n return this.loadWorklet(this.inputStream, mediaStreamDestination);\r\n });\r\n }\r\n preloadAssets() {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n const start = performance.now();\r\n if (this.preloadFuture) {\r\n logger.log('noise reduction: waiting for existing preload to complete');\r\n yield this.preloadFuture.promise;\r\n return;\r\n }\r\n this.preloadFuture = new Future();\r\n logger.log('noise reduction: preloading assets', this.options.mode);\r\n try {\r\n if (this.options.mode === NoiseReductionMode.Worklet) {\r\n yield this.fetchAndLoadWorkletProcessor();\r\n }\r\n if (this.options.mode === NoiseReductionMode.Legacy) {\r\n yield this.fetchAndLoadLegacyProcessor();\r\n }\r\n const end = performance.now();\r\n const duration = Math.round(end - start) / 1000;\r\n logger.log(`virtual background: preload completed in ${duration} seconds`);\r\n this.preloadFuture.resolve();\r\n }\r\n catch (error) {\r\n this.preloadFuture.reject(error);\r\n this.preloadFuture = undefined;\r\n }\r\n });\r\n }\r\n fetchAndLoadWorkletProcessor() {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('noise reduction: fetch worklet processor');\r\n const workletProcessorUrl = this.options.workletProcessorUrl ||\r\n (yield this.fetchUrl(\"denoise/processors/2.4.2/noise-reduction-processor.worklet.js\"));\r\n logger.log('noise reduction: add worklet processor to audio context');\r\n yield ((_b = (_a = this.audioContext) === null || _a === void 0 ? void 0 : _a.audioWorklet) === null || _b === void 0 ? void 0 : _b.addModule(workletProcessorUrl));\r\n });\r\n }\r\n fetchAndLoadLegacyProcessor() {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('noise reduction: fetch legacy processor url');\r\n const legacyProcessorUrl = this.options.legacyProcessorUrl ||\r\n (yield this.fetchUrl(\"denoise/processors/2.4.2/noise-reduction-processor.legacy.js\"));\r\n logger.log('noise reduction: append legacy processor to global scope');\r\n yield appendScript(legacyProcessorUrl);\r\n });\r\n }\r\n loadWorklet(stream, destination) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.loadFuture) {\r\n throw new Error('noise reduction: the load future was not initialized correctly');\r\n }\r\n logger.log('noise reduction: load worklet');\r\n try {\r\n yield this.fetchAndLoadWorkletProcessor();\r\n if (!AudioWorkletNode) {\r\n throw new Error('noise reduction: `AudioWorkletNode` unavailable in current scope');\r\n }\r\n logger.log('noise reduction: attach worklet processor');\r\n this.workletNode = new AudioWorkletNode(this.audioContext, 'noise-reduction-worklet-processor');\r\n this.workletNode.port.onmessage = (ev) => {\r\n var _a, _b, _c;\r\n logger.log(`noise reduction: worklet processor ${ev.data.type.toLowerCase()}`);\r\n switch (ev.data.type) {\r\n case NoiseReductionEffect.Events.Ready: {\r\n this.isReady = true;\r\n (_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.resolve(destination.stream);\r\n break;\r\n }\r\n case NoiseReductionEffect.Events.Disabled: {\r\n this.handleDisabled();\r\n break;\r\n }\r\n case NoiseReductionEffect.Events.Enabled: {\r\n this.handleEnabled();\r\n break;\r\n }\r\n case NoiseReductionEffect.Events.Disposed: {\r\n this.isEnabled = false;\r\n this.isReady = false;\r\n (_b = this.disposeFuture) === null || _b === void 0 ? void 0 : _b.resolve();\r\n this.emit(EffectEvent.Disposed);\r\n break;\r\n }\r\n case NoiseReductionEffect.Events.Error: {\r\n const err = new Error(`noise reduction: worklet processor error, \"${ev.data.payload}\"`);\r\n (_c = this.loadFuture) === null || _c === void 0 ? void 0 : _c.reject(err);\r\n logger.error(err);\r\n break;\r\n }\r\n default:\r\n logger.warn('noise reduction: worklet processor unhandled message', ev.data);\r\n }\r\n };\r\n this.workletNode.connect(destination);\r\n this.sourceNode = this.audioContext.createMediaStreamSource(stream);\r\n this.sourceNode.connect(this.workletNode);\r\n }\r\n catch (e) {\r\n this.loadFuture.reject(new Error('noise reduction: failed to load worklet processor'));\r\n }\r\n return this.loadFuture.promise;\r\n });\r\n }\r\n loadLegacy(stream, destination) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.loadFuture) {\r\n throw new Error('noise reduction: the load future was not initialized correctly');\r\n }\r\n logger.log('noise reduction: load legacy');\r\n try {\r\n yield this.fetchAndLoadLegacyProcessor();\r\n this.legacyProcessor = new window.WebMediaEffects.NoiseReductionLegacyProcessor(this.audioContext.sampleRate);\r\n if (this.legacyProcessor) {\r\n const bufferLengthMap = { 16000: 256, 32000: 512, 48000: 512 };\r\n const bufferLength = bufferLengthMap[this.audioContext.sampleRate];\r\n this.legacyScriptNode = this.audioContext.createScriptProcessor(bufferLength, 1, 1);\r\n this.legacyScriptNode.connect(destination);\r\n this.legacyScriptNode.onaudioprocess = this.legacyProcessor.processAudioChunk;\r\n this.sourceNode = this.audioContext.createMediaStreamSource(stream);\r\n this.sourceNode.connect(this.legacyScriptNode);\r\n this.isReady = true;\r\n this.loadFuture.resolve(destination.stream);\r\n }\r\n }\r\n catch (e) {\r\n this.loadFuture.reject(new Error('noise reduction: failed to load legacy processor'));\r\n }\r\n return this.loadFuture.promise;\r\n });\r\n }\r\n enable() {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('noise reduction: enable effect');\r\n if (!this.isReady) {\r\n throw new Error('noise reduction: not setup or ready');\r\n }\r\n this.enableFuture = new Future();\r\n (_a = this.workletNode) === null || _a === void 0 ? void 0 : _a.port.postMessage('ENABLE');\r\n (_b = this.legacyProcessor) === null || _b === void 0 ? void 0 : _b.setEnabled(true).then(() => this.handleEnabled());\r\n return this.enableFuture.promise;\r\n });\r\n }\r\n disable() {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('noise reduction: disable effect');\r\n if (!this.isReady) {\r\n throw new Error('noise reduction: not setup or ready');\r\n }\r\n this.disableFuture = new Future();\r\n (_a = this.workletNode) === null || _a === void 0 ? void 0 : _a.port.postMessage('DISABLE');\r\n (_b = this.legacyProcessor) === null || _b === void 0 ? void 0 : _b.setEnabled(false).then(() => this.handleDisabled());\r\n return this.disableFuture.promise;\r\n });\r\n }\r\n dispose() {\r\n const _super = Object.create(null, {\r\n dispose: { get: () => super.dispose }\r\n });\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('noise reduction: dispose effect');\r\n if (!this.loadFuture) {\r\n return;\r\n }\r\n yield this.loadFuture.promise;\r\n this.loadFuture = undefined;\r\n (_a = this.workletNode) === null || _a === void 0 ? void 0 : _a.port.postMessage('DISPOSE');\r\n (_b = this.legacyProcessor) === null || _b === void 0 ? void 0 : _b.dispose().then((_c = this.disposeFuture) === null || _c === void 0 ? void 0 : _c.resolve);\r\n yield ((_d = this.disposeFuture) === null || _d === void 0 ? void 0 : _d.promise);\r\n (_e = this.workletNode) === null || _e === void 0 ? void 0 : _e.disconnect();\r\n (_f = this.legacyScriptNode) === null || _f === void 0 ? void 0 : _f.disconnect();\r\n (_g = this.sourceNode) === null || _g === void 0 ? void 0 : _g.disconnect();\r\n yield _super.dispose.call(this);\r\n logger.log('noise reduction: effect disposed');\r\n });\r\n }\r\n handleDisabled() {\r\n const _super = Object.create(null, {\r\n disable: { get: () => super.disable }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield _super.disable.call(this);\r\n this.disableFuture.resolve();\r\n });\r\n }\r\n handleEnabled() {\r\n const _super = Object.create(null, {\r\n enable: { get: () => super.enable }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield _super.enable.call(this);\r\n this.enableFuture.resolve();\r\n });\r\n }\r\n}\r\nNoiseReductionEffect.kind = 'noise-reduction-effect';\r\nNoiseReductionEffect.supportsSimd = hasSimdSupport;\r\nNoiseReductionEffect.Events = {\r\n Ready: 'READY',\r\n Disabled: 'DISABLED',\r\n Disposed: 'DISPOSED',\r\n Enabled: 'ENABLED',\r\n Error: 'ERROR',\r\n};\r\nconst createNoiseReductionEffect = (options, preloadAssets) => __awaiter$6(void 0, void 0, void 0, function* () { return createEffect(NoiseReductionEffect, options, preloadAssets); });\n\nvar RateEstimatorEvent;\r\n(function (RateEstimatorEvent) {\r\n RateEstimatorEvent[\"RateOk\"] = \"rate-ok\";\r\n RateEstimatorEvent[\"RateLow\"] = \"rate-low\";\r\n RateEstimatorEvent[\"RateLagging\"] = \"rate-lagging\";\r\n})(RateEstimatorEvent || (RateEstimatorEvent = {}));\r\nvar RateEstimatorStatus;\r\n(function (RateEstimatorStatus) {\r\n RateEstimatorStatus[\"Idle\"] = \"idle\";\r\n RateEstimatorStatus[\"Init\"] = \"init\";\r\n RateEstimatorStatus[\"Lagging\"] = \"lagging\";\r\n RateEstimatorStatus[\"Low\"] = \"low\";\r\n RateEstimatorStatus[\"Ok\"] = \"ok\";\r\n})(RateEstimatorStatus || (RateEstimatorStatus = {}));\r\nclass RateEstimator extends EventEmitter {\r\n constructor(targetRate, options) {\r\n super();\r\n this.timestamps = [];\r\n this.status = RateEstimatorStatus.Idle;\r\n if (typeof targetRate !== 'number' || targetRate <= 0) {\r\n throw new Error('Invalid target rate: must be a positive number.');\r\n }\r\n const defaults = {\r\n hysteresisMargin: 0.05,\r\n lowDuration: 5,\r\n lowThreshold: targetRate * 0.8,\r\n minSamples: Math.max(30, targetRate),\r\n maxSamples: Math.max(120, targetRate * 4),\r\n };\r\n this.options = Object.assign(Object.assign({}, defaults), options);\r\n logger.log(`rate estimator: init, targetRate = ${targetRate}, options =`, this.options);\r\n this.targetRate = targetRate;\r\n this.status = RateEstimatorStatus.Idle;\r\n }\r\n getEstimatedValues() {\r\n return {\r\n rate: this.estimatedRate,\r\n status: this.status,\r\n threshold: this.options.lowThreshold,\r\n };\r\n }\r\n getOptions() {\r\n return this.options;\r\n }\r\n getTimestamps() {\r\n return this.timestamps;\r\n }\r\n addTimestamp(timestamp) {\r\n if (this.status === RateEstimatorStatus.Idle) {\r\n this.status = RateEstimatorStatus.Init;\r\n }\r\n this.timestamps.unshift(timestamp);\r\n if (this.timestamps.length > this.options.maxSamples) {\r\n this.timestamps.pop();\r\n }\r\n if (this.timestamps.length >= this.options.minSamples) {\r\n this.calculateAndUpdateRate();\r\n this.evaluateRate(timestamp);\r\n }\r\n }\r\n calculateAndUpdateRate() {\r\n const sampleCount = this.timestamps.length - 1;\r\n const timeDifference = (this.timestamps[0] - this.timestamps[sampleCount]) / 1000;\r\n const estimatedRate = sampleCount / timeDifference;\r\n this.estimatedRate = Number(estimatedRate.toFixed(1));\r\n }\r\n evaluateRate(timestamp) {\r\n if (this.isRateLow()) {\r\n this.handleLowRate(timestamp);\r\n return;\r\n }\r\n if (this.lowRateStartTime) {\r\n this.handleReturnToNormalRate();\r\n return;\r\n }\r\n this.status = RateEstimatorStatus.Ok;\r\n }\r\n isRateLow() {\r\n const { hysteresisMargin, lowThreshold } = this.options;\r\n if (!this.estimatedRate) {\r\n return false;\r\n }\r\n const tolerance = lowThreshold * hysteresisMargin;\r\n const lowerBound = lowThreshold - tolerance;\r\n const upperBound = lowThreshold + tolerance;\r\n if (this.status === RateEstimatorStatus.Ok || this.status === RateEstimatorStatus.Init) {\r\n return this.estimatedRate < lowerBound;\r\n }\r\n return this.estimatedRate < upperBound;\r\n }\r\n handleLowRate(timestamp) {\r\n var _a;\r\n if (this.estimatedRate === undefined) {\r\n return;\r\n }\r\n if (this.status === RateEstimatorStatus.Lagging) {\r\n return;\r\n }\r\n if (this.status !== RateEstimatorStatus.Low) {\r\n logger.log(`rate estimator: rate low, target = ${this.targetRate}, estimated = ${this.estimatedRate.toFixed(2)}`);\r\n this.emit(RateEstimatorEvent.RateLow, this.estimatedRate);\r\n this.status = RateEstimatorStatus.Low;\r\n (_a = this.lowRateStartTime) !== null && _a !== void 0 ? _a : (this.lowRateStartTime = timestamp);\r\n return;\r\n }\r\n if (this.status === RateEstimatorStatus.Low) {\r\n const timeElapsed = timestamp - (this.lowRateStartTime || 0);\r\n if (timeElapsed >= this.options.lowDuration * 1000) {\r\n logger.log(`rate estimator: rate lagging, target = ${this.targetRate}, estimated = ${this.estimatedRate.toFixed(2)}`);\r\n this.emit(RateEstimatorEvent.RateLagging, this.estimatedRate);\r\n this.status = RateEstimatorStatus.Lagging;\r\n }\r\n }\r\n }\r\n handleReturnToNormalRate() {\r\n if (this.estimatedRate !== undefined) {\r\n logger.log(`rate estimator: rate returned to normal, target = ${this.targetRate}, estimated = ${this.estimatedRate.toFixed(2)}`);\r\n this.emit(RateEstimatorEvent.RateOk, this.estimatedRate);\r\n this.status = RateEstimatorStatus.Ok;\r\n this.lowRateStartTime = undefined;\r\n }\r\n }\r\n reset() {\r\n this.timestamps = [];\r\n this.estimatedRate = undefined;\r\n this.lowRateStartTime = undefined;\r\n this.status = RateEstimatorStatus.Idle;\r\n }\r\n updateOptions(newOptions) {\r\n this.options = Object.assign(Object.assign({}, this.options), newOptions);\r\n logger.log('rate estimator: options updated', this.options);\r\n }\r\n}\n\nconst toAbsoluteURI = (relativeURL, baseURL) => {\r\n // adapted from - https://github.com/axios/axios/blob/fe7d09bb08fa1c0e414956b7fc760c80459b0a43/lib/helpers/combineURLs.js\r\n if (!baseURL || relativeURL.startsWith('http')) {\r\n return new URL(relativeURL).href;\r\n }\r\n return relativeURL\r\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\r\n : baseURL;\r\n};\r\nfunction compileShader(gl, shader_type, source) {\r\n var _a;\r\n const shader = gl.createShader(shader_type);\r\n if (!shader) {\r\n throw new Error('[ladon-ts] - error creating shader');\r\n }\r\n gl.shaderSource(shader, source);\r\n gl.compileShader(shader);\r\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\r\n const error = (_a = gl.getShaderInfoLog(shader)) !== null && _a !== void 0 ? _a : 'unknown error compiling shader.';\r\n throw new Error('[ladon-ts] - ' + error);\r\n }\r\n return shader;\r\n}\r\nfunction linkProgram(gl, vertex_shader, fragment_shader) {\r\n var _a;\r\n const program = gl.createProgram();\r\n if (!program) {\r\n throw new Error('[ladon-ts] - error creating GPU program');\r\n }\r\n gl.attachShader(program, vertex_shader);\r\n gl.attachShader(program, fragment_shader);\r\n gl.linkProgram(program);\r\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\r\n const error = (_a = gl.getProgramInfoLog(program)) !== null && _a !== void 0 ? _a : 'unknown error linking program.';\r\n throw new Error('[ladon-ts] - ' + error);\r\n }\r\n return program;\r\n}\r\n/**\r\n * Resizes an image from the source dimensions to target dimensions.\r\n *\r\n * @param {Uint8ClampedArray} imageData The source image data in Uint8ClampedArray format.\r\n * @param {number} srcWidth The width of the source image.\r\n * @param {number} srcHeight The height of the source image.\r\n * @param {number} targetWidth The width of the target image.\r\n * @param {number} targetHeight The height of the target image.\r\n *\r\n * @returns {Uint8ClampedArray} The target image data in Uint8ClampedArray format.\r\n *\r\n * @example\r\n * const targetData = resizeImage(sourceData, 800, 600, 400, 300);\r\n *\r\n * @note The function uses a \"nearest neighbor\" algorithm for resizing,\r\n * which is fast but might not provide the best quality for all images.\r\n */\r\nconst resizeImage = (imageData, srcWidth, srcHeight, targetWidth, targetHeight) => {\r\n const targetData = new Uint8ClampedArray(targetWidth * targetHeight * 4);\r\n const xRatio = srcWidth / targetWidth;\r\n const yRatio = srcHeight / targetHeight;\r\n const scaledSrcWidth = srcWidth * 4;\r\n let offset = 0;\r\n for (let y = 0; y < targetHeight; y++) {\r\n const srcY = Math.floor(y * yRatio) * scaledSrcWidth;\r\n for (let x = 0; x < targetWidth; x++) {\r\n const srcOffset = srcY + Math.floor(x * xRatio) * 4;\r\n targetData[offset++] = imageData[srcOffset];\r\n targetData[offset++] = imageData[srcOffset + 1];\r\n targetData[offset++] = imageData[srcOffset + 2];\r\n targetData[offset++] = imageData[srcOffset + 3];\r\n }\r\n }\r\n return targetData;\r\n};\n\nconst LIB_VERSION = '4.3.0';\n\nconst BASE_URL = 'https://models.intelligence.webex.com/ladon';\r\nconst LOCAL_BASE_URL = 'https://localhost';\r\nconst LOCAL_WORKER_URI = '/segmentation.js';\r\nconst LOCAL_PORT = 1235;\r\nconst MODEL_VERSION = '1.0.0';\r\nconst WASM_URI = '/wasm/1.15.1b/';\r\nvar Quality;\r\n(function (Quality) {\r\n Quality[\"TINY\"] = \"TINY\";\r\n Quality[\"LOW\"] = \"LOW\";\r\n Quality[\"MEDIUM\"] = \"MEDIUM\";\r\n Quality[\"HIGH\"] = \"HIGH\";\r\n Quality[\"ULTRA\"] = \"ULTRA\";\r\n})(Quality || (Quality = {}));\r\nvar BlurStrength;\r\n(function (BlurStrength) {\r\n BlurStrength[\"WEAK\"] = \"WEAK\";\r\n BlurStrength[\"MODERATE\"] = \"MODERATE\";\r\n BlurStrength[\"STRONG\"] = \"STRONG\";\r\n BlurStrength[\"STRONGER\"] = \"STRONGER\";\r\n BlurStrength[\"STRONGEST\"] = \"STRONGEST\";\r\n})(BlurStrength || (BlurStrength = {}));\r\nconst getBlurConfig = (blur_strength, horizontal_mirror) => {\r\n let kernel_size = 25;\r\n let sigma = 11;\r\n switch (blur_strength) {\r\n case BlurStrength.WEAK:\r\n kernel_size = 9;\r\n sigma = 2;\r\n break;\r\n case BlurStrength.MODERATE:\r\n kernel_size = 15;\r\n sigma = 6;\r\n break;\r\n case BlurStrength.STRONG:\r\n kernel_size = 25;\r\n sigma = 11;\r\n break;\r\n case BlurStrength.STRONGER:\r\n kernel_size = 37;\r\n sigma = 17;\r\n break;\r\n case BlurStrength.STRONGEST:\r\n kernel_size = 49;\r\n sigma = 23;\r\n break;\r\n }\r\n return {\r\n type: 'blur',\r\n horizontal_mirror,\r\n kernel_size,\r\n sigma,\r\n };\r\n};\r\nconst getPreloadConfig = (quality = Quality.LOW, generator = 'local', model_url_resolver = (model_path) => Promise.resolve(toAbsoluteURI(model_path, BASE_URL)), base_url = BASE_URL, useLocalWorker = false) => {\r\n const model_version = MODEL_VERSION;\r\n const localBaseUrl = `${LOCAL_BASE_URL}:${LOCAL_PORT}`;\r\n const workerBaseUrl = useLocalWorker ? localBaseUrl : base_url;\r\n const workerScriptPath = useLocalWorker\r\n ? LOCAL_WORKER_URI\r\n : `/${LIB_VERSION}/worker/segmentation.js`;\r\n const worker_uri = toAbsoluteURI(workerScriptPath, workerBaseUrl);\r\n const base_config = {\r\n base_url,\r\n wasm_uri: WASM_URI,\r\n mask: {\r\n generation_interval_ms: 48,\r\n generator,\r\n model_url_resolver,\r\n model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_mn3sm100.onnx`,\r\n worker_uri,\r\n model_rank: 3,\r\n },\r\n };\r\n let mask_quality_config = {};\r\n switch (quality) {\r\n case Quality.TINY:\r\n mask_quality_config = {\r\n generation_interval_ms: 48,\r\n model_uri: `/models/${model_version}/tiny_model.onnx`,\r\n input_size: { height: 144, width: 256 },\r\n output_size: { height: 360, width: 640 },\r\n model_rank: 4,\r\n };\r\n break;\r\n case Quality.LOW:\r\n mask_quality_config = {\r\n generation_interval_ms: 48,\r\n model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_mn3sm100.onnx`,\r\n };\r\n break;\r\n case Quality.MEDIUM:\r\n mask_quality_config = {\r\n generation_interval_ms: 24,\r\n model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_mn3sm100.onnx`,\r\n };\r\n break;\r\n case Quality.HIGH:\r\n mask_quality_config = {\r\n generation_interval_ms: 36,\r\n model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_full_depth_2.onnx`,\r\n };\r\n break;\r\n case Quality.ULTRA:\r\n mask_quality_config = {\r\n generation_interval_ms: 0,\r\n model_uri: `/models/${model_version}/mv2_dlv3plus_dynamic_dev_plus_dual_op11_full_depth_2.onnx`,\r\n };\r\n break;\r\n default:\r\n throw new Error('[ladon-ts] - unknown quality option: ' + quality);\r\n }\r\n return Object.assign(Object.assign({}, base_config), { mask: Object.assign(Object.assign({}, base_config.mask), mask_quality_config) });\r\n};\r\nconst getConfig = (height, width, quality = Quality.LOW, generator = 'local', renderConfig = {\r\n type: 'blur',\r\n horizontal_mirror: false,\r\n kernel_size: 37,\r\n sigma: 17,\r\n}, modelUrlResolver = (model_path) => Promise.resolve(toAbsoluteURI(model_path, BASE_URL)), baseUrl = BASE_URL, useLocalWorker = false) => {\r\n const basePreloadConfig = getPreloadConfig(quality, generator, modelUrlResolver, baseUrl, useLocalWorker);\r\n const maskConfig = basePreloadConfig.mask;\r\n return Object.assign(Object.assign({}, basePreloadConfig), { render: renderConfig, input: { height, width }, mask: Object.assign(Object.assign({}, maskConfig), { \r\n // Need to ensure we don't override the tiny model's input and output sizes.\r\n input_size: maskConfig.input_size || { height, width }, output_size: maskConfig.output_size || { height, width } }) });\r\n};\n\nvar ort_min = {exports: {}};\n\n/*!\n* ONNX Runtime Web v1.15.1\n* Copyright (c) Microsoft Corporation. All rights reserved.\n* Licensed under the MIT License.\n*/\n\n(function (module, exports) {\n!function(e,t){module.exports=t();}(globalThis,(()=>(()=>{var __webpack_modules__={8453:(e,t,n)=>{n.r(t),n.d(t,{InferenceSession:()=>f,Tensor:()=>p,env:()=>a,registerBackend:()=>i});const r={},o=[],i=(e,t,n)=>{if(!t||\"function\"!=typeof t.init||\"function\"!=typeof t.createSessionHandler)throw new TypeError(\"not a valid backend\");{const i=r[e];if(void 0===i)r[e]={backend:t,priority:n};else {if(i.priority>n)return;if(i.priority===n&&i.backend!==t)throw new Error(`cannot register backend \"${e}\" using priority ${n}`)}if(n>=0){const t=o.indexOf(e);-1!==t&&o.splice(t,1);for(let t=0;t{if(!l){l=!0;const e=\"undefined\"!=typeof BigInt64Array&&\"function\"==typeof BigInt64Array.from,t=\"undefined\"!=typeof BigUint64Array&&\"function\"==typeof BigUint64Array.from;e&&(s.set(\"int64\",BigInt64Array),u.set(BigInt64Array,\"int64\")),t&&(s.set(\"uint64\",BigUint64Array),u.set(BigUint64Array,\"uint64\"));}})(),\"string\"==typeof e)if(r=e,i=n,\"string\"===e){if(!Array.isArray(t))throw new TypeError(\"A string tensor's data must be a string array.\");o=t;}else {const n=s.get(e);if(void 0===n)throw new TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(t))o=n.from(t);else {if(!(t instanceof n))throw new TypeError(`A ${r} tensor's data must be type of ${n}`);o=t;}}else if(i=t,Array.isArray(e)){if(0===e.length)throw new TypeError(\"Tensor type cannot be inferred from an empty array.\");const t=typeof e[0];if(\"string\"===t)r=\"string\",o=e;else {if(\"boolean\"!==t)throw new TypeError(`Invalid element type of data array: ${t}.`);r=\"bool\",o=Uint8Array.from(e);}}else {const t=u.get(e.constructor);if(void 0===t)throw new TypeError(`Unsupported type for tensor data: ${e.constructor}.`);r=t,o=e;}if(void 0===i)i=[o.length];else if(!Array.isArray(i))throw new TypeError(\"A tensor's dims must be a number array\");const a=(e=>{let t=1;for(let n=0;n{const o=document.createElement(\"canvas\"),i=o.getContext(\"2d\");if(!e||!i)return r();const a=new Image;a.crossOrigin=\"Anonymous\",a.src=e,a.onload=()=>{o.width=a.width,o.height=a.height,i.drawImage(a,0,0,o.width,o.height);const e=i.getImageData(0,0,o.width,o.height);if(void 0!==t){if(void 0!==t.height&&t.height!==o.height)throw new Error(\"Image input config height doesn't match height\");if(s.height=o.height,void 0!==t.width&&t.width!==o.width)throw new Error(\"Image input config width doesn't match width\");s.width=o.width;}else s.height=o.height,s.width=o.width;n(c.bufferToTensor(e.data,s));};}));throw new Error(\"Input data provided is not supported - aborted tensor creation\")}{const n=\"RGBA\";let r,o;if(void 0!==t&&void 0!==t.resizedWidth&&void 0!==t.resizedHeight?(r=t.resizedHeight,o=t.resizedWidth):(r=e.height,o=e.width),void 0!==t){if(s=t,void 0!==t.bitmapFormat&&t.bitmapFormat!==n)throw new Error(\"Image input config format must be RGBA for ImageData\");s.bitmapFormat=\"RGBA\";}else s.bitmapFormat=\"RGBA\";if(s.height=r,s.width=o,void 0!==t){const t=document.createElement(\"canvas\");t.width=o,t.height=r;const n=t.getContext(\"2d\");if(null==n)throw new Error(\"Can not access image data\");n.putImageData(e,0,0),a=n.getImageData(0,0,o,r).data;}else a=e.data;}}if(void 0!==a)return c.bufferToTensor(a,s);throw new Error(\"Input data provided is not supported - aborted tensor creation\")}toDataURL(e){const t=document.createElement(\"canvas\");t.width=this.dims[3],t.height=this.dims[2];const n=t.getContext(\"2d\");if(null!=n){let r,o;void 0!==e?.tensorLayout&&\"NHWC\"===e.tensorLayout?(r=this.dims[2],o=this.dims[3]):(r=this.dims[3],o=this.dims[2]);const i=void 0!==e?.format?e.format:\"RGB\",a=e?.norm;let s,u;void 0===a||void 0===a.mean?s=[255,255,255,255]:\"number\"==typeof a.mean?s=[a.mean,a.mean,a.mean,a.mean]:(s=[a.mean[0],a.mean[1],a.mean[2],0],void 0!==a.mean[3]&&(s[3]=a.mean[3])),void 0===a||void 0===a.bias?u=[0,0,0,0]:\"number\"==typeof a.bias?u=[a.bias,a.bias,a.bias,a.bias]:(u=[a.bias[0],a.bias[1],a.bias[2],0],void 0!==a.bias[3]&&(u[3]=a.bias[3]));const l=o*r;let c=0,p=l,d=2*l,f=-1;\"RGBA\"===i?(c=0,p=l,d=2*l,f=3*l):\"RGB\"===i?(c=0,p=l,d=2*l):\"RBG\"===i&&(c=0,d=l,p=2*l);for(let e=0;e=r.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${r.byteLength}).`);if(u=e.byteLength-o,\"number\"==typeof n){if(u=n,!Number.isSafeInteger(u))throw new RangeError(\"'byteLength' must be an integer.\");if(u<=0||o+u>r.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${r.byteLength-o}].`);if(\"object\"==typeof i&&null!==i)s=i;else if(void 0!==i)throw new TypeError(\"'options' must be an object.\")}else if(void 0!==n)throw new TypeError(\"'byteLength' must be a number.\")}else if(void 0!==t)throw new TypeError(\"'options' must be an object.\");a=new Uint8Array(r,o,u);}}const u=(s.executionProviders||[]).map((e=>\"string\"==typeof e?e:e.name)),l=await(async e=>{const t=0===e.length?o:e,n=[];for(const e of t){const t=r[e];if(t){if(t.initialized)return t.backend;if(t.aborted)continue;const r=!!t.initPromise;try{return r||(t.initPromise=t.backend.init()),await t.initPromise,t.initialized=!0,t.backend}catch(o){r||n.push({name:e,err:o}),t.aborted=!0;}finally{delete t.initPromise;}}}throw new Error(`no available backend found. ERR: ${n.map((e=>`[${e.name}] ${e.err}`)).join(\", \")}`)})(u),c=await l.createSessionHandler(a,s);return new d(c)}startProfiling(){this.handler.startProfiling();}endProfiling(){this.handler.endProfiling();}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}}const f=d;},5716:(e,t,n)=>{t.R=void 0;const r=n(6027),o=n(1723);t.R=new class{async init(){}async createSessionHandler(e,t){const n=new r.Session(t);return await n.loadModel(e),new o.OnnxjsSessionHandler(n)}};},2818:(e,t,n)=>{t.c8=t.rX=void 0;const r=n(8453),o=n(5381),i=n(9544),a=n(6640);t.rX=()=>{if((\"number\"!=typeof r.env.wasm.initTimeout||r.env.wasm.initTimeout<0)&&(r.env.wasm.initTimeout=0),\"boolean\"!=typeof r.env.wasm.simd&&(r.env.wasm.simd=!0),\"boolean\"!=typeof r.env.wasm.proxy&&(r.env.wasm.proxy=!1),\"number\"!=typeof r.env.wasm.numThreads||!Number.isInteger(r.env.wasm.numThreads)||r.env.wasm.numThreads<=0){const e=\"undefined\"==typeof navigator?(0, o.cpus)().length:navigator.hardwareConcurrency;r.env.wasm.numThreads=Math.min(4,Math.ceil((e||1)/2));}},t.c8=new class{async init(){(0, t.rX)(),await(0, i.initWasm)();}async createSessionHandler(e,t){const n=new a.OnnxruntimeWebAssemblySessionHandler;return await n.loadModel(e,t),Promise.resolve(n)}};},1057:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!(\"get\"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o);}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n];}),o=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n);};Object.defineProperty(t,\"__esModule\",{value:!0}),o(n(8453),t);const i=n(8453);{const e=n(5716).R;(0, i.registerBackend)(\"webgl\",e,-10);}{const e=n(2818).c8;(0, i.registerBackend)(\"cpu\",e,10),(0, i.registerBackend)(\"wasm\",e,10),(0, i.registerBackend)(\"xnnpack\",e,9);}},4910:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createAttributeWithCacheKey=void 0;class n{constructor(e){Object.assign(this,e);}get cacheKey(){return this._cacheKey||(this._cacheKey=Object.getOwnPropertyNames(this).sort().map((e=>`${this[e]}`)).join(\";\")),this._cacheKey}}t.createAttributeWithCacheKey=e=>new n(e);},6874:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Attribute=void 0;const r=n(1446),o=n(1287),i=n(9240),a=n(7273);var s=o.onnxruntime.experimental.fbs;class u{constructor(e){if(this._attributes=new Map,null!=e){for(const t of e)t instanceof r.onnx.AttributeProto?this._attributes.set(t.name,[u.getValue(t),u.getType(t)]):t instanceof s.Attribute&&this._attributes.set(t.name(),[u.getValue(t),u.getType(t)]);if(this._attributes.sizei.Tensor.fromProto(e)));if(e instanceof s.Attribute)return n.map((e=>i.Tensor.fromOrtTensor(e)))}if(t===r.onnx.AttributeProto.AttributeType.STRING&&e instanceof r.onnx.AttributeProto){const e=n;return (0, a.decodeUtf8String)(e)}return t===r.onnx.AttributeProto.AttributeType.STRINGS&&e instanceof r.onnx.AttributeProto?n.map(a.decodeUtf8String):n}static getValueNoCheck(e){return e instanceof r.onnx.AttributeProto?this.getValueNoCheckFromOnnxFormat(e):this.getValueNoCheckFromOrtFormat(e)}static getValueNoCheckFromOnnxFormat(e){switch(e.type){case r.onnx.AttributeProto.AttributeType.FLOAT:return e.f;case r.onnx.AttributeProto.AttributeType.INT:return e.i;case r.onnx.AttributeProto.AttributeType.STRING:return e.s;case r.onnx.AttributeProto.AttributeType.TENSOR:return e.t;case r.onnx.AttributeProto.AttributeType.GRAPH:return e.g;case r.onnx.AttributeProto.AttributeType.FLOATS:return e.floats;case r.onnx.AttributeProto.AttributeType.INTS:return e.ints;case r.onnx.AttributeProto.AttributeType.STRINGS:return e.strings;case r.onnx.AttributeProto.AttributeType.TENSORS:return e.tensors;case r.onnx.AttributeProto.AttributeType.GRAPHS:return e.graphs;default:throw new Error(`unsupported attribute type: ${r.onnx.AttributeProto.AttributeType[e.type]}`)}}static getValueNoCheckFromOrtFormat(e){switch(e.type()){case s.AttributeType.FLOAT:return e.f();case s.AttributeType.INT:return e.i();case s.AttributeType.STRING:return e.s();case s.AttributeType.TENSOR:return e.t();case s.AttributeType.GRAPH:return e.g();case s.AttributeType.FLOATS:return e.floatsArray();case s.AttributeType.INTS:{const t=[];for(let n=0;n{Object.defineProperty(t,\"__esModule\",{value:!0}),t.resolveBackend=t.backend=void 0;const r=n(4418),o=new Map;async function i(e){const n=t.backend;if(void 0!==n[e]&&function(e){const t=e;return \"initialize\"in t&&\"function\"==typeof t.initialize&&\"createSessionHandler\"in t&&\"function\"==typeof t.createSessionHandler&&\"dispose\"in t&&\"function\"==typeof t.dispose}(n[e])){const t=n[e];let r=t.initialize();if(\"object\"==typeof r&&\"then\"in r&&(r=await r),r)return o.set(e,t),t}}t.backend={webgl:new r.WebGLBackend},t.resolveBackend=async function e(t){if(!t)return e([\"webgl\"]);{const e=\"string\"==typeof t?[t]:t;for(const t of e){const e=o.get(t);if(e)return e;const n=await i(t);if(n)return n}}throw new Error(\"no available backend to use\")};},4418:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WebGLBackend=void 0;const r=n(8453),o=n(1315),i=n(2171),a=n(3389);t.WebGLBackend=class{get contextId(){return r.env.webgl.contextId}set contextId(e){r.env.webgl.contextId=e;}get matmulMaxBatchSize(){return r.env.webgl.matmulMaxBatchSize}set matmulMaxBatchSize(e){r.env.webgl.matmulMaxBatchSize=e;}get textureCacheMode(){return r.env.webgl.textureCacheMode}set textureCacheMode(e){r.env.webgl.textureCacheMode=e;}get pack(){return r.env.webgl.pack}set pack(e){r.env.webgl.pack=e;}get async(){return r.env.webgl.async}set async(e){r.env.webgl.async=e;}initialize(){try{return this.glContext=(0,a.createWebGLContext)(this.contextId),\"number\"!=typeof this.matmulMaxBatchSize&&(this.matmulMaxBatchSize=16),\"string\"!=typeof this.textureCacheMode&&(this.textureCacheMode=\"full\"),\"boolean\"!=typeof this.pack&&(this.pack=!1),\"boolean\"!=typeof this.async&&(this.async=!1),o.Logger.setWithEnv(r.env),o.Logger.verbose(\"WebGLBackend\",`Created WebGLContext: ${typeof this.glContext} with matmulMaxBatchSize: ${this.matmulMaxBatchSize}; textureCacheMode: ${this.textureCacheMode}; pack: ${this.pack}; async: ${this.async}.`),!0}catch(e){return o.Logger.warning(\"WebGLBackend\",`Unable to initialize WebGLBackend. ${e}`),!1}}createSessionHandler(e){return new i.WebGLSessionHandler(this,e)}dispose(){this.glContext.dispose();}};},6859:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoordsGlslLib=void 0;const r=n(7273),o=n(1997),i=n(6757),a=n(7618),s=n(432);class u extends o.GlslLib{constructor(e){super(e);}getFunctions(){return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},this.offsetToCoords()),this.coordsToOffset()),this.toVec()),this.valueFrom()),this.getCommonUtilFuncs()),this.getInputsSamplingSnippets()),this.getOutputSamplingSnippet())}getCustomTypes(){return {}}offsetToCoords(){return {offsetToCoords:new o.GlslLibRoutine(\"\\n vec2 offsetToCoords(int offset, int width, int height) {\\n int t = offset / width;\\n int s = offset - t*width;\\n vec2 coords = (vec2(s,t) + vec2(0.5,0.5)) / vec2(width, height);\\n return coords;\\n }\\n \")}}coordsToOffset(){return {coordsToOffset:new o.GlslLibRoutine(\"\\n int coordsToOffset(vec2 coords, int width, int height) {\\n float s = coords.s * float(width);\\n float t = coords.t * float(height);\\n int offset = int(t) * width + int(s);\\n return offset;\\n }\\n \")}}getOutputSamplingSnippet(){const e=this.context.outputTextureLayout;return e.isPacked?this.getPackedOutputSamplingSnippet(e):this.getUnpackedOutputSamplingSnippet(e)}getPackedOutputSamplingSnippet(e){const t=e.unpackedShape,n=[e.width,e.height],r={},a=\"getOutputCoords\";switch(t.length){case 0:r[a]=this.getOutputScalarCoords();break;case 1:r[a]=this.getOutputPacked1DCoords(t,n);break;case 2:r[a]=this.getOutputPacked2DCoords(t,n);break;case 3:r[a]=this.getOutputPacked3DCoords(t,n);break;default:r[a]=this.getOutputPackedNDCoords(t,n);}const s=`\\n void setOutput(vec4 val) {\\n ${(0, i.getGlsl)(this.context.glContext.version).output} = val;\\n }\\n `;return r.floatTextureSetRGBA=new o.GlslLibRoutine(s),r}getUnpackedOutputSamplingSnippet(e){const t=e.unpackedShape,n=[e.width,e.height],r={},a=\"getOutputCoords\";switch(t.length){case 0:r[a]=this.getOutputScalarCoords();break;case 1:r[a]=this.getOutputUnpacked1DCoords(t,n);break;case 2:r[a]=this.getOutputUnpacked2DCoords(t,n);break;case 3:r[a]=this.getOutputUnpacked3DCoords(t,n);break;case 4:r[a]=this.getOutputUnpacked4DCoords(t,n);break;case 5:r[a]=this.getOutputUnpacked5DCoords(t,n);break;case 6:r[a]=this.getOutputUnpacked6DCoords(t,n);break;default:throw new Error(`Unsupported output dimensionality: ${t.length}`)}const s=`\\n void setOutput(float val) {\\n ${(0, i.getGlsl)(this.context.glContext.version).output} = vec4(val, 0, 0, 0);\\n }\\n `;return r.floatTextureSetR=new o.GlslLibRoutine(s),r}getOutputScalarCoords(){return new o.GlslLibRoutine(\"\\n int getOutputCoords() {\\n return 0;\\n }\\n \")}getOutputPacked1DCoords(e,t){const n=t;let r=\"\";return 1===n[0]?(r=`\\n int getOutputCoords() {\\n return 2 * int(TexCoords.y * ${n[1]}.0);\\n }\\n `,new o.GlslLibRoutine(r)):1===n[1]?(r=`\\n int getOutputCoords() {\\n return 2 * int(TexCoords.x * ${n[0]}.0);\\n }\\n `,new o.GlslLibRoutine(r)):(r=`\\n int getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${n[0]}, ${n[1]}));\\n return 2 * (resTexRC.y * ${n[0]} + resTexRC.x);\\n }\\n `,new o.GlslLibRoutine(r))}getOutputPacked2DCoords(e,t){let n=\"\";if(r.ArrayUtil.arraysEqual(e,t))return n=`\\n ivec2 getOutputCoords() {\\n return 2 * ivec2(TexCoords.xy * vec2(${t[0]}, ${t[1]}));\\n }\\n `,new o.GlslLibRoutine(n);const i=t,a=Math.ceil(e[1]/2);return n=`\\n ivec2 getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${i[0]}, ${i[1]}));\\n\\n int index = resTexRC.y * ${i[0]} + resTexRC.x;\\n\\n // reverse r and c order for packed texture\\n int r = imod(index, ${a}) * 2;\\n int c = 2 * (index / ${a});\\n\\n return ivec2(r, c);\\n }\\n `,new o.GlslLibRoutine(n)}getOutputPacked3DCoords(e,t){const n=[t[0],t[1]],r=Math.ceil(e[2]/2),i=r*Math.ceil(e[1]/2),a=`\\n ivec3 getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${n[0]}, ${n[1]}));\\n int index = resTexRC.y * ${n[0]} + resTexRC.x;\\n\\n int b = index / ${i};\\n index -= b * ${i};\\n\\n // reverse r and c order for packed texture\\n int r = imod(index, ${r}) * 2;\\n int c = 2 * (index / ${r});\\n\\n return ivec3(b, r, c);\\n }\\n `;return new o.GlslLibRoutine(a)}getOutputPackedNDCoords(e,t){const n=[t[0],t[1]],r=Math.ceil(e[e.length-1]/2),i=r*Math.ceil(e[e.length-2]/2);let a=i,s=\"\",u=\"b, r, c\";for(let t=2;t=0;--t)i[t]=i[t+1]*e[t+1];const a=[\"r\",\"c\",\"d\"],s=i.map(((e,t)=>`int ${a[t]} = index / ${e}; ${t===i.length-1?`int ${a[t+1]} = index - ${a[t]} * ${e}`:`index -= ${a[t]} * ${e}`};`)).join(\"\");return n=`\\n ivec3 getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${t[0]}, ${t[1]}));\\n int index = resTexRC.y * ${t[0]} + resTexRC.x;\\n ${s}\\n return ivec3(r, c, d);\\n }\\n `,new o.GlslLibRoutine(n)}getOutputUnpacked4DCoords(e,t){let n=\"\";const r=e.length;let i=null;r<2&&(i=[]),i=new Array(r-1),i[r-2]=e[r-1];for(let t=r-3;t>=0;--t)i[t]=i[t+1]*e[t+1];const a=[\"r\",\"c\",\"d\",\"d2\"],s=i.map(((e,t)=>`int ${a[t]} = index / ${e}; ${t===i.length-1?`int ${a[t+1]} = index - ${a[t]} * ${e}`:`index -= ${a[t]} * ${e}`};`)).join(\"\");return n=`\\n ivec4 getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${t[0]}, ${t[1]}));\\n int index = resTexRC.y * ${t[0]} + resTexRC.x;\\n ${s}\\n return ivec4(r, c, d, d2);\\n }\\n `,new o.GlslLibRoutine(n)}getOutputUnpacked5DCoords(e,t){let n=\"\";const r=e.length;let i=null;r<2&&(i=[]),i=new Array(r-1),i[r-2]=e[r-1];for(let t=r-3;t>=0;--t)i[t]=i[t+1]*e[t+1];const a=[\"r\",\"c\",\"d\",\"d2\",\"d3\"],s=i.map(((e,t)=>`int ${a[t]} = index / ${e}; ${t===i.length-1?`int ${a[t+1]} = index - ${a[t]} * ${e}`:`index -= ${a[t]} * ${e}`};`)).join(\"\");return n=`\\n ivec5 getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${t[0]}, ${t[1]}));\\n int index = resTexRC.y * ${t[0]} + resTexRC.x;\\n ${s}\\n return ivec5(r, c, d, d2, d3);\\n }\\n `,new o.GlslLibRoutine(n)}getOutputUnpacked6DCoords(e,t){let n=\"\";const r=e.length;let i=null;r<2&&(i=[]),i=new Array(r-1),i[r-2]=e[r-1];for(let t=r-3;t>=0;--t)i[t]=i[t+1]*e[t+1];const a=[\"r\",\"c\",\"d\",\"d2\",\"d3\",\"d4\"],s=i.map(((e,t)=>`int ${a[t]} = index / ${e}; ${t===i.length-1?`int ${a[t+1]} = index - ${a[t]} * ${e}`:`index -= ${a[t]} * ${e}`};`)).join(\"\");return n=`\\n ivec6 getOutputCoords() {\\n ivec2 resTexRC = ivec2(TexCoords.xy *\\n vec2(${t[0]}, ${t[1]}));\\n int index = resTexRC.y * ${t[0]} + resTexRC.x;\\n ${s}\\n return ivec6(r, c, d, d2, d3, d4);\\n }\\n `,new o.GlslLibRoutine(n)}getCommonUtilFuncs(){const e={};let t=\"uvFromFlat\";e[t]=new o.GlslLibRoutine(\"\\n vec2 uvFromFlat(int texNumR, int texNumC, int index) {\\n int texC = index / texNumR;\\n int texR = index - texC * texNumR;\\n // TODO: swap texR, texC order in following function so row is corresponding to u and column is corresponding to\\n // v.\\n return (vec2(texR, texC) + halfCR) / vec2(texNumR, texNumC);\\n }\\n \"),t=\"packedUVfrom1D\",e[t]=new o.GlslLibRoutine(\"\\n vec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\\n int texelIndex = index / 2;\\n int texR = texelIndex / texNumC;\\n int texC = texelIndex - texR * texNumC;\\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\\n }\\n \"),t=\"packedUVfrom2D\",e[t]=new o.GlslLibRoutine(\"\\n vec2 packedUVfrom2D(int texNumR, int texNumC, int texelsInLogicalRow, int row, int col) {\\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\\n int texR = texelIndex / texNumC;\\n int texC = texelIndex - texR * texNumC;\\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\\n }\\n \"),t=\"packedUVfrom3D\",e[t]=new o.GlslLibRoutine(\"\\n vec2 packedUVfrom3D(int texNumR, int texNumC,\\n int texelsInBatch, int texelsInLogicalRow, int b,\\n int row, int col) {\\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\\n int texR = index / texNumC;\\n int texC = index - texR * texNumC;\\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\\n }\\n \"),t=\"sampleTexture\";const n=(0, i.getGlsl)(this.context.glContext.version);return e[t]=new o.GlslLibRoutine(`\\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\\n return ${n.texture2D}(textureSampler, uv).r;\\n }`),e}getInputsSamplingSnippets(){const e={},t=this.context.outputTextureLayout;return this.context.programInfo.inputNames.forEach(((n,r)=>{const o=this.context.inputTextureLayouts[r],i=(0, s.generateShaderFuncNameFromInputSamplerName)(n);o.isPacked?e[i]=this.getPackedSamplerFromInput(i,n,o):e[i]=this.getUnpackedSamplerFromInput(i,n,o);const a=(0, s.generateShaderFuncNameFromInputSamplerNameAtOutCoords)(n);o.unpackedShape.length<=t.unpackedShape.length&&(o.isPacked?e[a]=this.getPackedSamplerAtOutputCoords(a,o,t,n):e[a]=this.getUnpackedSamplerAtOutputCoords(a,o,t,n));})),e}getPackedSamplerAtOutputCoords(e,t,n,i){const a=t.unpackedShape,u=n.unpackedShape,l=i,c=(0, s.generateShaderFuncNameFromInputSamplerName)(l),p=a.length,d=u.length,f=r.BroadcastUtil.getBroadcastDims(a,u),h=(0, s.getCoordsDataType)(d),g=d-p;let m;const b=(0, s.getGlChannels)();m=0===p?\"\":d<2&&f.length>=1?\"coords = 0;\":f.map((e=>`coords.${b[e+g]} = 0;`)).join(\"\\n\");let y=\"\";y=d<2&&p>0?\"coords\":a.map(((e,t)=>`coords.${b[t+g]}`)).join(\", \");let w=\"return outputValue;\";const _=1===r.ShapeUtil.size(a),v=1===r.ShapeUtil.size(u);if(1!==p||_||v){if(_&&!v)w=1===d?\"\\n return vec4(outputValue.x, outputValue.x, 0., 0.);\\n \":\"\\n return vec4(outputValue.x);\\n \";else if(f.length){const e=p-2,t=p-1;f.indexOf(e)>-1&&f.indexOf(t)>-1?w=\"return vec4(outputValue.x);\":f.indexOf(e)>-1?w=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":f.indexOf(t)>-1&&(w=\"return vec4(outputValue.xx, outputValue.zz);\");}}else w=\"\\n return vec4(outputValue.xy, outputValue.xy);\\n \";const x=`\\n vec4 ${e}() {\\n ${h} coords = getOutputCoords();\\n \\n int lastDim = coords.${b[d-1]};\\n coords.${b[d-1]} = coords.${b[d-2]};\\n coords.${b[d-2]} = lastDim;\\n \\n ${m}\\n vec4 outputValue = ${c}(${y});\\n ${w}\\n }\\n `;return new o.GlslLibRoutine(x,[\"coordinates.getOutputCoords\"])}getUnpackedSamplerAtOutputCoords(e,t,n,i){const a=[n.width,n.height],u=[t.width,t.height],l=t.unpackedShape.length,c=n.unpackedShape.length,p=t.unpackedShape,d=n.unpackedShape,f=(0, s.generateShaderFuncNameFromInputSamplerName)(i);if(l===c&&r.ArrayUtil.arraysEqual(u,a)){const t=`\\n float ${e}() {\\n return sampleTexture(${i}, TexCoords);\\n }\\n `;return new o.GlslLibRoutine(t,[\"coordinates.sampleTexture\"])}const h=(0, s.getCoordsDataType)(c),g=r.BroadcastUtil.getBroadcastDims(p,d),m=c-l;let b;const y=(0, s.getGlChannels)();b=0===l?\"\":c<2&&g.length>=1?\"coords = 0;\":g.map((e=>`coords.${y[e+m]} = 0;`)).join(\"\\n\");let w=\"\";w=c<2&&l>0?\"coords\":t.unpackedShape.map(((e,t)=>`coords.${y[t+m]}`)).join(\", \");const _=`\\n float ${e}() {\\n ${h} coords = getOutputCoords();\\n ${b}\\n return ${f}(${w});\\n }\\n `;return new o.GlslLibRoutine(_,[\"coordinates.getOutputCoords\"])}getPackedSamplerFromInput(e,t,n){switch(n.unpackedShape.length){case 0:return this.getPackedSamplerScalar(e,t);case 1:return this.getPackedSampler1D(e,t,n);case 2:return this.getPackedSampler2D(e,t,n);case 3:return this.getPackedSampler3D(e,t,n);default:return this.getPackedSamplerND(e,t,n)}}getUnpackedSamplerFromInput(e,t,n){const r=n.unpackedShape;switch(r.length){case 0:return this.getUnpackedSamplerScalar(e,t,n);case 1:return this.getUnpackedSampler1D(e,t,n);case 2:return this.getUnpackedSampler2D(e,t,n);case 3:return this.getUnpackedSampler3D(e,t,n);case 4:return this.getUnpackedSampler4D(e,t,n);case 5:return this.getUnpackedSampler5D(e,t,n);case 6:return this.getUnpackedSampler6D(e,t,n);default:throw new Error(`Unsupported dimension ${r.length}-D`)}}getPackedSamplerScalar(e,t){const n=`\\n vec4 ${e}() {\\n return ${(0, i.getGlsl)(this.context.glContext.version).texture2D}(${t}, halfCR);\\n }\\n `;return new o.GlslLibRoutine(n)}getPackedSampler1D(e,t,n){const r=[n.width,n.height],a=[r[1],r[0]],s=(0, i.getGlsl)(this.context.glContext.version),u=`vec4 ${e}(int index) {\\n vec2 uv = packedUVfrom1D(\\n ${a[0]}, ${a[1]}, index);\\n return ${s.texture2D}(${t}, uv);\\n }`;return new o.GlslLibRoutine(u,[\"coordinates.packedUVfrom1D\"])}getPackedSampler2D(e,t,n){const a=n.unpackedShape,s=[n.width,n.height],u=(0, i.getGlsl)(this.context.glContext.version),l=s[0],c=s[1];if(null!=s&&r.ArrayUtil.arraysEqual(a,s)){const n=`vec4 ${e}(int row, int col) {\\n vec2 uv = (vec2(col, row) + halfCR) / vec2(${c}.0, ${l}.0);\\n return ${u.texture2D}(${t}, uv);\\n }`;return new o.GlslLibRoutine(n)}const p=s,d=Math.ceil(a[1]/2),f=`vec4 ${e}(int row, int col) {\\n vec2 uv = packedUVfrom2D(${p[1]}, ${p[0]}, ${d}, row, col);\\n return ${u.texture2D}(${t}, uv);\\n }`;return new o.GlslLibRoutine(f,[\"coordinates.packedUVfrom2D\"])}getPackedSampler3D(e,t,n){const r=n.unpackedShape,a=[n.width,n.height],u=[a[0],a[1]],l=(0, i.getGlsl)(this.context.glContext.version);if(1===r[0]){const i=r.slice(1),a=[1,2],u=(0, s.squeezeInputShape)(r,i),l=[\"b\",\"row\",\"col\"],c=JSON.parse(JSON.stringify(n));c.unpackedShape=u;const p=this.getPackedSamplerFromInput(e,t,c),d=`${p.routineBody}\\n vec4 ${e}(int b, int row, int col) {\\n return ${e}(${(0, s.getSqueezedParams)(l,a)});\\n } `;return new o.GlslLibRoutine(d,p.dependencies)}const c=u[0],p=u[1],d=Math.ceil(r[2]/2),f=`vec4 ${e}(int b, int row, int col) {\\n vec2 uv = packedUVfrom3D(\\n ${p}, ${c}, ${d*Math.ceil(r[1]/2)}, ${d}, b, row, col);\\n return ${l.texture2D}(${t}, uv);}`;return new o.GlslLibRoutine(f,[\"coordinates.packedUVfrom3D\"])}getPackedSamplerND(e,t,n){const r=n.unpackedShape,a=r.length,s=[n.width,n.height],u=(0, i.getGlsl)(this.context.glContext.version),l=[s[0],s[1]],c=l[1],p=l[0],d=Math.ceil(r[a-1]/2);let f=d*Math.ceil(r[a-2]/2),h=\"int b, int row, int col\",g=`b * ${f} + (row / 2) * ${d} + (col / 2)`;for(let e=2;e{const r=this.context.inputTextureLayouts[n],i=(r.unpackedShape.length>0?r.unpackedShape:r.shape).length;let a=`_${t}`;e[a]=new o.GlslLibRoutine(this.getValueFromSingle(t,i,r.width,r.height,!1),[`shapeUtils.indicesToOffset${a}`,\"coordinates.offsetToCoords\",\"fragcolor.getColorAsFloat\"]),a+=\"_T\",e[a]=new o.GlslLibRoutine(this.getValueFromSingle(t,i,r.width,r.height,!0),[`shapeUtils.indicesToOffset${a}`,\"coordinates.offsetToCoords\",\"fragcolor.getColorAsFloat\"]);})),e}getValueFromSingle(e,t,n,r,o){let a=`_${e}`;return o&&(a+=\"_T\"),`\\n float ${a}(int m[${t}]) {\\n int offset = indicesToOffset${a}(m);\\n vec2 coords = offsetToCoords(offset, ${n}, ${r});\\n float value = getColorAsFloat(${(0, i.getGlsl)(this.context.glContext.version).texture2D}(${e}, coords));\\n return value;\\n }\\n `}getPackedValueFrom(e,t,n,r,o){let a=`_${e}_Pack`;return o&&(a+=\"_T\"),`\\n vec4 ${a}(int m[${t}]) {\\n int offset = indicesToOffset_${e}(m);\\n vec2 coords = offsetToCoords(offset, ${n}, ${r});\\n return ${(0, i.getGlsl)(this.context.glContext.version).texture2D}(${e}, coords);\\n }\\n `}}t.CoordsGlslLib=u;},1997:(e,t)=>{var n;Object.defineProperty(t,\"__esModule\",{value:!0}),t.TopologicalSortGlslRoutines=t.GlslLibRoutineNode=t.GlslLibRoutine=t.GlslLib=t.GlslContext=t.FunctionType=void 0,(n=t.FunctionType||(t.FunctionType={}))[n.ValueBased=0]=\"ValueBased\",n[n.Positional=1]=\"Positional\",t.GlslContext=class{constructor(e,t,n,r){this.glContext=e,this.programInfo=t,this.inputTextureLayouts=n,this.outputTextureLayout=r;}},t.GlslLib=class{constructor(e){this.context=e;}},t.GlslLibRoutine=class{constructor(e,t){this.routineBody=e,this.dependencies=t;}},t.GlslLibRoutineNode=class{constructor(e,t,n){this.name=e,this.dependencies=n||[],t&&(this.routineBody=t);}addDependency(e){e&&this.dependencies.push(e);}},t.TopologicalSortGlslRoutines=class{static returnOrderedNodes(e){if(!e||0===e.length)return [];if(1===e.length)return e;const t=new Set,n=new Set,r=new Array;return this.createOrderedNodes(e,t,n,r),r}static createOrderedNodes(e,t,n,r){for(let o=0;o0)for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.EncodingGlslLib=void 0;const r=n(1997);class o extends r.GlslLib{constructor(e){super(e);}getFunctions(){return Object.assign(Object.assign({},this.encodeFloat32()),this.decodeFloat32())}getCustomTypes(){return {}}encodeFloat32(){return {encode:new r.GlslLibRoutine(\"highp vec4 encode(highp float f) {\\n return vec4(f, 0.0, 0.0, 0.0);\\n }\\n \")}}decodeFloat32(){return {decode:new r.GlslLibRoutine(\"highp float decode(highp vec4 rgba) {\\n return rgba.r;\\n }\\n \")}}encodeUint8(){const e=o.isLittleEndian()?\"rgba.rgba=rgba.abgr;\":\"\";return {encode:new r.GlslLibRoutine(`\\n highp vec4 encode(highp float f) {\\n highp float F = abs(f);\\n highp float Sign = step(0.0,-f);\\n highp float Exponent = floor(log2(F));\\n highp float Mantissa = (exp2(- Exponent) * F);\\n Exponent = floor(log2(F) + 127.0) + floor(log2(Mantissa));\\n highp vec4 rgba;\\n rgba[0] = 128.0 * Sign + floor(Exponent*exp2(-1.0));\\n rgba[1] = 128.0 * mod(Exponent,2.0) + mod(floor(Mantissa*128.0),128.0);\\n rgba[2] = floor(mod(floor(Mantissa*exp2(23.0 -8.0)),exp2(8.0)));\\n rgba[3] = floor(exp2(23.0)*mod(Mantissa,exp2(-15.0)));\\n ${e}\\n rgba = rgba / 255.0; // values need to be normalized to [0,1]\\n return rgba;\\n }\\n `)}}decodeUint8(){const e=o.isLittleEndian()?\"rgba.rgba=rgba.abgr;\":\"\";return {decode:new r.GlslLibRoutine(`\\n highp float decode(highp vec4 rgba) {\\n rgba = rgba * 255.0; // values need to be de-normalized from [0,1] to [0,255]\\n ${e}\\n highp float Sign = 1.0 - step(128.0,rgba[0])*2.0;\\n highp float Exponent = 2.0 * mod(rgba[0],128.0) + step(128.0,rgba[1]) - 127.0;\\n highp float Mantissa = mod(rgba[1],128.0)*65536.0 + rgba[2]*256.0 +rgba[3] + float(0x800000);\\n highp float Result = Sign * exp2(Exponent) * (Mantissa * exp2(-23.0 ));\\n return Result;\\n }\\n `)}}static isLittleEndian(){const e=new ArrayBuffer(4),t=new Uint32Array(e),n=new Uint8Array(e);if(t[0]=3735928559,239===n[0])return !0;if(222===n[0])return !1;throw new Error(\"unknown endianness\")}}t.EncodingGlslLib=o;},2691:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.FragColorGlslLib=void 0;const r=n(1997),o=n(6757);class i extends r.GlslLib{constructor(e){super(e);}getFunctions(){return Object.assign(Object.assign({},this.setFragColor()),this.getColorAsFloat())}getCustomTypes(){return {}}setFragColor(){const e=(0, o.getGlsl)(this.context.glContext.version);return {setFragColor:new r.GlslLibRoutine(`\\n void setFragColor(float value) {\\n ${e.output} = encode(value);\\n }\\n `,[\"encoding.encode\"])}}getColorAsFloat(){return {getColorAsFloat:new r.GlslLibRoutine(\"\\n float getColorAsFloat(vec4 color) {\\n return decode(color);\\n }\\n \",[\"encoding.decode\"])}}}t.FragColorGlslLib=i;},3878:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.replaceInlines=void 0;const n=/@inline[\\s\\n\\r]+(\\w+)[\\s\\n\\r]+([0-9a-zA-Z_]+)\\s*\\(([^)]*)\\)\\s*{(([^}]|[\\n\\r])*)}/gm;t.replaceInlines=function(e){const t={};let r;for(;null!==(r=n.exec(e));){const e=r[3].split(\",\").map((e=>{const t=e.trim().split(\" \");return t&&2===t.length?{type:t[0],name:t[1]}:null})).filter((e=>null!==e));t[r[2]]={params:e,body:r[4]};}for(const n in t){const o=\"(\\\\w+)?\\\\s+([_0-9a-zA-Z]+)\\\\s+=\\\\s+__FUNC__\\\\((.*)\\\\)\\\\s*;\".replace(\"__FUNC__\",n),i=new RegExp(o,\"gm\");for(;null!==(r=i.exec(e));){const o=r[1],i=r[2],a=r[3].split(\",\"),s=o?`${o} ${i};`:\"\";let u=t[n].body,l=\"\";t[n].params.forEach(((e,t)=>{e&&(l+=`${e.type} ${e.name} = ${a[t]};\\n`);})),u=`${l}\\n ${u}`,u=u.replace(\"return\",`${i} = `);const c=`\\n ${s}\\n {\\n ${u}\\n }\\n `;e=e.replace(r[0],c);}}return e.replace(n,\"\")};},8897:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.GlslPreprocessor=void 0;const r=n(1997),o=n(3878),i=n(1248),a=n(6757);t.GlslPreprocessor=class{constructor(e,t,n,o){this.libs={},this.glslLibRoutineDependencyGraph={},this.context=new r.GlslContext(e,t,n,o),Object.keys(i.glslRegistry).forEach((e=>{const t=new i.glslRegistry[e](this.context);this.libs[e]=t;}));const a=this.glslLibRoutineDependencyGraph;for(const e in this.libs){const t=this.libs[e].getFunctions();for(const n in t){const o=e+\".\"+n;let i;a[o]?(i=a[o],i.routineBody=t[n].routineBody):(i=new r.GlslLibRoutineNode(o,t[n].routineBody),a[o]=i);const s=t[n].dependencies;if(s)for(let e=0;e{const r=n.split(\".\")[1];-1!==e.indexOf(r)&&t.push(this.glslLibRoutineDependencyGraph[n]);})),r.TopologicalSortGlslRoutines.returnOrderedNodes(t)}getUniforms(e,t){const n=[];if(e)for(const t of e)n.push(`uniform sampler2D ${t};`);if(t)for(const e of t)n.push(`uniform ${e.type} ${e.name}${e.arrayLength?`[${e.arrayLength}]`:\"\"};`);return n.join(\"\\n\")}};},1248:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.glslRegistry=void 0;const r=n(6859),o=n(1371),i=n(2691),a=n(9183),s=n(9314);t.glslRegistry={encoding:o.EncodingGlslLib,fragcolor:i.FragColorGlslLib,vec:s.VecGlslLib,shapeUtils:a.ShapeUtilsGlslLib,coordinates:r.CoordsGlslLib};},9183:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ShapeUtilsGlslLib=void 0;const r=n(1997);class o extends r.GlslLib{constructor(e){super(e);}getFunctions(){return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},this.bcastIndex()),this.bcastMatmulIndex()),this.offsetToIndices()),this.indicesToOffset()),this.incrementIndices())}getCustomTypes(){return {}}bcastIndex(){const e=this.context.outputTextureLayout.shape.length,t={};return this.context.programInfo.inputNames.forEach(((n,o)=>{const i=this.context.inputTextureLayouts[o].unpackedShape;if(i.length<=e){const o=i.length,a=e-o,s=`bcastIndices_${n}`;let u=\"\";for(let e=0;e{const i=this.context.inputTextureLayouts[o].shape;if(!(i.length<2||i.length>e)){const o=i.length,a=e-o,s=`bcastMatmulIndices_${n}`;let u=\"\";for(let e=0;e{const i=this.context.inputTextureLayouts[n].shape,a=this.context.inputTextureLayouts[n].strides,s=i.length;let u=`indicesToOffset_${t}`;e[u]=new r.GlslLibRoutine(o.indexToOffsetSingle(u,s,a)),u=`indicesToOffset_${t}_T`,e[u]=new r.GlslLibRoutine(o.indexToOffsetSingle(u,s,a.slice().reverse()));})),e}static indexToOffsetSingle(e,t,n){let r=\"\";for(let e=t-1;e>=0;--e)r+=`\\n offset += indices[${e}] * ${n[e]};\\n `;return `\\n int ${e}(int indices[${t}]) {\\n int offset = 0;\\n ${r}\\n return offset;\\n }\\n `}offsetToIndices(){const e={};return this.context.programInfo.inputNames.forEach(((t,n)=>{const i=this.context.inputTextureLayouts[n].shape,a=this.context.inputTextureLayouts[n].strides,s=i.length;let u=`offsetToIndices_${t}`;e[u]=new r.GlslLibRoutine(o.offsetToIndicesSingle(u,s,a)),u=`offsetToIndices_${t}_T`,e[u]=new r.GlslLibRoutine(o.offsetToIndicesSingle(u,s,a.slice().reverse()));})),e}static offsetToIndicesSingle(e,t,n){const r=[];for(let e=0;e{const o=this.context.inputTextureLayouts[n].shape,i=o.length,a=`incrementIndices_${t}`;let s=\"\";for(let e=0;e= 0; --i) {\\n if(i > axis) continue;\\n indices[i] += 1;\\n if(indices[i] < shape[i]) {\\n break;\\n }\\n indices[i] = 0;\\n }\\n }\\n `;e[a]=new r.GlslLibRoutine(u);})),e}}t.ShapeUtilsGlslLib=o;},6757:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.getDefaultFragShaderMain=t.getFragShaderPreamble=t.getVertexShaderSource=t.getGlsl=void 0;const n={version:\"\",attribute:\"attribute\",varyingVertex:\"varying\",varyingFrag:\"varying\",texture2D:\"texture2D\",output:\"gl_FragColor\",outputDeclaration:\"\"},r={version:\"#version 300 es\",attribute:\"in\",varyingVertex:\"out\",varyingFrag:\"in\",texture2D:\"texture\",output:\"outputColor\",outputDeclaration:\"out vec4 outputColor;\"};function o(e){return 1===e?n:r}t.getGlsl=o,t.getVertexShaderSource=function(e){const t=o(e);return `${t.version}\\n precision highp float;\\n ${t.attribute} vec3 position;\\n ${t.attribute} vec2 textureCoord;\\n\\n ${t.varyingVertex} vec2 TexCoords;\\n\\n void main()\\n {\\n gl_Position = vec4(position, 1.0);\\n TexCoords = textureCoord;\\n }`},t.getFragShaderPreamble=function(e){const t=o(e);return `${t.version}\\n precision highp float;\\n precision highp int;\\n precision highp sampler2D;\\n ${t.varyingFrag} vec2 TexCoords;\\n ${t.outputDeclaration}\\n const vec2 halfCR = vec2(0.5, 0.5);\\n\\n // Custom vector types to handle higher dimenalities.\\n struct ivec5\\n {\\n int x;\\n int y;\\n int z;\\n int w;\\n int u;\\n };\\n\\n struct ivec6\\n {\\n int x;\\n int y;\\n int z;\\n int w;\\n int u;\\n int v;\\n };\\n\\n int imod(int x, int y) {\\n return x - y * (x / y);\\n }\\n\\n `},t.getDefaultFragShaderMain=function(e,t){return `\\n void main() {\\n int indices[${t}];\\n toVec(TexCoords, indices);\\n vec4 result = vec4(process(indices));\\n ${o(e).output} = result;\\n }\\n `};},9314:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.VecGlslLib=void 0;const r=n(1997);class o extends r.GlslLib{constructor(e){super(e);}getCustomTypes(){return {}}getFunctions(){return Object.assign(Object.assign(Object.assign(Object.assign({},this.binaryVecFunctions()),this.copyVec()),this.setVecItem()),this.getVecItem())}binaryVecFunctions(){const e=this.context.outputTextureLayout.shape.length,t={add:\"+=\",sub:\"-=\",mul:\"*=\",div:\"/=\"},n={};for(const o in t){const i=`${o}Vec`;let a=\"\";for(let n=0;n{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WebGLInferenceHandler=void 0;const r=n(1315),o=n(9240),i=n(7273),a=n(9),s=n(7379),u=n(2488),l=n(540),c=n(3314),p=n(5639);t.WebGLInferenceHandler=class{constructor(e){this.session=e,this.packedTextureDataCache=new Map,this.unpackedTextureDataCache=new Map;}calculateTextureWidthAndHeight(e,t){return (0, c.calculateTextureWidthAndHeight)(this.session.layoutStrategy,e,t)}executeProgram(e,t){if(t.length{const n=t.map((e=>`${e.unpackedShape.join(\",\")};${e.width}x${e.height}`)).join(\"_\");let r=e.name;return e.cacheHint&&(r+=\"[\"+e.cacheHint+\"]\"),r+=\":\"+n,r})(e,n);let o=this.session.programManager.getArtifact(r);const i=o?o.programInfo:\"function\"==typeof e.get?e.get():e,a=(0, c.createTextureLayoutFromTextureType)(this.session.layoutStrategy,i.output.dims,i.output.textureType),s=this.createTextureData(a,i.output.type);return o||(o=this.session.programManager.build(i,n,s),this.session.programManager.setArtifact(r,o)),this.runProgram(o,n,s),s}run(e,t){return this.executeProgram(e,t).tensor}runProgram(e,t,n){for(let n=0;nthis.readTexture(a)),(async e=>this.readTextureAsync(a)),void 0,i),texture:n});return this.setTextureData(a.tensor.dataId,a,e.isPacked),a}getTextureData(e,t=!1){return this.session.isInitializer(e)?this.session.getTextureData(e,t):t?this.packedTextureDataCache.get(e):this.unpackedTextureDataCache.get(e)}setTextureData(e,t,n=!1){this.session.isInitializer(e)?this.session.setTextureData(e,t,n):(n?this.packedTextureDataCache:this.unpackedTextureDataCache).set(e,t);}isTextureLayoutCached(e,t=!1){return !!this.getTextureData(e.dataId,t)}dispose(){this.session.textureManager.clearActiveTextures(),this.packedTextureDataCache.forEach((e=>this.session.textureManager.releaseTexture(e))),this.packedTextureDataCache=new Map,this.unpackedTextureDataCache.forEach((e=>this.session.textureManager.releaseTexture(e))),this.unpackedTextureDataCache=new Map;}readTexture(e){return e.isPacked?this.readTexture(this.unpack(e)):this.session.backend.glContext.isFloat32DownloadSupported?this.session.textureManager.readTexture(e,e.tensor.type,e.channels):this.session.textureManager.readUint8TextureAsFloat((0, u.encodeAsUint8)(this,e))}async readTextureAsync(e){return e.isPacked?this.readTextureAsync(this.unpack(e)):this.session.backend.glContext.isFloat32DownloadSupported?this.session.textureManager.readTextureAsync(e,e.tensor.type,e.channels):this.session.textureManager.readUint8TextureAsFloat((0, u.encodeAsUint8)(this,e))}pack(e){return this.executeProgram((0, a.createPackProgramInfoLoader)(this,e.tensor),[e.tensor])}unpack(e){return this.executeProgram((0, l.createUnpackProgramInfoLoader)(this,e.tensor),[e.tensor])}};},4110:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!(\"get\"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o);}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n];}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t});}:function(e,t){e.default=t;}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.WEBGL_OP_RESOLVE_RULES=void 0;const a=n(8817),s=i(n(5194)),u=n(4752),l=n(6668),c=n(9754),p=n(5042),d=n(6742),f=n(4125),h=n(6149),g=n(5378),m=n(6981),b=n(7413),y=n(7006),w=n(8276),_=n(5565),v=n(2834),x=n(1010),T=n(8126),S=n(2801),O=n(565),A=n(2444),E=n(815),I=n(564),$=n(5416),P=n(1240),D=n(5944),k=n(5707),C=i(n(9087)),R=n(7862),M=n(3980);t.WEBGL_OP_RESOLVE_RULES=[[\"Abs\",\"\",\"6+\",C.abs],[\"Acos\",\"\",\"7+\",C.acos],[\"Add\",\"\",\"7+\",s.add],[\"And\",\"\",\"7+\",s.and],[\"Asin\",\"\",\"7+\",C.asin],[\"Atan\",\"\",\"7+\",C.atan],[\"AveragePool\",\"\",\"7+\",v.averagePool,v.parseAveragePoolAttributes],[\"BatchNormalization\",\"\",\"7+\",a.batchNormalization,a.parseBatchNormalizationAttributes],[\"Cast\",\"\",\"6+\",u.cast,u.parseCastAttributes],[\"Ceil\",\"\",\"6+\",C.ceil],[\"Clip\",\"\",\"6-10\",C.clip,C.parseClipAttributes],[\"Clip\",\"\",\"11+\",C.clipV11],[\"Concat\",\"\",\"4+\",l.concat,l.parseConcatAttributes],[\"Conv\",\"\",\"1+\",c.conv,c.parseConvAttributes],[\"ConvTranspose\",\"\",\"1+\",p.convTranspose,p.parseConvTransposeAttributes],[\"Cos\",\"\",\"7+\",C.cos],[\"Div\",\"\",\"7+\",s.div],[\"Dropout\",\"\",\"7+\",C.identity],[\"DepthToSpace\",\"\",\"1+\",d.depthToSpace,d.parseDepthToSpaceAttributes],[\"Equal\",\"\",\"7+\",s.equal],[\"Elu\",\"\",\"6+\",C.elu,C.parseEluAttributes],[\"Exp\",\"\",\"6+\",C.exp],[\"Flatten\",\"\",\"1+\",f.flatten,f.parseFlattenAttributes],[\"Floor\",\"\",\"6+\",C.floor],[\"FusedConv\",\"com.microsoft\",\"1+\",c.conv,c.parseConvAttributes],[\"Gather\",\"\",\"1+\",h.gather,h.parseGatherAttributes],[\"Gemm\",\"\",\"7-10\",g.gemm,g.parseGemmAttributesV7],[\"Gemm\",\"\",\"11+\",g.gemm,g.parseGemmAttributesV11],[\"GlobalAveragePool\",\"\",\"1+\",v.globalAveragePool,v.parseGlobalAveragePoolAttributes],[\"GlobalMaxPool\",\"\",\"1+\",v.globalMaxPool],[\"Greater\",\"\",\"7+\",s.greater],[\"Identity\",\"\",\"1+\",C.identity],[\"ImageScaler\",\"\",\"1+\",m.imageScaler,m.parseImageScalerAttributes],[\"InstanceNormalization\",\"\",\"6+\",b.instanceNormalization,b.parseInstanceNormalizationAttributes],[\"LeakyRelu\",\"\",\"6+\",C.leakyRelu,C.parseLeakyReluAttributes],[\"Less\",\"\",\"7+\",s.less],[\"LRN\",\"\",\"1+\",y.lrn,y.parseLrnAttributes],[\"Log\",\"\",\"6+\",C.log],[\"MatMul\",\"\",\"1+\",w.matMul,w.parseMatMulAttributes],[\"MaxPool\",\"\",\"1+\",v.maxPool,v.parseMaxPoolAttributes],[\"Mul\",\"\",\"7+\",s.mul],[\"Neg\",\"\",\"6+\",C.neg],[\"Not\",\"\",\"1+\",C.not],[\"Or\",\"\",\"7+\",s.or],[\"Pad\",\"\",\"2-10\",_.padV2,_.parsePadAttributesV2],[\"Pad\",\"\",\"11+\",_.padV11,_.parsePadAttributesV11],[\"Pow\",\"\",\"7+\",s.pow],[\"PRelu\",\"\",\"7+\",s.pRelu],[\"ReduceLogSum\",\"\",\"1+\",x.reduceLogSum,x.parseReduceAttributes],[\"ReduceMax\",\"\",\"1+\",x.reduceMax,x.parseReduceAttributes],[\"ReduceMean\",\"\",\"1+\",x.reduceMean,x.parseReduceAttributes],[\"ReduceMin\",\"\",\"1+\",x.reduceMin,x.parseReduceAttributes],[\"ReduceProd\",\"\",\"1+\",x.reduceProd,x.parseReduceAttributes],[\"ReduceSum\",\"\",\"1-12\",x.reduceSum,x.parseReduceAttributes],[\"ReduceSumSquare\",\"\",\"1+\",x.reduceLogSumSquare,x.parseReduceAttributes],[\"Relu\",\"\",\"6+\",C.relu],[\"Reshape\",\"\",\"5+\",T.reshape],[\"Resize\",\"\",\"10\",S.resize,S.parseResizeAttributesV10],[\"Resize\",\"\",\"11+\",S.resize,S.parseResizeAttributesV11],[\"Shape\",\"\",\"1+\",O.shape],[\"Sigmoid\",\"\",\"6+\",C.sigmoid],[\"Sin\",\"\",\"7+\",C.sin],[\"Slice\",\"\",\"10+\",A.sliceV10],[\"Slice\",\"\",\"1-9\",A.slice,A.parseSliceAttributes],[\"Softmax\",\"\",\"1-12\",E.softmax,E.parseSoftmaxAttributes],[\"Softmax\",\"\",\"13+\",E.softmaxV13,E.parseSoftmaxAttributesV13],[\"Split\",\"\",\"2-12\",I.split,I.parseSplitAttributes],[\"Sqrt\",\"\",\"6+\",C.sqrt],[\"Squeeze\",\"\",\"1-12\",$.squeeze,$.parseSqueezeAttributes],[\"Squeeze\",\"\",\"13+\",$.squeezeV13],[\"Sub\",\"\",\"7+\",s.sub],[\"Sum\",\"\",\"6+\",P.sum],[\"Tan\",\"\",\"7+\",C.tan],[\"Tanh\",\"\",\"6+\",C.tanh],[\"Tile\",\"\",\"6+\",D.tile],[\"Transpose\",\"\",\"1+\",k.transpose,k.parseTransposeAttributes],[\"Upsample\",\"\",\"7-8\",M.upsample,M.parseUpsampleAttributesV7],[\"Upsample\",\"\",\"9\",M.upsample,M.parseUpsampleAttributesV9],[\"Unsqueeze\",\"\",\"1-12\",R.unsqueeze,R.parseUnsqueezeAttributes],[\"Unsqueeze\",\"\",\"13+\",R.unsqueezeV13],[\"Xor\",\"\",\"7+\",s.xor]];},8817:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseBatchNormalizationAttributes=t.batchNormalization=void 0;const r=n(4910),o=n(6757),i=n(5639),a={name:\"BatchNormalization\",inputNames:[\"A\",\"Scale\",\"B\",\"Mean\",\"Variance\"],inputTypes:[i.TextureType.unpacked,i.TextureType.unpacked,i.TextureType.unpacked,i.TextureType.unpacked,i.TextureType.unpacked]};t.batchNormalization=(e,t,n)=>(u(t),[e.run(Object.assign(Object.assign({},a),{cacheHint:n.cacheKey,get:()=>s(e,t,n)}),t)]),t.parseBatchNormalizationAttributes=e=>{const t=e.attributes.getFloat(\"epsilon\",1e-5),n=e.attributes.getFloat(\"momentum\",.9),o=e.attributes.getInt(\"spatial\",1);return (0, r.createAttributeWithCacheKey)({epsilon:t,momentum:n,spatial:o})};const s=(e,t,n)=>{const r=(0, o.getGlsl)(e.session.backend.glContext.version),s=t[0].dims.length,[u,l]=e.calculateTextureWidthAndHeight(t[1].dims,i.TextureType.unpacked),c=`\\n float process(int[${s}] indices) {\\n vec2 position = offsetToCoords(indices[1], ${u}, ${l});\\n float scale = getColorAsFloat(${r.texture2D}(Scale, position));\\n float mean = getColorAsFloat(${r.texture2D}(Mean, position));\\n float variance = getColorAsFloat(${r.texture2D}(Variance, position));\\n float b = getColorAsFloat(${r.texture2D}(B, position));\\n\\n return scale * ( (_A(indices) - mean) / sqrt(variance + float(${n.epsilon})) ) + b;\\n }`;return Object.assign(Object.assign({},a),{output:{dims:t[0].dims,type:t[0].type,textureType:i.TextureType.unpacked},shaderSource:c})},u=e=>{if(!e||5!==e.length)throw new Error(\"BatchNormalization requires 5 inputs.\");const t=e[0],n=e[1],r=e[2],o=e[3],i=e[4];if(t.dims.length<3||1!==n.dims.length||1!==r.dims.length||1!==o.dims.length||1!==i.dims.length)throw new Error(\"invalid input shape.\");if(n.dims[0]!==t.dims[1]||r.dims[0]!==t.dims[1]||o.dims[0]!==t.dims[1]||i.dims[0]!==t.dims[1])throw new Error(\"invalid input shape.\");if(\"float32\"!==t.type&&\"float64\"!==t.type||\"float32\"!==n.type&&\"float64\"!==n.type||\"float32\"!==r.type&&\"float64\"!==r.type||\"float32\"!==o.type&&\"float64\"!==o.type||\"float32\"!==i.type&&\"float64\"!==i.type)throw new Error(\"invalid input tensor types.\")};},5194:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.xor=t.sub=t.pRelu=t.pow=t.or=t.mul=t.less=t.greater=t.equal=t.div=t.and=t.add=t.glslPRelu=t.glslPow=t.glslXor=t.glslOr=t.glslAnd=t.glslLess=t.glslGreater=t.glslEqual=t.glslSub=t.glslMul=t.glslDiv=t.glslAdd=void 0;const r=n(7273),o=n(1997),i=n(6757),a=n(5639);function s(){const e=\"add_\";return {body:`\\n float ${e}(float a, float b) {\\n return a + b;\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return v1 + v2;\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function u(){const e=\"div_\";return {body:`\\n float ${e}(float a, float b) {\\n return a / b;\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return v1 / v2;\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function l(){const e=\"mul_\";return {body:`\\n float ${e}(float a, float b) {\\n return a * b;\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return v1 * v2;\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function c(){const e=\"sub_\";return {body:`\\n float ${e}(float a, float b) {\\n return a - b;\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return v1 - v2;\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function p(){const e=\"equal_\";return {body:`\\n float ${e}(float a, float b) {\\n return float(a == b);\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return vec4(equal(v1, v2));\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function d(){const e=\"greater_\";return {body:`\\n float ${e}(float a, float b) {\\n return float(a > b);\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return vec4( v1.r > v2.r ,\\n v1.g > v2.g,\\n v1.b > v2.b,\\n v1.a > v2.a );\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function f(){const e=\"less_\";return {body:`\\n float ${e}(float a, float b) {\\n return float(a < b);\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return vec4( v1.r < v2.r ,\\n v1.g < v2.g,\\n v1.b < v2.b,\\n v1.a < v2.a );\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function h(){const e=\"and_\";return {body:`\\n float ${e}(float a, float b) {\\n return float( bool(a) && bool(b) );\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n bvec4 b1 = bvec4(v1);\\n bvec4 b2 = bvec4(v2);\\n return vec4( b1.r && b2.r ,\\n b1.g && b2.g,\\n b1.b && b2.b,\\n b1.a && b2.a );\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function g(){const e=\"or_\";return {body:`\\n float ${e}(float a, float b) {\\n return float( bool(a) || bool(b) );\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n bvec4 b1 = bvec4(v1);\\n bvec4 b2 = bvec4(v2);\\n return vec4( b1.r || b2.r ,\\n b1.g || b2.g,\\n b1.b || b2.b,\\n b1.a || b2.a );\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function m(){const e=\"xor_\";return {body:`\\n float ${e}(float a, float b) {\\n return float( bool(a) ^^ bool(b) );\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n bvec4 b1 = bvec4(v1);\\n bvec4 b2 = bvec4(v2);\\n return vec4( b1.r ^^ b2.r ,\\n b1.g ^^ b2.g,\\n b1.b ^^ b2.b,\\n b1.a ^^ b2.a );\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}function b(){return function(e){const t=`${e}_`;return {body:`\\n float ${t}(float a, float b) {\\n return ${e}(a, b);\\n }\\n vec4 ${t}(vec4 v1, vec4 v2) {\\n return ${e}(v1, v2);\\n }\\n `,name:t,type:o.FunctionType.ValueBased}}(\"pow\")}function y(){const e=\"prelu_\";return {body:`\\n float ${e}(float a, float b) {\\n return a < 0.0 ? a * b: a;\\n }\\n vec4 ${e}(vec4 v1, vec4 v2) {\\n return vec4(\\n v1.r < 0.0 ? v1.r * v2.r: v1.r,\\n v1.g < 0.0 ? v1.g * v2.g: v1.g,\\n v1.b < 0.0 ? v1.b * v2.b: v1.b,\\n v1.a < 0.0 ? v1.a * v2.a: v1.a\\n );\\n }\\n `,name:e,type:o.FunctionType.ValueBased}}t.glslAdd=s,t.glslDiv=u,t.glslMul=l,t.glslSub=c,t.glslEqual=p,t.glslGreater=d,t.glslLess=f,t.glslAnd=h,t.glslOr=g,t.glslXor=m,t.glslPow=b,t.glslPRelu=y;const w=(e,t,n,r=t[0].type,o)=>{const i=e.session.pack?a.TextureType.packed:a.TextureType.unpacked;return {name:n.name,inputNames:[\"A\",\"B\"],inputTypes:[i,i],cacheHint:o,get:()=>_(e,t,n,r)}},_=(e,t,n,o=t[0].type)=>{const s=e.session.pack?a.TextureType.packed:a.TextureType.unpacked,u=!r.ShapeUtil.areEqual(t[0].dims,t[1].dims);let l=t[0].dims;const c=e.session.pack;if(u){const a=r.BroadcastUtil.calcShape(t[0].dims,t[1].dims,!1);if(!a)throw new Error(\"Can't perform binary op on the given tensors\");l=a;const u=l.length,p=0!==t[0].dims.length?t[0].dims.length:1,d=0!==t[1].dims.length?t[1].dims.length:1,f=0!==t[0].dims.length?\"bcastIndices_A(indices, aindices);\":\"aindices[0] = 0;\",h=0!==t[1].dims.length?\"bcastIndices_B(indices, bindices);\":\"bindices[0] = 0;\",g=(0, i.getGlsl)(e.session.backend.glContext.version),m=c?`\\n ${n.body}\\n void main() {\\n vec4 a = getAAtOutCoords();\\n vec4 b = getBAtOutCoords();\\n vec4 result = ${n.name}(a, b);\\n ${g.output} = result;\\n }`:`\\n ${n.body}\\n float process(int indices[${u}]) {\\n int aindices[${p}];\\n int bindices[${d}];\\n ${f}\\n ${h}\\n return ${n.name}(_A(aindices), _B(bindices));\\n }`;return {name:n.name,inputNames:[\"A\",\"B\"],inputTypes:[s,s],output:{dims:l,type:o,textureType:s},shaderSource:m,hasMain:c}}const p=(0, i.getGlsl)(e.session.backend.glContext.version),d=`\\n ${n.body}\\n void main() {\\n vec4 v1 = ${p.texture2D}(A, TexCoords);\\n vec4 v2 = ${p.texture2D}(B, TexCoords);\\n vec4 result = ${n.name}(v1, v2);\\n ${p.output} = result;\\n }\\n `;return {name:n.name,inputNames:[\"A\",\"B\"],inputTypes:[s,s],output:{dims:t[0].dims,type:o,textureType:s},shaderSource:d,hasMain:!0}};t.add=(e,t)=>[e.run(w(e,t,s()),t)],t.and=(e,t)=>[e.run(w(e,t,h(),\"bool\"),t)],t.div=(e,t)=>[e.run(w(e,t,u()),t)],t.equal=(e,t)=>[e.run(w(e,t,p(),\"bool\"),t)],t.greater=(e,t)=>[e.run(w(e,t,d(),\"bool\"),t)],t.less=(e,t)=>[e.run(w(e,t,f(),\"bool\"),t)],t.mul=(e,t)=>[e.run(w(e,t,l()),t)],t.or=(e,t)=>[e.run(w(e,t,g(),\"bool\"),t)],t.pow=(e,t)=>[e.run(w(e,t,b()),t)],t.pRelu=(e,t)=>[e.run(w(e,t,y()),t)],t.sub=(e,t)=>[e.run(w(e,t,c()),t)],t.xor=(e,t)=>[e.run(w(e,t,m(),\"bool\"),t)];},4752:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseCastAttributes=t.cast=void 0;const r=n(7273);t.cast=(e,t,n)=>(o(t),[e.cast(t[0],n)]),t.parseCastAttributes=e=>r.ProtoUtil.tensorDataTypeFromProto(e.attributes.getInt(\"to\"));const o=e=>{if(!e||1!==e.length)throw new Error(\"Cast requires 1 input.\");if(\"string\"===e[0].type)throw new Error(\"Invalid input type.\")};},4595:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createPackedConcatProgramInfoLoader=void 0;const r=n(6757),o=n(5639),i=n(432),a=n(5614);t.createPackedConcatProgramInfoLoader=(e,t,n)=>{const u=(l=t.length,c=n.cacheKey,{name:\"Concat (packed)\",inputNames:Array.from({length:l},((e,t)=>`X${t}`)),inputTypes:Array(l).fill(o.TextureType.packed),cacheHint:c});var l,c;return Object.assign(Object.assign({},u),{get:()=>((e,t,n,u)=>{const l=n[0].dims.slice();if(u>=l.length||u<-1*l.length)throw new Error(\"axis specified for concat doesn't match input dimensionality\");u<0&&(u=l.length+u);const c=l.slice(0);for(let e=1;ee.dims)),m=(0, i.getGlChannels)(p),b=new Array(g.length-1);b[0]=g[0][u];for(let e=1;e= ${b[e-1]}) {\\n return getChannel(\\n getX${e}(${s(m,y,t)}),\\n vec2(${s(w,y,t)}));\\n }`;}const x=b.length,T=b[b.length-1];v+=`\\n return getChannel(\\n getX${x}(${s(m,y,T)}),\\n vec2(${s(w,y,T)}));`;const S=(0, r.getGlsl)(e.session.backend.glContext.version),O=`\\n ${h}\\n float getValue(${m.map((e=>\"int \"+e))}) {\\n ${v}\\n }\\n\\n void main() {\\n ${f} coords = getOutputCoords();\\n int lastDim = coords.${m[p-1]};\\n coords.${m[p-1]} = coords.${m[p-2]};\\n coords.${m[p-2]} = lastDim;\\n\\n vec4 result = vec4(getValue(${d}), 0., 0., 0.);\\n\\n ${d[p-1]} = ${d[p-1]} + 1;\\n if (${d[p-1]} < ${c[p-1]}) {\\n result.g = getValue(${d});\\n }\\n\\n ${d[p-2]} = ${d[p-2]} + 1;\\n if (${d[p-2]} < ${c[p-2]}) {\\n result.a = getValue(${d});\\n }\\n\\n ${d[p-1]} = ${d[p-1]} - 1;\\n if (${d[p-2]} < ${c[p-2]} &&\\n ${d[p-1]} < ${c[p-1]}) {\\n result.b = getValue(${d});\\n }\\n ${S.output} = result;\\n }\\n `;return Object.assign(Object.assign({},t),{output:{dims:c,type:n[0].type,textureType:o.TextureType.packed},shaderSource:O,hasMain:!0})})(e,u,t,n.axis)})};const s=(e,t,n)=>{const r=e.indexOf(t);return e.map(((e,t)=>t===r?`${e} - ${n}`:e)).join()};},6668:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseConcatAttributes=t.concat=void 0;const r=n(4910),o=n(5639),i=n(4595);t.concat=(e,t,n)=>(p(t),e.session.pack&&t[0].dims.length>1?[e.run((0, i.createPackedConcatProgramInfoLoader)(e,t,n),t)]:[e.run(a(e,t,n),t)]);const a=(e,t,n)=>{const r=(i=t.length,a=n.cacheKey,{name:\"Concat\",inputNames:Array.from({length:i},((e,t)=>`X${t}`)),inputTypes:Array(i).fill(o.TextureType.unpacked),cacheHint:a});var i,a;return Object.assign(Object.assign({},r),{get:()=>((e,t,n,r)=>{const i=n[0].dims.slice();if(r>=i.length||r<-1*i.length)throw new Error(\"axis specified for concat doesn't match input dimensionality\");r<0&&(r=i.length+r);const a=i.slice(0);for(let e=1;e`int getTextureWhereDataResides(int index) {\\n ${e.map(((e,t)=>`if(index<${e}) {return ${t};}\\n`)).join(\"\")}\\n }`,u=e=>s(e),l=(e,t)=>{const n=[`float fetchDataFromCorrectTexture(int textureIndex, int indices[${t}]) {`];for(let t=0;t{const t=[\"int getSizeInConcatAxisValueFromIndex(int index) {\"];for(let n=0;n(0, r.createAttributeWithCacheKey)({axis:e.attributes.getInt(\"axis\")});const p=e=>{if(!e||e.length<1)throw new Error(\"too few inputs\");const t=e[0].type,n=e[0].dims.length;if(\"string\"===t)throw new Error(\"string tensor is not supported yet\");for(const r of e){if(r.type!==t)throw new Error(\"input tensors should be one type\");if(r.dims.length!==n)throw new Error(\"input tensors should have the same shape\")}};},7825:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createUnpackedGroupedConvProgramInfoLoader=void 0;const r=n(1315),o=n(6757),i=n(5639),a=n(9754),s=n(2150);t.createUnpackedGroupedConvProgramInfoLoader=(e,t,n)=>{const u=(l=t.length>2,c=n.cacheKey,{name:\"GroupedConv\",inputNames:l?[\"X\",\"W\",\"Bias\"]:[\"X\",\"W\"],inputTypes:l?[i.TextureType.unpacked,i.TextureType.unpacked,i.TextureType.unpacked]:[i.TextureType.unpacked,i.TextureType.unpacked],cacheHint:c});var l,c;return Object.assign(Object.assign({},u),{get:()=>((e,t,n,u)=>{const l=t.length>2?\"value += getBias(output_channel);\":\"\",c=t[0].dims.slice(),p=t[1].dims.slice(),d=p[0]/u.group;r.Logger.verbose(\"GroupedConv\",`autpPad:${u.autoPad}, dilations:${u.dilations}, group:${u.group}, kernelShape:${u.kernelShape}, pads:${u.pads}, strides:${u.strides}`);const f=(0, a.calculateOutputShape)(c,p,u.dilations,u.pads,u.strides),h=(0, o.getGlsl)(e.session.backend.glContext.version),{activationFunction:g,applyActivation:m}=(0, s.getActivationSnippet)(u),b=`\\n const ivec2 strides = ivec2(${u.strides[0]}, ${u.strides[1]});\\n const ivec2 pads = ivec2(${u.pads[0]}, ${u.pads[1]});\\n ${g}\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords.x;\\n int output_channel = coords.y;\\n ivec2 xRCCorner = coords.zw * strides - pads;\\n int group_id = output_channel / ${d};\\n\\n float value = 0.0;\\n for (int wInChannel = 0; wInChannel < ${p[1]}; wInChannel++) {\\n int input_channel = group_id * ${p[1]} + wInChannel;\\n for (int wHeight = 0; wHeight < ${p[2]}; wHeight++) {\\n int xHeight = xRCCorner.x + wHeight * ${u.dilations[0]};\\n\\n if (xHeight < 0 || xHeight >= ${c[2]}) {\\n continue;\\n }\\n\\n for (int wWidth = 0; wWidth < ${p[3]}; wWidth++) {\\n int xWidth = xRCCorner.y + wWidth * ${u.dilations[1]};\\n if (xWidth < 0 || xWidth >= ${c[3]}) {\\n continue;\\n }\\n\\n float xVal = getX(batch, input_channel, xWidth, xHeight);\\n float wVal = getW(output_channel, wInChannel, wWidth, wHeight);\\n value += xVal*wVal;\\n }\\n }\\n }\\n ${l}\\n ${m}\\n ${h.output} = vec4(value, .0, .0, .0);\\n }\\n`;return Object.assign(Object.assign({},n),{output:{dims:f,type:t[0].type,textureType:i.TextureType.unpacked},shaderSource:b,hasMain:!0})})(e,t,u,n)})};},7708:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.conv2DPacked=t.conv2DPackedPointwise=void 0;const r=n(9754),o=n(5950),i=n(5632);t.conv2DPackedPointwise=(e,t,n)=>{const o=t[0].dims,a=t[1].dims,s=(0, r.calculateOutputShape)(o,a,n.dilations,n.pads,n.strides),u=e.reshapePacked(t[0],[o[1],o[2]*o[3]]),l=e.reshapePacked(t[1],[a[0],a[1]]),c=t.length>2?[l,u,t[2]]:[l,u],p=e.run((0, i.createPackedMatmulProgramInfoLoader)(e,c,n),c);return e.reshapePacked(p,s)},t.conv2DPacked=(e,t,n)=>{const a=t[0].dims,s=t[1].dims,u=(0, r.calculateOutputShape)(a,s,n.dilations,n.pads,n.strides),l=e.run((0, o.createPackedIm2ColProgramInfoLoader)(e,t[0],t[1],u,n),[t[0]]),c=e.reshapePacked(t[1],[s[0],s[1]*s[2]*s[3]]),p=3===t.length?[c,l,t[2]]:[c,l],d=e.run((0, i.createPackedMatmulProgramInfoLoader)(e,p,n),p);return e.reshapePacked(d,u)};},5042:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseConvTransposeAttributes=t.convTranspose=void 0;const r=n(4910),o=n(6757),i=n(5639),a=n(2150),s=(e,t,n,r,o,i)=>(e-1)*t+n+(r-1)*o+1-i,u=(e,t,n,r,o)=>{const i=Math.floor(e/2);\"SAME_UPPER\"===t?(n[r]=i,n[o]=e-i):\"SAME_LOWER\"===t&&(n[r]=e-i,n[o]=i);};t.convTranspose=(e,t,n)=>(d(t,n),l(e,t,n));const l=(e,t,n)=>{const r=p(n,t);return [c(e,t,r)]},c=(e,t,n)=>e.run(((e,t,n)=>{const r=(s=t.length>2,u=n.cacheKey,{name:\"ConvTranspose\",inputNames:s?[\"X\",\"W\",\"B\"]:[\"X\",\"W\"],inputTypes:s?[i.TextureType.unpacked,i.TextureType.unpacked,i.TextureType.unpacked]:[i.TextureType.unpacked,i.TextureType.unpacked],cacheHint:u});var s,u;return Object.assign(Object.assign({},r),{get:()=>((e,t,n,r)=>{const s=t.length>2?\"getB(output_channel)\":\"0.0\",u=t[0].dims,l=t[1].dims,c=l[1],p=l[0]/r.group,d=[t[0].dims[0],t[1].dims[1]*r.group,...r.outputShape],f=(0, o.getGlsl)(e.session.backend.glContext.version),{activationFunction:h,applyActivation:g}=(0, a.getActivationSnippet)(r),m=`\\n const ivec2 strides = ivec2(${r.strides[0]}, ${r.strides[1]});\\n const ivec2 pads = ivec2(${r.pads[0]}, ${r.pads[1]});\\n ${h}\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords.x;\\n int output_channel = coords.y;\\n\\n ivec2 loc = coords.zw + pads;\\n\\n int group_id = output_channel / ${c};\\n int wOutChannel = output_channel - group_id * ${c};\\n\\n float value = ${s};\\n for (int inChannelOffset = 0; inChannelOffset < ${p}; inChannelOffset++) {\\n int input_channel = group_id * ${p} + inChannelOffset;\\n for (int wWOff = 0; wWOff < ${l[2]}; wWOff++) {\\n for (int wHOff = 0; wHOff < ${l[3]}; wHOff++) {\\n ivec2 wOff = ivec2(wWOff * ${r.dilations[0]}, wHOff * ${r.dilations[1]});\\n ivec2 wLoc = loc - wOff;\\n ivec2 wLocIn = wLoc / strides;\\n if (\\n wLocIn * strides == wLoc &&\\n wLocIn.x >= 0 && wLocIn.x < ${u[2]} &&\\n wLocIn.y >= 0 && wLocIn.y < ${u[3]}\\n ) {\\n float xVal = getX(batch, input_channel, wLocIn.y, wLocIn.x);\\n float wVal = getW(input_channel, wOutChannel, wHOff, wWOff);\\n value += xVal * wVal;\\n }\\n }\\n }\\n }\\n ${g}\\n ${f.output} = vec4(value, .0, .0, .0);\\n }\\n`;return Object.assign(Object.assign({},n),{output:{dims:d,type:t[0].type,textureType:i.TextureType.unpacked},shaderSource:m,hasMain:!0})})(e,t,r,n)})})(e,t,n),t),p=(e,t)=>{const n=e.kernelShape.slice();if(0===e.kernelShape.length)for(let e=2;e{const c=e.length-2,p=0===l.length;for(let d=0;d{const t=e.attributes,n=(0, a.parseInternalActivationAttributes)(t),o=t.getString(\"auto_pad\",\"NOTSET\"),i=t.getInts(\"dilations\",[1,1]),s=t.getInt(\"group\",1),u=t.getInts(\"kernel_shape\",[]),l=t.getInts(\"output_padding\",[0,0]),c=t.getInts(\"output_shape\",[]),p=t.getInts(\"pads\",[0,0,0,0]),d=t.getInts(\"strides\",[1,1]);return (0, r.createAttributeWithCacheKey)(Object.assign({autoPad:o,dilations:i,group:s,kernelShape:u,outputPadding:l,outputShape:c,pads:p,strides:d},n))};const d=(e,t)=>{if(!e||2!==e.length&&3!==e.length)throw new Error(\"Conv requires 2 or 3 inputs\");if(4!==e[0].dims.length||4!==e[1].dims.length)throw new Error(\"currently only support 2-dimensional conv\");if(e[0].dims[1]!==e[1].dims[0])throw new Error(\"FILTER_IN_CHANNEL should be equal to DATA_CHANNEL\");const n=e[1].dims[1]*t.group;if(3===e.length&&(1!==e[2].dims.length||e[2].dims[0]!==n))throw new Error(\"invalid bias\");const r=e[0].dims.length-2;if(t.dilations.length!==r)throw new Error(`dilations should be ${r}D`);if(t.strides.length!==r)throw new Error(`strides should be ${r}D`);if(t.pads.length!==2*r)throw new Error(`pads should be ${2*r}D`);if(t.outputPadding.length!==r)throw new Error(`output_padding should be ${r}D`);if(0!==t.kernelShape.length&&t.kernelShape.length!==e[1].dims.length-2)throw new Error(\"invalid kernel shape\");if(0!==t.outputShape.length&&t.outputShape.length!==e[0].dims.length-2)throw new Error(\"invalid output shape\");if(\"float32\"!==e[0].type||\"float32\"!==e[1].type)throw new Error(\"ConvTranspose input(X,W) should be float tensor\");if(3===e.length&&\"float32\"!==e[2].type)throw new Error(\"ConvTranspose input(bias) should be float tensor\")};},9754:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseConvAttributes=t.conv=t.calculateOutputShape=void 0;const r=n(4910),o=n(7273),i=n(7825),a=n(7708),s=n(3281),u=n(2150),l=n(1625),c=n(8276);t.calculateOutputShape=(e,t,n,r,o)=>{const i=e[0],a=e.slice(2),s=a.length,u=t[0],l=t.slice(2).map(((e,t)=>e+(e-1)*(n[t]-1))),c=a.map(((e,t)=>e+r[t]+r[t+s])).map(((e,t)=>Math.floor((e-l[t]+o[t])/o[t])));return [i,u].concat(...c)},t.conv=(e,t,n)=>(g(t,n),p(e,t,n));const p=(e,t,n)=>{const r=h(n,t),o=e.session.pack,s=1===r.kernelShape[0]&&1===r.kernelShape[1];return r.group>1?[e.run((0, i.createUnpackedGroupedConvProgramInfoLoader)(e,t,r),t)]:s&&o?[d(e,t,r)]:o&&4===t[0].dims.length&&1===t[0].dims[0]&&!s?[(0, a.conv2DPacked)(e,t,r)]:[f(e,t,r)]},d=(e,n,r)=>{const o=n[0].dims,i=n[1].dims,a=(0, t.calculateOutputShape)(o,i,r.dilations,r.pads,r.strides),s=e.reshapeUnpacked(n[0],[o[1],o[2]*o[3]]),u=e.reshapeUnpacked(n[1],[i[0],i[1]]),l=n.length>2?[u,s,n[2]]:[u,s],p=e.run((0, c.createMatmulProgramInfoLoader)(l,r),l);return e.reshapeUnpacked(p,a)},f=(e,n,r)=>{const o=n[0].dims,i=n[1].dims,a=(0, t.calculateOutputShape)(o,i,r.dilations,r.pads,r.strides),u=e.run((0, l.createIm2ColProgramInfoLoader)(e,n[0],n[1],a,r),[n[0]]),c=3===n.length?[u,n[1],n[2]]:[u,n[1]];return e.run((0, s.createDotProductProgramInfoLoader)(e,n,a,r),c)},h=(e,t)=>{const n=e.kernelShape.slice();if(0===e.kernelShape.length)for(let e=2;e{const t=e.attributes,n=(0, u.parseInternalActivationAttributes)(t),o=t.getString(\"auto_pad\",\"NOTSET\"),i=t.getInts(\"dilations\",[1,1]),a=t.getInt(\"group\",1),s=t.getInts(\"kernel_shape\",[]),l=t.getInts(\"pads\",[0,0,0,0]),c=t.getInts(\"strides\",[1,1]);return (0, r.createAttributeWithCacheKey)(Object.assign({autoPad:o,dilations:i,group:a,kernelShape:s,pads:l,strides:c},n))};const g=(e,t)=>{if(!e||2!==e.length&&3!==e.length)throw new Error(\"Conv requires 2 or 3 inputs\");if(4!==e[0].dims.length||4!==e[1].dims.length)throw new Error(\"currently only support 2-dimensional conv\");if(e[0].dims[1]!==e[1].dims[1]*t.group)throw new Error(\"FILTER_IN_CHANNEL should be equal to DATA_CHANNEL\");if(3===e.length&&(1!==e[2].dims.length||e[1].dims[0]!==e[2].dims[0]))throw new Error(\"invalid bias\");const n=e[0].dims.length-2;if(t.dilations.length!==n)throw new Error(`dilations should be ${n}D`);if(t.strides.length!==n)throw new Error(`strides should be ${n}D`);if(t.pads.length!==2*n)throw new Error(`pads should be ${2*n}D`);if(0!==t.kernelShape.length&&t.kernelShape.length!==e[1].dims.length-2)throw new Error(\"invalid kernel shape\");if(\"float32\"!==e[0].type||\"float32\"!==e[1].type)throw new Error(\"Conv input(X,W) should be float tensor\");if(3===e.length&&\"float32\"!==e[2].type)throw new Error(\"Conv input(bias) should be float tensor\")};},6742:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseDepthToSpaceAttributes=t.depthToSpace=void 0;const r=n(5707);t.depthToSpace=(e,t,n)=>{o(t);const i=n.blocksize,a=i*i,s=\"DCR\"===n.mode?[0,3,4,1,5,2]:[0,1,4,2,5,3],u=\"DCR\"===n.mode?[t[0].dims[0],i,i,t[0].dims[1]/a,t[0].dims[2],t[0].dims[3]]:[t[0].dims[0],t[0].dims[1]/a,i,i,t[0].dims[2],t[0].dims[3]],l=e.reshapeUnpacked(t[0],u),c={perm:s,cacheKey:`${s}`},[p]=(0, r.transpose)(e,[l],c),d=[t[0].dims[0],t[0].dims[1]/a,t[0].dims[2]*i,t[0].dims[3]*i];return [e.reshapeUnpacked(p,d)]},t.parseDepthToSpaceAttributes=e=>{const t=e.attributes.getInt(\"blocksize\");if(t<1)throw new Error(`blocksize must be >= 1, but got : ${t} for DepthToSpace`);const n=e.attributes.getString(\"mode\",\"DCR\");if(\"DCR\"!==n&&\"CRD\"!==n)throw new Error(`unrecognized mode: ${n} for DepthToSpace`);return {mode:n,blocksize:t}};const o=e=>{if(1!==e.length)throw new Error(`DepthToSpace expect 1 inputs, but got ${e.length}`);if(\"string\"===e[0].type||4!==e[0].dims.length)throw new TypeError(\"DepthToSpace input should be a 4-D numeric tensor\")};},3281:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createDotProductProgramInfoLoader=void 0;const r=n(7273),o=n(6757),i=n(5639),a=n(2150),s=n(1625);t.createDotProductProgramInfoLoader=(e,t,n,u)=>{const l=((e,t)=>({name:\"ConvDotProduct\",inputNames:e?[\"Im2Col\",\"K\",\"B\"]:[\"Im2Col\",\"K\"],inputTypes:e?[i.TextureType.unpacked,i.TextureType.packedLastDimension,i.TextureType.unpacked]:[i.TextureType.unpacked,i.TextureType.packedLastDimension],cacheKey:t.activationCacheKey}))(t.length>2,u);return Object.assign(Object.assign({},l),{get:()=>((e,t,n,u,l)=>{const c=n[0].dims,p=n[1].dims,d=[p[0],Math.ceil(c[1]*p[2]*p[3]/4)],f=(0, s.calculateIm2ColDims)(c,p,u),[h,g]=e.calculateTextureWidthAndHeight(d,i.TextureType.packedLastDimension),m=r.ShapeUtil.computeStrides(f),[b,y]=e.calculateTextureWidthAndHeight(f,i.TextureType.packedLastDimension),w=u.length,_=n.length<3?\"0.0\":\"_B(b)\",v=Math.ceil(c[1]*p[2]*p[3]/4),{activationFunction:x,applyActivation:T}=(0, a.getActivationSnippet)(l),S=(0, o.getGlsl)(e.session.backend.glContext.version),O=`\\n${x}\\nfloat process(int indices[${w}]) {\\n int b[1];\\n b[0] = indices[1];\\n int im2col[4];\\n im2col[0] = indices[0];\\n im2col[1] = indices[2];\\n im2col[2] = indices[3];\\n int im2colOffset = im2col[0] * ${m[0]} + im2col[1] * ${m[1]} + im2col[2] * ${m[2]};\\n int kernelOffset = indices[1] * ${d[1]};\\n float value = ${_};\\n for (int i = 0; i < ${v}; ++i) {\\n vec2 im2colCoords = offsetToCoords(im2colOffset, ${b}, ${y});\\n vec2 kernelCoords = offsetToCoords(kernelOffset, ${h}, ${g});\\n value += dot(${S.texture2D}(Im2Col, im2colCoords), ${S.texture2D}(K, kernelCoords));\\n ++im2colOffset;\\n ++kernelOffset;\\n }\\n ${T}\\n return value;\\n}`;return Object.assign(Object.assign({},t),{output:{dims:u,type:n[0].type,textureType:i.TextureType.unpacked},shaderSource:O})})(e,l,t,n,u)})};},4125:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseFlattenAttributes=t.flatten=void 0;const r=n(7273);t.flatten=(e,t,n)=>{o(t,n);const i=r.ShapeUtil.flattenShape(t[0].dims,n);return [e.reshapeUnpacked(t[0],i)]},t.parseFlattenAttributes=e=>e.attributes.getInt(\"axis\",1);const o=(e,t)=>{if(!e||1!==e.length)throw new Error(\"Flatten requires 1 input.\");const n=e[0].dims.length;if(0===n)throw new Error(\"scalar tensor is not supported.\");if(t<-n||t>n)throw new Error(\"Invalid axis\");if(\"string\"===e[0].type)throw new Error(\"string tensor is not supported.\")};},2150:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseInternalActivationAttributes=t.getActivationSnippet=void 0;const r=n(7273),o=n(9087);t.getActivationSnippet=function(e){let t;switch(e.activation){case\"Relu\":t=(0, o.glslRelu)();break;case\"Sigmoid\":t=(0, o.glslSigmoid)();break;case\"Clip\":t=(0, o.glslClip)(e.clipMin,e.clipMax);break;default:return {activationFunction:\"\",applyActivation:\"\"}}const n=t.name;return {activationFunction:t.body,applyActivation:`value = ${n}_(value);`}},t.parseInternalActivationAttributes=e=>{const t=e.getString(\"activation\",\"\");if(\"Clip\"===t){const[n,o]=e.getFloats(\"activation_params\",[r.MIN_CLIP,r.MAX_CLIP]);return {activation:t,clipMax:o,clipMin:n,activationCacheKey:`${t}:${n},${o}`}}return {activation:t,activationCacheKey:t}};},6149:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseGatherAttributes=t.gather=void 0;const r=n(4910),o=n(6145),i=n(7273),a=n(5639);t.gather=(e,t,n)=>(l(t,n.axis),[e.run(u(e,t,n),t)]),t.parseGatherAttributes=e=>(0, r.createAttributeWithCacheKey)({axis:e.attributes.getInt(\"axis\",0)});const s={name:\"Gather\",inputNames:[\"A\",\"B\"],inputTypes:[a.TextureType.unpacked,a.TextureType.unpacked]},u=(e,t,n)=>{const r=Object.assign(Object.assign({},s),{cacheHint:n.cacheKey});return Object.assign(Object.assign({},r),{get:()=>((e,t,n,r)=>{const o=n[0].dims.slice(),s=n[1].dims.slice(),u=new Array(o.length+s.length-1);r=i.ShapeUtil.normalizeAxis(r,o.length);const l=[];for(let e=0;e{if(!e||2!==e.length)throw new Error(\"Gather requires 2 inputs.\");const n=e[0].dims.length;if(n<1)throw new Error(\"Invalid input shape.\");if(t<-n||t>n-1)throw new Error(\"Invalid axis.\");if(-1===o.NUMBER_TYPES.indexOf(e[0].type))throw new Error(\"Invaid input type.\");if(\"int32\"!==e[1].type&&\"int16\"!==e[1].type)throw new Error(\"Invaid input type.\")};},5378:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseGemmAttributesV11=t.parseGemmAttributesV7=t.gemm=void 0;const r=n(4910),o=n(7273),i=n(5639);t.gemm=(e,t,n)=>(l(t,n),[e.run(s(t,n),t)]);const a=(e,t)=>{const n=0!==e.attributes.getInt(\"transA\",0),o=0!==e.attributes.getInt(\"transB\",0),i=e.attributes.getFloat(\"alpha\",1),a=e.attributes.getFloat(\"beta\",1);return (0, r.createAttributeWithCacheKey)({transA:n,transB:o,alpha:i,beta:a,isOptionalC:t})};t.parseGemmAttributesV7=e=>a(e,!1),t.parseGemmAttributesV11=e=>a(e,!0);const s=(e,t)=>{const n={name:\"Gemm\",inputNames:3===e.length?[\"A\",\"B\",\"C\"]:[\"A\",\"B\"],inputTypes:3===e.length?[i.TextureType.unpacked,i.TextureType.unpacked,i.TextureType.unpacked]:[i.TextureType.unpacked,i.TextureType.unpacked],key:t.cacheKey};return Object.assign(Object.assign({},n),{get:()=>u(n,e,t)})},u=(e,t,n)=>{const r=t[0].dims.slice(),a=t[1].dims.slice(),[s,u]=o.GemmUtil.getShapeOfGemmResult(r,n.transA,a,n.transB,3===t.length?t[2].dims:void 0),l=[s,u];if(!l)throw new Error(\"Can't use gemm on the given tensors\");let c=r[r.length-1],p=\"\";n.transA&&(c=r[0]),n.transA&&n.transB?p=\"value += _A_T(a) * _B_T(b);\":n.transA&&!n.transB?p=\"value += _A_T(a) * _B(b);\":!n.transA&&n.transB?p=\"value += _A(a) * _B_T(b);\":n.transA||n.transB||(p=\"value += _A(a) * _B(b);\");const d=l.length,f=`\\n float process(int indices[${d}]) {\\n int a[${d}];\\n int b[${d}];\\n ${3===t.length?`int c[${t[2].dims.length}];`:\"\"}\\n\\n copyVec(indices, a);\\n copyVec(indices, b);\\n ${3===t.length?\"bcastIndices_C(indices, c);\":\"\"}\\n\\n float value = 0.0;\\n for (int k=0; k<${c}; ++k) {\\n a[${d-1}] = k;\\n b[${d-2}] = k;\\n ${p}\\n }\\n\\n value = value * alpha;\\n ${3===t.length?\"value += beta * _C(c);\":\"\"}\\n return value;\\n }`;return Object.assign(Object.assign({},e),{output:{dims:l,type:t[0].type,textureType:i.TextureType.unpacked},variables:[{name:\"alpha\",type:\"float\",data:n.alpha},{name:\"beta\",type:\"float\",data:n.beta}],shaderSource:f})},l=(e,t)=>{if(!e)throw new Error(\"Input is missing\");if(t.isOptionalC&&(e.length<2||e.length>3))throw new Error(\"Invaid input shape.\");if(!t.isOptionalC&&3!==e.length)throw new Error(\"Gemm requires 3 inputs\");if(3===e.length&&1!==e[2].dims.length&&2!==e[2].dims.length)throw new Error(\"Invalid input shape of C\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type||\"float32\"!==e[1].type&&\"float64\"!==e[1].type||3===e.length&&\"float32\"!==e[2].type&&\"float64\"!==e[2].type)throw new Error(\"Invalid input type.\");if(e[0].type!==e[1].type||3===e.length&&e[0].type!==e[2].type)throw new Error(\"Input types are mismatched\")};},5950:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createPackedIm2ColProgramInfoLoader=void 0;const r=n(6757),o=n(5639),i=n(5614);t.createPackedIm2ColProgramInfoLoader=(e,t,n,a,s)=>{const u=(l=s.cacheKey,{name:\"Im2Col (packed)\",inputNames:[\"A\"],inputTypes:[o.TextureType.packed],cacheHint:l});var l;return Object.assign(Object.assign({},u),{get:()=>((e,t,n,a,s,u)=>{const l=n.dims,c=a.dims,p=s.length,d=[c[1]*c[2]*c[3],s[2]*s[3]],f=c[2]*c[3],h=(0, i.unpackFromChannel)(),g=(0, r.getGlsl)(e.session.backend.glContext.version);let m=\"\";for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)m+=`\\n blockIndex = rc.x + ${t};\\n pos = rc.y + ${e};\\n\\n if(blockIndex < ${d[1]} && pos < ${d[0]}) {\\n offsetY = int(blockIndex / (${s[p-1]})) * ${u.strides[0]} -\\n ${u.pads[0]};\\n d0 = offsetY + ${u.dilations[0]} * (imod(pos, ${f}) / ${c[2]});\\n\\n if(d0 < ${l[2]} && d0 >= 0) {\\n offsetX = imod(blockIndex, ${s[p-1]}) * ${u.strides[1]} -\\n ${u.pads[1]};\\n d1 = offsetX + ${u.dilations[1]} * imod(imod(pos, ${f}), ${c[2]});\\n\\n if(d1 < ${l[3]} && d1 >= 0) {\\n\\n ch = int(float(pos)/ ${f}.);\\n innerDims = vec2(d0, d1);\\n result[${2*e+t}] = getChannel(\\n getA(0, ch, int(innerDims.x),\\n int(innerDims.y)), innerDims);\\n }\\n }\\n }\\n\\n `;const b=`\\n ${h}\\n\\n void main() {\\n ivec2 rc = getOutputCoords();\\n vec4 result = vec4(0.0);\\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\\n vec2 innerDims;\\n ${m}\\n ${g.output} = result;\\n }\\n `;return Object.assign(Object.assign({},t),{output:{dims:d,type:n.type,textureType:o.TextureType.packed},shaderSource:b,hasMain:!0})})(e,u,t,n,a,s)})};},1625:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.calculateIm2ColDims=t.createIm2ColProgramInfoLoader=void 0;const r=n(5639);t.createIm2ColProgramInfoLoader=(e,n,o,i,a)=>{const s=(u=a.cacheKey,{name:\"Im2Col\",inputNames:[\"X\"],inputTypes:[r.TextureType.unpacked],cacheHint:u});var u;return Object.assign(Object.assign({},s),{get:()=>((e,n,o,i,a,s)=>{const u=o.dims,l=i.dims,c=a.length,p=(0, t.calculateIm2ColDims)(u,l,a,4),d=`\\n const int XC = ${u[1]};\\n const int XH = ${u[2]};\\n const int XW = ${u[3]};\\n const int KH = ${s.kernelShape[0]};\\n const int KW = ${s.kernelShape[1]};\\n const int dilationH = ${s.dilations[0]};\\n const int dilationW = ${s.dilations[1]};\\n const int strideH = ${s.strides[0]};\\n const int strideW = ${s.strides[1]};\\n const int padH = ${s.pads[0]};\\n const int padW = ${s.pads[1]};\\n const int KHKW = KH*KW;\\n const int XCKHKW = XC * KHKW;\\n const int outputChannels = 4;\\n vec4 process(int indices[${c}]) {\\n int b = indices[0]; // batch size\\n int oh = indices[1] * strideH - padH; //output height\\n int ow = indices[2] * strideW - padW; //output width\\n int p = indices[3] * outputChannels; //patch\\n vec4 value = vec4(0.0);\\n for(int i=0; i < outputChannels; ++i) {\\n if(p < XCKHKW) {\\n int patchC = p / KHKW;\\n int patchH = (p - patchC*KHKW) / KW;\\n int patchW = (p - patchC*KHKW) - patchH * KW;\\n int xh2 = oh + patchH * dilationH;\\n int xw2 = ow + patchW * dilationW;\\n int x[${u.length}];\\n x[0] = b;\\n x[1] = patchC;\\n x[2] = xh2;\\n x[3] = xw2;\\n if(xh2 >= 0 &&\\n xh2 < XH &&\\n xw2 >= 0 &&\\n xw2 < XW) {\\n value[i] = _X(x);\\n }\\n }\\n ++p;\\n }\\n return value;\\n }\\n `;return Object.assign(Object.assign({},n),{output:{dims:p,type:o.type,textureType:r.TextureType.packedLastDimension},shaderSource:d})})(0,s,n,o,i,a)})},t.calculateIm2ColDims=(e,t,n,r=4)=>[n[0],n[2],n[3],Math.ceil(e[1]*t[2]*t[3]/r)];},6981:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseImageScalerAttributes=t.imageScaler=void 0;const r=n(4910),o=n(5639);t.imageScaler=(e,t,n)=>(u(t),[e.run(a(e,t,n),t)]),t.parseImageScalerAttributes=e=>{const t=e.attributes.getFloat(\"scale\"),n=e.attributes.getFloats(\"bias\");return (0, r.createAttributeWithCacheKey)({scale:t,bias:n})};const i={name:\"ImageScaler\",inputNames:[\"X\"],inputTypes:[o.TextureType.unpacked]},a=(e,t,n)=>{const r=Object.assign(Object.assign({},i),{cacheHint:n.cacheKey});return Object.assign(Object.assign({},r),{get:()=>((e,t,n,r)=>{const i=n[0].dims.slice(),a=i.length,u=`\\n ${s(r.bias.length)}\\n float process(int indices[${a}]) {\\n return _X(indices) * scale + getBias(bias, indices[1]);\\n }`;return Object.assign(Object.assign({},t),{output:{dims:i,type:n[0].type,textureType:o.TextureType.unpacked},variables:[{name:\"bias\",type:\"float\",arrayLength:r.bias.length,data:r.bias},{name:\"scale\",type:\"float\",data:r.scale}],shaderSource:u})})(0,r,t,n)})},s=e=>{const t=[`float getBias(float bias[${e}], int channel) {`];for(let n=0;n{if(!e||1!==e.length)throw new Error(\"ImageScaler requires 1 input.\");if(4!==e[0].dims.length)throw new Error(\"Invalid input shape.\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type)throw new Error(\"Invalid input type.\")};},7413:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseInstanceNormalizationAttributes=t.instanceNormalization=void 0;const r=n(6757),o=n(5639);t.instanceNormalization=(e,t,n)=>{l(t);const r=e.run(a(t[0]),t);return [e.run(u(e,t[0],n,r.dims),[t[0],r,t[1],t[2]])]},t.parseInstanceNormalizationAttributes=e=>e.attributes.getFloat(\"epsilon\",1e-5);const i={name:\"InstanceNormalization_MeanAndVariance\",inputNames:[\"X\"],inputTypes:[o.TextureType.unpacked]},a=e=>Object.assign(Object.assign({},i),{get:()=>((e,t)=>{const n=t.dims.slice(),r=n[1],i=n[2]*n[3],a=[n[0],r],s=`\\n vec4 process(int[2] indices) {\\n vec4 v = vec4(0.0);\\n int a[4];\\n a[0] = indices[0];\\n a[1] = indices[1];\\n float temp = 0.0;\\n for(int a2=0; a2<${n[2]}; a2++) {\\n a[2] = a2;\\n for(int a3=0; a3<${n[3]}; a3++) {\\n a[3] = a3;\\n float x = _X(a);\\n temp += x;\\n }\\n }\\n float mean = temp / float(${i});\\n temp = 0.0;\\n for(int a2=0; a2<${n[2]}; a2++) {\\n a[2] = a2;\\n for(int a3=0; a3<${n[3]}; a3++) {\\n a[3] = a3;\\n float x = _X(a);\\n temp += (x - mean) * (x - mean);\\n }\\n }\\n v.r = mean;\\n v.g = temp / float(${i});\\n\\n return v;\\n }`;return Object.assign(Object.assign({},e),{output:{dims:a,type:t.type,textureType:o.TextureType.packedLastDimension},shaderSource:s})})(i,e)}),s={name:\"InstanceNormalization_ComputeOutput\",inputNames:[\"X\",\"MeanAndVariance\",\"Scale\",\"B\"],inputTypes:[o.TextureType.unpacked,o.TextureType.packedLastDimension,o.TextureType.unpacked,o.TextureType.unpacked]},u=(e,t,n,i)=>{const a=Object.assign(Object.assign({},s),{cacheHint:`${n}`});return Object.assign(Object.assign({},a),{get:()=>((e,t,n,i,a)=>{const s=(0, r.getGlsl)(e.session.backend.glContext.version),[u,l]=e.calculateTextureWidthAndHeight(a,o.TextureType.packedLastDimension),[c,p]=[u/4,l],d=`\\n vec4 get_MeanAndVariance(int[2] mv) {\\n int offset = indicesToOffset_MeanAndVariance(mv);\\n vec2 coords = offsetToCoords(offset, ${c}, ${p});\\n return ${s.texture2D}(MeanAndVariance, coords);\\n }\\n\\n float process(int[4] indices) {\\n int mv[2];\\n mv[0] = indices[0];\\n mv[1] = indices[1];\\n vec4 mean_and_variance = get_MeanAndVariance(mv);\\n float mean = mean_and_variance.r;\\n float variance = mean_and_variance.g;\\n\\n int sb[1];\\n sb[0] = indices[1];\\n float scale = _Scale(sb);\\n float b = _B(sb);\\n\\n return scale * (_X(indices) - mean) / sqrt(variance + epsilon) + b;\\n }`;return Object.assign(Object.assign({},t),{output:{dims:n.dims,type:n.type,textureType:o.TextureType.unpacked},variables:[{name:\"epsilon\",type:\"float\",data:i}],shaderSource:d})})(e,a,t,n,i)})},l=e=>{if(!e||3!==e.length)throw new Error(\"InstanceNormalization requires 3 inputs.\");const t=e[0],n=e[1],r=e[2];if(t.dims.length<3||1!==n.dims.length||1!==r.dims.length)throw new Error(\"Invalid input shape.\");if(n.dims[0]!==t.dims[1]||r.dims[0]!==t.dims[1])throw new Error(\"Input shapes are mismatched.\");if(\"float32\"!==t.type&&\"float64\"!==t.type||\"float32\"!==n.type&&\"float64\"!==n.type||\"float32\"!==r.type&&\"float64\"!==r.type)throw new Error(\"Invalid input type.\");if(4!==e[0].dims.length)throw new Error(\"Only support 4-D input shape.\")};},7006:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createLrnProgramInfoLoader=t.parseLrnAttributes=t.lrn=void 0;const r=n(4910),o=n(5639);t.lrn=(e,t,n)=>(s(t),[e.run(a(t,n),t)]),t.parseLrnAttributes=e=>{const t=e.attributes.getFloat(\"alpha\",1e-4),n=e.attributes.getFloat(\"beta\",.75),o=e.attributes.getFloat(\"bias\",1),i=e.attributes.getInt(\"size\");return (0, r.createAttributeWithCacheKey)({alpha:t,beta:n,bias:o,size:i})};const i={name:\"LRN\",inputNames:[\"X\"],inputTypes:[o.TextureType.unpacked]};function a(e,t){return Object.assign(Object.assign({},i),{cacheHint:t.cacheKey,get:()=>function(e,t){const n=e[0].dims[1],r=e[0].dims.length,a=-Math.floor((t.size-1)/2),s=Math.ceil((t.size-1)/2),u=`float(${t.alpha}) / float(${t.size})`,l=`\\n float process(int indices[${r}]) {\\n int c = indices[1];\\n float x = _X(indices);\\n float square_sum = 0.0;\\n\\n for (int i = ${a}; i <= ${s}; i++) {\\n int idx = c + i;\\n if (c >= 0 && c < ${n}) {\\n indices[1] = idx;\\n float j = _X(indices);\\n square_sum += j * j;\\n }\\n }\\n return x / pow(float(${t.bias}) + ${u} * square_sum, float(${t.beta}));\\n }`;return Object.assign(Object.assign({},i),{cacheHint:t.cacheKey,output:{dims:e[0].dims,type:e[0].type,textureType:o.TextureType.unpacked},shaderSource:l})}(e,t)})}t.createLrnProgramInfoLoader=a;const s=e=>{if(!e||1!==e.length)throw new Error(\"LRN requires 1 input.\");if(4!==e[0].dims.length)throw new Error('currently only support LRN for input with \"NCHW\" format');if(\"float32\"!==e[0].type)throw new Error(\"input should be float type\")};},5632:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createPackedMatmulProgramInfoLoader=void 0;const r=n(7273),o=n(6757),i=n(5639),a=n(432),s=n(2150),u=n(8276);t.createPackedMatmulProgramInfoLoader=(e,t,n)=>{const l=(c=t.length>2,p=n.activationCacheKey,{name:\"MatMul (packed)\",inputNames:c?[\"A\",\"B\",\"Bias\"]:[\"A\",\"B\"],inputTypes:c?[i.TextureType.packed,i.TextureType.packed,i.TextureType.packed]:[i.TextureType.packed,i.TextureType.packed],cacheHint:p});var c,p;return Object.assign(Object.assign({},l),{get:()=>((e,t,n,l)=>{const c=n.length>2,p=c?\"value += getBiasForMatmul();\":\"\",d=n[0].dims,f=n[1].dims,h=r.BroadcastUtil.calcShape(d,f,!0),g=!r.ShapeUtil.areEqual(n[0].dims,n[1].dims);if(!h)throw new Error(\"Can't use matmul on the given tensors\");const m=d[d.length-1],b=Math.ceil(m/2),y=d.length,w=f.length,_=(0, o.getGlsl)(e.session.backend.glContext.version),v=(0, a.getCoordsDataType)(h.length),x=h.length,T=(0, a.getGlChannels)(),{activationFunction:S,applyActivation:O}=(0, s.getActivationSnippet)(l),A=c?`${(0, u.getBiasForMatmul)(v,T,n[2].dims,h,!0)}`:\"\",E=g?`${function(e,t,n,o){let i=[],a=[];const s=n[0].dims,u=n[1].dims,l=s.length,c=u.length,p=o.length,d=p-l,f=p-c;i=s.map(((e,n)=>`coords.${t[n+d]}`)),i[l-1]=\"i*2\",i.join(\", \"),a=u.map(((e,n)=>`coords.${t[n+f]}`)),a[c-2]=\"i*2\",a.join(\", \");const h=r.BroadcastUtil.getBroadcastDims(s,o),g=r.BroadcastUtil.getBroadcastDims(u,o),m=h.map((e=>`coords.${t[e+d]} = 0;`)).join(\"\\n\"),b=g.map((e=>`coords.${t[e+f]} = 0;`)).join(\"\\n\"),y=`int lastDim = coords.${t[p-1]};\\n coords.${t[p-1]} = coords.${t[p-2]};\\n coords.${t[p-2]} = lastDim;`;return `\\nvec4 getAAtOutCoordsMatmul(int i) {\\n ${e} coords = getOutputCoords();\\n ${y}\\n ${m}\\n vec4 outputValue = getA(${i});\\n return outputValue;\\n}\\n\\nvec4 getBAtOutCoordsMatmul(int i) {\\n ${e} coords = getOutputCoords();\\n ${y}\\n ${b}\\n vec4 outputValue = getB(${a});\\n return outputValue;\\n}`}(v,T,n,h)}`:\"\",I=g?\"getAAtOutCoordsMatmul(i)\":`getA(${function(e,t){let n=\"\";for(let r=0;r{Object.defineProperty(t,\"__esModule\",{value:!0}),t.getBiasForMatmul=t.createMatmulProgramInfoLoader=t.parseMatMulAttributes=t.matMul=void 0;const r=n(7273),o=n(5639),i=n(432),a=n(2150),s=n(5632);t.matMul=(e,t,n)=>(c(t),e.session.pack?[e.run((0, s.createPackedMatmulProgramInfoLoader)(e,t,n),t)]:[e.run(l(t,n),t)]),t.parseMatMulAttributes=e=>(0, a.parseInternalActivationAttributes)(e.attributes);const u=(e,t)=>({name:\"MatMul\",inputNames:e?[\"A\",\"B\",\"Bias\"]:[\"A\",\"B\"],inputTypes:e?[o.TextureType.unpacked,o.TextureType.unpacked,o.TextureType.unpacked]:[o.TextureType.unpacked,o.TextureType.unpacked],cacheHint:t});function l(e,t){const n=u(e.length>2,t.activationCacheKey);return Object.assign(Object.assign({},n),{get:()=>function(e,t,n){const s=t[0].dims,u=t[1].dims,l=r.BroadcastUtil.calcShape(s,u,!0);if(!l)throw new Error(\"Can't use matmul on the given tensors\");const c=(0, i.getCoordsDataType)(l.length),d=(0, i.getGlChannels)(),{activationFunction:f,applyActivation:h}=(0, a.getActivationSnippet)(n),g=t.length>2,m=g?\"value += getBiasForMatmul();\":\"\",b=g?`${p(c,d,t[2].dims,l,!1)}`:\"\",y=l.length,w=s.length,_=u.length,v=`\\n ${f}\\n ${b}\\n float process(int indices[${y}]) {\\n int a[${w}];\\n int b[${_}];\\n bcastMatmulIndices_A(indices, a);\\n bcastMatmulIndices_B(indices, b);\\n\\n float value;\\n for (int k=0; k<${s[s.length-1]}; ++k) {\\n a[${w-1}] = k;\\n b[${_-2}] = k;\\n value += _A(a) * _B(b);\\n }\\n ${m}\\n ${h}\\n return value;\\n }`;return Object.assign(Object.assign({},e),{output:{dims:l,type:t[0].type,textureType:o.TextureType.unpacked},shaderSource:v})}(n,e,t)})}t.createMatmulProgramInfoLoader=l;const c=e=>{if(!e||2!==e.length)throw new Error(\"MatMul requires 2 inputs.\");if(e[0].dims[e[0].dims.length-1]!==e[1].dims[e[1].dims.length-2])throw new Error(\"shared dimension does not match.\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type||\"float32\"!==e[1].type&&\"float64\"!==e[1].type)throw new Error(\"inputs should be float type\");if(e[0].type!==e[1].type)throw new Error(\"inputs types should match\")};function p(e,t,n,o,i){let a=\"\";const s=n.length,u=o.length,l=u-s;a=u<2&&s>0?\"coords\":n.map(((e,n)=>`coords.${t[n+l]}`)).join(\", \");const c=r.BroadcastUtil.getBroadcastDims(n,o).map((e=>`coords.${t[e+l]} = 0;`)).join(\"\\n\");let p=\"vec4(outputValue.xx, outputValue.yy)\";return 1===r.ShapeUtil.size(n)&&(p=\"vec4(outputValue.x)\"),i?`\\nvec4 getBiasForMatmul() {\\n ${e} coords = getOutputCoords();\\n ${c}\\n vec4 outputValue = getBias(${a});\\n return ${p};\\n}`:`\\nfloat getBiasForMatmul() {\\n ${e} coords = getOutputCoords();\\n ${c}\\n return getBias(coords.x);\\n}`}t.getBiasForMatmul=p;},9:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createPackProgramInfoLoader=void 0;const r=n(6757),o=n(5639),i=n(432),a=n(5614),s={name:\"pack\",inputNames:[\"A\"],inputTypes:[o.TextureType.unpackedReversed]};t.createPackProgramInfoLoader=(e,t)=>Object.assign(Object.assign({},s),{get:()=>((e,t)=>{const n=(0, r.getGlsl)(e.session.backend.glContext.version),u=t.dims,l=u.length,c=t.dims.length,p=(0, i.getCoordsDataType)(c),d=(0, a.getChannels)(\"rc\",c),f=(h=c,g=d,m=u[u.length-2],b=u[u.length-1],0===h||1===h?\"\":`\\n int r = ${g[h-2]};\\n int c = ${g[h-1]};\\n int rp1 = ${g[h-2]} + 1;\\n int cp1 = ${g[h-1]} + 1;\\n bool rEdge = rp1 >= ${b};\\n bool cEdge = cp1 >= ${m};\\n `);var h,g,m,b;let y;y=0===l?[1,1]:1===l?[u[0],1]:[u[c-1],u[c-2]];const w=function(e,t,n){if(0===e)return \"false\";if(1===e)return `rc > ${t[0]}`;let r=\"\";for(let o=e-2;o= ${t[o-e+2]}`,o= ${e[0]} ? 0. : getA(rc + 1),\\n 0, 0`;let r=\"\";if(n>2)for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.unpackFromChannel=t.getChannels=t.getVecChannels=void 0;const r=n(432);function o(e,t){return (0, r.getGlChannels)(t).map((t=>`${e}.${t}`))}t.getVecChannels=o,t.getChannels=function(e,t){return 1===t?[e]:o(e,t)},t.unpackFromChannel=function(){return \"\\n float getChannel(vec4 frag, int dim) {\\n int modCoord = imod(dim, 2);\\n return modCoord == 0 ? frag.r : frag.g;\\n }\\n\\n float getChannel(vec4 frag, vec2 innerDims) {\\n vec2 modCoord = mod(innerDims, 2.);\\n return modCoord.x == 0. ?\\n (modCoord.y == 0. ? frag.r : frag.g) :\\n (modCoord.y == 0. ? frag.b : frag.a);\\n }\\n \"};},5565:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parsePadAttributesV11=t.padV11=t.parsePadAttributesV2=t.padV2=void 0;const r=n(4910),o=n(7273),i=n(6757),a=n(5639),s={name:\"Pad\",inputNames:[\"A\"],inputTypes:[a.TextureType.unpacked]};t.padV2=(e,t,n)=>(c(t),[e.run(Object.assign(Object.assign({},s),{cacheHint:n.cacheKey,get:()=>l(e,t[0],n)}),t)]),t.parsePadAttributesV2=e=>{const t=e.attributes.getString(\"mode\",\"constant\"),n=e.attributes.getFloat(\"value\",0),o=e.attributes.getInts(\"pads\");return (0, r.createAttributeWithCacheKey)({mode:t,value:n,pads:o})},t.padV11=(e,n,r)=>{p(n);const o=u(e,n,r);return (0, t.padV2)(e,[n[0]],o)},t.parsePadAttributesV11=e=>e.attributes.getString(\"mode\",\"constant\");const u=(e,t,n)=>{if(!e.session.isInitializer(t[1].dataId)||t.length>=3&&!e.session.isInitializer(t[2].dataId))throw new Error(\"dynamic pad attributes are not allowed\");const o=Array.from(t[1].integerData),i=t.length>=3?t[2].floatData[0]:0;return (0, r.createAttributeWithCacheKey)({mode:n,pads:o,value:i})},l=(e,t,n)=>{const r=o.ShapeUtil.padShape(t.dims.slice(),n.pads),i=r.length,s=`\\n ${d(e,t,n)}\\n float process(int[${i}] indices) {\\n return padA(indices);\\n }`;return {name:\"Pad\",inputNames:[\"A\"],inputTypes:[a.TextureType.unpacked],output:{dims:r,type:t.type,textureType:a.TextureType.unpacked},shaderSource:s}},c=e=>{if(!e||1!==e.length)throw new Error(\"Pad requires 1 input\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type)throw new Error(\"Invalid input type.\")},p=e=>{if(!e||2!==e.length&&3!==e.length)throw new Error(\"Pad requires 2 or 3 inputs\");if(\"int32\"!==e[1].type)throw new Error(\"Invalid input type.\");if(e.length>=3&&\"string\"===e[2].type)throw new Error(\"Invalid input type.\")},d=(e,t,n)=>{const r=(0, i.getGlsl)(e.session.backend.glContext.version),[s,u]=e.calculateTextureWidthAndHeight(t.dims,a.TextureType.unpacked),l=o.ShapeUtil.computeStrides(t.dims);switch(n.mode){case\"constant\":return f(r,t.dims,l,s,u,n.pads,n.value);case\"reflect\":return h(r,t.dims,l,s,u,n.pads);case\"edge\":return g(r,t.dims,l,s,u,n.pads);default:throw new Error(\"Invalid mode\")}},f=(e,t,n,r,o,i,a)=>{const s=t.length;let u=\"\";for(let e=s-1;e>=0;--e)u+=`\\n k = m[${e}] - ${i[e]};\\n if (k < 0) return constant;\\n if (k >= ${t[e]}) return constant;\\n offset += k * ${n[e]};\\n `;return `\\n float padA(int m[${s}]) {\\n const float constant = float(${a});\\n int offset = 0;\\n int k = 0;\\n ${u}\\n vec2 coords = offsetToCoords(offset, ${r}, ${o});\\n float value = getColorAsFloat(${e.texture2D}(A, coords));\\n return value;\\n }\\n `},h=(e,t,n,r,o,i)=>{const a=t.length;let s=\"\";for(let e=a-1;e>=0;--e)s+=`\\n k = m[${e}] - ${i[e]};\\n if (k < 0) { k = -k; }\\n {\\n const int _2n_1 = ${2*(t[e]-1)};\\n k = int( mod( float(k), float(_2n_1) ) ) ;\\n if(k >= ${t[e]}) { k = _2n_1 - k; }\\n }\\n offset += k * ${n[e]};\\n `;return `\\n float padA(int m[${a}]) {\\n int offset = 0;\\n int k = 0;\\n ${s}\\n vec2 coords = offsetToCoords(offset, ${r}, ${o});\\n float value = getColorAsFloat(${e.texture2D}(A, coords));\\n return value;\\n }\\n `},g=(e,t,n,r,o,i)=>{const a=t.length;let s=\"\";for(let e=a-1;e>=0;--e)s+=`\\n k = m[${e}] - ${i[e]};\\n if (k < 0) k = 0;\\n if (k >= ${t[e]}) k = ${t[e]-1};\\n offset += k * ${n[e]};\\n `;return `\\n float padA(int m[${a}]) {\\n int offset = 0;\\n int k = 0;\\n ${s}\\n vec2 coords = offsetToCoords(offset, ${r}, ${o});\\n float value = getColorAsFloat(${e.texture2D}(A, coords));\\n return value;\\n }\\n `};},2834:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.globalMaxPool=t.parseMaxPoolAttributes=t.maxPool=t.parseGlobalAveragePoolAttributes=t.globalAveragePool=t.parseAveragePoolAttributes=t.averagePool=void 0;const r=n(4910),o=n(7273),i=n(5639);t.averagePool=(e,t,n)=>{p(t);const r={name:\"AveragePool\",inputNames:[\"X\"],inputTypes:[i.TextureType.unpacked],cacheHint:n.cacheKey};return [e.run(Object.assign(Object.assign({},r),{get:()=>a(t,r,!1,n)}),t)]},t.parseAveragePoolAttributes=e=>{const t=e.attributes.getString(\"auto_pad\",\"NOTSET\"),n=e.attributes.getInt(\"ceil_mode\",0),o=0!==e.attributes.getInt(\"count_include_pad\",0),i=e.attributes.getInts(\"kernel_shape\"),a=e.attributes.getInts(\"strides\",[]),s=e.attributes.getInts(\"pads\",[]);if(0!==n)throw new Error(\"using ceil() in shape computation is not yet supported for AveragePool\");return (0, r.createAttributeWithCacheKey)({autoPad:t,ceilMode:n,countIncludePad:o,kernelShape:i,strides:a,pads:s})};const a=(e,t,n,r)=>{const[a,s]=u(e,r,n),l=o.ShapeUtil.size(a.kernelShape);let c=\"\";a.countIncludePad?c+=`value /= float(${l});`:c+=`value /= float(${l} - pad);`;const p=`\\n ${d(e[0].dims,a,\"value += _X(x);\",c,\"0.0\")}\\n `;return Object.assign(Object.assign({},t),{output:{dims:s,type:e[0].type,textureType:i.TextureType.unpacked},shaderSource:p})};t.globalAveragePool=(e,t,n)=>{p(t);const r={name:\"GlobalAveragePool\",inputNames:[\"X\"],inputTypes:[i.TextureType.unpacked],cacheHint:`${n.countIncludePad}`};return [e.run(Object.assign(Object.assign({},r),{get:()=>a(t,r,!0,n)}),t)]},t.parseGlobalAveragePoolAttributes=e=>{const t=0!==e.attributes.getInt(\"count_include_pad\",0);return (0, r.createAttributeWithCacheKey)({autoPad:\"\",ceilMode:0,countIncludePad:t,kernelShape:[],strides:[],pads:[]})},t.maxPool=(e,t,n)=>{p(t);const r={name:\"MaxPool\",inputNames:[\"X\"],inputTypes:[i.TextureType.unpacked],cacheHint:n.cacheKey};return [e.run(Object.assign(Object.assign({},r),{get:()=>s(t,r,!1,n)}),t)]},t.parseMaxPoolAttributes=e=>{const t=e.attributes.getString(\"auto_pad\",\"NOTSET\"),n=e.attributes.getInt(\"ceil_mode\",0),o=e.attributes.getInts(\"kernel_shape\"),i=e.attributes.getInts(\"strides\",[]),a=e.attributes.getInts(\"pads\",[]),s=e.attributes.getInt(\"storage_order\",0),u=e.attributes.getInts(\"dilations\",[]);if(0!==s)throw new Error(\"column major storage order is not yet supported for MaxPool\");if(0!==n)throw new Error(\"using ceil() in shape computation is not yet supported for MaxPool\");return (0, r.createAttributeWithCacheKey)({autoPad:t,ceilMode:n,countIncludePad:!1,kernelShape:o,strides:i,pads:a,storageOrder:s,dilations:u})};const s=(e,t,n,r)=>{const[o,a]=u(e,r,n),s=`\\n ${d(e[0].dims,o,\"\\n value = max(_X(x), value);\\n \",\"\",\"-1e5\")}\\n `;return Object.assign(Object.assign({},t),{output:{dims:a,type:e[0].type,textureType:i.TextureType.unpacked},shaderSource:s})},u=(e,t,n)=>{const r=e[0].dims.slice(),i=Object.hasOwnProperty.call(t,\"dilations\"),a=t.kernelShape.slice(),s=t.strides.slice(),u=i?t.dilations.slice():[],l=t.pads.slice();o.PoolConvUtil.adjustPoolAttributes(n,r,a,s,u,l);const c=o.PoolConvUtil.computePoolOutputShape(n,r,s,u,a,l,t.autoPad),p=Object.assign({},t);return i?Object.assign(p,{kernelShape:a,strides:s,pads:l,dilations:u,cacheKey:t.cacheKey}):Object.assign(p,{kernelShape:a,strides:s,pads:l,cacheKey:t.cacheKey}),[p,c]},l={autoPad:\"\",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[],cacheKey:\"\"},c={name:\"GlobalMaxPool\",inputNames:[\"X\"],inputTypes:[i.TextureType.unpacked]};t.globalMaxPool=(e,t)=>(p(t),[e.run(Object.assign(Object.assign({},c),{get:()=>s(t,c,!0,l)}),t)]);const p=e=>{if(!e||1!==e.length)throw new Error(\"Pool ops requires 1 input.\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type)throw new Error(\"Invalid input type.\")},d=(e,t,n,r,i)=>{const a=e.length;if(t.kernelShape.length<=2){const o=t.kernelShape[t.kernelShape.length-1],s=t.strides[t.strides.length-1],u=t.pads[t.pads.length/2-1],l=t.pads[t.pads.length-1],c=e[a-1];let p=\"\",d=\"\",f=\"\";if(p=u+l!==0?`\\n for (int i = 0; i < ${o}; i++) {\\n x[${a} - 1] = indices[${a} - 1] * ${s} - ${u} + i;\\n if (x[${a} - 1] < 0 || x[${a} - 1] >= ${c}) {\\n pad++;\\n continue;\\n }\\n ${n}\\n }`:`\\n for (int i = 0; i < ${o}; i++) {\\n x[${a} - 1] = indices[${a} - 1] * ${s} - ${u} + i;\\n ${n}\\n }`,2===t.kernelShape.length){const n=t.kernelShape[t.kernelShape.length-2],r=t.strides[t.strides.length-2],i=t.pads[t.pads.length/2-2],s=t.pads[t.pads.length-2],u=e[a-2];d=i+s!==0?`\\n for (int j = 0; j < ${n}; j++) {\\n x[${a} - 2] = indices[${a} - 2] * ${r} - ${i} + j;\\n if (x[${a} - 2] < 0 || x[${a} - 2] >= ${u}) {\\n pad+= ${o};\\n continue;\\n }\\n `:`\\n for (int j = 0; j < ${n}; j++) {\\n x[${a} - 2] = indices[${a} - 2] * ${r} - ${i} + j;\\n `,f=\"\\n }\\n \";}return `\\n float process(int indices[${a}]) {\\n int x[${a}];\\n copyVec(indices, x);\\n\\n float value = ${i};\\n int pad = 0;\\n ${d}\\n ${p}\\n ${f}\\n ${r}\\n return value;\\n }\\n `}{const s=o.ShapeUtil.size(t.kernelShape),u=o.ShapeUtil.computeStrides(t.kernelShape),l=u.length,c=t.pads.length,p=h(l),d=f(e,\"inputDims\"),g=f(t.pads,\"pads\"),m=f(u,\"kernelStrides\"),b=f(t.strides,\"strides\");let y=\"\";return y=t.pads.reduce(((e,t)=>e+t))?`\\n if (x[j] >= inputDims[j] || x[j] < 0) {\\n pad++;\\n isPad = true;\\n break;\\n }\\n }\\n if (!isPad) {\\n ${n}\\n }`:`\\n }\\n ${n}\\n `,`\\n ${p}\\n float process(int indices[${a}]) {\\n int x[${a}];\\n copyVec(indices, x);\\n int offset[${l}];\\n int pads[${c}];\\n int inputDims[${a}];\\n int kernelStrides[${l}];\\n int strides[${l}];\\n ${g}\\n ${d}\\n ${b}\\n ${m}\\n\\n float value = ${i};\\n int pad = 0;\\n bool isPad = false;\\n for (int i = 0; i < ${s}; i++) {\\n offsetToIndices(i, kernelStrides, offset);\\n isPad = false;\\n for (int j = ${a} - ${l}; j < ${a}; j++) {\\n x[j] = indices[j] * strides[j - ${a} + ${l}]\\n + offset[j - ${a} + ${l}] - pads[j - 2];\\n ${y}\\n }\\n ${r}\\n\\n return value;\\n }\\n `}},f=(e,t)=>{let n=\"\";for(let r=0;r`\\n void offsetToIndices(int offset, int[${e}] strides, out int[${e}] indices) {\\n if (${e} == 0) {\\n return;\\n }\\n for (int i = 0; i < ${e} - 1; ++i) {\\n indices[i] = offset / strides[i];\\n offset -= indices[i] * strides[i];\\n }\\n indices[${e} - 1] = offset;\\n }`;},1010:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.reduceLogSumSquare=t.reduceLogSum=t.reduceProd=t.reduceMin=t.reduceMax=t.reduceMean=t.reduceSum=t.parseReduceAttributes=void 0;const r=n(4910),o=n(6145),i=n(7273),a=n(5639),s=(e,t,n,r,o)=>{l(t);const i={name:r,inputNames:[\"A\"],inputTypes:[a.TextureType.unpacked]};return [e.run(Object.assign(Object.assign({},i),{cacheHint:n.cacheKey,get:()=>u(e,t,n,r,o,i)}),t)]};t.parseReduceAttributes=e=>{const t=e.attributes.getInts(\"axes\",[]),n=1===e.attributes.getInt(\"keepdims\",1);return (0, r.createAttributeWithCacheKey)({axes:t,keepDims:n})};const u=(e,t,n,r,o,s)=>{const u=[],l=t[0].dims.length||1,c=[],p=i.ShapeUtil.normalizeAxes(n.axes,t[0].dims.length),d=o(t,p);let f=d[1];for(let e=0;e=0||0===p.length?(n.keepDims&&u.push(1),f=`\\n for(int j${e} = 0; j${e} < ${t[0].dims[e]}; j${e}++) {\\n inputIdx[${e}] = j${e};\\n ${f}\\n }`):(c.push(`inputIdx[${e}] = outputIdx[${u.length}];`),u.push(t[0].dims[e]));const h=`\\n float process(int outputIdx[${u.length||1}]) {\\n float value; // final result\\n int inputIdx[${l}]; // addressing input data\\n ${c.join(\"\\n\")}\\n ${d[0]} // init ops for reduce max/min\\n ${f}\\n ${d[2]} // final computation for reduce mean\\n return value;\\n }`;return Object.assign(Object.assign({},s),{output:{dims:u,type:t[0].type,textureType:a.TextureType.unpacked},shaderSource:h})},l=e=>{if(!e||1!==e.length)throw new Error(\"Reduce op requires 1 input.\");if(-1===o.NUMBER_TYPES.indexOf(e[0].type))throw new Error(\"Invalid input type.\")};t.reduceSum=(e,t,n)=>s(e,t,n,\"ReduceSum\",(()=>[\"value = 0.0;\",\"value += _A(inputIdx);\",\"\"])),t.reduceMean=(e,t,n)=>s(e,t,n,\"ReduceMean\",((e,t)=>{let n=1;for(let r=0;r=0||0===t.length)&&(n*=e[0].dims[r]);return [\"value = 0.0;\",\"value += _A(inputIdx);\",`value /= ${n}.;`]})),t.reduceMax=(e,t,n)=>s(e,t,n,\"ReduceMax\",((e,t)=>{const n=[];for(let r=0;r=0||0===t.length)&&n.push(`inputIdx[${r}] = 0;`);return [`${n.join(\"\\n\")}\\nvalue = _A(inputIdx);`,\"value = max(value, _A(inputIdx));\",\"\"]})),t.reduceMin=(e,t,n)=>s(e,t,n,\"ReduceMin\",((e,t)=>{const n=[];for(let r=0;r=0||0===t.length)&&n.push(`inputIdx[${r}] = 0;`);return [`${n.join(\"\\n\")}\\nvalue = _A(inputIdx);`,\"value = min(value, _A(inputIdx));\",\"\"]})),t.reduceProd=(e,t,n)=>s(e,t,n,\"ReduceProd\",(()=>[\"value = 1.0;\",\"value *= _A(inputIdx);\",\"\"])),t.reduceLogSum=(e,t,n)=>s(e,t,n,\"ReduceLogSum\",(()=>[\"value = 0.0;\",\"value += _A(inputIdx);\",\"value = log(value);\"])),t.reduceLogSumSquare=(e,t,n)=>s(e,t,n,\"ReduceLogSumSquare\",(()=>[\"float t; value = 0.0;\",\"t = _A(inputIdx); value += t * t;\",\"\"]));},7379:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.isReshapeCheap=t.processDims3D=t.createPackedReshape3DProgramInfoLoader=void 0;const r=n(7273),o=n(6757),i=n(5639),a=n(5614);t.createPackedReshape3DProgramInfoLoader=(e,t,n)=>{const s=(e=>({name:\"Reshape (packed)\",inputTypes:[i.TextureType.packed],inputNames:[\"A\"],cacheHint:`${e}`}))(n);return Object.assign(Object.assign({},s),{get:()=>((e,t,n,s)=>{const u=t.dims,l=s;let c=\"\";for(let e=0;e<4;e++){let t=\"\";switch(e){case 0:t=\"outputCoords = rc;\";break;case 1:t=\"outputCoords = ivec3(rc.x, rc.y+1, rc.z);\";break;case 2:t=\"outputCoords = ivec3(rc.x, rc.y, rc.z+1);\";break;case 3:t=\"outputCoords = ivec3(rc.x, rc.y+1, rc.z+1);\";break;default:throw new Error}c+=`\\n ${t}\\n ${e>0?\"if(outputCoords.y < rows && outputCoords.z < cols){\":\"\"}\\n int flattenedIndex = getFlattenedIndex(outputCoords);\\n\\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flattenedIndex);\\n vec2 innerDims = vec2(float(inputRC.y),float(inputRC.z));\\n\\n result[${e}] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), innerDims);\\n\\n ${e>0?\"}\":\"\"}\\n `;}const p=(0, o.getGlsl)(e.session.backend.glContext.version),d=`\\n ${function(e){const t=r.ShapeUtil.computeStrides(e),n=[\"b\",\"r\",\"c\"],o=\"index\";return `\\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\\n ${t.map(((e,r)=>`int ${n[r]} = ${o} / ${e}; ${r===t.length-1?`int ${n[r+1]} = ${o} - ${n[r]} * ${e}`:`index -= ${n[r]} * ${e}`};`)).join(\"\")}\\n return ivec3(b, r, c);\\n }\\n `}(u)}\\n ${function(e){const t=r.ShapeUtil.computeStrides(e);return `\\n int getFlattenedIndex(ivec3 coords) {\\n // reverse y, z order\\n return coords.x * ${t[0]} + coords.z * ${t[1]} + coords.y;\\n }\\n`}(l)}\\n ${(0, a.unpackFromChannel)()}\\n\\n void main() {\\n ivec3 rc = getOutputCoords();\\n\\n vec4 result = vec4(0.0);\\n\\n ivec3 outputCoords;\\n int rows = ${l[2]};\\n int cols = ${l[1]};\\n\\n ${c}\\n ${p.output} = result;\\n }\\n `;return Object.assign(Object.assign({},n),{output:{dims:l,type:t.type,textureType:i.TextureType.packed},shaderSource:d,hasMain:!0})})(e,t,s,n)})},t.processDims3D=function(e){if(0===e.length)return [1,1,1];let t=1;for(let n=0;n1?e[e.length-2]:1,e[e.length-1]]},t.isReshapeCheap=function(e,t){let n=!1;return n=0===e.length||0===t.length||(e.length<2||t.length<2?e[e.length-1]===t[t.length-1]:e[e.length-1]===t[t.length-1]&&e[e.length-2]===t[t.length-2]),n};},8126:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.reshape=void 0;const r=n(7273);t.reshape=(e,t)=>{const n=r.ShapeUtil.calculateReshapedDims(t[0].dims,t[1].integerData);return e.session.pack?[e.reshapePacked(t[0],n)]:[e.reshapeUnpacked(t[0],n)]};},2801:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseResizeAttributesV11=t.parseResizeAttributesV10=t.resize=void 0;const r=n(6757),o=n(5639),i=n(432),a=n(5614),s=n(3980),u={name:\"Resize\",inputNames:[\"A\"],inputTypes:[o.TextureType.packed]};t.resize=(e,t,n)=>((0, s.validateInputs)(t,n),[e.run(Object.assign(Object.assign({},u),{cacheHint:n.cacheKey,get:()=>l(e,t,n)}),t)]),t.parseResizeAttributesV10=e=>(0, s.parseUpsampleAttributes)(e,10),t.parseResizeAttributesV11=e=>(0, s.parseUpsampleAttributes)(e,11);const l=(e,t,n)=>{const s=(0, r.getGlsl)(e.session.backend.glContext.version),[l,p]=c(t,n);if(l.every((e=>1===e))&&\"tf_crop_and_resize\"!==n.coordinateTransformMode)return Object.assign(Object.assign({},u),{output:{dims:p,type:t[0].type,textureType:o.TextureType.packed},hasMain:!0,shaderSource:`void main() {\\n vec4 v = ${s.texture2D}(X, TexCoords);\\n ${s.output} = v;\\n }`});const d=p.length;if(d<2)throw new Error(`output dimension should be at least 2, but got ${d}`);const f=p[d-2],h=p[d-1],g=t[0].dims;if(d!==g.length)throw new Error(`output dimension should match input ${g.length}, but got ${d}`);const m=g[d-2],b=g[d-1],y=l[d-2],w=l[d-1];let _=\"\";if(\"linear\"!==n.mode)throw new Error(`resize (packed) does not support mode: '${n.mode}'`);switch(n.coordinateTransformMode){case\"asymmetric\":_=\"\\n vec4 getSourceFracIndex(ivec4 coords) {\\n return vec4(coords) / scaleWHWH;\\n }\\n \";break;case\"half_pixel\":_=\"\\n vec4 getSourceFracIndex(ivec4 coords) {\\n return (vec4(coords) + 0.5) / scaleWHWH - 0.5;\\n }\\n \";break;case\"pytorch_half_pixel\":_=`\\n vec4 getSourceFracIndex(ivec4 coords) {\\n vec4 fcoords = vec4(coords);\\n return vec4(\\n ${h}.0 > 1.0 ? (fcoords.x + 0.5) / scaleWHWH.x - 0.5 : 0.0,\\n ${f}.0 > 1.0 ? (fcoords.y + 0.5) / scaleWHWH.y - 0.5 : 0.0,\\n ${h}.0 > 1.0 ? (fcoords.z + 0.5) / scaleWHWH.z - 0.5 : 0.0,\\n ${f}.0 > 1.0 ? (fcoords.w + 0.5) / scaleWHWH.w - 0.5 : 0.0\\n );\\n }\\n `;break;case\"align_corners\":_=`\\n vec4 getSourceFracIndex(ivec4 coords) {\\n vec4 resized = vec4(${h}.0 - 1.0, ${f}.0 - 1.0, ${h}.0 - 1.0,\\n ${f}.0 - 1.0);\\n vec4 original = vec4(${b}.0 - 1.0, ${m}.0 - 1.0, ${b}.0 - 1.0,\\n ${m}.0 - 1.0);\\n vec4 new_scale = original / resized;\\n return vec4(coords) * new_scale;\\n }\\n `;break;default:throw new Error(`resize (packed) does not support coordinateTransformMode: '${n.coordinateTransformMode}'`)}const v=(0, i.getCoordsDataType)(d),x=`\\n const vec2 inputWH = vec2(${m}.0, ${b}.0);\\n const vec4 scaleWHWH = vec4(float(${y}), float(${w}), float(${y}), float(${w}));\\n ${(0, a.unpackFromChannel)()}\\n ${_}\\n float getAValue(int x10, int r, int c, int d) {\\n return getChannel(getA(x10, r, c, d), vec2(c, d));\\n }\\n void main() {\\n ${v} rc = getOutputCoords();\\n\\n int batch = rc[0];\\n int depth = rc[1];\\n\\n // retrieve the 4 coordinates that is used in the 4 packed output values.\\n ivec4 coords = ivec4(rc.wz, rc.w + 1, rc.z + 1);\\n\\n // calculate the source index in fraction\\n vec4 sourceFrac = getSourceFracIndex(coords);\\n\\n // get the lower and upper bound of the 4 values that will be packed into one texel.\\n ivec4 x00 = ivec4(max(sourceFrac.xy, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.xy)));\\n ivec4 x01 = ivec4(max(sourceFrac.xw, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.xw)));\\n ivec4 x10 = ivec4(max(sourceFrac.zy, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.zy)));\\n ivec4 x11 = ivec4(max(sourceFrac.zw, vec2(0.0)), min(inputWH - 1.0, ceil(sourceFrac.zw)));\\n\\n bool hasNextRow = rc.w < ${f-1};\\n bool hasNextCol = rc.z < ${h-1};\\n\\n // pack x00, x01, x10, x11's top-left corner into one vec4 structure\\n vec4 topLeft = vec4(\\n getAValue(batch, depth, x00.x, x00.y),\\n hasNextCol ? getAValue(batch, depth, x01.x, x01.y) : 0.0,\\n hasNextRow ? getAValue(batch, depth, x10.x, x10.y) : 0.0,\\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.x, x11.y) : 0.0);\\n\\n // pack x00, x01, x10, x11's top-right corner into one vec4 structure\\n vec4 topRight = vec4(\\n getAValue(batch, depth, x00.x, x00.w),\\n hasNextCol ? getAValue(batch, depth, x01.x, x01.w) : 0.0,\\n hasNextRow ? getAValue(batch, depth, x10.x, x10.w) : 0.0,\\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.x, x11.w) : 0.0);\\n\\n // pack x00, x01, x10, x11's bottom-left corner into one vec4 structure\\n vec4 bottomLeft = vec4(\\n getAValue(batch, depth, x00.z, x00.y),\\n hasNextCol ? getAValue(batch, depth, x01.z, x01.y) : 0.0,\\n hasNextRow ? getAValue(batch, depth, x10.z, x10.y) : 0.0,\\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.z, x11.y) : 0.0);\\n\\n // pack x00, x01, x10, x11's bottom-right corner into one vec4 structure\\n vec4 bottomRight = vec4(\\n getAValue(batch, depth, x00.z, x00.w),\\n hasNextCol ? getAValue(batch, depth, x01.z, x01.w) : 0.0,\\n hasNextRow ? getAValue(batch, depth, x10.z, x10.w) : 0.0,\\n (hasNextRow && hasNextCol) ? getAValue(batch, depth, x11.z, x11.w) : 0.0);\\n\\n // calculate the interpolation fraction on u and v direction\\n vec4 frac = vec4(sourceFrac) - floor(sourceFrac);\\n vec4 clampFrac = clamp(frac, vec4(0.0), vec4(1.0));\\n\\n vec4 top = mix(topLeft, topRight, clampFrac.ywyw);\\n vec4 bottom = mix(bottomLeft, bottomRight, clampFrac.ywyw);\\n vec4 newValue = mix(top, bottom, clampFrac.xxzz);\\n\\n ${s.output} = vec4(newValue);\\n }\\n `;return Object.assign(Object.assign({},u),{output:{dims:p,type:t[0].type,textureType:o.TextureType.packed},hasMain:!0,shaderSource:x})},c=(e,t)=>{const n=e[0].dims;let r,o=t.scales;if(0===o.length){const i=e[t.scalesInputIdx];if(i&&0!==i.size){if(e[t.sizesInputIdx])throw new Error(\"Only one of scales or sizes must be provided as input.\");o=p(i,t.mode,t.isResize);}else {const i=e[t.sizesInputIdx];if(!i||0===i.size)throw new Error(\"Either scales or sizes MUST be provided as input.\");r=Array.from(i.integerData),o=d(r,n,t.mode,t.isResize);}}else if(e[t.sizesInputIdx])throw new Error(\"Only one of scales or sizes must be provided as input.\");const i=r||n.map(((e,t)=>Math.floor(e*o[t])));return [o,i]},p=(e,t,n)=>{const r=Array.from(e.floatData);return (0, s.scalesValidation)(r,t,n),r},d=(e,t,n,r)=>{const o=t.length,i=new Array(o);for(let n=0,r=o;n{Object.defineProperty(t,\"__esModule\",{value:!0}),t.shape=void 0;const r=n(9240);t.shape=(e,t)=>(o(t),[new r.Tensor([t[0].dims.length],\"int32\",void 0,void 0,new Int32Array(t[0].dims))]);const o=e=>{if(!e||1!==e.length)throw new Error(\"Shape requires 1 input.\")};},2444:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.sliceV10=t.parseSliceAttributes=t.slice=void 0;const r=n(4910),o=n(6145),i=n(7273),a=n(5639),s={name:\"Slice\",inputNames:[\"A\"],inputTypes:[a.TextureType.unpacked]};t.slice=(e,t,n)=>(l(t),[e.run(Object.assign(Object.assign({},s),{cacheHint:n.cacheKey,get:()=>u(e,t[0],n)}),t)]),t.parseSliceAttributes=e=>{const t=e.attributes.getInts(\"starts\"),n=e.attributes.getInts(\"ends\"),o=e.attributes.getInts(\"axes\",[]);return (0, r.createAttributeWithCacheKey)({starts:t,ends:n,axes:o})};const u=(e,t,n)=>{const r=0===n.axes.length?t.dims.slice(0).map(((e,t)=>t)):n.axes,o=i.ShapeUtil.normalizeAxes(r,t.dims.length),u=n.starts.map(((e,n)=>e>t.dims[o[n]]-1?t.dims[o[n]]:i.ShapeUtil.normalizeAxis(e,t.dims[o[n]]))),l=n.ends.map(((e,n)=>e>t.dims[o[n]]-1?t.dims[o[n]]:i.ShapeUtil.normalizeAxis(e,t.dims[o[n]]))),c=t.dims.slice(),p=[];for(let e=0;e0&&p.push(`outputIdx[${o[e]}] += ${u[e]};`);const d=`\\n float process(int outputIdx[${c.length}]) {\\n ${p.join(\"\\n \")}\\n return _A(outputIdx);\\n }`;return Object.assign(Object.assign({},s),{output:{dims:c,type:t.type,textureType:a.TextureType.unpacked},shaderSource:d})},l=e=>{if(!e||1!==e.length)throw new Error(\"Slice requires 1 input.\");if(-1===o.NUMBER_TYPES.indexOf(e[0].type))throw new Error(\"Invalid input type.\")};t.sliceV10=(e,t)=>{p(t);const n=c(e,t);return [e.run(Object.assign(Object.assign({},s),{cacheHint:n.cacheKey,get:()=>u(e,t[0],n)}),[t[0]])]};const c=(e,t)=>{if(!e.session.isInitializer(t[1].dataId)||!e.session.isInitializer(t[2].dataId)||t.length>=4&&!e.session.isInitializer(t[3].dataId)||t.length>=5&&!e.session.isInitializer(t[4].dataId))throw new Error(\"dynamic slice attributes are not allowed\");if(t.length>=5&&t[4].integerData.some((e=>1!==e)))throw new Error(\"currently non-1 steps is not supported for Slice\");const n=Array.from(t[1].integerData),r=Array.from(t[2].integerData),o=t.length>=4?Array.from(t[3].integerData):[];return {starts:n,ends:r,axes:o,cacheKey:`${o};${n};${r}`}},p=e=>{if(!e||e.length<3||e.length>5)throw new Error(\"Invalid input number.\");if(\"int32\"!==e[1].type||1!==e[1].dims.length)throw new Error(\"Invalid input type.\");if(\"int32\"!==e[2].type||1!==e[2].dims.length)throw new Error(\"Invalid input type.\");if(e.length>=4&&(\"int32\"!==e[3].type||1!==e[3].dims.length))throw new Error(\"Invalid input type.\");if(e.length>=5&&(\"int32\"!==e[4].type||1!==e[4].dims.length))throw new Error(\"Invalid input type.\")};},815:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.softmaxV13=t.parseSoftmaxAttributesV13=t.parseSoftmaxAttributes=t.softmax=void 0;const r=n(4910),o=n(7273),i=n(6757),a=n(5639),s=n(5707),u={name:\"SoftmaxComputeMax\",inputNames:[\"A\"],inputTypes:[a.TextureType.unpacked]},l={name:\"SoftmaxComputeScale\",inputNames:[\"A\",\"Max\"],inputTypes:[a.TextureType.unpacked,a.TextureType.unpacked]},c={name:\"SoftMax\",inputNames:[\"A\",\"Max\",\"Norm\"],inputTypes:[a.TextureType.unpacked,a.TextureType.unpacked,a.TextureType.unpacked]};t.softmax=(e,t,n)=>{g(t);const r=t[0].dims.slice(),i=o.ShapeUtil.normalizeAxis(n.axis,r.length),a=o.ShapeUtil.sizeToDimension(r,i),s=o.ShapeUtil.sizeFromDimension(r,i);return p(e,t,n,a,s)},t.parseSoftmaxAttributes=e=>(0, r.createAttributeWithCacheKey)({axis:e.attributes.getInt(\"axis\",1)}),t.parseSoftmaxAttributesV13=e=>(0, r.createAttributeWithCacheKey)({axis:e.attributes.getInt(\"axis\",-1)}),t.softmaxV13=(e,t,n)=>{g(t);const i=t[0].dims.slice(),a=o.ShapeUtil.normalizeAxis(n.axis,i.length),u=i.length,l=a!==u-1,c=[];let d,f=[],h=[];l&&(f=Array.from({length:u}).map(((e,t)=>t)),f[a]=u-1,f[u-1]=a,f.map((e=>c.push(i[e]))),d=(0, r.createAttributeWithCacheKey)({perm:f}),h=(0, s.transpose)(e,t,d));const m=l?o.ShapeUtil.sizeToDimension(c,u-1):o.ShapeUtil.sizeToDimension(i,u-1),b=l?o.ShapeUtil.sizeFromDimension(c,u-1):o.ShapeUtil.sizeFromDimension(i,u-1),y=p(e,l?h:t,n,m,b);return l?(0, s.transpose)(e,y,d):y};const p=(e,t,n,r,o)=>{const i=d(e,t[0],r,o,[r]),a=e.run(Object.assign(Object.assign({},u),{cacheHint:n.cacheKey,get:()=>i}),t),s=f(e,t[0],r,o,i.output.dims,[r]),p=e.run(Object.assign(Object.assign({},l),{cacheHint:n.cacheKey,get:()=>s}),[t[0],a]),g=h(e,t[0],r,o,i.output.dims,s.output.dims);return [e.run(Object.assign(Object.assign({},c),{cacheHint:n.cacheKey,get:()=>g}),[t[0],a,p])]},d=(e,t,n,r,o)=>{const[s,l]=e.calculateTextureWidthAndHeight(t.dims,a.TextureType.unpacked),c=o.length;if(n<1||r<1)throw new Error(\"Logical row count N and feature count D must be greater than or equal to 1\");if(1!==o.length)throw new Error(\"Dimensionality of the output should be 1\");if(o[0]!==n)throw new Error(\"Shape of the output should be equal to logical row count\");const p=(0, i.getGlsl)(e.session.backend.glContext.version),d=`\\n float process(int[${c}] indices) {\\n int logical_row_start_offset = indices[0] * ${r};\\n\\n float max = getColorAsFloat(${p.texture2D}(A, offsetToCoords(logical_row_start_offset, ${s},\\n ${l} )));\\n for(int i=1; i<${r}; ++i)\\n {\\n float current = getColorAsFloat(${p.texture2D}(A, offsetToCoords(logical_row_start_offset + i,\\n ${s}, ${l})));\\n if(current > max)\\n max = current;\\n }\\n\\n return max;\\n }`;return Object.assign(Object.assign({},u),{output:{dims:o,type:t.type,textureType:a.TextureType.unpacked},shaderSource:d})},f=(e,t,n,r,o,s)=>{const[u,c]=e.calculateTextureWidthAndHeight(t.dims,a.TextureType.unpacked),p=s.length;if(n<1||r<1)throw new Error(\"Logical row count N and feature count D must be greater than or equal to 1\");if(1!==s.length)throw new Error(\"Dimensionality of the output should be 1\");if(s[0]!==n)throw new Error(\"Shape of the output should be equal to logical row count\");if(1!==o.length)throw new Error(\"Dimensionality of the intermediate results should be 1\");if(o[0]!==n)throw new Error(\"Shape of the intermediate results should be equal to logical row count\");const d=`\\n float process(int[${p}] indices) {\\n int logical_row_start_offset = indices[0] * ${r};\\n\\n float norm_factor = 0.0;\\n float max = _Max(indices);\\n for(int i=0; i<${r}; ++i)\\n {\\n norm_factor += exp(getColorAsFloat(${(0, i.getGlsl)(e.session.backend.glContext.version).texture2D}(A, offsetToCoords(logical_row_start_offset + i,\\n ${u}, ${c}))) - max);\\n }\\n\\n return norm_factor;\\n }`;return Object.assign(Object.assign({},l),{output:{dims:s,type:t.type,textureType:a.TextureType.unpacked},shaderSource:d})},h=(e,t,n,r,o,i)=>{const[s,u]=e.calculateTextureWidthAndHeight(t.dims,a.TextureType.unpacked),l=t.dims.length;if(n<1||r<1)throw new Error(\"Logical row count N and feature count D must be greater than or equal to 1\");if(1!==o.length||1!==i.length)throw new Error(\"Dimensionality of the intermediate results should be 1\");if(o[0]!==n||i[0]!==n)throw new Error(\"Shape of the intermediate results should be equal to logical row count\");const p=`\\n float process(int[${l}] indices) {\\n\\n // get offset of current logical tensor index from the 2-D texture coordinates (TexCoords)\\n int offset = coordsToOffset(TexCoords, ${s}, ${u});\\n\\n //determine the logical row for this index\\n int logical_row_index[1];\\n logical_row_index[0] = offset / ${r};\\n\\n float norm_factor = _Norm(logical_row_index);\\n\\n // avoid possible division by 0\\n // if norm_facor is 0, all elements are zero\\n // if so, return 0\\n if(norm_factor == 0.0)\\n return 0.0;\\n\\n return exp(_A(indices) - _Max(logical_row_index)) / norm_factor;\\n }`;return Object.assign(Object.assign({},c),{output:{dims:t.dims,type:t.type,textureType:a.TextureType.unpacked},shaderSource:p})},g=e=>{if(!e||1!==e.length)throw new Error(\"Softmax requires 1 input.\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type)throw new Error(\"Invalid input type\")};},564:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseSplitAttributes=t.split=void 0;const r=n(4910),o=n(7273),i=n(5639),a={name:\"Split\",inputNames:[\"A\"],inputTypes:[i.TextureType.unpacked]};t.split=(e,t,n)=>{l(t);const r=o.ShapeUtil.normalizeAxis(n.axis,t[0].dims.length),i=s(e,t,r,n),c=[];for(let o=0;ou(e,t[0],n,r,o)}),t));return c},t.parseSplitAttributes=e=>{const t=e.attributes.getInt(\"axis\",0),n=e.attributes.getInts(\"split\",[]),o=e.outputs.length;return (0, r.createAttributeWithCacheKey)({axis:t,split:n,numOutputs:o})};const s=(e,t,n,r)=>{const[,i]=o.SplitUtil.splitShape(t[0].dims,n,r.split,r.numOutputs);return i.length},u=(e,t,n,r,s)=>{const[u,l]=o.SplitUtil.splitShape(t.dims,r,n.split,n.numOutputs),c=l[s],p=u[s],d=`\\n float process(int indices[${p.length}]) {\\n indices[${r}] += ${c};\\n return _A(indices);\\n }\\n `;return Object.assign(Object.assign({},a),{cacheHint:`${n.cacheKey}:${s}`,output:{dims:p,type:t.type,textureType:i.TextureType.unpacked},shaderSource:d})},l=e=>{if(!e||1!==e.length)throw new Error(\"Split requires one input.\");if(\"int8\"!==e[0].type&&\"uint8\"!==e[0].type&&\"int16\"!==e[0].type&&\"uint16\"!==e[0].type&&\"int32\"!==e[0].type&&\"uint32\"!==e[0].type&&\"float32\"!==e[0].type&&\"float64\"!==e[0].type&&\"bool\"!==e[0].type)throw new Error(\"Invalid input type.\")};},5416:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseSqueezeAttributes=t.squeezeV13=t.squeeze=void 0;const r=n(7273);t.squeeze=(e,t,n)=>{o(t);const i=r.ShapeUtil.squeezeShape(t[0].dims,n);return [e.reshapeUnpacked(t[0],i)]},t.squeezeV13=(e,n)=>(i(n),(0, t.squeeze)(e,[n[0]],Array.from(n[1].integerData))),t.parseSqueezeAttributes=e=>e.attributes.getInts(\"axes\");const o=e=>{if(!e||1!==e.length)throw new Error(\"Squeeze requires 1 input.\");if(\"string\"===e[0].type)throw new Error(\"invalid input tensor types.\")},i=e=>{if(!e||2!==e.length)throw new Error(\"Squeeze requires 2 inputs.\");if(\"int32\"!==e[1].type)throw new Error(\"Invalid input type.\")};},1240:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.sum=void 0;const r=n(6757),o=n(5639);t.sum=(e,t)=>{a(t);const n={name:\"Sum\",inputNames:t.map(((e,t)=>`X${t}`)),inputTypes:new Array(t.length).fill(o.TextureType.unpacked)};return [e.run(Object.assign(Object.assign({},n),{get:()=>i(e,t,n)}),t)]};const i=(e,t,n)=>{const i=(0, r.getGlsl)(e.session.backend.glContext.version),a=t[0].dims.slice(),s=`\\n void main() {\\n vec4 result = ${t.map(((e,t)=>`${i.texture2D}(X${t},TexCoords)`)).join(\" + \")};\\n ${i.output} = result;\\n }\\n `;return Object.assign(Object.assign({},n),{output:{dims:a,type:t[0].type,textureType:o.TextureType.unpacked},hasMain:!0,shaderSource:s})},a=e=>{if(!e||0===e.length)throw new Error(\"Sum requires inputs.\");const t=e[0].dims.length;for(let n=1;n{Object.defineProperty(t,\"__esModule\",{value:!0}),t.tile=void 0;const r=n(6145),o=n(5639);t.tile=(e,t)=>{a(t);const n={name:\"Tile\",inputNames:[\"A\"],inputTypes:[o.TextureType.unpacked]};return [e.run(Object.assign(Object.assign({},n),{get:()=>i(e,t,n)}),t)]};const i=(e,t,n)=>{const r=t[0].dims.slice(),i=new Array(r.length),a=[];for(let e=0;e{if(!e||2!==e.length)throw new Error(\"Tile requires 2 input.\");if(1!==e[1].dims.length)throw new Error(\"The second input shape must 1 dimension.\");if(e[1].dims[0]!==e[0].dims.length)throw new Error(\"Invalid input shape.\");if(-1===r.NUMBER_TYPES.indexOf(e[0].type))throw new Error(\"Invalid input type.\");if(\"int32\"!==e[1].type&&\"int16\"!==e[1].type)throw new Error(\"Invalid repeat type.\")};},5707:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseTransposeAttributes=t.transpose=void 0;const r=n(4910),o=n(7273),i=n(5639),a={name:\"Transpose\",inputNames:[\"A\"],inputTypes:[i.TextureType.unpacked]};t.transpose=(e,t,n)=>(p(t),[e.run(Object.assign(Object.assign({},a),{cacheHint:n.cacheKey,get:()=>s(e,t[0],n.perm)}),t)]),t.parseTransposeAttributes=e=>(0, r.createAttributeWithCacheKey)({perm:e.attributes.getInts(\"perm\",[])});const s=(e,t,n)=>{const r=t.dims;n=u(r,n);const o=l(r,n),s=r.length,p=`\\n ${c(\"perm\",n,s)}\\n float process(int indices[${s}]) {\\n int a[${s}];\\n perm(a, indices);\\n return _A(a);\\n }`;return Object.assign(Object.assign({},a),{output:{dims:o,type:t.type,textureType:i.TextureType.unpacked},shaderSource:p})},u=(e,t)=>(t&&t.length!==e.length&&(t=[...e.keys()].reverse()),t),l=(e,t)=>(t=u(e,t),o.ShapeUtil.sortBasedOnPerm(e,t)),c=(e,t,n)=>{const r=[];r.push(`void ${e}(out int a[${n}], int src[${n}]) {`);for(let e=0;e{if(!e||1!==e.length)throw new Error(\"Transpose requires 1 input.\");if(\"float32\"!==e[0].type&&\"float64\"!==e[0].type)throw new Error(\"input should be float tensor\")};},2488:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.encodeAsUint8=void 0;const r=n(6757),o=n(5639);t.encodeAsUint8=(e,t)=>{const n=t.shape,i=(0, r.getGlsl)(e.session.backend.glContext.version),a=`\\n const float FLOAT_MAX = 1.70141184e38;\\n const float FLOAT_MIN = 1.17549435e-38;\\n\\n bool isNaN(float val) {\\n return (val < 1.0 || 0.0 < val || val == 0.0) ? false : true;\\n }\\n\\n highp vec4 encodeAsUint8(highp float v) {\\n if (isNaN(v)) {\\n return vec4(255, 255, 255, 255);\\n }\\n\\n highp float av = abs(v);\\n\\n if(av < FLOAT_MIN) {\\n return vec4(0.0, 0.0, 0.0, 0.0);\\n } else if(v > FLOAT_MAX) {\\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\\n } else if(v < -FLOAT_MAX) {\\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\\n }\\n\\n highp vec4 c = vec4(0,0,0,0);\\n\\n highp float e = floor(log2(av));\\n highp float m = exp2(fract(log2(av))) - 1.0;\\n\\n c[2] = floor(128.0 * m);\\n m -= c[2] / 128.0;\\n c[1] = floor(32768.0 * m);\\n m -= c[1] / 32768.0;\\n c[0] = floor(8388608.0 * m);\\n\\n highp float ebias = e + 127.0;\\n c[3] = floor(ebias / 2.0);\\n ebias -= c[3] * 2.0;\\n c[2] += floor(ebias) * 128.0;\\n\\n c[3] += 128.0 * step(0.0, -v);\\n\\n return c / 255.0;\\n }\\n\\n void main() {\\n float value = ${i.texture2D}(X,TexCoords).r;\\n ${i.output} = encodeAsUint8(value);\\n }`,s={name:\"Uint8Encode\",inputTypes:[o.TextureType.unpacked],inputNames:[\"X\"],output:{dims:n,type:t.tensor.type,textureType:o.TextureType.downloadUint8AsFloat},shaderSource:a,hasMain:!0};return e.executeProgram(s,[t.tensor])};},9087:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.tanh=t.tan=t.sqrt=t.sin=t.sigmoid=t.relu=t.not=t.neg=t.log=t.parseLeakyReluAttributes=t.leakyRelu=t.identity=t.floor=t.exp=t.parseEluAttributes=t.elu=t.cos=t.ceil=t.clipV11=t.parseClipAttributes=t.clip=t.atan=t.asin=t.acos=t.abs=t.glslTanh=t.glslTan=t.glslSqrt=t.glslSigmoid=t.glslRelu=t.glslSin=t.glslNot=t.glslNeg=t.glslLog=t.glslLeakyRelu=t.glslIdentity=t.glslClip=t.glslFloor=t.glslExp=t.glslElu=t.glslCos=t.glslCeil=t.glslAtan=t.glslAsin=t.glslAcos=t.glslAbs=void 0;const r=n(4910),o=n(7273),i=n(1997),a=n(6757),s=n(5639);function u(){return $(\"abs\")}function l(){return $(\"acos\")}function c(){return $(\"asin\")}function p(){return $(\"atan\")}function d(){return $(\"ceil\")}function f(){return $(\"cos\")}function h(e){const t=\"elu\";return {body:`\\n const float alpha = float(${e});\\n\\n float ${t}_(float a) {\\n return a >= 0.0 ? a: (exp(a) - 1.0) * alpha;\\n }\\n vec4 ${t}_(vec4 v) {\\n return vec4(${t}_(v.x), ${t}_(v.y), ${t}_(v.z), ${t}_(v.w));\\n }\\n `,name:t,type:i.FunctionType.ValueBased}}function g(){return $(\"exp\")}function m(){return $(\"floor\")}function b(e,t){const n=\"clip\";return {body:`\\n const float min = float(${e});\\n const float max = float(${t});\\n\\n float ${n}_(float a) {\\n return clamp(a, min, max);\\n }\\n vec4 ${n}_(vec4 v) {\\n return clamp(v, min, max);\\n }\\n `,name:n,type:i.FunctionType.ValueBased}}function y(){const e=\"indentity\";return {body:`\\n float ${e}_(float a) {\\n return a;\\n }\\n vec4 ${e}_(vec4 v) {\\n return v;\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}function w(e){const t=\"leakyRelu\";return {body:`\\n const float alpha = float(${e});\\n\\n float ${t}_(float a) {\\n return a < 0.0 ? a * alpha : a;\\n }\\n vec4 ${t}_(vec4 v) {\\n return vec4(${t}_(v.x), ${t}_(v.y), ${t}_(v.z), ${t}_(v.w));\\n }\\n `,name:t,type:i.FunctionType.ValueBased}}function _(){return $(\"log\")}function v(){const e=\"neg\";return {body:`\\n float ${e}_(float a) {\\n return -a;\\n }\\n vec4 ${e}_(vec4 v) {\\n return -v;\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}function x(){const e=\"not\";return {body:`\\n float ${e}_(float a) {\\n return float( ! bool(a) );\\n }\\n bool ${e}_(bool a) {\\n return !a;\\n }\\n vec4 ${e}_(vec4 v) {\\n return vec4(!bool(v.x), !bool(v.y), !bool(v.z), !bool(v.w));\\n }\\n bvec4 ${e}_(bvec4 v) {\\n return bvec4(!v.x, !v.y, !v.z, !v.w);\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}function T(){return $(\"sin\")}function S(){const e=\"relu\";return {body:`\\n float ${e}_(float a) {\\n return max( a, 0.0 );\\n }\\n vec4 ${e}_(vec4 v) {\\n return max( v, 0.0 );\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}function O(){const e=\"sigmoid\";return {body:`\\n float ${e}_(float a) {\\n return 1.0 / (1.0 + exp(-a));\\n }\\n vec4 ${e}_(vec4 v) {\\n return 1.0 / (1.0 + exp(-v));\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}function A(){return $(\"sqrt\")}function E(){return $(\"tan\")}function I(){const e=\"tanh\";return {body:`\\n float ${e}_(float a) {\\n a = clamp(a, -10., 10.);\\n a = exp(2.*a);\\n return (a - 1.) / (a + 1.);\\n }\\n vec4 ${e}_(vec4 v) {\\n v = clamp(v, -10., 10.);\\n v = exp(2.*v);\\n return (v - 1.) / (v + 1.);\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}function $(e){return {body:`\\n float ${e}_(float a) {\\n return ${e}(a);\\n }\\n vec4 ${e}_(vec4 v) {\\n return ${e}(v);\\n }\\n `,name:e,type:i.FunctionType.ValueBased}}t.glslAbs=u,t.glslAcos=l,t.glslAsin=c,t.glslAtan=p,t.glslCeil=d,t.glslCos=f,t.glslElu=h,t.glslExp=g,t.glslFloor=m,t.glslClip=b,t.glslIdentity=y,t.glslLeakyRelu=w,t.glslLog=_,t.glslNeg=v,t.glslNot=x,t.glslSin=T,t.glslRelu=S,t.glslSigmoid=O,t.glslSqrt=A,t.glslTan=E,t.glslTanh=I;const P=(e,t,n,r)=>{const o=e.session.pack?s.TextureType.packed:s.TextureType.unpacked,i={name:n.name,inputTypes:[o],inputNames:[\"A\"],cacheHint:r};return Object.assign(Object.assign({},i),{get:()=>((e,t,n,r)=>{const o=e.session.pack?s.TextureType.packed:s.TextureType.unpacked,i=(0, a.getGlsl)(e.session.backend.glContext.version);return Object.assign(Object.assign({},t),{output:{dims:n.dims,type:n.type,textureType:o},shaderSource:`\\n ${r.body}\\n void main() {\\n vec4 v = ${i.texture2D}(A, TexCoords);\\n v = ${r.name}_(v);\\n ${i.output} = v;\\n }\\n `,hasMain:!0})})(e,i,t,n)})};t.abs=(e,t)=>[e.run(P(e,t[0],u()),t)],t.acos=(e,t)=>[e.run(P(e,t[0],l()),t)],t.asin=(e,t)=>[e.run(P(e,t[0],c()),t)],t.atan=(e,t)=>[e.run(P(e,t[0],p()),t)],t.clip=(e,t,n)=>[e.run(P(e,t[0],b(n.min,n.max),n.cacheKey),t)],t.parseClipAttributes=e=>(0, r.createAttributeWithCacheKey)({min:e.attributes.getFloat(\"min\",o.MIN_CLIP),max:e.attributes.getFloat(\"max\",o.MAX_CLIP)}),t.clipV11=(e,n)=>{const r=D(e,n);return (0, t.clip)(e,[n[0]],r)};const D=(e,t)=>{if(t.length>=3&&(!e.session.isInitializer(t[1].dataId)||!e.session.isInitializer(t[2].dataId)))throw new Error(\"dynamic clip attributes are not allowed\");const n=t.length>=3?t[1].numberData[0]:o.MIN_CLIP,i=t.length>=3?t[2].numberData[0]:o.MAX_CLIP;return (0, r.createAttributeWithCacheKey)({min:n,max:i})};t.ceil=(e,t)=>[e.run(P(e,t[0],d()),t)],t.cos=(e,t)=>[e.run(P(e,t[0],f()),t)],t.elu=(e,t,n)=>[e.run(P(e,t[0],h(n.alpha),n.cacheKey),t)],t.parseEluAttributes=e=>(0, r.createAttributeWithCacheKey)({alpha:e.attributes.getFloat(\"alpha\",1)}),t.exp=(e,t)=>[e.run(P(e,t[0],g()),t)],t.floor=(e,t)=>[e.run(P(e,t[0],m()),t)],t.identity=(e,t)=>[e.run(P(e,t[0],y()),t)],t.leakyRelu=(e,t,n)=>[e.run(P(e,t[0],w(n.alpha),n.cacheKey),t)],t.parseLeakyReluAttributes=e=>(0, r.createAttributeWithCacheKey)({alpha:e.attributes.getFloat(\"alpha\",.01)}),t.log=(e,t)=>[e.run(P(e,t[0],_()),t)],t.neg=(e,t)=>[e.run(P(e,t[0],v()),t)],t.not=(e,t)=>[e.run(P(e,t[0],x()),t)],t.relu=(e,t)=>[e.run(P(e,t[0],S()),t)],t.sigmoid=(e,t)=>[e.run(P(e,t[0],O()),t)],t.sin=(e,t)=>[e.run(P(e,t[0],T()),t)],t.sqrt=(e,t)=>[e.run(P(e,t[0],A()),t)],t.tan=(e,t)=>[e.run(P(e,t[0],E()),t)],t.tanh=(e,t)=>[e.run(P(e,t[0],I()),t)];},540:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createUnpackProgramInfoLoader=t.createUnpackProgramInfo=void 0;const r=n(6757),o=n(5639),i=n(432),a=n(5614),s={name:\"unpack\",inputNames:[\"A\"],inputTypes:[o.TextureType.packed]};t.createUnpackProgramInfo=(e,t)=>{const n=t.dims.length,u=(0, a.getChannels)(\"rc\",n),l=u.slice(-2),c=(0, i.getCoordsDataType)(n),p=(0, a.unpackFromChannel)(),d=0===t.dims.length?\"\":function(e,t){if(1===e)return \"rc\";let n=\"\";for(let r=0;rObject.assign(Object.assign({},s),{get:()=>(0, t.createUnpackProgramInfo)(e,n)});},7862:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseUnsqueezeAttributes=t.unsqueezeV13=t.unsqueeze=void 0;const r=n(7273);t.unsqueeze=(e,t,n)=>{o(t);const i=r.ShapeUtil.unsqueezeShape(t[0].dims,n);return [e.reshapeUnpacked(t[0],i)]},t.unsqueezeV13=(e,n)=>(i(n),(0, t.unsqueeze)(e,[n[0]],Array.from(n[1].integerData))),t.parseUnsqueezeAttributes=e=>e.attributes.getInts(\"axes\");const o=e=>{if(!e||1!==e.length)throw new Error(\"Unsqueeze requires 1 input.\");if(\"string\"===e[0].type)throw new Error(\"invalid input tensor types.\")},i=e=>{if(!e||2!==e.length)throw new Error(\"Unsqueeze requires 2 inputs.\");if(\"int32\"!==e[1].type)throw new Error(\"Invalid input type.\")};},3980:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.scalesValidation=t.validateInputs=t.parseUpsampleAttributes=t.parseUpsampleAttributesV9=t.parseUpsampleAttributesV7=t.upsample=void 0;const r=n(4910),o=n(6757),i=n(5639),a={name:\"Upsample\",inputNames:[\"X\"],inputTypes:[i.TextureType.unpacked]};t.upsample=(e,n,r)=>((0, t.validateInputs)(n,r),[e.run(Object.assign(Object.assign({},a),{cacheHint:r.cacheKey,get:()=>s(e,n,r)}),n)]),t.parseUpsampleAttributesV7=e=>(0, t.parseUpsampleAttributes)(e,7),t.parseUpsampleAttributesV9=e=>(0, t.parseUpsampleAttributes)(e,9),t.parseUpsampleAttributes=(e,n)=>{const o=n>=10,i=e.attributes.getString(\"mode\",\"nearest\");if(\"nearest\"!==i&&\"linear\"!==i&&(n<11||\"cubic\"!==i))throw new Error(`unrecognized mode: ${i}`);let a=[];n<9&&(a=e.attributes.getFloats(\"scales\"),(0, t.scalesValidation)(a,i,o));const s=e.attributes.getFloat(\"extrapolation_value\",0),u=n>10?e.attributes.getString(\"coordinate_transformation_mode\",\"half_pixel\"):\"asymmetric\";if(-1===[\"asymmetric\",\"pytorch_half_pixel\",\"tf_half_pixel_for_nn\",\"align_corners\",\"tf_crop_and_resize\",\"half_pixel\"].indexOf(u))throw new Error(`coordinate_transform_mode '${u}' is not supported`);const l=\"tf_crop_and_resize\"===u,c=l,p=\"nearest\"===i&&n>=11?e.attributes.getString(\"nearest_mode\",\"round_prefer_floor\"):\"\";if(-1===[\"round_prefer_floor\",\"round_prefer_ceil\",\"floor\",\"ceil\",\"\"].indexOf(p))throw new Error(`nearest_mode '${p}' is not supported`);const d=e.attributes.getFloat(\"cubic_coeff_a\",-.75),f=0!==e.attributes.getInt(\"exclude_outside\",0);if(f&&\"cubic\"!==i)throw new Error(\"exclude_outside can be set to 1 only when mode is CUBIC.\");const h=n<11||\"nearest\"===i&&\"asymmetric\"===u&&\"floor\"===p;let g=0,m=0,b=0;return n>10?e.inputs.length>2?(g=1,m=2,b=3):(m=1,b=2):9===n&&(m=1),(0, r.createAttributeWithCacheKey)({opset:n,isResize:o,mode:i,scales:a,extrapolationValue:s,coordinateTransformMode:u,useExtrapolation:c,needRoiInput:l,nearestMode:p,cubicCoefficientA:d,excludeOutside:f,useNearest2xOptimization:h,roiInputIdx:g,scalesInputIdx:m,sizesInputIdx:b})};const s=(e,t,n)=>{const r=(0, o.getGlsl)(e.session.backend.glContext.version),[s,u]=e.calculateTextureWidthAndHeight(t[0].dims,i.TextureType.unpacked),l=t[0].dims.map(((e,t)=>Math.floor(e*n.scales[t]))),[c,p]=e.calculateTextureWidthAndHeight(l,i.TextureType.unpacked),d=l.length,f=new Array(d),h=new Array(d);let g=`\\n int output_pitches[${d}];\\n int input_pitches[${d}];\\n `;for(let e=d-1;e>=0;e--)f[e]=e===d-1?1:f[e+1]*l[e+1],h[e]=e===d-1?1:h[e+1]*t[0].dims[e+1],g+=`\\n output_pitches[${e}] = ${f[e]};\\n input_pitches[${e}] = ${h[e]};\\n `;const m=`\\n float getInputFloat(int index) {\\n vec2 coords = offsetToCoords(index, ${s}, ${u});\\n float value = getColorAsFloat(${r.texture2D}(X, coords));\\n return value;\\n }\\n `,b=\"nearest\"===n.mode?`\\n ${m}\\n float process(int indices[${d}]) {\\n int input_index = 0;\\n int output_index = coordsToOffset(TexCoords, ${c}, ${p});\\n\\n ${g}\\n\\n int d, m;\\n for (int dim = 0; dim < ${d}; ++dim) {\\n d = output_index / output_pitches[dim];\\n m = output_index - d * output_pitches[dim];\\n output_index = m;\\n\\n if (scales[dim] != 1 && d > 0) {\\n int d2 = d / scales[dim];\\n m = d - d2 * scales[dim];\\n d = d2;\\n }\\n input_index += input_pitches[dim] * d;\\n }\\n\\n return getInputFloat(input_index);\\n }`:4===d?`\\n ${m}\\n float process(int indices[4]) {\\n int input_index = 0;\\n int output_index = coordsToOffset(TexCoords, ${c}, ${p});\\n\\n ${g}\\n\\n int m;\\n int index_of_dim0, index_of_dim1, index_of_dim2, index_of_dim3;\\n index_of_dim0 = output_index / output_pitches[0];\\n m = output_index - index_of_dim0 * output_pitches[0];\\n index_of_dim1 = m / output_pitches[1];\\n m = m - index_of_dim1 * output_pitches[1];\\n index_of_dim2 = m / output_pitches[2];\\n m = m - index_of_dim2 * output_pitches[2];\\n index_of_dim3 = m;\\n\\n int index_of_input_dim2, index_of_input_dim3, x_offset, y_offset;\\n index_of_input_dim2 = index_of_dim2 / scales[2];\\n y_offset = index_of_dim2 - index_of_input_dim2 * scales[2];\\n index_of_input_dim3 = index_of_dim3 / scales[3];\\n x_offset = index_of_dim3 - index_of_input_dim3 * scales[3];\\n\\n input_index = index_of_dim0 * input_pitches[0] +\\n index_of_dim1 * input_pitches[1] +\\n index_of_input_dim2 * input_pitches[2] +\\n index_of_input_dim3;\\n\\n float x00 = getInputFloat(input_index);\\n float x10, x01, x11;\\n\\n bool end_of_dim2 = false;\\n if (index_of_input_dim2 == (${t[0].dims[2]} - 1)) {\\n // It's the end in dimension 2\\n x01 = x00;\\n end_of_dim2 = true;\\n } else {\\n x01 = getInputFloat(input_index + input_pitches[2]);\\n }\\n\\n if (index_of_input_dim3 == (input_pitches[2] - 1)) {\\n // It's the end in dimension 3\\n x10 = x00;\\n x11 = x01;\\n }\\n else {\\n x10 = getInputFloat(input_index + 1);\\n x11 = end_of_dim2 ? x10 : getInputFloat(input_index + input_pitches[2] + 1);\\n }\\n\\n float y0 = x00 + float(y_offset) * (x01 - x00) / float(scales[2]);\\n float y1 = x10 + float(y_offset) * (x11 - x10) / float(scales[2]);\\n return y0 + float(x_offset) * (y1 - y0) / float(scales[3]);\\n }`:`\\n ${m}\\n float process(int indices[2]) {\\n int input_index = 0;\\n int output_index = coordsToOffset(TexCoords, ${c}, ${p});\\n\\n ${g}\\n\\n int m;\\n int index_of_dim0, index_of_dim1;\\n index_of_dim0 = output_index / output_pitches[0];\\n m = output_index - index_of_dim0 * output_pitches[0];\\n index_of_dim1 = m;\\n\\n int index_of_input_dim0, index_of_input_dim1, x_offset, y_offset;\\n index_of_input_dim0 = index_of_dim0 / scales[0];\\n y_offset = index_of_dim0 - index_of_input_dim0 * scales[0];\\n index_of_input_dim1 = index_of_dim1 / scales[1];\\n x_offset = index_of_dim1 - index_of_input_dim1 * scales[1];\\n\\n input_index = index_of_input_dim0 * input_pitches[0] + index_of_input_dim1;\\n\\n float x00 = getInputFloat(input_index);\\n float x10, x01, x11;\\n\\n bool end_of_dim0 = false;\\n if (index_of_input_dim0 == (${t[0].dims[0]} - 1)) {\\n // It's the end in dimension 0\\n x01 = x00;\\n end_of_dim0 = true;\\n } else {\\n x01 = getInputFloat(input_index + input_pitches[0]);\\n }\\n\\n if (index_of_input_dim1 == (input_pitches[0] - 1)) {\\n // It's the end in dimension 1\\n x10 = x00;\\n x11 = x01;\\n }\\n else {\\n x10 = getInputFloat(input_index + 1);\\n x11 = end_of_dim0 ? x10 : getInputFloat(input_index + input_pitches[0] + 1);\\n }\\n\\n float y0 = x00 + float(y_offset) * (x01 - x00) / float(scales[0]);\\n float y1 = x10 + float(y_offset) * (x11 - x10) / float(scales[0]);\\n return y0 + float(x_offset) * (y1 - y0) / float(scales[1]);\\n }`;return Object.assign(Object.assign({},a),{output:{dims:l,type:t[0].type,textureType:i.TextureType.unpacked},shaderSource:b,variables:[{name:\"scales\",type:\"int\",arrayLength:n.scales.length,data:n.scales.map((e=>Math.ceil(e)))}]})};t.validateInputs=(e,t)=>{if(!e||t.opset<9&&1!==e.length||t.opset>=9&&t.opset<11&&2!==e.length||t.opset>=11&&e.length<2)throw new Error(\"invalid inputs.\");if(t.scales.length>0&&e[0].dims.length!==t.scales.length)throw new Error(\"Invalid input shape.\");if(\"string\"===e[0].type)throw new Error(\"Invalid input tensor types.\")},t.scalesValidation=(e,t,n)=>{if(n){for(const t of e)if(t<=0)throw new Error(\"Scale value should be greater than 0.\")}else for(const t of e)if(t<1)throw new Error(\"Scale value should be greater than or equal to 1.\");if(!(\"linear\"!==t&&\"cubic\"!==t||2===e.length||4===e.length&&1===e[0]&&1===e[1]))throw new Error(`'Linear' mode and 'Cubic' mode only support 2-D inputs ('Bilinear', 'Bicubic') or 4-D inputs with the corresponding outermost 2 scale values being 1 in the ${n?\"Resize\":\"Upsample\"} opeartor.`)};},2757:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ProgramManager=void 0;const r=n(8453),o=n(1315),i=n(8897),a=n(6757);t.ProgramManager=class{constructor(e,t,n){this.profiler=e,this.glContext=t,this.textureLayoutStrategy=n,this.repo=new Map,this.attributesBound=!1;}getArtifact(e){return this.repo.get(e)}setArtifact(e,t){this.repo.set(e,t);}run(e,t,n){var r;this.profiler.event(\"op\",`ProgramManager.run ${null!==(r=e.programInfo.name)&&void 0!==r?r:\"unknown kernel\"}`,(()=>{var r;const i=this.glContext.gl,a=e.program;i.useProgram(a);try{this.bindOutput(n),this.attributesBound||this.bindAttributes(e.attribLocations),this.bindUniforms(e.uniformLocations,null!==(r=e.programInfo.variables)&&void 0!==r?r:[],t);}catch(t){throw o.Logger.error(\"ProgramManager\",e.programInfo.shaderSource),t}this.profiler.event(\"backend\",\"GlContext.draw()\",(()=>{this.glContext.draw();}));}),this.glContext);}dispose(){this.vertexShader&&this.glContext.deleteShader(this.vertexShader),this.repo.forEach((e=>this.glContext.deleteProgram(e.program)));}build(e,t,n){return this.profiler.event(\"backend\",\"ProgramManager.build\",(()=>{const r=new i.GlslPreprocessor(this.glContext,e,t,n),o=r.preprocess(),a=this.compile(o);return {programInfo:e,program:a,uniformLocations:this.getUniformLocations(a,r.context.programInfo.inputNames,r.context.programInfo.variables),attribLocations:this.getAttribLocations(a)}}))}compile(e){if(!this.vertexShader){o.Logger.verbose(\"ProrgramManager\",\"Compiling and caching Vertex shader for the first time\");const e=(0, a.getVertexShaderSource)(this.glContext.version);this.vertexShader=this.glContext.compileShader(e,this.glContext.gl.VERTEX_SHADER);}r.env.debug&&o.Logger.verbose(\"ProrgramManager\",`FragShader:\\n${e}\\n`);const t=this.glContext.compileShader(e,this.glContext.gl.FRAGMENT_SHADER),n=this.glContext.createProgram(this.vertexShader,t);return this.glContext.deleteShader(t),n}bindOutput(e){const t=e.width,n=e.height;o.Logger.verbose(\"ProrgramManager\",`Binding output texture to Framebuffer: w/h=${t}/${n}, shape=${e.shape}, type=${e.tensor.type}`),this.glContext.attachFramebuffer(e.texture,t,n);}bindAttributes(e){const t=e.position,n=e.textureCoord;this.glContext.setVertexAttributes(t,n),this.attributesBound=!0;}bindUniforms(e,t,n){var r;const o=this.glContext.gl;let i=0;for(const{name:a,type:s,location:u,arrayLength:l}of e){const e=null===(r=t.find((e=>e.name===a)))||void 0===r?void 0:r.data;if(\"sampler2D\"!==s&&!e)throw new Error(`variable '${a}' does not have data defined in program info`);switch(s){case\"sampler2D\":this.bindTexture(n[i],u,i),i++;break;case\"float\":l?o.uniform1fv(u,e):o.uniform1f(u,e);break;case\"int\":l?o.uniform1iv(u,e):o.uniform1i(u,e);break;default:throw new Error(`Uniform not implemented: ${s}`)}}}bindTexture(e,t,n){this.glContext.bindTextureToUniform(e.texture,n,t);}getAttribLocations(e){return {position:this.getAttribLocation(e,\"position\"),textureCoord:this.getAttribLocation(e,\"textureCoord\")}}getUniformLocations(e,t,n){const r=[];if(t)for(const n of t)r.push({name:n,type:\"sampler2D\",location:this.getUniformLocation(e,n)});if(n)for(const t of n)r.push(Object.assign(Object.assign({},t),{location:this.getUniformLocation(e,t.name)}));return r}getUniformLocation(e,t){const n=this.glContext.gl.getUniformLocation(e,t);if(null===n)throw new Error(`Uniform ${t} not found.`);return n}getAttribLocation(e,t){return this.glContext.gl.getAttribLocation(e,t)}};},2171:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WebGLSessionHandler=void 0;const r=n(1315),o=n(5881),i=n(7860),a=n(4110),s=n(2757),u=n(7618),l=n(5243);t.WebGLSessionHandler=class{constructor(e,t){this.backend=e,this.context=t,this.layoutStrategy=new u.PreferLogicalStrategy(e.glContext.maxTextureSize),this.programManager=new s.ProgramManager(this.context.profiler,e.glContext,this.layoutStrategy),this.textureManager=new l.TextureManager(e.glContext,this.layoutStrategy,this.context.profiler,{reuseTextures:\"full\"===e.textureCacheMode}),this.packedTextureDataCache=new Map,this.unpackedTextureDataCache=new Map,this.pack=e.pack,this.pack2unpackMap=new Map,this.unpack2packMap=new Map;}createInferenceHandler(){return new i.WebGLInferenceHandler(this)}onGraphInitialized(e){const t=e.getValues().filter((e=>-1===e.from&&e.tensor)).map((e=>e.tensor.dataId));this.initializers=new Set(t);}isInitializer(e){return !!this.initializers&&this.initializers.has(e)}addInitializer(e){this.initializers.add(e);}getTextureData(e,t){return t?this.packedTextureDataCache.get(e):this.unpackedTextureDataCache.get(e)}setTextureData(e,t,n=!1){r.Logger.verbose(\"WebGLSessionHandler\",\"Storing Texture data in cache\"),n?this.packedTextureDataCache.set(e,t):this.unpackedTextureDataCache.set(e,t);}dispose(){this.programManager.dispose(),this.textureManager.clearActiveTextures(),this.packedTextureDataCache.forEach((e=>this.textureManager.releaseTexture(e,!0))),this.packedTextureDataCache=new Map,this.unpackedTextureDataCache.forEach((e=>this.textureManager.releaseTexture(e,!0))),this.unpackedTextureDataCache=new Map;}resolve(e,t,n){const r=(0, o.resolveOperator)(e,t,a.WEBGL_OP_RESOLVE_RULES);return {impl:r.opImpl,context:r.opInit?r.opInit(e,n):e}}};},9622:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Uint8DataEncoder=t.RGBAFloatDataEncoder=t.RedFloat32DataEncoder=void 0;const r=n(1315);t.RedFloat32DataEncoder=class{constructor(e,t=1){if(1===t)this.internalFormat=e.R32F,this.format=e.RED,this.textureType=e.FLOAT,this.channelSize=t;else {if(4!==t)throw new Error(`Invalid number of channels: ${t}`);this.internalFormat=e.RGBA32F,this.format=e.RGBA,this.textureType=e.FLOAT,this.channelSize=t;}}encode(e,t){let n,o;return e.constructor!==Float32Array&&(r.Logger.warning(\"Encoder\",\"data was not of type Float32; creating new Float32Array\"),o=new Float32Array(e)),t*this.channelSize>e.length?(r.Logger.warning(\"Encoder\",\"Source data too small. Allocating larger array\"),o=e,n=this.allocate(t*this.channelSize),o.forEach(((e,t)=>n[t]=e))):(o=e,n=o),n}allocate(e){return new Float32Array(4*e)}decode(e,t){return 1===this.channelSize?e.filter(((e,t)=>t%4==0)).subarray(0,t):e.subarray(0,t)}},t.RGBAFloatDataEncoder=class{constructor(e,t=1,n){if(1!==t&&4!==t)throw new Error(`Invalid number of channels: ${t}`);this.internalFormat=e.RGBA,this.format=e.RGBA,this.channelSize=t,this.textureType=n||e.FLOAT;}encode(e,t){let n=e;return 1===this.channelSize&&(r.Logger.verbose(\"Encoder\",\"Exploding into a larger array\"),n=this.allocate(t),e.forEach(((e,t)=>n[4*t]=e))),n}allocate(e){return new Float32Array(4*e)}decode(e,t){return 1===this.channelSize?e.filter(((e,t)=>t%4==0)).subarray(0,t):e.subarray(0,t)}},t.Uint8DataEncoder=class{constructor(e,t=1){if(this.channelSize=4,1===t)this.internalFormat=e.ALPHA,this.format=e.ALPHA,this.textureType=e.UNSIGNED_BYTE,this.channelSize=t;else {if(4!==t)throw new Error(`Invalid number of channels: ${t}`);this.internalFormat=e.RGBA,this.format=e.RGBA,this.textureType=e.UNSIGNED_BYTE,this.channelSize=t;}}encode(e,t){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}allocate(e){return new Uint8Array(e*this.channelSize)}decode(e,t){if(e instanceof Uint8Array)return e.subarray(0,t);throw new Error(`Invalid array type: ${e.constructor}`)}};},7618:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.getBatchDim=t.sizeToSquarishShape=t.getRowsCols=t.sizeFromShape=t.isInt=t.parseAxisParam=t.squeezeShape=t.PreferLogicalStrategy=t.AlwaysKeepOriginalSizeStrategy=void 0;const r=n(1315),o=n(7273);function i(e,t){const n=[],r=[],o=null!=t&&Array.isArray(t)&&0===t.length,i=null==t||o?null:a(t,e).sort();let s=0;for(let t=0;tt)&&1===e[t]&&(n.push(e[t]),r.push(t)),i[s]<=t&&s++;}1!==e[t]&&(n.push(e[t]),r.push(t));}return {newShape:n,keptDims:r}}function a(e,t){const n=t.length;return e=null==e?t.map(((e,t)=>t)):[].concat(e),(0, o.assert)(e.every((e=>e>=-n&&e`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`)),(0, o.assert)(e.every(s),(()=>`All values in axis param must be integers but got axis ${e}`)),e.map((e=>e<0?n+e:e))}function s(e){return e%1==0}function u(e){if(0===e.length)return 1;let t=e[0];for(let n=1;n=e.length?1:e.slice(t.breakAxis).reduce(((e,t)=>e*t)),i=t.breakAxis<=0?1:e.slice(0,t.breakAxis).reduce(((e,t)=>e*t));if(!(o>n||i>n))return [o,i];r.Logger.verbose(\"TextureLayout\",`Given width/height preferences were unattainable: shape:${e}, breakAxis:${t.breakAxis}`);}const o=e.reduce(((e,t)=>e*t));let i=Math.floor(Math.sqrt(o));for(;i=n||o%i!=0)throw new Error(`The given dimensions are outside this GPU's boundaries: ${e}`);return [i,o/i]}},t.PreferLogicalStrategy=class{constructor(e){this.maxTextureSize=e;}computeTextureWH(e,t){const n=this.computeTexture(e,t);return t&&t.isPacked&&(n[0]/=2,n[1]/=2),t&&t.reverseWH?[n[1],n[0]]:n}computeTexture(e,t){const n=t&&t.isPacked;if(0===e.length)return n?[2,2]:[1,1];let o=this.maxTextureSize;if(t&&void 0!==t.breakAxis){const n=t.breakAxis>=e.length?1:e.slice(t.breakAxis).reduce(((e,t)=>e*t)),i=t.breakAxis<=0?1:e.slice(0,t.breakAxis).reduce(((e,t)=>e*t));if(!(n>o||i>o))return [n,i];r.Logger.verbose(\"TextureLayout\",`Given width/height preferences were unattainable: shape:${e}, breakAxis:${t.breakAxis}`);}let a=e.slice(0);if(n&&(o*=2,a=a.map(((e,t)=>t>=a.length-2?a[t]%2==0?a[t]:a[t]+1:a[t])),1===a.length&&(a=[2,a[0]])),2!==a.length){const e=i(a);a=e.newShape;}const s=u(a);return a.length<=1&&s<=o?[1,s]:2===a.length&&a[0]<=o&&a[1]<=o?a:3===a.length&&a[0]*a[1]<=o&&a[2]<=o?[a[0]*a[1],a[2]]:3===a.length&&a[0]<=o&&a[1]*a[2]<=o?[a[0],a[1]*a[2]]:4===a.length&&a[0]*a[1]*a[2]<=o&&a[3]<=o?[a[0]*a[1]*a[2],a[3]]:4===a.length&&a[0]<=o&&a[1]*a[2]*a[3]<=o?[a[0],a[1]*a[2]*a[3]]:n?l(s/4).map((e=>2*e)):l(s)}},t.squeezeShape=i,t.parseAxisParam=a,t.isInt=s,t.sizeFromShape=u,t.getRowsCols=function(e){if(0===e.length)throw Error(\"Cannot get rows and columns of an empty shape array.\");return [e.length>1?e[e.length-2]:1,e[e.length-1]]},t.sizeToSquarishShape=l,t.getBatchDim=function(e,t=2){return u(e.slice(0,e.length-t))};},3314:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createTextureLayoutFromShape=t.calculateTextureWidthAndHeight=t.createTextureLayoutFromTextureType=void 0;const r=n(7273),o=n(5639);t.createTextureLayoutFromTextureType=(e,n,r)=>{const i=r===o.TextureType.unpacked||r===o.TextureType.unpackedReversed?1:4,a=r===o.TextureType.packed,s=r===o.TextureType.unpackedReversed||r===o.TextureType.packed,u=r===o.TextureType.packedLastDimension?n.length-1:void 0,l=r===o.TextureType.packedLastDimension?n.map(((e,t)=>t===n.length-1?4*e:e)):void 0;return (0, t.createTextureLayoutFromShape)(e,n,i,l,{isPacked:a,reverseWH:s,breakAxis:u})},t.calculateTextureWidthAndHeight=(e,n,r)=>{const o=(0, t.createTextureLayoutFromTextureType)(e,n,r);return [o.width,o.height]},t.createTextureLayoutFromShape=(e,t,n=1,o,i)=>{const a=!(!i||!i.isPacked),[s,u]=e.computeTextureWH(a&&o||t,i),l=t.length;let c=t.slice(0);if(0===l&&(c=[1]),1===n)o=t;else if(a){if(4!==n)throw new Error(\"a packed texture must be 4-channel\");o=t,l>0&&(c[l-1]=Math.ceil(c[l-1]/2)),l>1&&(c[l-2]=Math.ceil(c[l-2]/2));}else if(!o)throw new Error(\"Unpacked shape is needed when using channels > 1\");return {width:s,height:u,channels:n,isPacked:a,shape:c,strides:r.ShapeUtil.computeStrides(c),unpackedShape:o,reversedWH:i&&i.reverseWH}};},5243:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.TextureManager=void 0;const r=n(1315);t.TextureManager=class{constructor(e,t,n,r){this.glContext=e,this.layoutStrategy=t,this.profiler=n,this.config=r,this.pendingRead=new Map,r.reuseTextures&&(this.inUseTextures=new Map,this.idleTextures=new Map,this.textureLookup=new Map);}createTextureFromLayout(e,t,n,o){const i=this.toEncoderType(e),a=this.glContext.getEncoder(i,t.channels||1,o);if(t.isPacked&&1===o)throw new Error(\"not implemented\");const s=t.width,u=t.height;let l,c;if(this.config.reuseTextures){l=`${s}x${u}_${a.format}_${a.internalFormat}_${a.textureType}`,c=this.inUseTextures.get(l),c||(c=[],this.inUseTextures.set(l,c));const t=this.idleTextures.get(l);if(t&&t.length>0){const r=t.pop();return c.push(r),1===o&&this.glContext.updateTexture(r,s,u,a,this.toTextureData(e,n)),r}}r.Logger.verbose(\"TextureManager\",`Creating new texture of size ${t.width}x${t.height}`);const p=this.glContext.allocateTexture(s,u,a,this.toTextureData(e,n));return this.config.reuseTextures&&(c.push(p),this.textureLookup.set(p,l)),p}readTexture(e,t,n){return n||(n=1),this.profiler.event(\"backend\",\"TextureManager.readTexture\",(()=>{const r=e.shape.reduce(((e,t)=>e*t))*n,o=this.glContext.readTexture(e.texture,e.width,e.height,r,this.toEncoderType(t),n);return this.toTensorData(t,o)}))}async readTextureAsync(e,t,n){const r=e.tensor.dataId;if(n||(n=1),this.pendingRead.has(r)){const e=this.pendingRead.get(r);return new Promise((t=>null==e?void 0:e.push(t)))}return this.profiler.event(\"backend\",\"TextureManager.readTextureAsync\",(async()=>{this.pendingRead.set(r,[]);const o=e.shape.reduce(((e,t)=>e*t))*n;await this.glContext.createAndWaitForFence();const i=this.glContext.readTexture(e.texture,e.width,e.height,o,this.toEncoderType(t),n),a=this.toTensorData(t,i),s=this.pendingRead.get(r);return this.pendingRead.delete(r),null==s||s.forEach((e=>e(a))),a}))}readUint8TextureAsFloat(e){return this.profiler.event(\"backend\",\"TextureManager.readUint8TextureAsFloat\",(()=>{const t=e.shape.reduce(((e,t)=>e*t)),n=this.glContext.readTexture(e.texture,e.width,e.height,4*t,\"byte\",4);return new Float32Array(n.buffer,n.byteOffset,t)}))}releaseTexture(e,t){let n;if(this.config.reuseTextures&&(n=this.textureLookup.get(e.texture),n)){t&&this.textureLookup.delete(n);const r=this.inUseTextures.get(n);if(r){const t=r.indexOf(e.texture);if(-1!==t){r.splice(t,1);let o=this.idleTextures.get(n);o||(o=[],this.idleTextures.set(n,o)),o.push(e.texture);}}}n&&!t||(r.Logger.verbose(\"TextureManager\",`Deleting texture of size ${e.width}x${e.height}`),this.glContext.deleteTexture(e.texture));}toTensorData(e,t){switch(e){case\"int16\":return t instanceof Int16Array?t:Int16Array.from(t);case\"int32\":return t instanceof Int32Array?t:Int32Array.from(t);case\"int8\":return t instanceof Int8Array?t:Int8Array.from(t);case\"uint16\":return t instanceof Uint16Array?t:Uint16Array.from(t);case\"uint32\":return t instanceof Uint32Array?t:Uint32Array.from(t);case\"uint8\":case\"bool\":return t instanceof Uint8Array?t:Uint8Array.from(t);case\"float32\":return t instanceof Float32Array?t:Float32Array.from(t);case\"float64\":return t instanceof Float64Array?t:Float64Array.from(t);default:throw new Error(`TensorData type ${e} is not supported`)}}toTextureData(e,t){if(t)return t instanceof Float32Array?t:new Float32Array(t)}toEncoderType(e){return \"float\"}clearActiveTextures(){this.glContext.clearActiveTextures();}};},5639:(e,t)=>{var n;Object.defineProperty(t,\"__esModule\",{value:!0}),t.TextureType=void 0,(n=t.TextureType||(t.TextureType={}))[n.unpacked=0]=\"unpacked\",n[n.unpackedReversed=1]=\"unpackedReversed\",n[n.packed=2]=\"packed\",n[n.downloadUint8AsFloat=3]=\"downloadUint8AsFloat\",n[n.packedLastDimension=4]=\"packedLastDimension\";},432:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.getGlChannels=t.getCoordsDataType=t.getSqueezedParams=t.squeezeInputShape=t.generateShaderFuncNameFromInputSamplerNameAtOutCoords=t.generateShaderFuncNameFromInputSamplerName=t.repeatedTry=t.getPackedShape=void 0;const r=n(7273);t.getPackedShape=function(e){const t=e.length;return e.slice(0,t-1).concat(e[t-1]/4)},t.repeatedTry=async function(e,t=(e=>0),n){return new Promise(((r,o)=>{let i=0;const a=()=>{if(e())return void r();i++;const s=t(i);null!=n&&i>=n?o():setTimeout(a,s);};a();}))},t.generateShaderFuncNameFromInputSamplerName=function(e){return (0, r.assert)(void 0!==e&&0!==e.length,(()=>\"empty string found for sampler name\")),\"get\"+e.charAt(0).toUpperCase()+e.slice(1)},t.generateShaderFuncNameFromInputSamplerNameAtOutCoords=function(e){return (0, r.assert)(void 0!==e&&0!==e.length,(()=>\"empty string found for sampler name\")),\"get\"+e.charAt(0).toUpperCase()+e.slice(1)+\"AtOutCoords\"},t.squeezeInputShape=function(e,t){let n=JSON.parse(JSON.stringify(e));return n=t,n},t.getSqueezedParams=function(e,t){return t.map((t=>e[t])).join(\", \")},t.getCoordsDataType=function(e){if(e<=1)return \"int\";if(2===e)return \"ivec2\";if(3===e)return \"ivec3\";if(4===e)return \"ivec4\";if(5===e)return \"ivec5\";if(6===e)return \"ivec6\";throw Error(`GPU for rank ${e} is not yet supported`)},t.getGlChannels=function(e=6){return [\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,e)};},3389:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createNewWebGLContext=t.createWebGLContext=void 0;const r=n(1315),o=n(3524),i={};function a(e){const t=function(){if(\"undefined\"==typeof document){if(\"undefined\"==typeof OffscreenCanvas)throw new TypeError(\"failed to create canvas: OffscreenCanvas is not supported\");return new OffscreenCanvas(1,1)}const e=document.createElement(\"canvas\");return e.width=1,e.height=1,e}();let n;const i={alpha:!1,depth:!1,antialias:!1,stencil:!1,preserveDrawingBuffer:!1,premultipliedAlpha:!1,failIfMajorPerformanceCaveat:!1};if((!e||\"webgl2\"===e)&&(n=t.getContext(\"webgl2\",i),n))try{return new o.WebGLContext(n,2)}catch(e){r.Logger.warning(\"GlContextFactory\",`failed to create WebGLContext using contextId 'webgl2'. Error: ${e}`);}if((!e||\"webgl\"===e)&&(n=t.getContext(\"webgl\",i)||t.getContext(\"experimental-webgl\",i),n))try{return new o.WebGLContext(n,1)}catch(e){r.Logger.warning(\"GlContextFactory\",`failed to create WebGLContext using contextId 'webgl' or 'experimental-webgl'. Error: ${e}`);}throw new Error(\"WebGL is not supported\")}t.createWebGLContext=function e(t){let n;t&&\"webgl2\"!==t||!(\"webgl2\"in i)?t&&\"webgl\"!==t||!(\"webgl\"in i)||(n=i.webgl):n=i.webgl2,n=n||a(t),t=t||1===n.version?\"webgl\":\"webgl2\";const r=n.gl;return i[t]=n,r.isContextLost()?(delete i[t],e(t)):(r.disable(r.DEPTH_TEST),r.disable(r.STENCIL_TEST),r.disable(r.BLEND),r.disable(r.DITHER),r.disable(r.POLYGON_OFFSET_FILL),r.disable(r.SAMPLE_COVERAGE),r.enable(r.SCISSOR_TEST),r.enable(r.CULL_FACE),r.cullFace(r.BACK),n)},t.createNewWebGLContext=a;},3524:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!(\"get\"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o);}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n];}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t});}:function(e,t){e.default=t;}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.WebGLContext=t.linearSearchLastTrue=void 0;const a=n(8453),s=i(n(9622)),u=n(432);function l(e){let t=0;for(;tthis.isTimerResultAvailable(e))),this.getTimerResult(e)}async createAndWaitForFence(){const e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t;const n=e,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);return e.flush(),t=null===r?()=>!0:()=>{const e=n.clientWaitSync(r,0,0);return e===n.ALREADY_SIGNALED||e===n.CONDITION_SATISFIED},{query:r,isFencePassed:t}}async pollFence(e){return new Promise((t=>{this.addItemToPoll((()=>e.isFencePassed()),(()=>t()));}))}pollItems(){const e=l(this.itemsToPoll.map((e=>e.isDoneFn)));for(let t=0;t<=e;++t){const{resolveFn:e}=this.itemsToPoll[t];e();}this.itemsToPoll=this.itemsToPoll.slice(e+1);}async addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1||await(0, u.repeatedTry)((()=>(this.pollItems(),0===this.itemsToPoll.length)));}};},6496:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ExecutionPlan=void 0;const r=n(1315);class o{constructor(e,t){this.op=e,this.node=t;}}t.ExecutionPlan=class{constructor(e,t,n){this.graph=e,this.profiler=n,this.initialize(t);}initialize(e){this.profiler.event(\"session\",\"ExecutionPlan.initialize\",(()=>{const t=this.graph.getNodes();if(t.length!==e.length)throw new Error(\"The size of nodes and OPs do not match.\");this._ops=e.map(((e,n)=>new o(e,t[n]))),this.reset(),this._starter=[],this._ops.forEach(((e,t)=>{let n=!0;for(const t of e.node.inputs)if(!this._values[t]&&-1===this.graph.getInputIndices().indexOf(t)){n=!1;break}n&&this._starter.push(t);}));}));}reset(){this._values=this.graph.getValues().map((e=>e.tensor));}async execute(e,t){return this.profiler.event(\"session\",\"ExecutionPlan.execute\",(async()=>{this.reset();const n=e.createInferenceHandler(),o=this.graph.getInputIndices();if(t.length!==o.length)throw new Error(`number of input tensors don't match the number of inputs to the model: actual: ${t.length} expected: ${o.length}`);t.forEach(((e,t)=>{const n=o[t];this._values[n]=e;}));const i=this._starter.slice(0),a=this.graph.getValues(),s=this.graph.getNodes();let u=0;for(;uthis._values[e]));if(-1!==o.indexOf(void 0))throw new Error(`unresolved input detected: op: ${t.node}`);const l=o;r.Logger.verbose(\"ExecPlan\",`Runing op:${t.node.name} (${l.map(((e,n)=>`'${t.node.inputs[n]}': ${e.type}[${e.dims.join(\",\")}]`)).join(\", \")})`);const c=await this.profiler.event(\"node\",t.node.name,(async()=>t.op.impl(n,l,t.op.context)));if(c.length!==t.node.outputs.length)throw new Error(\"the size of output does not match model definition.\");c.forEach(((e,n)=>{const r=t.node.outputs[n];if(this._values[r])throw new Error(`output [${r}] already has value: op:${t.node.name}`);this._values[r]=e;}));const p=new Set;c.forEach(((e,n)=>{const r=t.node.outputs[n];for(const e of a[r].to){const t=s[e];let n=!0;for(const e of t.inputs)if(!this._values[e]){n=!1;break}n&&p.add(e);}})),i.push(...p);}const l=[];for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Graph=void 0;const r=n(1446),o=n(6874),i=n(1287),a=n(9240),s=n(7273);var u=i.onnxruntime.experimental.fbs;t.Graph={from:(e,t)=>new p(e,t)};class l{constructor(e){this._from=void 0,this._to=[],this.tensor=void 0,this.type=void 0,e&&(this.type=s.ProtoUtil.tensorValueTypeFromProto(e.type.tensorType));}get from(){return this._from}get to(){return this._to}}class c{constructor(e,t){e instanceof r.onnx.NodeProto?(this.name=e.name,this.opType=e.opType,this.attributes=new o.Attribute(e.attribute)):e instanceof u.Node&&(this.name=null!=t?t:e.name(),this.opType=e.opType(),this.attributes=new o.Attribute(s.ProtoUtil.tensorAttributesFromORTFormat(e))),this.inputs=[],this.outputs=[],this.executeNode=!0;}}class p{constructor(e,t){if(!e)throw new TypeError(\"graph is empty\");this.buildGraph(e),this.transformGraph(t),this.checkIsAcyclic();}getInputIndices(){return this._allInputIndices}getInputNames(){return this._allInputNames}getOutputIndices(){return this._allOutputIndices}getOutputNames(){return this._allOutputNames}getValues(){return this._allData}getNodes(){return this._nodes}buildGraph(e){if(e instanceof r.onnx.GraphProto)this.buildGraphFromOnnxFormat(e);else {if(!(e instanceof u.Graph))throw new TypeError(\"Graph type is not supported.\");this.buildGraphFromOrtFormat(e);}}buildGraphFromOnnxFormat(e){const t=new Map;this._allData=[],this._allInputIndices=[],this._allInputNames=[],this._allOutputIndices=[],this._allOutputNames=[],this._nodes=[];const n=new Map;if(!e.input)throw new Error(\"missing information in graph: input\");const r=[];for(const n of e.input){if(t.has(n.name))throw new Error(`duplicated input name: ${n.name}`);const e=this._allData.push(new l(n))-1;t.set(n.name,e),r.push(n.name);}if(!e.initializer)throw new Error(\"missing information in graph: initializer\");for(const n of e.initializer){let e=t.get(n.name);if(void 0===e){const r=new l;r.type={shape:{dims:s.ProtoUtil.tensorDimsFromProto(n.dims)},tensorType:s.ProtoUtil.tensorDataTypeFromProto(n.dataType)},e=this._allData.push(r)-1,t.set(n.name,e);}this._allData[e]._from=-1,this._allData[e].tensor=a.Tensor.fromProto(n);}for(let e=0;e{this._allData[t]._to.forEach((t=>{e.add(t);}));}));const t=Array.from(e),n=new Array(this._nodes.length).fill(\"white\");for(;t.length>0;){const e=t.pop();\"gray\"===n[e]?n[e]=\"black\":(t.push(e),n[e]=\"gray\",this._nodes[e].outputs.forEach((r=>{const o=this._allData[r];if(void 0!==o.tensor)throw new Error(\"node outputs should not be initialized\");if(o._from!==e)throw new Error(\"from property of the Value object doesn't match index of Node being processed\");o._to.forEach((e=>{if(\"gray\"===n[e])throw new Error(\"model graph is cyclic\");\"white\"===n[e]&&t.push(e);}));})));}}transformGraph(e){this.removeAllIdentityNodes(),this.removeAllDropoutNodes(),this.fuseConvActivationNodes(),e&&e.transformGraph(this),this.finalizeGraph();}finalizeGraph(){let e=0;const t=new Array(this._nodes.length,0);let n=0;for(let e=0;e{this._allData[e]._from=-2;}));this._nodes.splice(n,this._nodes.length-n);for(let e=0;e=0))throw new Error(\"Trying to update a removed node\");n._to[e]=t[n._to[e]];}}e=0;for(let t=0;t0){let n=-1;void 0!==this._allData[t].from&&-1!==this._allData[t].from?(n=this._nodes[this._allData[t].from].outputs.indexOf(t+e),-1!==n&&(this._nodes[this._allData[t].from].outputs[n]=t)):(n=this._allInputIndices.indexOf(t+e),-1!==n&&(this._allInputIndices[n]=t)),this._allData[t].to.forEach((r=>{n=this._nodes[r].inputs.indexOf(t+e),-1!==n&&(this._nodes[r].inputs[n]=t);})),0===this._allData[t].to.length&&(n=this._allOutputIndices.indexOf(t+e),-1!==n&&(this._allOutputIndices[n]=t));}}else e++,this._allData.splice(t,1),t--;}deleteNode(e){const t=this._nodes[e];if(t.outputs.length>1)for(let e=1;e0)throw new Error(\"Node deletion with more than one output connected to other nodes is not supported. \");t.executeNode=!1;const n=t.inputs[0],r=t.outputs[0],o=this._allData[r].to;for(let n=0;n0)for(const e of o){const t=this._nodes[e].inputs.indexOf(r);if(-1===t)throw new Error(\"The Node object doesn't have the output Value in it's 'inputs' property \");this._nodes[e].inputs[t]=n,this._allData[n].to.push(e);}}removeAllDropoutNodes(){let e=0;for(const t of this._nodes){if(\"Dropout\"===t.opType){if(1!==t.inputs.length)throw new Error(\"Dropout nodes should only contain one input. \");if(1!==t.outputs.length&&2!==t.outputs.length)throw new Error(\"Dropout nodes should contain either 1 or 2 output(s)\");if(2===t.outputs.length&&0!==this._allData[t.outputs[1]]._to.length)throw new Error(\"Dropout nodes's second output should not be referenced by other nodes\");this.deleteNode(e);}e++;}}removeAllIdentityNodes(){let e=0;for(const t of this._nodes)\"Identity\"===t.opType&&this.deleteNode(e),e++;}isActivation(e){switch(e.opType){case\"Relu\":case\"Sigmoid\":case\"Clip\":return !0;default:return !1}}fuseConvActivationNodes(){for(const e of this._nodes)if(\"Conv\"===e.opType){const t=this._allData[e.outputs[0]]._to;if(1===t.length&&this.isActivation(this._nodes[t[0]])){const n=this._nodes[t[0]];if(\"Clip\"===n.opType)if(1===n.inputs.length)try{e.attributes.set(\"activation_params\",\"floats\",[n.attributes.getFloat(\"min\"),n.attributes.getFloat(\"max\")]);}catch(t){e.attributes.set(\"activation_params\",\"floats\",[s.MIN_CLIP,s.MAX_CLIP]);}else {if(!(n.inputs.length>=3&&void 0!==this._allData[n.inputs[1]].tensor&&void 0!==this._allData[n.inputs[2]].tensor))continue;e.attributes.set(\"activation_params\",\"floats\",[this._allData[n.inputs[1]].tensor.floatData[0],this._allData[n.inputs[2]].tensor.floatData[0]]);}e.attributes.set(\"activation\",\"string\",n.opType),this.deleteNode(t[0]);}}}}},1315:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.now=t.Profiler=t.Logger=void 0;const n={verbose:1e3,info:2e3,warning:4e3,error:5e3,fatal:6e3},r={none:new class{log(e,t,n){}},console:new class{log(e,t,n){console.log(`${this.color(e)} ${n?\"\u001b[35m\"+n+\"\u001b[0m \":\"\"}${t}`);}color(e){switch(e){case\"verbose\":return \"\u001b[34;40mv\u001b[0m\";case\"info\":return \"\u001b[32mi\u001b[0m\";case\"warning\":return \"\u001b[30;43mw\u001b[0m\";case\"error\":return \"\u001b[31;40me\u001b[0m\";case\"fatal\":return \"\u001b[101mf\u001b[0m\";default:throw new Error(`unsupported severity: ${e}`)}}}},o={provider:\"console\",minimalSeverity:\"warning\",logDateTime:!0,logSourceLocation:!1};let i={\"\":o};function a(e,t,n,r){if(void 0===t)return o=e,{verbose:a.verbose.bind(null,o),info:a.info.bind(null,o),warning:a.warning.bind(null,o),error:a.error.bind(null,o),fatal:a.fatal.bind(null,o)};if(void 0===n)s(e,t);else if(\"number\"==typeof n&&void 0===r)s(e,t);else if(\"string\"==typeof n&&void 0===r)s(e,n,0,t);else {if(\"string\"!=typeof n||\"number\"!=typeof r)throw new TypeError(\"input is valid\");s(e,n,0,t);}var o;}function s(e,t,o,a){const s=i[a||\"\"]||i[\"\"];n[e]{a.then((async t=>{o&&await o.end(),e(t);}),(async e=>{o&&await o.end(),t(e);}));}));if(!i&&o){const e=o.end();if(e&&\"function\"==typeof e.then)return new Promise(((t,n)=>{e.then((()=>{t(a);}),(e=>{n(e);}));}))}return a}begin(e,n,r){if(!this._started)throw new Error(\"profiler is not started yet\");if(void 0===r){const r=(0, t.now)();return this.flush(r),new u(e,n,r,(e=>this.endSync(e)))}{const t=r.beginTimer();return new u(e,n,0,(async e=>this.end(e)),t,r)}}async end(e){const t=await e.checkTimer();this._timingEvents.length=this._flushBatchSize||e-this._flushTime>=this._flushIntervalInMilliseconds){for(const e=this._flushPointer;this._flushPointerperformance.now():Date.now;},1745:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Model=void 0;const r=n(5686),o=n(1446),i=n(4662),a=n(1287),s=n(7273);var u=a.onnxruntime.experimental.fbs;t.Model=class{constructor(){}load(e,t,n){if(!n)try{return void this.loadFromOnnxFormat(e,t)}catch(e){if(void 0!==n)throw e}this.loadFromOrtFormat(e,t);}loadFromOnnxFormat(e,t){const n=o.onnx.ModelProto.decode(e);if(s.LongUtil.longToNumber(n.irVersion)<3)throw new Error(\"only support ONNX model with IR_VERSION>=3\");this._opsets=n.opsetImport.map((e=>({domain:e.domain,version:s.LongUtil.longToNumber(e.version)}))),this._graph=i.Graph.from(n.graph,t);}loadFromOrtFormat(e,t){const n=new r.flatbuffers.ByteBuffer(e),o=u.InferenceSession.getRootAsInferenceSession(n).model();if(s.LongUtil.longToNumber(o.irVersion())<3)throw new Error(\"only support ONNX model with IR_VERSION>=3\");this._opsets=[];for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.FLOAT_TYPES=t.INT_TYPES=t.NUMBER_TYPES=void 0,t.NUMBER_TYPES=[\"float32\",\"float64\",\"int32\",\"int16\",\"int8\",\"uint16\",\"uint32\",\"uint8\"],t.INT_TYPES=[\"int32\",\"int16\",\"int8\",\"uint16\",\"uint32\",\"uint8\"],t.FLOAT_TYPES=[\"float32\",\"float64\"];},5881:(e,t)=>{function n(e,t){if(t.endsWith(\"+\")){const n=Number.parseInt(t.substring(0,t.length-1),10);return !isNaN(n)&&n<=e}if(2===t.split(\"-\").length){const n=t.split(\"-\"),r=Number.parseInt(n[0],10),o=Number.parseInt(n[1],10);return !isNaN(r)&&!isNaN(o)&&r<=e&&e<=o}return Number.parseInt(t,10)===e}Object.defineProperty(t,\"__esModule\",{value:!0}),t.resolveOperator=void 0,t.resolveOperator=function(e,t,r){for(const o of r){const r=o[0],i=o[1],a=o[2],s=o[3],u=o[4];if(e.opType===r)for(const e of t)if((e.domain===i||\"ai.onnx\"===e.domain&&\"\"===i)&&n(e.version,a))return {opImpl:s,opInit:u}}throw new TypeError(`cannot resolve operator '${e.opType}' with opsets: ${t.map((e=>`${e.domain||\"ai.onnx\"} v${e.version}`)).join(\", \")}`)};},1287:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.onnxruntime=void 0;const r=n(5686);var o,i;o=t.onnxruntime||(t.onnxruntime={}),function(e){!function(e){e[e.UNDEFINED=0]=\"UNDEFINED\",e[e.FLOAT=1]=\"FLOAT\",e[e.INT=2]=\"INT\",e[e.STRING=3]=\"STRING\",e[e.TENSOR=4]=\"TENSOR\",e[e.GRAPH=5]=\"GRAPH\",e[e.FLOATS=6]=\"FLOATS\",e[e.INTS=7]=\"INTS\",e[e.STRINGS=8]=\"STRINGS\",e[e.TENSORS=9]=\"TENSORS\",e[e.GRAPHS=10]=\"GRAPHS\",e[e.SPARSE_TENSOR=11]=\"SPARSE_TENSOR\",e[e.SPARSE_TENSORS=12]=\"SPARSE_TENSORS\";}(e.AttributeType||(e.AttributeType={}));}((i=o.experimental||(o.experimental={})).fbs||(i.fbs={})),function(e){!function(e){!function(e){!function(e){e[e.UNKNOWN=0]=\"UNKNOWN\",e[e.VALUE=1]=\"VALUE\",e[e.PARAM=2]=\"PARAM\";}(e.DimensionValueType||(e.DimensionValueType={}));}(e.fbs||(e.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(e){!function(e){!function(e){e[e.UNDEFINED=0]=\"UNDEFINED\",e[e.FLOAT=1]=\"FLOAT\",e[e.UINT8=2]=\"UINT8\",e[e.INT8=3]=\"INT8\",e[e.UINT16=4]=\"UINT16\",e[e.INT16=5]=\"INT16\",e[e.INT32=6]=\"INT32\",e[e.INT64=7]=\"INT64\",e[e.STRING=8]=\"STRING\",e[e.BOOL=9]=\"BOOL\",e[e.FLOAT16=10]=\"FLOAT16\",e[e.DOUBLE=11]=\"DOUBLE\",e[e.UINT32=12]=\"UINT32\",e[e.UINT64=13]=\"UINT64\",e[e.COMPLEX64=14]=\"COMPLEX64\",e[e.COMPLEX128=15]=\"COMPLEX128\",e[e.BFLOAT16=16]=\"BFLOAT16\";}(e.TensorDataType||(e.TensorDataType={}));}(e.fbs||(e.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(e){!function(e){!function(e){e[e.Primitive=0]=\"Primitive\",e[e.Fused=1]=\"Fused\";}(e.NodeType||(e.NodeType={}));}(e.fbs||(e.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(e){!function(e){!function(e){e[e.NONE=0]=\"NONE\",e[e.tensor_type=1]=\"tensor_type\",e[e.sequence_type=2]=\"sequence_type\",e[e.map_type=3]=\"map_type\";}(e.TypeInfoValue||(e.TypeInfoValue={}));}(e.fbs||(e.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsShape(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsShape(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}dim(t,n){let r=this.bb.__offset(this.bb_pos,4);return r?(n||new e.experimental.fbs.Dimension).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}dimLength(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__vector_len(this.bb_pos+e):0}static startShape(e){e.startObject(1);}static addDim(e,t){e.addFieldOffset(0,t,0);}static createDimVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startDimVector(e,t){e.startVector(4,t,4);}static endShape(e){return e.endObject()}static createShape(e,t){return n.startShape(e),n.addDim(e,t),n.endShape(e)}}t.Shape=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsDimension(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsDimension(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}value(t){let n=this.bb.__offset(this.bb_pos,4);return n?(t||new e.experimental.fbs.DimensionValue).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}denotation(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}static startDimension(e){e.startObject(2);}static addValue(e,t){e.addFieldOffset(0,t,0);}static addDenotation(e,t){e.addFieldOffset(1,t,0);}static endDimension(e){return e.endObject()}static createDimension(e,t,r){return n.startDimension(e),n.addValue(e,t),n.addDenotation(e,r),n.endDimension(e)}}t.Dimension=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsDimensionValue(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsDimensionValue(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}dimType(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt8(this.bb_pos+t):e.experimental.fbs.DimensionValueType.UNKNOWN}dimValue(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}dimParam(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__string(this.bb_pos+t,e):null}static startDimensionValue(e){e.startObject(3);}static addDimType(t,n){t.addFieldInt8(0,n,e.experimental.fbs.DimensionValueType.UNKNOWN);}static addDimValue(e,t){e.addFieldInt64(1,t,e.createLong(0,0));}static addDimParam(e,t){e.addFieldOffset(2,t,0);}static endDimensionValue(e){return e.endObject()}static createDimensionValue(e,t,r,o){return n.startDimensionValue(e),n.addDimType(e,t),n.addDimValue(e,r),n.addDimParam(e,o),n.endDimensionValue(e)}}t.DimensionValue=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsTensorTypeAndShape(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsTensorTypeAndShape(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}elemType(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt32(this.bb_pos+t):e.experimental.fbs.TensorDataType.UNDEFINED}shape(t){let n=this.bb.__offset(this.bb_pos,6);return n?(t||new e.experimental.fbs.Shape).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startTensorTypeAndShape(e){e.startObject(2);}static addElemType(t,n){t.addFieldInt32(0,n,e.experimental.fbs.TensorDataType.UNDEFINED);}static addShape(e,t){e.addFieldOffset(1,t,0);}static endTensorTypeAndShape(e){return e.endObject()}static createTensorTypeAndShape(e,t,r){return n.startTensorTypeAndShape(e),n.addElemType(e,t),n.addShape(e,r),n.endTensorTypeAndShape(e)}}t.TensorTypeAndShape=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsMapType(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsMapType(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}keyType(){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readInt32(this.bb_pos+t):e.experimental.fbs.TensorDataType.UNDEFINED}valueType(t){let n=this.bb.__offset(this.bb_pos,6);return n?(t||new e.experimental.fbs.TypeInfo).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startMapType(e){e.startObject(2);}static addKeyType(t,n){t.addFieldInt32(0,n,e.experimental.fbs.TensorDataType.UNDEFINED);}static addValueType(e,t){e.addFieldOffset(1,t,0);}static endMapType(e){return e.endObject()}static createMapType(e,t,r){return n.startMapType(e),n.addKeyType(e,t),n.addValueType(e,r),n.endMapType(e)}}t.MapType=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSequenceType(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSequenceType(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}elemType(t){let n=this.bb.__offset(this.bb_pos,4);return n?(t||new e.experimental.fbs.TypeInfo).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startSequenceType(e){e.startObject(1);}static addElemType(e,t){e.addFieldOffset(0,t,0);}static endSequenceType(e){return e.endObject()}static createSequenceType(e,t){return n.startSequenceType(e),n.addElemType(e,t),n.endSequenceType(e)}}t.SequenceType=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(e){(e.fbs||(e.fbs={})).EdgeEnd=class{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}nodeIndex(){return this.bb.readUint32(this.bb_pos)}srcArgIndex(){return this.bb.readInt32(this.bb_pos+4)}dstArgIndex(){return this.bb.readInt32(this.bb_pos+8)}static createEdgeEnd(e,t,n,r){return e.prep(4,12),e.writeInt32(r),e.writeInt32(n),e.writeInt32(t),e.offset()}};}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsNodeEdge(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsNodeEdge(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}nodeIndex(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}inputEdges(t,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new e.experimental.fbs.EdgeEnd).__init(this.bb.__vector(this.bb_pos+r)+12*t,this.bb):null}inputEdgesLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}outputEdges(t,n){let r=this.bb.__offset(this.bb_pos,8);return r?(n||new e.experimental.fbs.EdgeEnd).__init(this.bb.__vector(this.bb_pos+r)+12*t,this.bb):null}outputEdgesLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}static startNodeEdge(e){e.startObject(3);}static addNodeIndex(e,t){e.addFieldInt32(0,t,0);}static addInputEdges(e,t){e.addFieldOffset(1,t,0);}static startInputEdgesVector(e,t){e.startVector(12,t,4);}static addOutputEdges(e,t){e.addFieldOffset(2,t,0);}static startOutputEdgesVector(e,t){e.startVector(12,t,4);}static endNodeEdge(e){return e.endObject()}static createNodeEdge(e,t,r,o){return n.startNodeEdge(e),n.addNodeIndex(e,t),n.addInputEdges(e,r),n.addOutputEdges(e,o),n.endNodeEdge(e)}}t.NodeEdge=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsNode(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsNode(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}name(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}docString(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}domain(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__string(this.bb_pos+t,e):null}sinceVersion(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readInt32(this.bb_pos+e):0}index(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}opType(e){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.__string(this.bb_pos+t,e):null}type(){let t=this.bb.__offset(this.bb_pos,16);return t?this.bb.readInt32(this.bb_pos+t):e.experimental.fbs.NodeType.Primitive}executionProviderType(e){let t=this.bb.__offset(this.bb_pos,18);return t?this.bb.__string(this.bb_pos+t,e):null}inputs(e,t){let n=this.bb.__offset(this.bb_pos,20);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}inputsLength(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.__vector_len(this.bb_pos+e):0}outputs(e,t){let n=this.bb.__offset(this.bb_pos,22);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}outputsLength(){let e=this.bb.__offset(this.bb_pos,22);return e?this.bb.__vector_len(this.bb_pos+e):0}attributes(t,n){let r=this.bb.__offset(this.bb_pos,24);return r?(n||new e.experimental.fbs.Attribute).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}attributesLength(){let e=this.bb.__offset(this.bb_pos,24);return e?this.bb.__vector_len(this.bb_pos+e):0}inputArgCounts(e){let t=this.bb.__offset(this.bb_pos,26);return t?this.bb.readInt32(this.bb.__vector(this.bb_pos+t)+4*e):0}inputArgCountsLength(){let e=this.bb.__offset(this.bb_pos,26);return e?this.bb.__vector_len(this.bb_pos+e):0}inputArgCountsArray(){let e=this.bb.__offset(this.bb_pos,26);return e?new Int32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}implicitInputs(e,t){let n=this.bb.__offset(this.bb_pos,28);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}implicitInputsLength(){let e=this.bb.__offset(this.bb_pos,28);return e?this.bb.__vector_len(this.bb_pos+e):0}static startNode(e){e.startObject(13);}static addName(e,t){e.addFieldOffset(0,t,0);}static addDocString(e,t){e.addFieldOffset(1,t,0);}static addDomain(e,t){e.addFieldOffset(2,t,0);}static addSinceVersion(e,t){e.addFieldInt32(3,t,0);}static addIndex(e,t){e.addFieldInt32(4,t,0);}static addOpType(e,t){e.addFieldOffset(5,t,0);}static addType(t,n){t.addFieldInt32(6,n,e.experimental.fbs.NodeType.Primitive);}static addExecutionProviderType(e,t){e.addFieldOffset(7,t,0);}static addInputs(e,t){e.addFieldOffset(8,t,0);}static createInputsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startInputsVector(e,t){e.startVector(4,t,4);}static addOutputs(e,t){e.addFieldOffset(9,t,0);}static createOutputsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startOutputsVector(e,t){e.startVector(4,t,4);}static addAttributes(e,t){e.addFieldOffset(10,t,0);}static createAttributesVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startAttributesVector(e,t){e.startVector(4,t,4);}static addInputArgCounts(e,t){e.addFieldOffset(11,t,0);}static createInputArgCountsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addInt32(t[n]);return e.endVector()}static startInputArgCountsVector(e,t){e.startVector(4,t,4);}static addImplicitInputs(e,t){e.addFieldOffset(12,t,0);}static createImplicitInputsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startImplicitInputsVector(e,t){e.startVector(4,t,4);}static endNode(e){return e.endObject()}static createNode(e,t,r,o,i,a,s,u,l,c,p,d,f,h){return n.startNode(e),n.addName(e,t),n.addDocString(e,r),n.addDomain(e,o),n.addSinceVersion(e,i),n.addIndex(e,a),n.addOpType(e,s),n.addType(e,u),n.addExecutionProviderType(e,l),n.addInputs(e,c),n.addOutputs(e,p),n.addAttributes(e,d),n.addInputArgCounts(e,f),n.addImplicitInputs(e,h),n.endNode(e)}}t.Node=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsValueInfo(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsValueInfo(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}name(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}docString(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}type(t){let n=this.bb.__offset(this.bb_pos,8);return n?(t||new e.experimental.fbs.TypeInfo).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startValueInfo(e){e.startObject(3);}static addName(e,t){e.addFieldOffset(0,t,0);}static addDocString(e,t){e.addFieldOffset(1,t,0);}static addType(e,t){e.addFieldOffset(2,t,0);}static endValueInfo(e){return e.endObject()}static createValueInfo(e,t,r,o){return n.startValueInfo(e),n.addName(e,t),n.addDocString(e,r),n.addType(e,o),n.endValueInfo(e)}}t.ValueInfo=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsTypeInfo(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsTypeInfo(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}denotation(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}valueType(){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readUint8(this.bb_pos+t):e.experimental.fbs.TypeInfoValue.NONE}value(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__union(e,this.bb_pos+t):null}static startTypeInfo(e){e.startObject(3);}static addDenotation(e,t){e.addFieldOffset(0,t,0);}static addValueType(t,n){t.addFieldInt8(1,n,e.experimental.fbs.TypeInfoValue.NONE);}static addValue(e,t){e.addFieldOffset(2,t,0);}static endTypeInfo(e){return e.endObject()}static createTypeInfo(e,t,r,o){return n.startTypeInfo(e),n.addDenotation(e,t),n.addValueType(e,r),n.addValue(e,o),n.endTypeInfo(e)}}t.TypeInfo=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(e){!function(e){class t{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsOperatorSetId(e,n){return (n||new t).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsOperatorSetId(e,n){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(n||new t).__init(e.readInt32(e.position())+e.position(),e)}domain(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}version(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}static startOperatorSetId(e){e.startObject(2);}static addDomain(e,t){e.addFieldOffset(0,t,0);}static addVersion(e,t){e.addFieldInt64(1,t,e.createLong(0,0));}static endOperatorSetId(e){return e.endObject()}static createOperatorSetId(e,n,r){return t.startOperatorSetId(e),t.addDomain(e,n),t.addVersion(e,r),t.endOperatorSetId(e)}}e.OperatorSetId=t;}(e.fbs||(e.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsTensor(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsTensor(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}name(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}docString(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}dims(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readInt64(this.bb.__vector(this.bb_pos+t)+8*e):this.bb.createLong(0,0)}dimsLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}dataType(){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readInt32(this.bb_pos+t):e.experimental.fbs.TensorDataType.UNDEFINED}rawData(e){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.readUint8(this.bb.__vector(this.bb_pos+t)+e):0}rawDataLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}rawDataArray(){let e=this.bb.__offset(this.bb_pos,12);return e?new Uint8Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}stringData(e,t){let n=this.bb.__offset(this.bb_pos,14);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}stringDataLength(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__vector_len(this.bb_pos+e):0}static startTensor(e){e.startObject(6);}static addName(e,t){e.addFieldOffset(0,t,0);}static addDocString(e,t){e.addFieldOffset(1,t,0);}static addDims(e,t){e.addFieldOffset(2,t,0);}static createDimsVector(e,t){e.startVector(8,t.length,8);for(let n=t.length-1;n>=0;n--)e.addInt64(t[n]);return e.endVector()}static startDimsVector(e,t){e.startVector(8,t,8);}static addDataType(t,n){t.addFieldInt32(3,n,e.experimental.fbs.TensorDataType.UNDEFINED);}static addRawData(e,t){e.addFieldOffset(4,t,0);}static createRawDataVector(e,t){e.startVector(1,t.length,1);for(let n=t.length-1;n>=0;n--)e.addInt8(t[n]);return e.endVector()}static startRawDataVector(e,t){e.startVector(1,t,1);}static addStringData(e,t){e.addFieldOffset(5,t,0);}static createStringDataVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startStringDataVector(e,t){e.startVector(4,t,4);}static endTensor(e){return e.endObject()}static createTensor(e,t,r,o,i,a,s){return n.startTensor(e),n.addName(e,t),n.addDocString(e,r),n.addDims(e,o),n.addDataType(e,i),n.addRawData(e,a),n.addStringData(e,s),n.endTensor(e)}}t.Tensor=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSparseTensor(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSparseTensor(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}values(t){let n=this.bb.__offset(this.bb_pos,4);return n?(t||new e.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}indices(t){let n=this.bb.__offset(this.bb_pos,6);return n?(t||new e.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}dims(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readInt64(this.bb.__vector(this.bb_pos+t)+8*e):this.bb.createLong(0,0)}dimsLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}static startSparseTensor(e){e.startObject(3);}static addValues(e,t){e.addFieldOffset(0,t,0);}static addIndices(e,t){e.addFieldOffset(1,t,0);}static addDims(e,t){e.addFieldOffset(2,t,0);}static createDimsVector(e,t){e.startVector(8,t.length,8);for(let n=t.length-1;n>=0;n--)e.addInt64(t[n]);return e.endVector()}static startDimsVector(e,t){e.startVector(8,t,8);}static endSparseTensor(e){return e.endObject()}static createSparseTensor(e,t,r,o){return n.startSparseTensor(e),n.addValues(e,t),n.addIndices(e,r),n.addDims(e,o),n.endSparseTensor(e)}}t.SparseTensor=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsAttribute(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsAttribute(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}name(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}docString(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}type(){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readInt32(this.bb_pos+t):e.experimental.fbs.AttributeType.UNDEFINED}f(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readFloat32(this.bb_pos+e):0}i(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}s(e){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.__string(this.bb_pos+t,e):null}t(t){let n=this.bb.__offset(this.bb_pos,16);return n?(t||new e.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}g(t){let n=this.bb.__offset(this.bb_pos,18);return n?(t||new e.experimental.fbs.Graph).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}floats(e){let t=this.bb.__offset(this.bb_pos,20);return t?this.bb.readFloat32(this.bb.__vector(this.bb_pos+t)+4*e):0}floatsLength(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.__vector_len(this.bb_pos+e):0}floatsArray(){let e=this.bb.__offset(this.bb_pos,20);return e?new Float32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}ints(e){let t=this.bb.__offset(this.bb_pos,22);return t?this.bb.readInt64(this.bb.__vector(this.bb_pos+t)+8*e):this.bb.createLong(0,0)}intsLength(){let e=this.bb.__offset(this.bb_pos,22);return e?this.bb.__vector_len(this.bb_pos+e):0}strings(e,t){let n=this.bb.__offset(this.bb_pos,24);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}stringsLength(){let e=this.bb.__offset(this.bb_pos,24);return e?this.bb.__vector_len(this.bb_pos+e):0}tensors(t,n){let r=this.bb.__offset(this.bb_pos,26);return r?(n||new e.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}tensorsLength(){let e=this.bb.__offset(this.bb_pos,26);return e?this.bb.__vector_len(this.bb_pos+e):0}graphs(t,n){let r=this.bb.__offset(this.bb_pos,28);return r?(n||new e.experimental.fbs.Graph).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}graphsLength(){let e=this.bb.__offset(this.bb_pos,28);return e?this.bb.__vector_len(this.bb_pos+e):0}static startAttribute(e){e.startObject(13);}static addName(e,t){e.addFieldOffset(0,t,0);}static addDocString(e,t){e.addFieldOffset(1,t,0);}static addType(t,n){t.addFieldInt32(2,n,e.experimental.fbs.AttributeType.UNDEFINED);}static addF(e,t){e.addFieldFloat32(3,t,0);}static addI(e,t){e.addFieldInt64(4,t,e.createLong(0,0));}static addS(e,t){e.addFieldOffset(5,t,0);}static addT(e,t){e.addFieldOffset(6,t,0);}static addG(e,t){e.addFieldOffset(7,t,0);}static addFloats(e,t){e.addFieldOffset(8,t,0);}static createFloatsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addFloat32(t[n]);return e.endVector()}static startFloatsVector(e,t){e.startVector(4,t,4);}static addInts(e,t){e.addFieldOffset(9,t,0);}static createIntsVector(e,t){e.startVector(8,t.length,8);for(let n=t.length-1;n>=0;n--)e.addInt64(t[n]);return e.endVector()}static startIntsVector(e,t){e.startVector(8,t,8);}static addStrings(e,t){e.addFieldOffset(10,t,0);}static createStringsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startStringsVector(e,t){e.startVector(4,t,4);}static addTensors(e,t){e.addFieldOffset(11,t,0);}static createTensorsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startTensorsVector(e,t){e.startVector(4,t,4);}static addGraphs(e,t){e.addFieldOffset(12,t,0);}static createGraphsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startGraphsVector(e,t){e.startVector(4,t,4);}static endAttribute(e){return e.endObject()}static createAttribute(e,t,r,o,i,a,s,u,l,c,p,d,f,h){return n.startAttribute(e),n.addName(e,t),n.addDocString(e,r),n.addType(e,o),n.addF(e,i),n.addI(e,a),n.addS(e,s),n.addT(e,u),n.addG(e,l),n.addFloats(e,c),n.addInts(e,p),n.addStrings(e,d),n.addTensors(e,f),n.addGraphs(e,h),n.endAttribute(e)}}t.Attribute=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsGraph(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsGraph(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}initializers(t,n){let r=this.bb.__offset(this.bb_pos,4);return r?(n||new e.experimental.fbs.Tensor).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}initializersLength(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__vector_len(this.bb_pos+e):0}nodeArgs(t,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new e.experimental.fbs.ValueInfo).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}nodeArgsLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}nodes(t,n){let r=this.bb.__offset(this.bb_pos,8);return r?(n||new e.experimental.fbs.Node).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}nodesLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}maxNodeIndex(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}nodeEdges(t,n){let r=this.bb.__offset(this.bb_pos,12);return r?(n||new e.experimental.fbs.NodeEdge).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}nodeEdgesLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}inputs(e,t){let n=this.bb.__offset(this.bb_pos,14);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}inputsLength(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__vector_len(this.bb_pos+e):0}outputs(e,t){let n=this.bb.__offset(this.bb_pos,16);return n?this.bb.__string(this.bb.__vector(this.bb_pos+n)+4*e,t):null}outputsLength(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__vector_len(this.bb_pos+e):0}sparseInitializers(t,n){let r=this.bb.__offset(this.bb_pos,18);return r?(n||new e.experimental.fbs.SparseTensor).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}sparseInitializersLength(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__vector_len(this.bb_pos+e):0}static startGraph(e){e.startObject(8);}static addInitializers(e,t){e.addFieldOffset(0,t,0);}static createInitializersVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startInitializersVector(e,t){e.startVector(4,t,4);}static addNodeArgs(e,t){e.addFieldOffset(1,t,0);}static createNodeArgsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startNodeArgsVector(e,t){e.startVector(4,t,4);}static addNodes(e,t){e.addFieldOffset(2,t,0);}static createNodesVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startNodesVector(e,t){e.startVector(4,t,4);}static addMaxNodeIndex(e,t){e.addFieldInt32(3,t,0);}static addNodeEdges(e,t){e.addFieldOffset(4,t,0);}static createNodeEdgesVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startNodeEdgesVector(e,t){e.startVector(4,t,4);}static addInputs(e,t){e.addFieldOffset(5,t,0);}static createInputsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startInputsVector(e,t){e.startVector(4,t,4);}static addOutputs(e,t){e.addFieldOffset(6,t,0);}static createOutputsVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startOutputsVector(e,t){e.startVector(4,t,4);}static addSparseInitializers(e,t){e.addFieldOffset(7,t,0);}static createSparseInitializersVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startSparseInitializersVector(e,t){e.startVector(4,t,4);}static endGraph(e){return e.endObject()}static createGraph(e,t,r,o,i,a,s,u,l){return n.startGraph(e),n.addInitializers(e,t),n.addNodeArgs(e,r),n.addNodes(e,o),n.addMaxNodeIndex(e,i),n.addNodeEdges(e,a),n.addInputs(e,s),n.addOutputs(e,u),n.addSparseInitializers(e,l),n.endGraph(e)}}t.Graph=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsModel(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsModel(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}irVersion(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}opsetImport(t,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new e.experimental.fbs.OperatorSetId).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}opsetImportLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}producerName(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.__string(this.bb_pos+t,e):null}producerVersion(e){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.__string(this.bb_pos+t,e):null}domain(e){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.__string(this.bb_pos+t,e):null}modelVersion(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readInt64(this.bb_pos+e):this.bb.createLong(0,0)}docString(e){let t=this.bb.__offset(this.bb_pos,16);return t?this.bb.__string(this.bb_pos+t,e):null}graph(t){let n=this.bb.__offset(this.bb_pos,18);return n?(t||new e.experimental.fbs.Graph).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}graphDocString(e){let t=this.bb.__offset(this.bb_pos,20);return t?this.bb.__string(this.bb_pos+t,e):null}static startModel(e){e.startObject(9);}static addIrVersion(e,t){e.addFieldInt64(0,t,e.createLong(0,0));}static addOpsetImport(e,t){e.addFieldOffset(1,t,0);}static createOpsetImportVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startOpsetImportVector(e,t){e.startVector(4,t,4);}static addProducerName(e,t){e.addFieldOffset(2,t,0);}static addProducerVersion(e,t){e.addFieldOffset(3,t,0);}static addDomain(e,t){e.addFieldOffset(4,t,0);}static addModelVersion(e,t){e.addFieldInt64(5,t,e.createLong(0,0));}static addDocString(e,t){e.addFieldOffset(6,t,0);}static addGraph(e,t){e.addFieldOffset(7,t,0);}static addGraphDocString(e,t){e.addFieldOffset(8,t,0);}static endModel(e){return e.endObject()}static createModel(e,t,r,o,i,a,s,u,l,c){return n.startModel(e),n.addIrVersion(e,t),n.addOpsetImport(e,r),n.addProducerName(e,o),n.addProducerVersion(e,i),n.addDomain(e,a),n.addModelVersion(e,s),n.addDocString(e,u),n.addGraph(e,l),n.addGraphDocString(e,c),n.endModel(e)}}t.Model=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(e){!function(e){class t{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsKernelCreateInfos(e,n){return (n||new t).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsKernelCreateInfos(e,n){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(n||new t).__init(e.readInt32(e.position())+e.position(),e)}nodeIndices(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+4*e):0}nodeIndicesLength(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__vector_len(this.bb_pos+e):0}nodeIndicesArray(){let e=this.bb.__offset(this.bb_pos,4);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}kernelDefHashes(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.readUint64(this.bb.__vector(this.bb_pos+t)+8*e):this.bb.createLong(0,0)}kernelDefHashesLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}static startKernelCreateInfos(e){e.startObject(2);}static addNodeIndices(e,t){e.addFieldOffset(0,t,0);}static createNodeIndicesVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addInt32(t[n]);return e.endVector()}static startNodeIndicesVector(e,t){e.startVector(4,t,4);}static addKernelDefHashes(e,t){e.addFieldOffset(1,t,0);}static createKernelDefHashesVector(e,t){e.startVector(8,t.length,8);for(let n=t.length-1;n>=0;n--)e.addInt64(t[n]);return e.endVector()}static startKernelDefHashesVector(e,t){e.startVector(8,t,8);}static endKernelCreateInfos(e){return e.endObject()}static createKernelCreateInfos(e,n,r){return t.startKernelCreateInfos(e),t.addNodeIndices(e,n),t.addKernelDefHashes(e,r),t.endKernelCreateInfos(e)}}e.KernelCreateInfos=t;}(e.fbs||(e.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSubGraphSessionState(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSubGraphSessionState(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}graphId(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}sessionState(t){let n=this.bb.__offset(this.bb_pos,6);return n?(t||new e.experimental.fbs.SessionState).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startSubGraphSessionState(e){e.startObject(2);}static addGraphId(e,t){e.addFieldOffset(0,t,0);}static addSessionState(e,t){e.addFieldOffset(1,t,0);}static endSubGraphSessionState(e){let t=e.endObject();return e.requiredField(t,4),t}static createSubGraphSessionState(e,t,r){return n.startSubGraphSessionState(e),n.addGraphId(e,t),n.addSessionState(e,r),n.endSubGraphSessionState(e)}}t.SubGraphSessionState=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSessionState(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSessionState(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}kernels(t){let n=this.bb.__offset(this.bb_pos,4);return n?(t||new e.experimental.fbs.KernelCreateInfos).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}subGraphSessionStates(t,n){let r=this.bb.__offset(this.bb_pos,6);return r?(n||new e.experimental.fbs.SubGraphSessionState).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+4*t),this.bb):null}subGraphSessionStatesLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}static startSessionState(e){e.startObject(2);}static addKernels(e,t){e.addFieldOffset(0,t,0);}static addSubGraphSessionStates(e,t){e.addFieldOffset(1,t,0);}static createSubGraphSessionStatesVector(e,t){e.startVector(4,t.length,4);for(let n=t.length-1;n>=0;n--)e.addOffset(t[n]);return e.endVector()}static startSubGraphSessionStatesVector(e,t){e.startVector(4,t,4);}static endSessionState(e){return e.endObject()}static createSessionState(e,t,r){return n.startSessionState(e),n.addKernels(e,t),n.addSubGraphSessionStates(e,r),n.endSessionState(e)}}t.SessionState=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={})),function(e){!function(t){!function(t){class n{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsInferenceSession(e,t){return (t||new n).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsInferenceSession(e,t){return e.setPosition(e.position()+r.flatbuffers.SIZE_PREFIX_LENGTH),(t||new n).__init(e.readInt32(e.position())+e.position(),e)}static bufferHasIdentifier(e){return e.__has_identifier(\"ORTM\")}ortVersion(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}model(t){let n=this.bb.__offset(this.bb_pos,6);return n?(t||new e.experimental.fbs.Model).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}sessionState(t){let n=this.bb.__offset(this.bb_pos,8);return n?(t||new e.experimental.fbs.SessionState).__init(this.bb.__indirect(this.bb_pos+n),this.bb):null}static startInferenceSession(e){e.startObject(3);}static addOrtVersion(e,t){e.addFieldOffset(0,t,0);}static addModel(e,t){e.addFieldOffset(1,t,0);}static addSessionState(e,t){e.addFieldOffset(2,t,0);}static endInferenceSession(e){return e.endObject()}static finishInferenceSessionBuffer(e,t){e.finish(t,\"ORTM\");}static finishSizePrefixedInferenceSessionBuffer(e,t){e.finish(t,\"ORTM\",!0);}static createInferenceSession(e,t,r,o){return n.startInferenceSession(e),n.addOrtVersion(e,t),n.addModel(e,r),n.addSessionState(e,o),n.endInferenceSession(e)}}t.InferenceSession=n;}(t.fbs||(t.fbs={}));}(e.experimental||(e.experimental={}));}(t.onnxruntime||(t.onnxruntime={}));},1723:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OnnxjsSessionHandler=void 0;const r=n(8453),o=n(9240);t.OnnxjsSessionHandler=class{constructor(e){this.session=e,this.inputNames=this.session.inputNames,this.outputNames=this.session.outputNames;}async dispose(){}async run(e,t,n){const i=new Map;for(const t in e)if(Object.hasOwnProperty.call(e,t)){const n=e[t];i.set(t,new o.Tensor(n.dims,n.type,void 0,void 0,n.data));}const a=await this.session.run(i),s={};return a.forEach(((e,t)=>{s[t]=new r.Tensor(e.type,e.data,e.dims);})),s}startProfiling(){this.session.startProfiling();}endProfiling(){this.session.endProfiling();}};},6027:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Session=void 0;const r=n(7067),o=n(1296),i=n(1975),a=n(6496),s=n(1315),u=n(1745);t.Session=class{constructor(e={}){this._initialized=!1,this.backendHint=e.backendHint,this.profiler=s.Profiler.create(e.profiler),this.context={profiler:this.profiler,graphInputTypes:[],graphInputDims:[]};}get inputNames(){return this._model.graph.getInputNames()}get outputNames(){return this._model.graph.getOutputNames()}startProfiling(){this.profiler.start();}endProfiling(){this.profiler.stop();}async loadModel(e,t,n){await this.profiler.event(\"session\",\"Session.loadModel\",(async()=>{const a=await(0, i.resolveBackend)(this.backendHint);if(this.sessionHandler=a.createSessionHandler(this.context),this._model=new u.Model,\"string\"==typeof e){const t=e.endsWith(\".ort\");if(\"undefined\"==typeof fetch){const n=await(0, o.promisify)(r.readFile)(e);this.initialize(n,t);}else {const n=await fetch(e),r=await n.arrayBuffer();this.initialize(new Uint8Array(r),t);}}else if(ArrayBuffer.isView(e))this.initialize(e);else {const r=new Uint8Array(e,t||0,n||e.byteLength);this.initialize(r);}}));}initialize(e,t){if(this._initialized)throw new Error(\"already initialized\");this.profiler.event(\"session\",\"Session.initialize\",(()=>{const n=this.sessionHandler.transformGraph?this.sessionHandler:void 0;this._model.load(e,n,t),this.sessionHandler.onGraphInitialized&&this.sessionHandler.onGraphInitialized(this._model.graph),this.initializeOps(this._model.graph),this._executionPlan=new a.ExecutionPlan(this._model.graph,this._ops,this.profiler);})),this._initialized=!0;}async run(e){if(!this._initialized)throw new Error(\"session not initialized yet\");return this.profiler.event(\"session\",\"Session.run\",(async()=>{const t=this.normalizeAndValidateInputs(e),n=await this._executionPlan.execute(this.sessionHandler,t);return this.createOutput(n)}))}normalizeAndValidateInputs(e){const t=this._model.graph.getInputNames();if(Array.isArray(e)){if(e.length!==t.length)throw new Error(`incorrect input array length: expected ${t.length} but got ${e.length}`)}else {if(e.size!==t.length)throw new Error(`incorrect input map size: expected ${t.length} but got ${e.size}`);const n=new Array(e.size);let r=0;for(let o=0;o\"string\"==typeof e))))throw new TypeError(\"cache should be a string array\");l&&(this.cache=new Array(s));}else {if(void 0!==i){const e=d(t);if(!(i instanceof e))throw new TypeError(`cache should be type ${e.name}`)}if(l){const e=new ArrayBuffer(s*function(e){switch(e){case\"bool\":case\"int8\":case\"uint8\":return 1;case\"int16\":case\"uint16\":return 2;case\"int32\":case\"uint32\":case\"float32\":return 4;case\"float64\":return 8;default:throw new Error(`cannot calculate sizeof() on type ${e}`)}}(t));this.cache=function(e,t){return new(d(t))(e)}(e,t);}}}static fromProto(e){if(!e)throw new Error(\"cannot construct Value from an empty tensor\");const t=u.ProtoUtil.tensorDataTypeFromProto(e.dataType),n=u.ProtoUtil.tensorDimsFromProto(e.dims),r=new c(n,t);if(\"string\"===t)e.stringData.forEach(((e,t)=>{r.data[t]=(0, u.decodeUtf8String)(e);}));else if(e.rawData&&\"number\"==typeof e.rawData.byteLength&&e.rawData.byteLength>0){const t=r.data,n=new DataView(e.rawData.buffer,e.rawData.byteOffset,e.rawData.byteLength),o=p(e.dataType),i=e.rawData.byteLength/o;if(e.rawData.byteLength%o!=0)throw new Error(\"invalid buffer length\");if(t.length!==i)throw new Error(\"buffer length mismatch\");for(let r=0;r0){const t=r.data,n=new DataView(e.rawDataArray().buffer,e.rawDataArray().byteOffset,e.rawDataLength()),o=p(e.dataType()),i=e.rawDataLength()/o;if(e.rawDataLength()%o!=0)throw new Error(\"invalid buffer length\");if(t.length!==i)throw new Error(\"buffer length mismatch\");for(let r=0;r1&&u>1)return;a[i-s]=Math.max(n,u);}return a}static index(e,t){const n=new Array(t.length);return l.fillIndex(e,t,n),n}static fillIndex(e,t,n){const r=e.length-t.length;for(let o=0;o=0;e--)r[e]=c%i[e],c=Math.floor(c/i[e]);f||(l.fillIndex(r,e.dims,o),p=e.get(o)),h||(l.fillIndex(r,t.dims,s),d=t.get(s)),u.set(r,n(p,d));}}return u}}static isValidBroadcast(e,t){const n=e.length,r=t.length;if(n>r)return !1;for(let o=1;o<=n;o++)if(1!==e[n-o]&&e[n-o]!==t[r-o])return !1;return !0}static getBroadcastDims(e,t){const n=e.length,r=[];for(let o=0;o1&&1===a&&r.unshift(i);}return r}}t.BroadcastUtil=l,t.arrayCopyHelper=function(e,t,n,r,o){if(r<0||r>=t.length)throw new Error(\"sourceIndex out of bounds\");if(n<0||n>=e.length)throw new Error(\"targetIndex out of bounds\");if(r+o>t.length)throw new Error(\"source indices to be copied are outside bounds\");if(n+o>e.length)throw new Error(\"target array is too small to hold result\");for(let i=0;ii.default.isLong(e)?e.toNumber():e))}static tensorValueTypeFromProto(e){return {tensorType:c.tensorDataTypeFromProto(e.elemType),shape:{dims:c.tensorDimsFromProto(e.shape.dim.map((e=>e.dimValue)))}}}static tensorDimsFromORTFormat(e){const t=[];for(let n=0;ne.length)throw new Error(`invalid dimension of ${t} for sizeFromDimension as Tensor has ${e.length} dimensions.`);return d.getSizeFromDimensionRange(e,t,e.length)}static sizeToDimension(e,t){if(t<0||t>e.length)throw new Error(`invalid dimension of ${t} for sizeToDimension as Tensor has ${e.length} dimensions.`);return d.getSizeFromDimensionRange(e,0,t)}static getSizeFromDimensionRange(e,t,n){let r=1;for(let o=t;o=0;--r)n[r]=n[r+1]*e[r+1];return n}static transpose(e){return e.slice().reverse()}static indicesToOffset(e,t,n){void 0===n&&(n=e.length);let r=0;for(let o=0;o=t)throw new Error(\"unsupported axis for this operation.\");return e<0?e+t:e}static normalizeAxes(e,t){return e.map((e=>this.normalizeAxis(e,t)))}static incrementIndex(e,t,n){if(0===t.length||0===e.length)throw new Error(\"Index incrementing unsupported for scalar Tensor\");if(void 0===n)n=t.length;else if(n<=0||n>t.length)throw new Error(\"Incorrect axis to increment on\");for(let r=n-1;r>=0&&(e[r]++,!(e[r]=e.length)throw new Error(\"the dimension with value zero exceeds the dimension size of the input tensor\");r[a]=e[a];}else r[a]=t[a];i*=r[a];}}const a=d.size(e);if(-1!==o){if(a%i!=0)throw new Error(`the input tensor cannot be reshaped to the requested shape. Input shape: [${e}] Output shape: [${t}]`);r[o]=a/i;}else if(i!==a)throw new Error(\"reshapedDims and originalDims don't have matching sizes\");return r}static sortBasedOnPerm(e,t){return t?t.map((t=>e[t])):e.slice().reverse()}static padShape(e,t){const n=e.length;return e.map(((e,r)=>e+t[r]+t[r+n]))}static areEqual(e,t){return e.length===t.length&&e.every(((e,n)=>e===t[n]))}static validateDimsAndCalcSize(e){if(e.length>6)throw new TypeError(\"Only rank 0 to 6 is supported for tensor shape.\");let t=1;for(const n of e){if(!Number.isInteger(n))throw new TypeError(`Invalid shape: ${n} is not an integer`);if(n<0||n>2147483647)throw new TypeError(`Invalid shape: length ${n} is not allowed`);t*=n;}return t}static flattenShape(e,t){t<0&&(t+=e.length);const n=e.reduce(((e,t)=>e*t),1),r=e.slice(t).reduce(((e,t)=>e*t),1);return [n/r,r]}static squeezeShape(e,t){const n=new Array;t=d.normalizeAxes(t,e.length);for(let r=0;r=0;if(o&&1!==e[r])throw new Error(\"squeeze an axis of size different than 1\");(0===t.length&&e[r]>1||t.length>0&&!o)&&n.push(e[r]);}return n}static unsqueezeShape(e,t){const n=new Array(e.length+t.length);n.fill(0);for(let e=0;e=n.length)throw new Error(\"'axes' has an out of range axis\");if(0!==n[r])throw new Error(\"'axes' has a duplicate axis\");n[r]=1;}let r=0;for(let t=0;t=t.length)throw new Error(\"sourceIndex out of bounds\");if(n<0||n>=e.length)throw new Error(\"targetIndex out of bounds\");if(r+o>t.length)throw new Error(\"source indices to be copied are outside bounds\");if(n+o>e.length)throw new Error(\"target array is too small to hold result\");for(let i=0;i=t.length)throw new Error(\"sourceIndex out of bounds\");if(n<0||n>=e.length)throw new Error(\"targetIndex out of bounds\");if(r+o>t.length)throw new Error(\"source indices to be copied are outside bounds\");if(n+o>e.length)throw new Error(\"target array is too small to hold result\");for(let a=0;a=t.length)throw new Error(\"sourceIndex out of bounds\");if(n<0||n>=e.length)throw new Error(\"targetIndex out of bounds\");if(r+o>t.length)throw new Error(\"source indices to be copied are outside bounds\");if(n+o>e.length)throw new Error(\"target array is too small to hold result\");for(let a=0;a=t.length)throw new Error(\"sourceIndex out of bounds\");if(n<0||n>=e.length)throw new Error(\"targetIndex out of bounds\");if(r+o>t.length)throw new Error(\"source indices to be copied are outside bounds\");if(n+o>e.length)throw new Error(\"target array is too small to hold result\");for(let i=0;it.push(n)));const a=h.calcReduceShape(i,t,!0),u=d.size(a),c=new s.Tensor(a,e.type),p=d.computeStrides(a),f=d.computeStrides(i),g=new Array(i.length);for(let n=0;n=t.length)return i(e[o]);const u=t[r],l=u>=n.length?1:d.size(n.slice(u+1));for(let c=0;c0!==e))}}t.ReduceUtil=h;class g{static adjustPoolAttributes(e,t,n,r,o,i){if(!e&&n.length!==t.length-2)throw new Error(\"length of specified kernel shapes should be 2 less than length of input dimensions\");if(e)for(let e=0;e=n.length?n.push(t[e+2]):n[e]=t[e+2];for(let e=0;e=n[e]||i[e+n.length]>=n[e])throw new Error(\"pads should be smaller than kernel\")}}static adjustPadsBasedOnAutoPad(e,t,n,r,o,i){if(i){if(o.length!==2*(e.length-2))throw new Error(\"length of pads should be twice the length of data dimensions\");if(t.length!==e.length-2)throw new Error(\"length of strides should be the length of data dimensions\");if(r.length!==e.length-2)throw new Error(\"length of kernel shapes should be the length of data dimensions\");for(let a=0;a{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WebGpuBackend=void 0;const r=n(8453),o=n(4955),i=n(7771),a=n(8510),s=n(8305);t.WebGpuBackend=class{constructor(){this.currentKernelId=null,this.commandEncoder=null,this.computePassEncoder=null,this.pendingDispatchNumber=0,this.profilingEnabled=!1;}get currentKernelCustomData(){if(null===this.currentKernelId)throw new Error(\"currentKernelCustomData(): currentKernelId is null. (should not happen)\");let e=this.kernelCustomData.get(this.currentKernelId);return e||(e={},this.kernelCustomData.set(this.currentKernelId,e)),e}async initialize(){if(!navigator.gpu)throw new Error(\"WebGpuBackend: WebGPU is not available.\");const e=await navigator.gpu.requestAdapter();if(!e)throw new Error(\"WebGpuBackend: Failed to get GPU adapter.\");const t={requiredLimits:{maxComputeWorkgroupStorageSize:e.limits.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:e.limits.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:e.limits.maxStorageBufferBindingSize}};e.features.has(\"timestamp-query-inside-passes\")&&\"default\"===r.env.webgpu.profilingMode&&(this.profilingEnabled=!0,t.requiredFeatures=[\"timestamp-query-inside-passes\"]),this.device=await e.requestDevice(t),this.gpuDataManager=(0, i.createGpuDataManager)(this),this.programManager=new s.ProgramManager(this),this.kernels=new Map,this.kernelPersistentData=new Map,this.kernelCustomData=new Map,this.device.onuncapturederror=e=>{e.error instanceof GPUValidationError&&console.error(`An uncaught WebGPU validation error was raised: ${e.error.message}`);},this.profilingEnabled&&(this.profilingQuerySet=this.device.createQuerySet({type:\"timestamp\",count:2}));}dispose(){}getCommandEncoder(){return this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder()),this.commandEncoder}getComputePassEncoder(){return this.computePassEncoder||(this.computePassEncoder=this.getCommandEncoder().beginComputePass()),this.computePassEncoder}endComputePass(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null);}flush(){this.endComputePass(),this.device.queue.submit([this.getCommandEncoder().finish()]),this.gpuDataManager.refreshPendingBuffers(),this.commandEncoder=null,this.pendingDispatchNumber=0;}run(e,t,n,r,i){if(t.length!==e.inputTypes.length)throw new Error(`Input size must be equal to ${e.inputTypes.length}.`);const a=[];for(let e=0;e{const r=t.map((e=>`${e.join(\",\")}`)).join(\"_\"),o=n.join(\"_\");let i=e.name;return e.cacheHint&&(i+=\"[\"+e.cacheHint+\"]\"),i+=\":\"+r+\";\"+o,i})(e,t.map((e=>e.dims)),a.map((e=>e.type)));let u=this.programManager.getArtifact(s);const l=u?u.programInfo:\"function\"==typeof e.get?e.get():e,c=0===n.length?l.outputs.map(((e,t)=>t)):n;if(c.length!==l.outputs.length)throw new Error(`Output size ${c.length} must be equal to ${l.outputs.length}.`);const p=[],d=[];for(let e=0;e=l.outputs.length)throw new Error(`Invalid output index: ${c[e]}`);const t=-1===c[e],n=-2===c[e],o=t||n?i(l.outputs[e].dataType,l.outputs[e].dims):r(c[e],l.outputs[e].dataType,l.outputs[e].dims),a=this.gpuDataManager.get(o.data);if(!a)throw new Error(`no GPU data for output: ${o.data}`);if(t&&this.temporaryData.push(a),n){let e=this.kernelPersistentData.get(this.currentKernelId);e||(e=[],this.kernelPersistentData.set(this.currentKernelId,e)),e.push(a);}p.push(o),d.push(a);}const f=this.programManager.normalizeDispatchGroupSize(l.dispatchGroup(t));return u||(u=this.programManager.build(l,f),this.programManager.setArtifact(s,u)),(0, o.LOG_DEBUG)(\"info\",(()=>`[ProgramManager] run \"${l.name}\" (key=${s}) with ${f[0]}x${f[1]}x${f[2]}`)),this.programManager.run(u,a,d,f),p}upload(e,t){this.gpuDataManager.upload(e,t);}memcpy(e,t){this.gpuDataManager.memcpy(e,t);}async download(e,t){const n=await this.gpuDataManager.download(e);t().set(new Uint8Array(n));}alloc(e){return this.gpuDataManager.create(e).id}free(e){return this.gpuDataManager.release(e)}createKernel(e,t,n){const r=a.WEBGPU_OP_RESOLVE_RULES.get(e);if(!r)throw new Error(`kernel not implemented: ${e}`);this.kernels.set(t,[e,r[0],[r[1],n]]);}releaseKernel(e){const t=this.kernelPersistentData.get(e);if(t){for(const e of t)this.gpuDataManager.release(e.id);this.kernelPersistentData.delete(e);}this.kernelCustomData.delete(e),this.kernels.delete(e);}computeKernel(e,t){const n=this.kernels.get(e);if(!n)throw new Error(`kernel not created: ${e}`);const[r,i,a]=n;if(null!==this.currentKernelId)throw new Error(`kernel \"${r}\" is not allowed to be called recursively`);this.currentKernelId=e,a[0]&&(a[1]=a[0](a[1]),a[0]=void 0),(0, o.LOG_DEBUG)(\"info\",(()=>`[WebGPU] Start to run kernel \"${r}\"...`)),this.temporaryData=[];try{return i(t,a[1]),0}catch(e){return (0, o.LOG_DEBUG)(\"warning\",`[WebGPU] Kernel \"${r}\" failed. Error: ${e}`),1}finally{for(const e of this.temporaryData)this.gpuDataManager.release(e.id);this.temporaryData=[],this.currentKernelId=null;}}};},7675:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.init=void 0;const r=n(7917),o=n(3838),i=n(4955),a=n(6952);class s{constructor(e,t,n,r){this.module=e,this.dataType=t,this.data=n,this.dims=r;}getFloat32Array(){return new Float32Array(this.module.HEAP8.buffer,this.data,a.ShapeUtil.size(this.dims))}reshape(e){if(a.ShapeUtil.size(e)!==a.ShapeUtil.size(this.dims))throw new Error(\"Invalid new shape\");return new s(this.module,this.dataType,this.data,e)}}class u{get customData(){return this.backend.currentKernelCustomData}constructor(e,t,n){this.module=e,this.backend=t;const r=e.HEAPU32;let o=n>>2;this.opKernelContext=r[o++];const i=r[o++],a=[];for(let t=0;t\"number\"==typeof e?this.inputs[e]:e)))&&void 0!==o?o:this.inputs,l=null!==(i=null==t?void 0:t.outputs)&&void 0!==i?i:[];return this.backend.run(e,u,l,((e,t,n)=>new s(this.module,t,this.output(e,n),n)),((e,t)=>{const n=(0, r.getTensorElementSize)(e);if(!n)throw new Error(`Unsupported data type: ${e}`);const o=n*a.ShapeUtil.size(t);return new s(this.module,e,this.backend.gpuDataManager.create(o).id,t)}))}output(e,t){const n=this.module.stackSave();try{const n=this.module.stackAlloc(4*(1+t.length));let r=n>>2;this.module.HEAPU32[r++]=t.length;for(let e=0;e{const t=e.jsepInit;if(t&&navigator.gpu){const n=new o.WebGpuBackend;await n.initialize(),t({backend:n},(e=>n.alloc(e)),(e=>n.free(e)),((t,r,o,a=!1)=>{if(a)(0, i.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] jsepCopyGpuToGpu: src=${t}, dst=${r}, size=${o}`)),n.memcpy(t,r);else {(0, i.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] jsepCopyCpuToGpu: dataOffset=${t}, gpuDataId=${r}, size=${o}`));const a=e.HEAPU8.subarray(t,t+o);n.upload(r,a);}}),(async(t,r,o)=>{(0, i.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] jsepCopyGpuToCpu: gpuDataId=${t}, dataOffset=${r}, size=${o}`)),await n.download(t,(()=>e.HEAPU8.subarray(r,r+o)));}),((e,t,r)=>n.createKernel(e,t,r)),(e=>n.releaseKernel(e)),((t,r)=>{(0, i.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] jsepRun: kernel=${t}, contextDataOffset=${r}`));const o=new u(e,n,r);return n.computeKernel(t,o)}));}};},4955:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.LOG_DEBUG=t.LOG=void 0;const r=n(8453),o=n(7917),i=[\"V\",\"I\",\"W\",\"E\",\"F\"];t.LOG=(e,t)=>{const n=(0, o.logLevelStringToEnum)(e);var a,s;n>=(0, o.logLevelStringToEnum)(r.env.logLevel)&&(a=n,s=\"function\"==typeof t?t():t,console.log(`[${i[a]},${(new Date).toISOString()}]${s}`));},t.LOG_DEBUG=(...e)=>{r.env.debug&&(0, t.LOG)(...e);};},6952:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.MAX_CLIP=t.MIN_CLIP=t.GemmUtil=t.PoolConvUtil=t.ShapeUtil=t.BroadcastUtil=t.MatMulUtil=void 0;class n{static calcMatMulShape(e,t){return e[1]!==t[0]?void 0:[e[0],t[1]]}}t.MatMulUtil=n;class r{static calcShape(e,t,r=!1){const o=e.length,i=t.length;if(0===o)return t;if(0===i)return e;const a=Math.max(e.length,t.length),s=new Array(a);if(r){if(o<2||i<2)return;const r=n.calcMatMulShape([e[o-2],e[o-1]],[t[i-2],t[i-1]]);if(void 0===r)return;[s[a-2],s[a-1]]=r;}for(let n=r?3:1;n<=a;n++){const r=o-n<0?1:e[o-n],u=i-n<0?1:t[i-n];if(r!==u&&r>1&&u>1)return;s[a-n]=Math.max(r,u);}return s}static isValidBroadcast(e,t){const n=e.length,r=t.length;if(n>r)return !1;for(let o=1;o<=n;o++)if(1!==e[n-o]&&e[n-o]!==t[r-o])return !1;return !0}}t.BroadcastUtil=r;class o{static size(e){return o.getSizeFromDimensionRange(e,0,e.length)}static sizeFromDimension(e,t){if(t<0||t>e.length)throw new Error(`invalid dimension of ${t} for sizeFromDimension as Tensor has ${e.length} dimensions.`);return o.getSizeFromDimensionRange(e,t,e.length)}static sizeToDimension(e,t){if(t<0||t>e.length)throw new Error(`invalid dimension of ${t} for sizeToDimension as Tensor has ${e.length} dimensions.`);return o.getSizeFromDimensionRange(e,0,t)}static getSizeFromDimensionRange(e,t,n){let r=1;for(let o=t;o=0;--r)n[r]=n[r+1]*e[r+1];return n}static normalizeAxis(e,t){if(e<-t&&e>=t)throw new Error(\"unsupported axis for this operation.\");return e<0?e+t:e}static normalizeAxes(e,t){return e.map((n=>this.normalizeAxis(n,null!=t?t:e.length)))}static sortBasedOnPerm(e,t){return t?t.map((t=>e[t])):e.slice().reverse()}static padShape(e,t){const n=e.length;return e.map(((e,r)=>e+t[r]+t[r+n]))}static areEqual(e,t){return e.length===t.length&&e.every(((e,n)=>e===t[n]))}}t.ShapeUtil=o;class i{static adjustPoolAttributes(e,t,n,r,o,i){if(!e&&n.length!==t.length-2)throw new Error(\"length of specified kernel shapes should be 2 less than length of input dimensions\");if(e)for(let e=0;e=n.length?n.push(t[e+2]):n[e]=t[e+2];for(let e=0;e=n[e]||i[e+n.length]>=n[e])throw new Error(\"pads should be smaller than kernel\")}}static adjustPadsBasedOnAutoPad(e,t,n,r,o,a,s){if(s){if(o.length!==2*(e.length-2))throw new Error(\"length of pads should be twice the length of data dimensions\");if(t.length!==e.length-2)throw new Error(\"length of strides should be the length of data dimensions\");if(r.length!==e.length-2)throw new Error(\"length of kernel shapes should be the length of data dimensions\");for(let u=0;u{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createAttributeWithCacheKey=void 0;class n{constructor(e){Object.assign(this,e);}get cacheKey(){return this._cacheKey||(this._cacheKey=Object.getOwnPropertyNames(this).sort().map((e=>`${this[e]}`)).join(\";\")),this._cacheKey}}t.createAttributeWithCacheKey=e=>new n(e);},7771:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createGpuDataManager=void 0;const r=n(4955),o=n(1163),i=e=>16*Math.ceil(e/16);let a=0;class s{constructor(e){this.backend=e,this.storageCache=new Map,this.downloadCache=new Map,this.buffersForUploadingPending=[],this.buffersPending=[];}upload(e,t){const n=t.buffer,o=t.byteOffset,a=t.byteLength,s=i(a),u=this.storageCache.get(e);if(!u)throw new Error(\"gpu data for uploading does not exist\");if(u.originalSize!==a)throw new Error(`inconsistent data size. gpu data size=${u.originalSize}, data size=${a}`);const l=this.backend.device.createBuffer({mappedAtCreation:!0,size:s,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC}),c=l.getMappedRange();new Uint8Array(c).set(new Uint8Array(n,o,a)),l.unmap();const p=this.backend.getCommandEncoder();this.backend.endComputePass(),p.copyBufferToBuffer(l,0,u.gpuData.buffer,0,s),(0, r.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] GpuDataManager.upload(id=${e})`)),this.buffersForUploadingPending.push(l);}memcpy(e,t){const n=this.storageCache.get(e);if(!n)throw new Error(\"source gpu data for memcpy does not exist\");const r=this.storageCache.get(t);if(!r)throw new Error(\"destination gpu data for memcpy does not exist\");if(n.originalSize!==r.originalSize)throw new Error(\"inconsistent source and destination gpu data size\");const o=i(n.originalSize);this.backend.getCommandEncoder().copyBufferToBuffer(n.gpuData.buffer,0,r.gpuData.buffer,0,o);}create(e,t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST){const n=i(e),s=this.backend.device.createBuffer({size:n,usage:t}),u={id:a++,type:o.GpuDataType.default,buffer:s};return this.storageCache.set(u.id,{gpuData:u,originalSize:e}),(0, r.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] GpuDataManager.create(size=${e}) => id=${u.id}`)),u}get(e){var t;return null===(t=this.storageCache.get(e))||void 0===t?void 0:t.gpuData}release(e){const t=this.storageCache.get(e);if(!t)throw new Error(\"releasing data does not exist\");return (0, r.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] GpuDataManager.release(id=${e}), gpuDataId=${t.gpuData.id}`)),this.storageCache.delete(e),this.buffersPending.push(t.gpuData.buffer),this.downloadCache.get(e)&&this.downloadCache.delete(e),t.originalSize}async download(e){const t=this.downloadCache.get(e);if(t)return t.data;const n=this.storageCache.get(e);if(!n)throw new Error(\"data does not exist\");const r=this.backend.getCommandEncoder();this.backend.endComputePass();const o=this.backend.device.createBuffer({size:n.originalSize,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});r.copyBufferToBuffer(n.gpuData.buffer,0,o,0,n.originalSize),this.backend.flush();const i=new Promise((e=>{o.mapAsync(GPUMapMode.READ).then((()=>{const t=o.getMappedRange().slice(0);o.destroy(),e(t);}));}));return this.downloadCache.set(e,{data:i}),i}refreshPendingBuffers(){for(const e of this.buffersForUploadingPending)e.destroy();for(const e of this.buffersPending)e.destroy();}}t.createGpuDataManager=(...e)=>new s(...e);},8510:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!(\"get\"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o);}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n];}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t});}:function(e,t){e.default=t;}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.WEBGPU_OP_RESOLVE_RULES=void 0;const a=i(n(504)),s=n(9770),u=n(4271),l=n(1522),c=i(n(5262)),p=n(2625),d=i(n(9302));t.WEBGPU_OP_RESOLVE_RULES=new Map([[\"Abs\",[d.abs]],[\"Acos\",[d.acos]],[\"Acosh\",[d.acosh]],[\"Add\",[a.add]],[\"Asin\",[d.asin]],[\"Asinh\",[d.asinh]],[\"Atan\",[d.atan]],[\"Atanh\",[d.atanh]],[\"AveragePool\",[c.averagePool,c.parseAveragePoolAttributes]],[\"Ceil\",[d.ceil]],[\"ClipV10\",[d.clipV10]],[\"Clip\",[d.clip]],[\"Conv\",[s.conv,s.parseConvAttributes]],[\"Cos\",[d.cos]],[\"Cosh\",[d.cosh]],[\"Div\",[a.div]],[\"Elu\",[d.elu,d.parseAlphaAttributes]],[\"Erf\",[d.erf]],[\"Exp\",[d.exp]],[\"Floor\",[d.floor]],[\"Gemm\",[u.gemm,u.parseGemmAttributes]],[\"GlobalAveragePool\",[c.globalAveragePool,c.parseGlobalAveragePoolAttributes]],[\"GlobalMaxPool\",[c.globalMaxPool,c.parseGlobalMaxPoolAttributes]],[\"LeakyRelu\",[d.leakyRelu,d.parseAlphaAttributes]],[\"MatMul\",[l.matMul]],[\"MaxPool\",[c.maxPool,c.parseMaxPoolAttributes]],[\"Mul\",[a.mul]],[\"Neg\",[d.neg]],[\"Pow\",[a.pow]],[\"Reciprocal\",[d.reciprocal]],[\"Relu\",[d.relu]],[\"Sigmoid\",[d.sigmoid]],[\"Sin\",[d.sin]],[\"Sinh\",[d.sinh]],[\"Sqrt\",[d.sqrt]],[\"Sub\",[a.sub]],[\"Tan\",[d.tan]],[\"Tanh\",[d.tanh]],[\"ThresholdedRelu\",[d.thresholdedRelu,d.parseAlphaAttributes]],[\"Transpose\",[p.transpose,p.parseTransposeAttributes]]]);},1427:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.biasActivationSnippet=t.activationFnSnippet=t.typeSnippet=void 0,t.typeSnippet=e=>{switch(e){case 1:return \"f32\";case 2:return \"vec2\";case 3:return \"vec3\";case 4:return \"vec4\";default:throw new Error(`${e}-component is not supported.`)}},t.activationFnSnippet=(e,t=!1,n=!1,r=3)=>\"\",t.biasActivationSnippet=(e,t)=>`\\n ${e?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\\n ${t?\"value = activation(value, coords);\":\"\"}\\n `;},9456:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createConv2DMatMulProgramInfo=void 0;const r=n(4955),o=n(6952),i=n(1163),a=n(1427),s=n(4085),u=n(158);t.createConv2DMatMulProgramInfo=(e,t,n,l,c,p,d,f,h)=>{const g=\"NHWC\"===n.format,m=g?e[0].dims[3]:e[0].dims[1],b=l[0],y=g?l[2]:l[3],w=g?l[1]:l[2],_=g?l[3]:l[1],v=((m%4==0||m%3==0)&&g||y%4==0&&!g)&&_%4==0,x=g?_:y*w,T=g?y*w:_,S=v?[8,8,1]:[x<=4?4:16,x>4&&T<=4?4:16,1],O=v?[4,4,1]:[x<=4?1:2,x>4&&T<=4?1:2,1],A=[Math.ceil(x/S[0]/O[0]),Math.ceil(T/S[1]/O[1]),Math.ceil(b/S[2]/O[1])];(0, r.LOG_DEBUG)(\"verbose\",(()=>`[conv2d_mm_webgpu] dispatch = ${A}`));const E=v?g&&m%4!=0?3:4:O[0],I=S[1]*O[1],$=S[0]*O[0],P=Math.max(S[0]*E,S[1]),D=c%I==0,k=p%$==0,C=d%P==0,R=v?[E,4,4]:[1,1,1],M=[`@group(0) @binding(0) var x: array<${v&&4===E?\"vec4\":\"f32\"}>;`,`@group(0) @binding(1) var w: array<${v?\"vec4\":\"f32\"}>;`];let N=`\\n fn setOutputAtIndex(flatIndex : i32, value : ${v?\"vec4\":\"f32\"}) {\\n result[flatIndex] = ${v?\"vec4\":\"f32\"}(value);\\n }\\n fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${v?\"vec4\":\"f32\"}) {\\n let flatIndex = getOutputIndexFromCoords(vec4(d0, d1, d2, d3));\\n setOutputAtIndex(flatIndex ${v?\"/ 4\":\"\"}, value);\\n }`;return f&&(M.push(`@group(0) @binding(2) var bias: array<${v?\"vec4\":\"f32\"}>;`),N+=`\\n fn getBiasByOutputCoords(coords : vec4) -> ${v?\"vec4\":\"f32\"} {\\n return bias[coords.${g?\"w\":\"y\"}${v?\"/ 4\":\"\"}];\\n }`),Object.assign(Object.assign({},t),{outputs:[{dims:l,dataType:e[0].dataType,gpuDataType:i.GpuDataType.default}],dispatchGroup:()=>({x:A[0],y:A[1],z:A[2]}),getShaderSource:()=>`\\n ${s.utilFunctions}\\n //struct Uniforms { xShape : vec4, wShape : vec4, outShape : vec4,\\n // outShapeStrides: vec3, filterDims : vec2, pad : vec2, stride : vec2,\\n // dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32 };\\n ${M.join(\"\")}\\n @group(0) @binding(${M.length}) var result: array<${v?\"vec4\":\"f32\"}>;\\n //@group(0) @binding(${M.length+1}) var uniforms: Uniforms;\\n\\n const xShape : vec4 = vec4(${e[0].dims.join(\",\")});\\n const wShape : vec4 = vec4(${e[1].dims.join(\",\")});\\n const outShape : vec4 = vec4(${l.join(\",\")});\\n const outShapeStrides : vec3 = vec3(${o.ShapeUtil.computeStrides(l).slice(0,3).join(\",\")});\\n const filterDims : vec2 = vec2(${n.kernelShape[0]}, ${n.kernelShape[1]});\\n const pad : vec2 = vec2(${n.pads[0]}, ${n.pads[1]});\\n const stride : vec2 = vec2(${n.strides[0]}, ${n.strides[1]});\\n const dilation : vec2 = vec2(${n.dilations[0]}, ${n.dilations[1]});\\n const dimAOuter : i32 = ${c};\\n const dimBOuter : i32 = ${p};\\n const dimInner : i32 = ${d};\\n ${N}\\n ${((e,t,n,r,o=!1,i,s=!1,u=4,l=4,c=4)=>{const p=e?\"\\n let coord = vec4(batch, xRow, xCol, xCh);\\n \":\"\\n let coord = vec4(batch, xCh, xRow, xCol);\\n \",d=e?\"\\n let coords = vec4(\\n batch,\\n row / outWidth,\\n row % outWidth,\\n col);\\n \":\"\\n let coords = vec4(\\n batch,\\n row,\\n col / outWidth,\\n col % outWidth);\\n \",f=e?\"xShape[1]\":\"xShape[2]\",h=e?\"xShape[2]\":\"xShape[3]\",g=e?\"row\":\"col\",m=e?\"col\":\"row\",b=`\\n let inChannels = wShape[2];\\n let outWidth = ${e?\"outShape[2]\":\"outShape[3]\"};\\n let outRow = ${g} / outWidth;\\n let outCol = ${g} % outWidth;\\n\\n let WRow = ${m} / (filterDims[1] * inChannels);\\n let WCol = ${m} / inChannels % filterDims[1];\\n let xRow = outRow * stride[0] + dilation[0] * WRow - pad[0];\\n let xCol = outCol * stride[1] + dilation[1] * WCol - pad[1];\\n let xCh = ${m} % inChannels;\\n var resData = ${(0, a.typeSnippet)(u)}(0.0);\\n // The bounds checking is always needed since we use it to pad zero for\\n // the 'same' padding type.\\n if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) {\\n ${p}\\n let xIndex = getIndexFromCoords4D(coord, xShape);\\n ${(e=>{switch(e){case 1:return \"resData = x[xIndex];\";case 3:return \"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return \"resData = x[xIndex / 4];\";default:throw new Error(`innerElementSize ${e} is not supported.`)}})(u)}\\n }\\n return resData;`,y=e?t&&r?`\\n let col = colIn * ${u};\\n ${b}`:`\\n let col = colIn * ${u};\\n if (row < dimAOuter && col < dimInner) {\\n ${b}\\n }\\n return ${(0, a.typeSnippet)(u)}(0.0);`:r&&n?`\\n let col = colIn * ${u};\\n ${b}`:`\\n let col = colIn * ${u};\\n if (row < dimInner && col < dimBOuter) {\\n ${b}\\n }\\n return ${(0, a.typeSnippet)(u)}(0.0);`,w=`${(e=>{switch(e){case 1:return \"return w[row * wShape[3] + colIn];\";case 4:return \"return w[row * wShape[3] / 4 + colIn];\";default:throw new Error(`innerElementSize ${e} is not supported.`)}})(l)}`,_=(0, a.typeSnippet)(c),v=e?(0, a.typeSnippet)(u):(0, a.typeSnippet)(l),x=e?(0, a.typeSnippet)(l):(0, a.typeSnippet)(u);return `\\n ${(0, a.activationFnSnippet)(i,s,4===c,4)}\\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${v} {\\n ${e?y:w}\\n }\\n\\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${x} {\\n ${e?w:y}\\n }\\n\\n fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${_}) {\\n let col = colIn * ${c};\\n if (row < dimAOuter && col < dimBOuter)\\n {\\n var value = valueIn;\\n let outWidth = ${e?\"outShape[2]\":\"outShape[3]\"};\\n ${d}\\n ${(0, a.biasActivationSnippet)(o,i)}\\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\\n }\\n }`})(g,D,k,C,f,void 0,!1,R[0],R[1],R[2])}\\n ${v?(0, u.makeMatMulPackedVec4Source)(O,S,!g,P):(0, u.makeMatMulPackedSource)(O,S,!g,P,!1,void 0,h)}`})};},4085:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.utilFunctions=void 0,t.utilFunctions=\"\\nfn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 {\\n return dot(coords, vec4(\\n shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));\\n}\\nfn getOutputIndexFromCoords(coords : vec4) -> i32 {\\n return dot(coords, vec4(\\n outShapeStrides.x, outShapeStrides.y, outShapeStrides.z, 1));\\n}\\n\";},158:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.makeMatMulPackedSource=t.makeMatMulPackedVec4Source=void 0,t.makeMatMulPackedVec4Source=(e,t,n=!1,r=32,o=!1,i=32,a=!1)=>{const s=t[1]*e[1],u=t[0]*e[0],l=n?s:r,c=n?r:s,p=l/t[0],d=r/t[1];if((!n||4!==p||4!==e[1])&&(n||3!==p&&4!==p)||l%t[0]!=0||r%t[1]!=0||4!==e[0])throw new Error(`If transposeA ${n} is true, innerElementSize ${p} and workPerThread[1] ${e[1]} must be 4.\\n Otherwise, innerElementSize ${p} must be 3 or 4.\\n tileAWidth ${l} must be divisible by workgroupSize[0]${t[0]}. tileInner ${r} must be divisible by workgroupSize[1] ${t[1]}. colPerThread ${e[0]} must be 4.`);return `\\nvar mm_Asub : array, ${l/p}>, ${c}>;\\nvar mm_Bsub : array, ${u/e[0]}>, ${r}>;\\n\\nconst rowPerThread = ${e[1]};\\nconst colPerThread = ${e[0]};\\nconst innerElementSize = ${p};\\nconst tileInner = ${r};\\n\\n@compute @workgroup_size(${t[0]}, ${t[1]}, ${t[2]})\\nfn main(@builtin(local_invocation_id) localId : vec3,\\n @builtin(global_invocation_id) globalId : vec3,\\n @builtin(workgroup_id) workgroupId : vec3) {\\n let localRow = i32(localId.y);\\n let tileRow = ${a?\"0\":\"localRow * rowPerThread\"};\\n let tileCol = i32(localId.x);\\n\\n let globalRow = ${a?\"0\":\"i32(globalId.y) * rowPerThread\"};\\n let globalCol = i32(globalId.x);\\n let batch = ${o?\"0\":\"i32(globalId.z)\"};\\n let globalRowStart = i32(workgroupId.y) * ${s};\\n\\n let numTiles = ${o?`${Math.ceil(i/r)}`:\"(dimInner - 1) / tileInner + 1\"};\\n var kStart = ${o?`i32(globalId.z) * ${i}`:\"0\"};\\n\\n var acc: array, rowPerThread>;\\n\\n // Loop over shared dimension.\\n let tileRowB = localRow * ${d};\\n for (var t = 0; t < numTiles; t = t + 1) {\\n // Load one tile of A into local memory.\\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n let inputRow = tileRow + innerRow;\\n let inputCol = tileCol;\\n ${f=n,f?\"\\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\\n kStart + inputRow,\\n globalRowStart / innerElementSize + inputCol);\\n \":\"\\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\\n globalRow + innerRow,\\n kStart / innerElementSize + inputCol);\\n \"}\\n }\\n\\n // Load one tile of B into local memory.\\n for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) {\\n let inputRow = tileRowB + innerRow;\\n let inputCol = tileCol;\\n mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol);\\n }\\n kStart = kStart + tileInner;\\n workgroupBarrier();\\n\\n // Compute acc values for a single thread.\\n for (var k = 0; k < tileInner / innerElementSize; k = k + 1) {\\n let BCached0 = mm_Bsub[k * innerElementSize][tileCol];\\n let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol];\\n let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol];\\n ${3===p?\"\":\"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];\"}\\n\\n ${((e,t)=>e?`\\n let ACached0 = mm_Asub[k * innerElementSize][localRow];\\n let ACached1 = mm_Asub[k * innerElementSize + 1][localRow];\\n let ACached2 = mm_Asub[k * innerElementSize + 2][localRow];\\n ${3===t?\"\":\"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];\"}\\n for (var i = 0; i < rowPerThread; i = i + 1) {\\n acc[i] = BCached0 * ACached0[i] + acc[i];\\n acc[i] = BCached1 * ACached1[i] + acc[i];\\n acc[i] = BCached2 * ACached2[i] + acc[i];\\n ${3===t?\"\":\"acc[i] = BCached3 * ACached3[i] + acc[i];\"}\\n }`:`\\n for (var i = 0; i < rowPerThread; i = i + 1) {\\n let ACached = mm_Asub[tileRow + i][k];\\n acc[i] = BCached0 * ACached.x + acc[i];\\n acc[i] = BCached1 * ACached.y + acc[i];\\n acc[i] = BCached2 * ACached.z + acc[i];\\n ${3===t?\"\":\"acc[i] = BCached3 * ACached.w + acc[i];\"}\\n }`)(n,p)}\\n }\\n\\n workgroupBarrier();\\n }\\n\\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\\n }\\n}`;var f;};const n=e=>e?\"\\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\\n kStart + inputRow,\\n globalRowStart + inputCol);\\n \":\"\\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\\n globalRowStart + inputRow,\\n kStart + inputCol);\\n \";t.makeMatMulPackedSource=(e,t,r=!1,o=32,i=!1,a=32,s=!1)=>{const u=e[1]*t[1],l=e[0]*t[0],c=r?u:o,p=r?o:u;if(p%t[1]!=0||c%t[0]!=0||o%t[1]!=0)throw new Error(`tileAHight ${p} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${t[0]}, tileInner ${o} must be divisible by workgroupSize[1]${t[1]}`);const d=p/t[1],f=c/t[0],h=o/t[1],g=s?`\\n let localRow = i32(localId.y);\\n let localCol = i32(localId.x);\\n let globalRowStart = i32(workgroupId.y) * ${u};\\n let globalColStart = i32(workgroupId.x) * ${l};\\n\\n // Loop over shared dimension.\\n for (var t = 0; t < numTiles; t = t + 1) {\\n // Load one tile of A into local memory.\\n for (var inputRow = localRow; inputRow < ${p}; inputRow = inputRow + ${t[1]}) {\\n for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${t[0]}) {\\n ${n(r)}\\n }\\n }\\n // Load one tile of B into local memory.\\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${t[1]}) {\\n for (var inputCol = localCol; inputCol < ${l}; inputCol = inputCol + ${t[0]}) {\\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\\n kStart + inputRow,\\n globalColStart + inputCol);\\n }\\n }\\n kStart = kStart + tileInner;\\n workgroupBarrier();\\n\\n // Compute acc values for a single thread.\\n var BCached : array;\\n for (var k = 0; k < tileInner; k = k + 1) {\\n for (var inner = 0; inner < colPerThread; inner = inner + 1) {\\n BCached[inner] = mm_Bsub[k][localCol + inner * ${t[0]}];\\n }\\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n let ACached = ${r?`mm_Asub[k][localRow + innerRow * ${t[1]}];`:`mm_Asub[localRow + innerRow * ${t[1]}][k];`}\\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\\n acc[innerRow][innerCol] = acc[innerRow][innerCol] +\\n ACached * BCached[innerCol];\\n }\\n }\\n }\\n workgroupBarrier();\\n }\\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n let gRow = globalRowStart + localRow + innerRow * ${t[1]};\\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\\n let gCol = globalColStart + localCol + innerCol * ${t[0]};\\n mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);\\n }\\n }\\n `:`\\nlet tileRow = i32(localId.y) * rowPerThread;\\nlet tileCol = i32(localId.x) * colPerThread;\\n\\nlet globalRow = i32(globalId.y) * rowPerThread;\\nlet globalCol = i32(globalId.x) * colPerThread;\\nlet globalRowStart = i32(workgroupId.y) * ${u};\\n\\nlet tileRowA = i32(localId.y) * ${d};\\nlet tileColA = i32(localId.x) * ${f};\\nlet tileRowB = i32(localId.y) * ${h};\\n// Loop over shared dimension.\\nfor (var t = 0; t < numTiles; t = t + 1) {\\n // Load one tile of A into local memory.\\n for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) {\\n for (var innerCol = 0; innerCol < ${f}; innerCol = innerCol + 1) {\\n let inputRow = tileRowA + innerRow;\\n let inputCol = tileColA + innerCol;\\n ${n(r)}\\n }\\n }\\n\\n // Load one tile of B into local memory.\\n for (var innerRow = 0; innerRow < ${h}; innerRow = innerRow + 1) {\\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\\n let inputRow = tileRowB + innerRow;\\n let inputCol = tileCol + innerCol;\\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\\n kStart + inputRow,\\n globalCol + innerCol);\\n }\\n }\\n kStart = kStart + tileInner;\\n workgroupBarrier();\\n\\n // Compute acc values for a single thread.\\n var BCached : array;\\n for (var k = 0; k < tileInner; k = k + 1) {\\n for (var inner = 0; inner < colPerThread; inner = inner + 1) {\\n BCached[inner] = mm_Bsub[k][tileCol + inner];\\n }\\n\\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n ${(e=>e?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\")(r)}\\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\\n acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol];\\n }\\n }\\n }\\n\\n workgroupBarrier();\\n}\\n\\nfor (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\\n acc[innerRow][innerCol]);\\n }\\n}\\n`;return `\\n var mm_Asub : array, ${p}>;\\n var mm_Bsub : array, ${o}>;\\n const rowPerThread = ${e[1]};\\n const colPerThread = ${e[0]};\\n const tileInner = ${o};\\n\\n@compute @workgroup_size(${t[0]}, ${t[1]}, ${t[2]})\\nfn main(@builtin(local_invocation_id) localId : vec3,\\n @builtin(global_invocation_id) globalId : vec3,\\n @builtin(workgroup_id) workgroupId : vec3) {\\n let batch = ${i?\"0\":\"i32(globalId.z)\"};\\n let numTiles = ${i?`${Math.ceil(a/o)}`:\"(dimInner - 1) / tileInner + 1\"};\\n var kStart = ${i?`i32(globalId.z) * ${a}`:\"0\"};\\n\\n var acc : array, rowPerThread>;\\n\\n // Without this initialization strange values show up in acc.\\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\\n acc[innerRow][innerCol] = 0.0;\\n }\\n }\\n ${g}\\n }\\n`};},504:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.sub=t.pow=t.mul=t.div=t.add=void 0;const r=n(6952),o=n(1163),i=n(2075),a=(e,t,n,a,s)=>{const u={name:t,inputTypes:[o.GpuDataType.default,o.GpuDataType.default],cacheHint:s};return Object.assign(Object.assign({},u),{get:()=>((e,t,n,a,s,u=t.dataType)=>{var l,c;const p=!r.ShapeUtil.areEqual(t.dims,n.dims);let d=t.dims,f=r.ShapeUtil.size(t.dims),h=!1;if(p){const e=r.BroadcastUtil.calcShape(t.dims,n.dims,!1);if(!e)throw new Error(\"Can't perform binary op on the given tensors\");d=e,f=r.ShapeUtil.size(d);let o=1;for(let e=0;e((e,t,n,o,a,s,u,l,c=\"f32\",p=\"f32\",d=\"f32\")=>{const f=r.ShapeUtil.size(o),h=Math.ceil(f/4);let g,m;\"string\"==typeof u?g=m=(e,t)=>`${u}((${e}),(${t}))`:\"function\"==typeof u?g=m=u:(g=u.scalar,m=u.vector);let b=\"\";const y=(0, i.createIndicesHelper)(\"output\",o);if(s){const e=e=>{const t=r.ShapeUtil.computeStrides(e),n=[];for(let r=e.length-1;r>=0;r--){const i=0===o.length?\"0u\":1===o.length?\"(*outputIndices)\":`(*outputIndices)[${r+o.length-e.length}]`;n.push(`${t[r]}u * (${i} % ${e[r]}u)`);}return n.length>0?n.join(\"+\"):\"0u\"};b=`\\n ${y.o2iImpl}\\n\\n fn calcOffsetA(outputIndices: ptr) -> u32 {\\n return ${e(t)};\\n }\\n\\n fn calcOffsetB(outputIndices: ptr) -> u32 {\\n return ${e(n)};\\n }\\n `;}let w;if(a)w=s?`\\n ${y.indicesVariableDeclaration(\"outputIndices\")}\\n ${y.o2iCall(\"global_idx * 4u\",\"outputIndices\")}\\n let offsetA = calcOffsetA(&outputIndices);\\n let offsetB = calcOffsetB(&outputIndices);\\n outputData[global_idx] = ${m(\"aData[offsetA / 4u]\",\"bData[offsetB / 4u]\")};`:`outputData[global_idx] = ${m(\"aData[global_idx]\",\"bData[global_idx]\")};`;else {if(!s)throw new Error(\"no necessary to use scalar implementation for element-wise binary op implementation.\");const e=e=>{const t=`aData[indexA${e}][componentA${e}]`,n=`bData[indexB${e}][componentB${e}]`;return `\\n ${y.o2iCall(`global_idx * 4u + ${e}u`,\"outputIndices\")}\\n let offsetA${e} = calcOffsetA(&outputIndices);\\n let offsetB${e} = calcOffsetB(&outputIndices);\\n let indexA${e} = offsetA${e} / 4u;\\n let indexB${e} = offsetB${e} / 4u;\\n let componentA${e} = offsetA${e} % 4u;\\n let componentB${e} = offsetB${e} % 4u;\\n outputData[global_idx][${e}] = ${g(t,n)};`};w=`\\n ${y.indicesVariableDeclaration(\"outputIndices\")}\\n ${e(0)}\\n ${e(1)}\\n ${e(2)}\\n ${e(3)}`;}return `\\n @group(0) @binding(0) var aData : array>;\\n @group(0) @binding(1) var bData : array>;\\n @group(0) @binding(2) var outputData : array>;\\n\\n ${null!=l?l:\"\"}\\n ${b}\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(h)}\\n ${w}\\n }`})(e,t.dims,n.dims,d,h,p,a,s),outputs:[{dims:d,dataType:u,gpuDataType:o.GpuDataType.default}],dispatchGroup:()=>({x:Math.ceil(f/64/(h?4:1))})})})(u,e[0],e[1],n,a)})};t.add=e=>{e.compute(a(e.inputs,\"Add\",((e,t)=>`${e}+${t}`)));},t.div=e=>{e.compute(a(e.inputs,\"Div\",((e,t)=>`${e}/${t}`)));},t.mul=e=>{e.compute(a(e.inputs,\"Mul\",((e,t)=>`${e}*${t}`)));},t.pow=e=>{e.compute(a(e.inputs,\"Pow\",{scalar:(e,t)=>`pow_f32(${e},${t})`,vector:(e,t)=>`pow_vf32(${e},${t})`},\"\\n fn pow_f32(a : f32, b : f32) -> f32 {\\n if (b == 0.0) {\\n return 1.0;\\n } else if (a < 0.0 && b != floor(b)) {\\n return pow(a, b); // NaN\\n }\\n return select(sign(a), 1.0, round(abs(b) % 2.0) != 1.0) * pow(abs(a), b);\\n }\\n fn pow_vf32(a : vec4, b : vec4) -> vec4 {\\n // TODO: implement vectorized pow\\n return vec4(pow_f32(a.x, b.x), pow_f32(a.y, b.y), pow_f32(a.z, b.z), pow_f32(a.w, b.w));\\n }\\n \"));},t.sub=e=>{e.compute(a(e.inputs,\"Sub\",((e,t)=>`${e}-${t}`)));};},2075:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createShaderHelper=t.createIndicesHelper=t.WORKGROUP_SIZE=void 0;const r=n(6952);t.WORKGROUP_SIZE=64,t.createIndicesHelper=(e,t)=>{const n=t.length<2?\"u32\":`array`,o=r.ShapeUtil.computeStrides(t);let i=\"\";for(let e=0;e) {\\n var current = offset;\\n ${i}\\n }`,s=[];if(0===t.length)s.push(\"0u\");else if(t.length<2)s.push(\"(*indices)\");else for(let e=t.length-1;e>=0;e--)s.push(`${o[e]}u * ((*indices)[${e}])`);return {o2iImpl:a,o2iCall:(n,r)=>t.length<2?`${r}=${n};`:`ih_o2i_${e}(${n}, &${r});`,i2oImpl:t.length<2?\"\":`\\n fn ih_i2o_${e}(indices: ptr) -> u32 {\\n return ${s.join(\"+\")};\\n }`,i2oExpression:(n,r)=>t.length<2?`(${r?\"*\":\"\"}${n})`:`ih_i2o_${e}(${r?\"\":\"&\"}${n})`,indicesVariableDeclaration:(e,t)=>`var ${e}:${n}${t?`=${n}(${t.join(\",\")})`:\"\"};`,iType:n}};class o{constructor(e){this.normalizedDispatchGroup=e;}guardAgainstOutOfBoundsWorkgroupSizes(e){return `if (global_idx >= ${\"number\"==typeof e?`${e}u`:e}) { return; }`}mainStart(e=t.WORKGROUP_SIZE){const n=\"number\"==typeof e?e:e[0],r=\"number\"==typeof e?1:e[1],o=\"number\"==typeof e?1:e[2],i=1===this.normalizedDispatchGroup[1]&&1===this.normalizedDispatchGroup[2];return `@compute @workgroup_size(${n}, ${r}, ${o})\\n fn main(${i?\"@builtin(global_invocation_id) global_id : vec3\":\"@builtin(local_invocation_index) local_index : u32,\\n @builtin(workgroup_id) workgroup_id : vec3\"}) {\\n ${i?\"let global_idx = global_id.x;\":`let global_idx = (workgroup_id.z * ${this.normalizedDispatchGroup[0]*this.normalizedDispatchGroup[1]}u +\\n workgroup_id.y * ${this.normalizedDispatchGroup[0]}u + workgroup_id.x) * ${n*r*o}u + local_index;`}\\n `}}t.createShaderHelper=e=>new o(e);},9192:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createGroupedConvProgramInfoLoader=void 0;const r=n(6952),o=n(1163),i=n(2075),a=n(9770),s=n(3997);t.createGroupedConvProgramInfoLoader=(e,t,n)=>{const u=(l=e.length>2,c=t.cacheKey,{name:\"GroupedConv\",inputTypes:l?[o.GpuDataType.default,o.GpuDataType.default,o.GpuDataType.default]:[o.GpuDataType.default,o.GpuDataType.default],cacheHint:c});var l,c;return Object.assign(Object.assign({},u),{get:()=>((e,t,n,u)=>{const l=e.length>2,c=l?\"value += b[output_channel];\":\"\",p=e[0].dims,d=e[1].dims,f=d[0]/n.group,h=\"f32\",{activationFunction:g,applyActivation:m}=(0, s.getActicationSnippet)(n),b=[`@group(0) @binding(0) var x : array<${h}>;`,`@group(0) @binding(1) var w : array<${h}>;`];l&&b.push(`@group(0) @binding(2) var b : array<${h}>;`);const y=\"NHWC\"===n.format,w=(0, a.calculateOutputShape)(p,d,n.dilations,n.pads,n.strides,y),_=r.ShapeUtil.size(w),v=(0, i.createIndicesHelper)(\"output\",w),x=(0, i.createIndicesHelper)(\"x\",p),T=(0, i.createIndicesHelper)(\"w\",d);return Object.assign(Object.assign({},t),{outputs:[{dims:u?u(w):w,dataType:e[0].dataType,gpuDataType:o.GpuDataType.default}],getShaderSource:e=>`\\n const strides: vec2 = vec2(${n.strides[0]}u, ${n.strides[1]}u);\\n const pads: vec2 = vec2(${n.pads[0]}u, ${n.pads[1]}u);\\n\\n ${b.join(\"\\n\")}\\n @group(0) @binding(${b.length}) var output : array<${h}>;\\n\\n ${g}\\n ${v.o2iImpl}\\n ${x.i2oImpl}\\n ${T.i2oImpl}\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(_)}\\n\\n ${v.indicesVariableDeclaration(\"outputIndices\")}\\n ${v.o2iCall(\"global_idx\",\"outputIndices\")}\\n let batch: u32 = outputIndices[0];\\n let output_channel: u32 = outputIndices[${y?3:1}];\\n let xRCCorner: vec2 = vec2(outputIndices[${y?1:2}], outputIndices[${y?2:3}]) * strides - pads;\\n let group_id: u32 = output_channel / ${f}u;\\n\\n var value: ${h} = ${h}(0);\\n for (var wInChannel: u32 = 0u; wInChannel < ${d[1]}u; wInChannel++) {\\n let input_channel = group_id * ${d[1]}u + wInChannel;\\n for (var wHeight: u32 = 0u; wHeight < ${d[2]}u; wHeight++) {\\n let xHeight = xRCCorner.x + wHeight * ${n.dilations[0]}u;\\n\\n if (xHeight < 0u || xHeight >= ${p[y?1:2]}u) {\\n continue;\\n }\\n\\n for (var wWidth: u32 = 0u; wWidth < ${d[3]}u; wWidth++) {\\n let xWidth = xRCCorner.y + wWidth * ${n.dilations[1]}u;\\n if (xWidth < 0u || xWidth >= ${p[y?2:3]}u) {\\n continue;\\n }\\n\\n ${x.indicesVariableDeclaration(\"xIndices\",y?[\"batch\",\"xHeight\",\"xWidth\",\"input_channel\"]:[\"batch\",\"input_channel\",\"xHeight\",\"xWidth\"])}\\n let xVal = x[${x.i2oExpression(\"xIndices\")}];\\n ${T.indicesVariableDeclaration(\"wIndices\",[\"output_channel\",\"wInChannel\",\"wHeight\",\"wWidth\"])}\\n let wVal = w[${T.i2oExpression(\"wIndices\")}];\\n value += xVal*wVal;\\n }\\n }\\n }\\n ${c}\\n ${m}\\n output[global_idx] = value;\\n }`,dispatchGroup:()=>({x:Math.ceil(_/64)})})})(e,u,t,n)})};},9770:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.conv=t.parseConvAttributes=t.calculateOutputShape=void 0;const r=n(6952),o=n(387),i=n(9192),a=n(3822),s=n(3997),u=n(2625);t.calculateOutputShape=(e,t,n,r,o,i)=>{const a=e[0],s=e.slice(i?1:2,i?3:4),u=s.length,l=t[0],c=t.slice(2).map(((e,t)=>e+(e-1)*(n[t]-1))),p=s.map(((e,t)=>e+r[t]+r[t+u])).map(((e,t)=>Math.floor((e-c[t]+o[t])/o[t])));return p.splice(0,0,a),p.splice(i?3:1,0,l),p};const l=(0, o.createAttributeWithCacheKey)({perm:[2,3,1,0]}),c=(e,t)=>{const n=e.kernelShape.slice();for(let e=2;e{const t=(0, s.parseInternalActivationAttributes)(e),n=e.format,r=[\"NOTSET\",\"VALID\",\"SAME_UPPER\",\"SAME_LOWER\"][e.auto_pad],i=e.dilations,a=e.group,u=e.kernel_shape,l=e.pads,c=e.strides,p=e.w_is_const();return (0, o.createAttributeWithCacheKey)(Object.assign({autoPad:r,format:n,dilations:i,group:a,kernelShape:u,pads:l,strides:c,wIsConst:p},t))},t.conv=(e,n)=>{((e,t)=>{if(!e||2!==e.length&&3!==e.length)throw new Error(\"Conv requires 2 or 3 inputs\");if(4!==e[0].dims.length&&3!==e[0].dims.length)throw new Error(\"currently only support conv 1D and 2D\");if(e[0].dims.length!==e[1].dims.length)throw new Error(\"filter does not have same dimension as input\");if(e[0].dims[\"NHWC\"===t.format?e[0].dims.length-1:1]!==e[1].dims[1]*t.group)throw new Error(\"FILTER_IN_CHANNEL should be equal to DATA_CHANNEL\");if(3===e.length&&(1!==e[2].dims.length||e[1].dims[0]!==e[2].dims[0]))throw new Error(\"invalid bias\");const n=e[0].dims.length-2;if(t.dilations.length!==n)throw new Error(`dilations should be ${n}D`);if(t.strides.length!==n)throw new Error(`strides should be ${n}D`);if(t.pads.length!==2*n)throw new Error(`pads should be ${2*n}D`);if(0!==t.kernelShape.length&&t.kernelShape.length!==e[1].dims.length-2)throw new Error(\"invalid kernel shape\");if(1!==e[0].dataType||1!==e[1].dataType)throw new Error(\"Conv input(X,W) should be float tensor\");if(3===e.length&&1!==e[2].dataType)throw new Error(\"Conv input(bias) should be float tensor\")})(e.inputs,n),3===e.inputs[0].dims.length?((e,t)=>{const n=\"NHWC\"===t.format,r=[e.inputs[0].reshape(n?[e.inputs[0].dims[0],1,e.inputs[0].dims[1],e.inputs[0].dims[2]]:[e.inputs[0].dims[0],e.inputs[0].dims[1],1,e.inputs[0].dims[2]]),e.inputs[1].reshape([e.inputs[1].dims[0],e.inputs[1].dims[1],1,e.inputs[1].dims[2]])];3===e.inputs.length&&r.push(e.inputs[2]);const o=[0,t.pads[0],0,t.pads[1]],a=[1].concat(t.strides),s=[1].concat(t.dilations),u=[1].concat(t.kernelShape),l=c(Object.assign(Object.assign({},t),{pads:o,strides:a,dilations:s,kernelShape:u}),r);e.compute((0, i.createGroupedConvProgramInfoLoader)(r,l,(e=>n?[e[0],e[2],e[3]]:[])));})(e,n):((e,n,r)=>{var o;const s=c(r,n),p=3===n.length,d=\"NHWC\"===r.format,f=n[0].dims[d?1:2],h=n[0].dims[d?2:3],g=n[0].dims[d?3:1],m=n[1].dims[2],b=n[1].dims[3],y=(0, t.calculateOutputShape)(n[0].dims,n[1].dims,r.dilations,s.pads,r.strides,d),w=y[d?1:2],_=y[d?2:3],v=y[d?3:1];if(d&&m===f&&b===h&&\"VALID\"===r.autoPad||1===m&&1===b&&1===r.dilations[0]&&1===r.dilations[1]&&1===r.strides[0]&&1===r.strides[1]&&(\"SAME_UPPER\"===r.autoPad||\"SAME_LOWER\"===r.autoPad||\"VALID\"===r.autoPad))return void e.compute((0, i.createGroupedConvProgramInfoLoader)(n,s));if(!d||1!==r.group)return void e.compute((0, i.createGroupedConvProgramInfoLoader)(n,s));const x=d?w*_:v,T=d?v:w*_,S=m*b*g,O=null!==(o=e.customData.wT)&&void 0!==o?o:e.compute(Object.assign(Object.assign({},u.transposeProgramMetadata),{cacheHint:l.cacheKey,get:()=>(0, u.createTransposeProgramInfo)(n[1],l.perm)}),{inputs:[1],outputs:[r.wIsConst?-2:-1]})[0];r.wIsConst&&!e.customData.wT&&(e.customData.wT=O);const A=[n[0],O];p&&(d||1!==n[2].dims.length?A.push(n[2]):A.push(n[2].reshape([n[2].dims[0],1,1]))),e.compute((0, a.createConv2DMatMulProgramInfoLoader)(A,s,y,x,T,S,p,!0),{inputs:A});})(e,e.inputs,n);};},3822:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createConv2DMatMulProgramInfoLoader=void 0;const r=n(1163),o=n(9456);t.createConv2DMatMulProgramInfoLoader=(e,t,n,i,a,s,u,l)=>{const c=((e,t)=>({name:\"Conv2DMatMul\",inputTypes:e?[r.GpuDataType.default,r.GpuDataType.default,r.GpuDataType.default]:[r.GpuDataType.default,r.GpuDataType.default],cacheHint:t}))(u,t.cacheKey);return Object.assign(Object.assign({},c),{get:()=>(0, o.createConv2DMatMulProgramInfo)(e,c,t,n,i,a,s,u,l)})};},3997:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseInternalActivationAttributes=t.getActicationSnippet=void 0;const r=n(6952);t.getActicationSnippet=e=>{switch(e.activation){case\"Relu\":return {activationFunction:\"\",applyActivation:\"value = max(value, 0.0);\"};case\"Sigmoid\":return {activationFunction:\"\",applyActivation:\"value = (1.0 / (1.0 + exp(-value)));\"};case\"Clip\":return {activationFunction:`const clip_min_=f32(${e.clipMin});const clip_max_=f32(${e.clipMax});`,applyActivation:\"value = clamp(value, clip_min_, clip_max_);\"};default:return {activationFunction:\"\",applyActivation:\"\"}}},t.parseInternalActivationAttributes=e=>{const t=(null==e?void 0:e.activation)||\"\";if(\"Clip\"===t){const[n,o]=(null==e?void 0:e.activation_params)||[r.MIN_CLIP,r.MAX_CLIP];return {activation:t,clipMax:o,clipMin:n,activationCacheKey:`${t}:${n},${o}`}}return {activation:t,activationCacheKey:t}};},4271:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseGemmAttributes=t.gemm=void 0;const r=n(6952),o=n(387),i=n(1163);t.gemm=(e,t)=>{(e=>{if(!e)throw new Error(\"Input is missing\");if(e.length<2||e.length>3)throw new Error(\"Invaid input number.\");if(3===e.length&&e[2].dims.length>2)throw new Error(\"Invalid input shape of C\");if(1!==e[0].dataType||1!==e[1].dataType||3===e.length&&1!==e[2].dataType)throw new Error(\"Invalid input type.\");if(e[0].dataType!==e[1].dataType||3===e.length&&e[0].dataType!==e[2].dataType)throw new Error(\"Input types are mismatched\")})(e.inputs),e.compute(((e,t)=>{const n={name:\"Gemm\",inputTypes:3===e.length?[i.GpuDataType.default,i.GpuDataType.default,i.GpuDataType.default]:[i.GpuDataType.default,i.GpuDataType.default],cacheHint:t.cacheKey};return Object.assign(Object.assign({},n),{get:()=>((e,t,n)=>{const o=t[0].dims.slice(),a=t[1].dims.slice(),[s,u,l]=r.GemmUtil.getShapeOfGemmResult(o,n.transA,a,n.transB,3===t.length?t[2].dims:void 0),c=[s,u];if(!c)throw new Error(\"Can't use gemm on the given tensors\");const p=r.ShapeUtil.size(c);let d=\"\";n.transA&&n.transB?d=\"value += a[k * M + m] * b[n * K + k];\":n.transA&&!n.transB?d=\"value += a[k * M + m] * b[k * N + n];\":!n.transA&&n.transB?d=\"value += a[m * K + k] * b[n * K + k];\":n.transA||n.transB||(d=\"value += a[m * K + k] * b[k * N + n];\");const f=\"f32\",h=1===n.alpha?\"\":\"value *= alpha;\",g=3===t.length?`value += beta * c[${((e,t,n)=>{if(0===n.length)return \"0u\";const r=1===n.length&&1!==e||2===n.length&&n[0]!==e,o=n[n.length-1]!==t;let i=\"0u\";return r||(i+=`+ m * ${n[n.length-1]}u`),o||(i+=\"+n\"),i})(s,u,t[2].dims)}];`:\"\",m=[`@group(0) @binding(0) var a : array<${f}>;`,`@group(0) @binding(1) var b : array<${f}>;`];return 3===t.length&&m.push(`@group(0) @binding(2) var c : array<${f}>;`),Object.assign(Object.assign({},e),{outputs:[{dims:c,dataType:t[0].dataType,gpuDataType:i.GpuDataType.default}],getShaderSource:e=>`\\n const M: u32 = ${s}u;\\n const N: u32 = ${u}u;\\n const K: u32 = ${l}u;\\n const alpha = ${f}(${n.alpha});\\n const beta = ${f}(${n.beta});\\n\\n ${m.join(\"\\n\")}\\n @group(0) @binding(${t.length}) var output : array<${f}>;\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(p)}\\n\\n let m = global_id.x / N;\\n let n = global_id.x % N;\\n\\n var value = ${f}(0);\\n for (var k: u32 = 0u; k<${l}u; k++) {\\n ${d}\\n }\\n\\n ${h}\\n ${g}\\n output[global_id.x] = value;\\n\\n }`,dispatchGroup:()=>({x:Math.ceil(p/64)})})})(n,e,t)})})(e.inputs,t));},t.parseGemmAttributes=e=>(0, o.createAttributeWithCacheKey)(e);},1522:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.matMul=t.createMatmulProgramInfoLoader=void 0;const r=n(6952),o=n(1163),i=n(3997);t.createMatmulProgramInfoLoader=(e,t)=>{const n=(a=e.length>2,s=t.activationCacheKey,{name:\"MatMul\",inputTypes:a?[o.GpuDataType.default,o.GpuDataType.default,o.GpuDataType.default]:[o.GpuDataType.default,o.GpuDataType.default],cacheHint:s});var a,s;return Object.assign(Object.assign({},n),{get:()=>((e,t,n)=>{const a=t[0].dims,s=t[1].dims,u=r.BroadcastUtil.calcShape(a,s,!0);if(!u)throw new Error(\"Can't use matmul on the given tensors\");const l=r.ShapeUtil.size(u),c=\"f32\",{activationFunction:p,applyActivation:d}=(0, i.getActicationSnippet)(n),f=u[u.length-2],h=a[a.length-1],g=u[u.length-1];return Object.assign(Object.assign({},e),{outputs:[{dims:u,dataType:t[0].dataType,gpuDataType:o.GpuDataType.default}],getShaderSource:e=>`\\n const M: u32 = ${f}u;\\n const N: u32 = ${g}u;\\n const K: u32 = ${h}u;\\n\\n @group(0) @binding(0) var a : array<${c}>;\\n @group(0) @binding(1) var b : array<${c}>;\\n @group(0) @binding(2) var output : array<${c}>;\\n\\n ${p}\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(l)}\\n\\n let stack = global_idx / (M * N);\\n let mn = global_idx % (M * N);\\n let n = global_idx % N;\\n let m = mn / N;\\n\\n let offsetA = stack * (M * K);\\n let offsetB = stack * (K * N);\\n\\n var value = ${c}(0);\\n for (var k: u32 = 0u; k<${h}u; k++) {\\n value += a[offsetA + m * K + k] * b[offsetB + k * N + n];\\n }\\n ${d}\\n output[global_idx] = value;\\n }`,dispatchGroup:()=>({x:Math.ceil(l/64)})})})(n,e,t)})},t.matMul=e=>{(e=>{if(!e||2!==e.length)throw new Error(\"MatMul requires 2 inputs.\");if(e[0].dims[e[0].dims.length-1]!==e[1].dims[e[1].dims.length-2])throw new Error(\"shared dimension does not match.\");if(1!==e[0].dataType||1!==e[1].dataType)throw new Error(\"inputs should be float type\")})(e.inputs),e.compute((0, t.createMatmulProgramInfoLoader)(e.inputs,{activation:\"\",activationCacheKey:\"\"}));};},5262:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.globalMaxPool=t.parseGlobalMaxPoolAttributes=t.parseMaxPoolAttributes=t.maxPool=t.globalAveragePool=t.parseGlobalAveragePoolAttributes=t.averagePool=t.parseAveragePoolAttributes=void 0;const r=n(6952),o=n(387),i=n(1163),a=n(2075),s=e=>{if(!e||1!==e.length)throw new Error(\"Pool ops requires 1 input.\");if(4!==e[0].dims.length)throw new Error(\"Pool ops supports 2-D inputs only for now.\");if(1!==e[0].dataType)throw new Error(\"Invalid input type.\")},u=(e,t,n)=>{const o=\"NHWC\"===t.format,i=o?[e[0].dims[0],e[0].dims[3],e[0].dims[1],e[0].dims[2]]:e[0].dims.slice(),a=Object.hasOwnProperty.call(t,\"dilations\"),s=t.kernelShape.slice(),u=t.strides.slice(),l=a?t.dilations.slice():[],c=t.pads.slice();r.PoolConvUtil.adjustPoolAttributes(n,i,s,u,l,c);const p=r.PoolConvUtil.computePoolOutputShape(n,i,u,l,s,c,t.autoPad),d=Object.assign({},t);return a?Object.assign(d,{kernelShape:s,strides:u,pads:c,dilations:l,cacheKey:t.cacheKey}):Object.assign(d,{kernelShape:s,strides:u,pads:c,cacheKey:t.cacheKey}),[d,o?[p[0],p[2],p[3],p[1]]:p]},l=(e,t,n,o,i,s,u,l)=>{const c=\"NHWC\"===o.format,p=t.length,d=r.ShapeUtil.size(n),f=(0, a.createIndicesHelper)(\"output\",n),h=(0, a.createIndicesHelper)(\"x\",t);if(o.kernelShape.length<=2){const n=o.kernelShape[o.kernelShape.length-1],r=o.strides[o.strides.length-1],a=o.pads[o.pads.length/2-1],g=p-(c?2:1);let m=\"\",b=\"\",y=\"\";if(m=a+o.pads[o.pads.length-1]!==0?`\\n for (var i: u32 = 0u; i < ${n}u; i++) {\\n xIndices[${g}] = indices[${g}] * ${r} - ${a} + i;\\n if (xIndices[${g}] < 0 || xIndices[${g}] >= ${t[g]}) {\\n pad++;\\n continue;\\n }\\n let x_val = x[${h.i2oExpression(\"xIndices\")}];\\n ${i}\\n }`:`\\n for (var i: u32 = 0u; i < ${n}u; i++) {\\n xIndices[${g}] = indices[${g}] * ${r} - ${a} + i;\\n let x_val = x[${h.i2oExpression(\"xIndices\")}];\\n ${i}\\n }`,2===o.kernelShape.length){const e=o.kernelShape[o.kernelShape.length-2],r=o.strides[o.strides.length-2],i=o.pads[o.pads.length/2-2],a=o.pads[o.pads.length-2],s=p-(c?3:2),u=t[s];b=i+a!==0?`\\n for (var j: u32 = 0u; j < ${e}u; j++) {\\n xIndices[${s}] = indices[${s}] * ${r} - ${i} + j;\\n if (xIndices[${s}] < 0 || xIndices[${s}] >= ${u}) {\\n pad+= ${n};\\n continue;\\n }\\n `:`\\n for (var j: u32 = 0u; j < ${e}u; j++) {\\n xIndices[${s}] = indices[${s}] * ${r} - ${i} + j;\\n `,y=\"\\n }\\n \";}return `\\n @group(0) @binding(0) var x : array<${u}>;\\n @group(0) @binding(1) var output : array<${u}>;\\n\\n ${f.o2iImpl}\\n ${h.i2oImpl}\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(d)}\\n\\n ${f.indicesVariableDeclaration(\"indices\")}\\n ${f.o2iCall(\"global_idx\",\"indices\")}\\n ${f.indicesVariableDeclaration(\"xIndices\")}\\n ${f.o2iCall(\"global_idx\",\"xIndices\")}\\n\\n var value: ${u} = ${u}(${l});\\n var pad = 0;\\n ${b}\\n ${m}\\n ${y}\\n ${s}\\n\\n output[global_idx] = value;\\n }`}{if(c)throw new Error(\"Pooling with kernelShape.length > 2 is not supported for NHWC format.\");const n=r.ShapeUtil.size(o.kernelShape),a=r.ShapeUtil.computeStrides(o.kernelShape),g=a.length,m=o.pads.length;let b=\"\";return b=o.pads.reduce(((e,t)=>e+t))?`\\n if (xIndices[j] >= inputDims[j]) {\\n pad++;\\n isPad = true;\\n break;\\n }\\n }\\n if (!isPad) {\\n let x_val = x[${h.i2oExpression(\"xIndices\")}];\\n ${i}\\n }`:`\\n }\\n let x_val = x[${h.i2oExpression(\"xIndices\")}];\\n ${i}\\n `,`\\n @group(0) @binding(0) var x : array<${u}>;\\n @group(0) @binding(1) var output : array<${u}>;\\n\\n ${f.o2iImpl}\\n ${h.i2oImpl}\\n\\n const pads = array(${o.pads.map((e=>`${e}u`)).join(\",\")});\\n const inputDims = array(${t.map((e=>`${e}u`)).join(\",\")});\\n const kernelStrides = array(${a.map((e=>`${e}u`)).join(\",\")});\\n const strides = array(${o.strides.map((e=>`${e}u`)).join(\",\")});\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(d)}\\n\\n ${f.indicesVariableDeclaration(\"indices\")}\\n ${f.o2iCall(\"global_idx\",\"indices\")}\\n ${f.indicesVariableDeclaration(\"xIndices\")}\\n ${f.o2iCall(\"global_idx\",\"xIndices\")}\\n\\n var offsets: array;\\n\\n var value = ${u}(${l});\\n var pad = 0;\\n var isPad = false;\\n\\n for (var i: u32 = 0u; i < ${n}u; i++) {\\n var offset = i;\\n for (var j = 0u; j < ${g-1}u; j++) {\\n offsets[j] = offset / kernelStrides[j];\\n offset -= offsets[j] * kernelStrides[j];\\n }\\n offsets[${g-1}] = offset;\\n\\n isPad = false;\\n for (var j = ${p-g}u; j < ${p}u; j++) {\\n xIndices[j] = indices[j] * strides[j - ${p-g}u]\\n + offsets[j - ${p-g}u] - pads[j - 2u];\\n ${b}\\n }\\n ${s}\\n\\n output[global_idx] = value;\\n }`}},c=e=>({format:e.format,autoPad:[\"NOTSET\",\"VALID\",\"SAME_UPPER\",\"SAME_LOWER\"][e.auto_pad],ceilMode:e.ceil_mode,kernelShape:e.kernel_shape,strides:e.strides,pads:e.pads}),p=(e,t,n,o)=>{const[a,s]=u(e,o,n),c=r.ShapeUtil.size(a.kernelShape),p=\"f32\";let d=\"\";return a.countIncludePad?d+=`value /= ${p}(${c});`:d+=`value /= ${p}(${c} - pad);`,Object.assign(Object.assign({},t),{outputs:[{dims:s,dataType:e[0].dataType,gpuDataType:i.GpuDataType.default}],getShaderSource:t=>l(t,e[0].dims,s,a,\"value += x_val;\",d,p,\"0.0\"),dispatchGroup:()=>({x:Math.ceil(r.ShapeUtil.size(s)/64)})})};t.parseAveragePoolAttributes=e=>{const t=0!==e.count_include_pad,n=c(e);if(0!==n.ceilMode)throw new Error(\"using ceil() in shape computation is not yet supported for AveragePool\");return (0, o.createAttributeWithCacheKey)(Object.assign({countIncludePad:t},n))},t.averagePool=(e,t)=>{s(e.inputs);const n={name:\"AveragePool\",inputTypes:[i.GpuDataType.default],cacheHint:t.cacheKey};e.compute(Object.assign(Object.assign({},n),{get:()=>p(e.inputs,n,!1,t)}));};const d={autoPad:\"\",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[],cacheKey:\"\"};t.parseGlobalAveragePoolAttributes=e=>{const t=e.format;return Object.assign(Object.assign({format:t},d),{cacheKey:t})},t.globalAveragePool=(e,t)=>{s(e.inputs);const n={name:\"GlobalAveragePool\",inputTypes:[i.GpuDataType.default],cacheHint:t.cacheKey};e.compute(Object.assign(Object.assign({},n),{get:()=>p(e.inputs,n,!0,t)}));};const f=(e,t,n,o)=>{const[a,s]=u(e,o,n);return Object.assign(Object.assign({},t),{outputs:[{dims:s,dataType:e[0].dataType,gpuDataType:i.GpuDataType.default}],getShaderSource:t=>l(t,e[0].dims,s,a,\"\\n value = max(x_val, value);\\n \",\"\",\"f32\",\"-1e5\"),dispatchGroup:()=>({x:Math.ceil(r.ShapeUtil.size(s)/64)})})};t.maxPool=(e,t)=>{s(e.inputs);const n={name:\"MaxPool\",inputTypes:[i.GpuDataType.default],cacheHint:t.cacheKey};e.compute(Object.assign(Object.assign({},n),{get:()=>f(e.inputs,n,!1,t)}));},t.parseMaxPoolAttributes=e=>{const t=e.storage_order,n=e.dilations,r=c(e);if(0!==t)throw new Error(\"column major storage order is not yet supported for MaxPool\");if(0!==r.ceilMode)throw new Error(\"using ceil() in shape computation is not yet supported for MaxPool\");return (0, o.createAttributeWithCacheKey)(Object.assign({storageOrder:t,dilations:n},r))},t.parseGlobalMaxPoolAttributes=e=>{const t=e.format;return Object.assign(Object.assign({format:t},d),{cacheKey:t})},t.globalMaxPool=(e,t)=>{s(e.inputs);const n={name:\"GlobalMaxPool\",inputTypes:[i.GpuDataType.default],cacheHint:t.cacheKey};e.compute(Object.assign(Object.assign({},n),{get:()=>f(e.inputs,n,!0,t)}));};},2625:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseTransposeAttributes=t.transpose=t.createTransposeProgramInfo=t.transposeProgramMetadata=void 0;const r=n(6952),o=n(387),i=n(1163),a=n(2075);t.transposeProgramMetadata={name:\"Transpose\",inputTypes:[i.GpuDataType.default]};const s=(e,t)=>t&&t.length!==e.length?[...e.keys()].reverse():t;t.createTransposeProgramInfo=(e,n)=>{const o=e.dims,u=s(o,n),l=((e,t)=>r.ShapeUtil.sortBasedOnPerm(e,s(e,t)))(o,u),c=o.length,p=r.ShapeUtil.size(l),d=(0, a.createIndicesHelper)(\"output\",l),f=(0, a.createIndicesHelper)(\"a\",o);return Object.assign(Object.assign({},t.transposeProgramMetadata),{outputs:[{dims:l,dataType:e.dataType,gpuDataType:i.GpuDataType.default}],getShaderSource:e=>`\\n @group(0) @binding(0) var a : array;\\n @group(0) @binding(1) var output : array;\\n\\n ${((e,t)=>{const n=[];n.push(`fn perm(a: ptr>, i: ptr>) {`);for(let r=0;r({x:Math.ceil(p/64)})})},t.transpose=(e,n)=>{(e=>{if(!e||1!==e.length)throw new Error(\"Transpose requires 1 input.\");if(1!==e[0].dataType)throw new Error(\"input should be float tensor\")})(e.inputs),e.compute(Object.assign(Object.assign({},t.transposeProgramMetadata),{cacheHint:n.cacheKey,get:()=>(0, t.createTransposeProgramInfo)(e.inputs[0],n.perm)}));},t.parseTransposeAttributes=e=>(0, o.createAttributeWithCacheKey)({perm:e.perm});},9302:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.thresholdedRelu=t.tanh=t.tan=t.sqrt=t.sinh=t.sin=t.sigmoid=t.relu=t.reciprocal=t.neg=t.leakyRelu=t.floor=t.exp=t.erf=t.elu=t.parseAlphaAttributes=t.cosh=t.cos=t.ceil=t.clip=t.clipV10=t.atanh=t.atan=t.asinh=t.asin=t.acosh=t.acos=t.abs=void 0;const r=n(6952),o=n(387),i=n(1163),a=(e,t,n,o,a)=>{const s={name:t,inputTypes:[i.GpuDataType.default],cacheHint:a};return Object.assign(Object.assign({},s),{get:()=>((e,t,n,o)=>Object.assign(Object.assign({},e),{getShaderSource:e=>((e,t,n,r)=>{const o=Math.ceil(t/4);let i=\"\";return i=\"string\"==typeof n?`${n}(a)`:n(\"a\"),`\\n @group(0) @binding(0) var inputData : array>;\\n @group(0) @binding(1) var outputData : array>;\\n\\n ${null!=r?r:\"\"}\\n\\n ${e.mainStart()}\\n ${e.guardAgainstOutOfBoundsWorkgroupSizes(o)}\\n\\n let a = inputData[global_idx];\\n outputData[global_idx] = ${i};\\n }`})(e,r.ShapeUtil.size(t.dims),n,o),outputs:[{dims:t.dims,dataType:t.dataType,gpuDataType:i.GpuDataType.default}],dispatchGroup:e=>({x:Math.ceil(r.ShapeUtil.size(e[0].dims)/64/4)})}))(s,e,n,o)})};t.abs=e=>{e.compute(a(e.inputs[0],\"Abs\",\"abs\"));},t.acos=e=>{e.compute(a(e.inputs[0],\"Acos\",\"acos\"));},t.acosh=e=>{e.compute(a(e.inputs[0],\"Acosh\",\"acosh\"));},t.asin=e=>{e.compute(a(e.inputs[0],\"Asin\",\"asin\"));},t.asinh=e=>{e.compute(a(e.inputs[0],\"Asinh\",\"asinh\"));},t.atan=e=>{e.compute(a(e.inputs[0],\"Atan\",\"atan\"));},t.atanh=e=>{e.compute(a(e.inputs[0],\"Atanh\",\"atanh\"));},t.clipV10=(e,t)=>{e.compute(a(e.inputs[0],\"Clip\",(e=>`clamp(${e}, clip_min_, clip_max_)`),`\\n const clip_min_: vec4 = vec4(f32(${t.min}));\\n const clip_max_: vec4 = vec4(f32(${t.max}));\\n`,t.cacheKey),{inputs:[0]});},t.clip=e=>{const n=(e=>{const t=e.length>=2?e[1].getFloat32Array()[0]:r.MIN_CLIP,n=e.length>=3?e[2].getFloat32Array()[0]:r.MAX_CLIP;return (0, o.createAttributeWithCacheKey)({min:t,max:n})})(e.inputs);(0, t.clipV10)(e,n);},t.ceil=e=>{e.compute(a(e.inputs[0],\"Ceil\",\"ceil\"));},t.cos=e=>{e.compute(a(e.inputs[0],\"Cos\",\"cos\"));},t.cosh=e=>{e.compute(a(e.inputs[0],\"Cosh\",\"cosh\"));},t.parseAlphaAttributes=e=>(0, o.createAttributeWithCacheKey)(e),t.elu=(e,t)=>{e.compute(a(e.inputs[0],\"Elu\",(e=>`elu_vf32(${e})`),`\\n const elu_alpha_: f32 = f32(${t.alpha});\\n\\n fn elu_f32(a: f32) -> f32 {\\n return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0);\\n }\\n\\n fn elu_vf32(v: vec4) -> vec4 {\\n return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w));\\n }`,t.cacheKey));},t.erf=e=>{e.compute(a(e.inputs[0],\"Erf\",(e=>`erf_vf32(${e})`),\"\\n const r0: f32 = 0.3275911;\\n const r1: f32 = 0.254829592;\\n const r2: f32 = -0.284496736;\\n const r3: f32 = 1.421413741;\\n const r4: f32 = -1.453152027;\\n const r5: f32 = 1.061405429;\\n\\n fn erf_vf32(v: vec4) -> vec4 {\\n let absv = abs(v);\\n let x = 1.0 / (1.0 + r0 * absv);\\n return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv));\\n }\"));},t.exp=e=>{e.compute(a(e.inputs[0],\"Exp\",\"exp\"));},t.floor=e=>{e.compute(a(e.inputs[0],\"Floor\",\"floor\"));},t.leakyRelu=(e,t)=>{e.compute(a(e.inputs[0],\"LeakyRelu\",(e=>`select(leaky_relu_alpha_ * ${e}, ${e}, ${e} >= vec4(0.0))`),`const leaky_relu_alpha_: f32 = f32(${t.alpha});`,t.cacheKey));},t.neg=e=>{e.compute(a(e.inputs[0],\"Neg\",(e=>`-${e}`)));},t.reciprocal=e=>{e.compute(a(e.inputs[0],\"Reciprocal\",(e=>`1.0/${e}`)));},t.relu=e=>{e.compute(a(e.inputs[0],\"Relu\",(e=>`select(vec4(0.0), ${e}, ${e} > vec4(0.0))`)));},t.sigmoid=e=>{e.compute(a(e.inputs[0],\"Sigmoid\",(e=>`(1.0 / (1.0 + exp(-${e})))`)));},t.sin=e=>{e.compute(a(e.inputs[0],\"Sin\",\"sin\"));},t.sinh=e=>{e.compute(a(e.inputs[0],\"Sinh\",\"sinh\"));},t.sqrt=e=>{e.compute(a(e.inputs[0],\"Sqrt\",\"sqrt\"));},t.tan=e=>{e.compute(a(e.inputs[0],\"Tan\",\"tan\"));},t.tanh=e=>{e.compute(a(e.inputs[0],\"Tanh\",\"tanh\"));},t.thresholdedRelu=(e,t)=>(e.compute(a(e.inputs[0],\"ThresholdedRelu\",(e=>`select(vec4(0.0), ${e}, ${e} > thresholded_relu_alpha_)`),`const thresholded_relu_alpha_: vec4 = vec4(${t.alpha});`,t.cacheKey)),0);},8305:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ProgramManager=void 0;const r=n(4955),o=n(2075);t.ProgramManager=class{constructor(e){this.backend=e,this.repo=new Map,this.attributesBound=!1;}getArtifact(e){return this.repo.get(e)}setArtifact(e,t){this.repo.set(e,t);}run(e,t,n,r){const o=this.backend.device,i=this.backend.getComputePassEncoder();this.backend.profilingEnabled&&i.writeTimestamp(this.backend.profilingQuerySet,0),i.setPipeline(e.computePipeline);const a=[];for(const e of t)a.push({binding:a.length,resource:{buffer:e.buffer}});for(const e of n)a.push({binding:a.length,resource:{buffer:e.buffer}});const s=o.createBindGroup({layout:e.computePipeline.getBindGroupLayout(0),entries:a});if(i.setBindGroup(0,s),i.dispatchWorkgroups(...r),this.backend.pendingDispatchNumber++,this.backend.profilingEnabled){i.writeTimestamp(this.backend.profilingQuerySet,1);const e=this.backend.gpuDataManager.create(16,GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE),t=this.backend.gpuDataManager.create(16,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.backend.endComputePass(),this.backend.getCommandEncoder().resolveQuerySet(this.backend.profilingQuerySet,0,2,e.buffer,0),this.backend.getCommandEncoder().copyBufferToBuffer(e.buffer,0,t.buffer,0,16),this.backend.flush();const n=this.backend.currentKernelId,r=this.backend.kernels.get(n)[0];t.buffer.mapAsync(GPUMapMode.READ).then((()=>{const o=new BigUint64Array(t.buffer.getMappedRange()),i=o[0],a=o[1];t.buffer.unmap(),void 0===this.backend.profilingTimeBase&&(this.backend.profilingTimeBase=i);const s=Number(i-this.backend.profilingTimeBase),u=Number(a-this.backend.profilingTimeBase);if(!Number.isSafeInteger(s)||!Number.isSafeInteger(u))throw new RangeError(\"incorrect timestamp range\");this.backend.gpuDataManager.release(e.id),this.backend.gpuDataManager.release(t.id),console.log(`[profiling] kernel \"${n}|${r}\" execution time: ${u-s} ns`);}));}this.backend.pendingDispatchNumber>=16&&this.backend.flush();}dispose(){}build(e,t){const n=this.backend.device,i=e.getShaderSource((0, o.createShaderHelper)(t)),a=n.createShaderModule({code:i});return (0, r.LOG_DEBUG)(\"verbose\",(()=>`[WebGPU] shader code: ${i}`)),{programInfo:e,computePipeline:n.createComputePipeline({compute:{module:a,entryPoint:\"main\"},layout:\"auto\"})}}normalizeDispatchGroupSize(e){const t=\"number\"==typeof e?e:e.x,n=\"number\"==typeof e?1:e.y||1,r=\"number\"==typeof e?1:e.z||1,o=this.backend.device.limits.maxComputeWorkgroupsPerDimension;if(t<=o&&n<=o&&r<=o)return [t,n,r];const i=t*n*r;let a=Math.ceil(Math.sqrt(i));if(a>o){if(a=Math.ceil(Math.cbrt(i)),a>o)throw new Error(\"Total dispatch size exceeds WebGPU maximum.\");return [a,a,a]}return [a,a,1]}};},1163:(e,t)=>{var n;Object.defineProperty(t,\"__esModule\",{value:!0}),t.GpuDataType=void 0,(n=t.GpuDataType||(t.GpuDataType={}))[n.default=0]=\"default\",n[n.upload=1]=\"upload\",n[n.profile=2]=\"profile\";},3899:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.iterateExtraOptions=void 0,t.iterateExtraOptions=(e,n,r,o)=>{if(\"object\"==typeof e&&null!==e){if(r.has(e))throw new Error(\"Circular reference in options\");r.add(e);}Object.entries(e).forEach((([e,i])=>{const a=n?n+e:e;if(\"object\"==typeof i)(0, t.iterateExtraOptions)(i,a+\".\",r,o);else if(\"string\"==typeof i||\"number\"==typeof i)o(a,i.toString());else {if(\"boolean\"!=typeof i)throw new Error(\"Can't handle extra config type: \"+typeof i);o(a,i?\"1\":\"0\");}}));};},9544:function(e,t,n){var r,o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!(\"get\"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o);}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n];}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t});}:function(e,t){e.default=t;}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.endProfiling=t.run=t.releaseSession=t.createSession=t.createSessionFinalize=t.createSessionAllocate=t.initOrt=t.initWasm=void 0;const s=n(8453),u=n(7675),l=a(n(1259)),c=n(263),p=()=>!!s.env.wasm.proxy&&\"undefined\"!=typeof document;let d,f,h,g=!1,m=!1,b=!1;const y=[],w=[],_=[],v=[],x=[],T=[],S=()=>{if(g||!m||b||!d)throw new Error(\"worker not ready\")},O=e=>{switch(e.data.type){case\"init-wasm\":g=!1,e.data.err?(b=!0,f[1](e.data.err)):(m=!0,f[0]());break;case\"init-ort\":e.data.err?h[1](e.data.err):h[0]();break;case\"create_allocate\":e.data.err?y.shift()[1](e.data.err):y.shift()[0](e.data.out);break;case\"create_finalize\":e.data.err?w.shift()[1](e.data.err):w.shift()[0](e.data.out);break;case\"create\":e.data.err?_.shift()[1](e.data.err):_.shift()[0](e.data.out);break;case\"release\":e.data.err?v.shift()[1](e.data.err):v.shift()[0]();break;case\"run\":e.data.err?x.shift()[1](e.data.err):x.shift()[0](e.data.out);break;case\"end-profiling\":e.data.err?T.shift()[1](e.data.err):T.shift()[0]();}},A=\"undefined\"!=typeof document?null===(r=null===document||void 0===document?void 0:document.currentScript)||void 0===r?void 0:r.src:void 0;t.initWasm=async()=>{if(p()){if(m)return;if(g)throw new Error(\"multiple calls to 'initWasm()' detected.\");if(b)throw new Error(\"previous call to 'initWasm()' failed.\");return g=!0,void 0===s.env.wasm.wasmPaths&&A&&0!==A.indexOf(\"blob:\")&&(s.env.wasm.wasmPaths=A.substr(0,+A.lastIndexOf(\"/\")+1)),new Promise(((e,t)=>{null==d||d.terminate(),d=n(8050).Z(),d.onmessage=O,f=[e,t];const r={type:\"init-wasm\",in:s.env.wasm};d.postMessage(r);}))}return (0, c.initializeWebAssembly)(s.env.wasm)},t.initOrt=async(e,t)=>{if(p())return S(),new Promise(((n,r)=>{h=[n,r];const o={type:\"init-ort\",in:{numThreads:e,loggingLevel:t}};d.postMessage(o);}));l.initOrt(e,t),await(0, u.init)((0, c.getInstance)());},t.createSessionAllocate=async e=>p()?(S(),new Promise(((t,n)=>{y.push([t,n]);const r={type:\"create_allocate\",in:{model:e}};d.postMessage(r,[e.buffer]);}))):l.createSessionAllocate(e),t.createSessionFinalize=async(e,t)=>p()?(S(),new Promise(((n,r)=>{w.push([n,r]);const o={type:\"create_finalize\",in:{modeldata:e,options:t}};d.postMessage(o);}))):l.createSessionFinalize(e,t),t.createSession=async(e,t)=>p()?(S(),new Promise(((n,r)=>{_.push([n,r]);const o={type:\"create\",in:{model:e,options:t}};d.postMessage(o,[e.buffer]);}))):l.createSession(e,t),t.releaseSession=async e=>{if(p())return S(),new Promise(((t,n)=>{v.push([t,n]);const r={type:\"release\",in:e};d.postMessage(r);}));l.releaseSession(e);},t.run=async(e,t,n,r,o)=>p()?(S(),new Promise(((i,a)=>{x.push([i,a]);const s={type:\"run\",in:{sessionId:e,inputIndices:t,inputs:n,outputIndices:r,options:o}};d.postMessage(s,l.extractTransferableBuffers(n));}))):l.run(e,t,n,r,o),t.endProfiling=async e=>{if(p())return S(),new Promise(((t,n)=>{T.push([t,n]);const r={type:\"end-profiling\",in:e};d.postMessage(r);}));l.endProfiling(e);};},7918:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.setRunOptions=void 0;const r=n(3899),o=n(9444),i=n(263);t.setRunOptions=e=>{const t=(0, i.getInstance)();let n=0;const a=[],s=e||{};try{if(void 0===(null==e?void 0:e.logSeverityLevel))s.logSeverityLevel=2;else if(\"number\"!=typeof e.logSeverityLevel||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${e.logSeverityLevel}`);if(void 0===(null==e?void 0:e.logVerbosityLevel))s.logVerbosityLevel=0;else if(\"number\"!=typeof e.logVerbosityLevel||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);void 0===(null==e?void 0:e.terminate)&&(s.terminate=!1);let i=0;if(void 0!==(null==e?void 0:e.tag)&&(i=(0,o.allocWasmString)(e.tag,a)),n=t._OrtCreateRunOptions(s.logSeverityLevel,s.logVerbosityLevel,!!s.terminate,i),0===n)throw new Error(\"Can't create run options\");return void 0!==(null==e?void 0:e.extra)&&(0,r.iterateExtraOptions)(e.extra,\"\",new WeakSet,((e,r)=>{const i=(0,o.allocWasmString)(e,a),s=(0,o.allocWasmString)(r,a);if(0!==t._OrtAddRunConfigEntry(n,i,s))throw new Error(`Can't set a run config entry: ${e} - ${r}`)})),[n,a]}catch(e){throw 0!==n&&t._OrtReleaseRunOptions(n),a.forEach(t._free),e}};},6640:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OnnxruntimeWebAssemblySessionHandler=void 0;const r=n(2806),o=n(8453),i=n(2850),a=n(9544),s=n(7917);let u;t.OnnxruntimeWebAssemblySessionHandler=class{async createSessionAllocate(e){const t=await fetch(e),n=await t.arrayBuffer();return (0, a.createSessionAllocate)(new Uint8Array(n))}async loadModel(e,t){if(u||(await(0, a.initOrt)(o.env.wasm.numThreads,(0, s.logLevelStringToEnum)(o.env.logLevel)),u=!0),\"string\"==typeof e)if(\"undefined\"==typeof fetch){const n=await(0, i.promisify)(r.readFile)(e);[this.sessionId,this.inputNames,this.outputNames]=await(0, a.createSession)(n,t);}else {const n=await this.createSessionAllocate(e);[this.sessionId,this.inputNames,this.outputNames]=await(0, a.createSessionFinalize)(n,t);}else [this.sessionId,this.inputNames,this.outputNames]=await(0, a.createSession)(e,t);}async dispose(){return (0, a.releaseSession)(this.sessionId)}async run(e,t,n){const r=[],i=[];Object.entries(e).forEach((e=>{const t=e[0],n=e[1],o=this.inputNames.indexOf(t);if(-1===o)throw new Error(`invalid input '${t}'`);r.push(n),i.push(o);}));const s=[];Object.entries(t).forEach((e=>{const t=e[0],n=this.outputNames.indexOf(t);if(-1===n)throw new Error(`invalid output '${t}'`);s.push(n);}));const u=await(0, a.run)(this.sessionId,i,r.map((e=>[e.type,e.dims,e.data])),s,n),l={};for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.setSessionOptions=void 0;const r=n(3899),o=n(9444),i=n(263);t.setSessionOptions=e=>{var t,n,a,s;const u=(0, i.getInstance)();let l=0;const c=[],p=e||{};(e=>{e.extra||(e.extra={}),e.extra.session||(e.extra.session={});const t=e.extra.session;t.use_ort_model_bytes_directly||(t.use_ort_model_bytes_directly=\"1\"),e.executionProviders&&e.executionProviders.some((e=>\"webgpu\"===(\"string\"==typeof e?e:e.name)))&&(e.enableMemPattern=!1);})(p);try{const e=(e=>{switch(e){case\"disabled\":return 0;case\"basic\":return 1;case\"extended\":return 2;case\"all\":return 99;default:throw new Error(`unsupported graph optimization level: ${e}`)}})(null!==(t=p.graphOptimizationLevel)&&void 0!==t?t:\"all\"),d=(e=>{switch(e){case\"sequential\":return 0;case\"parallel\":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}})(null!==(n=p.executionMode)&&void 0!==n?n:\"sequential\"),f=\"string\"==typeof p.logId?(0,o.allocWasmString)(p.logId,c):0,h=null!==(a=p.logSeverityLevel)&&void 0!==a?a:2;if(!Number.isInteger(h)||h<0||h>4)throw new Error(`log serverity level is not valid: ${h}`);const g=null!==(s=p.logVerbosityLevel)&&void 0!==s?s:0;if(!Number.isInteger(g)||g<0||g>4)throw new Error(`log verbosity level is not valid: ${g}`);const m=\"string\"==typeof p.optimizedModelFilePath?(0,o.allocWasmString)(p.optimizedModelFilePath,c):0;if(l=u._OrtCreateSessionOptions(e,!!p.enableCpuMemArena,!!p.enableMemPattern,d,!!p.enableProfiling,0,f,h,g,m),0===l)throw new Error(\"Can't create session options\");return p.executionProviders&&((e,t,n)=>{for(const r of t){let t=\"string\"==typeof r?r:r.name;switch(t){case\"xnnpack\":t=\"XNNPACK\";break;case\"webgpu\":t=\"JS\";break;case\"wasm\":case\"cpu\":continue;default:throw new Error(`not supported EP: ${t}`)}const a=(0,o.allocWasmString)(t,n);if(0!==(0,i.getInstance)()._OrtAppendExecutionProvider(e,a))throw new Error(`Can't append execution provider: ${t}`)}})(l,p.executionProviders,c),void 0!==p.extra&&(0,r.iterateExtraOptions)(p.extra,\"\",new WeakSet,((e,t)=>{const n=(0,o.allocWasmString)(e,c),r=(0,o.allocWasmString)(t,c);if(0!==u._OrtAddSessionConfigEntry(l,n,r))throw new Error(`Can't set a session config entry: ${e} - ${t}`)})),[l,c]}catch(e){throw 0!==l&&u._OrtReleaseSessionOptions(l),c.forEach(u._free),e}};},9444:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.allocWasmString=void 0;const r=n(263);t.allocWasmString=(e,t)=>{const n=(0, r.getInstance)(),o=n.lengthBytesUTF8(e)+1,i=n._malloc(o);return n.stringToUTF8(e,i,o),t.push(i),i};},7917:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.logLevelStringToEnum=t.tensorTypeToTypedArrayConstructor=t.getTensorElementSize=t.tensorDataTypeEnumToString=t.tensorDataTypeStringToEnum=void 0,t.tensorDataTypeStringToEnum=e=>{switch(e){case\"int8\":return 3;case\"uint8\":return 2;case\"bool\":return 9;case\"int16\":return 5;case\"uint16\":return 4;case\"int32\":return 6;case\"uint32\":return 12;case\"float32\":return 1;case\"float64\":return 11;case\"string\":return 8;case\"int64\":return 7;case\"uint64\":return 13;default:throw new Error(`unsupported data type: ${e}`)}},t.tensorDataTypeEnumToString=e=>{switch(e){case 3:return \"int8\";case 2:return \"uint8\";case 9:return \"bool\";case 5:return \"int16\";case 4:return \"uint16\";case 6:return \"int32\";case 12:return \"uint32\";case 1:return \"float32\";case 11:return \"float64\";case 8:return \"string\";case 7:return \"int64\";case 13:return \"uint64\";default:throw new Error(`unsupported data type: ${e}`)}},t.getTensorElementSize=e=>[void 0,4,1,1,2,2,4,8,void 0,1,2,8,4,8,void 0,void 0,void 0][e],t.tensorTypeToTypedArrayConstructor=e=>{switch(e){case\"float32\":return Float32Array;case\"uint8\":case\"bool\":return Uint8Array;case\"int8\":return Int8Array;case\"uint16\":return Uint16Array;case\"int16\":return Int16Array;case\"int32\":return Int32Array;case\"float64\":return Float64Array;case\"uint32\":return Uint32Array;case\"int64\":return BigInt64Array;case\"uint64\":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}},t.logLevelStringToEnum=e=>{switch(e){case\"verbose\":return 0;case\"info\":return 1;case\"warning\":return 2;case\"error\":return 3;case\"fatal\":return 4;default:throw new Error(`unsupported logging level: ${e}`)}};},1259:(e,t,n)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.extractTransferableBuffers=t.endProfiling=t.run=t.releaseSession=t.createSession=t.createSessionFinalize=t.createSessionAllocate=t.initOrt=void 0;const r=n(7918),o=n(7622),i=n(9444),a=n(7917),s=n(263);t.initOrt=(e,t)=>{const n=(0, s.getInstance)()._OrtInit(e,t);if(0!==n)throw new Error(`Can't initialize onnxruntime. error code = ${n}`)};const u=new Map;t.createSessionAllocate=e=>{const t=(0, s.getInstance)(),n=t._malloc(e.byteLength);return t.HEAPU8.set(e,n),[n,e.byteLength]},t.createSessionFinalize=(e,t)=>{const n=(0, s.getInstance)();let r=0,i=0,a=[];try{if([i,a]=(0,o.setSessionOptions)(t),r=n._OrtCreateSession(e[0],e[1],i),0===r)throw new Error(\"Can't create a session\")}finally{n._free(e[0]),0!==i&&n._OrtReleaseSessionOptions(i),a.forEach(n._free);}const l=n._OrtGetInputCount(r),c=n._OrtGetOutputCount(r),p=[],d=[],f=[],h=[];for(let e=0;e{const r=(0, t.createSessionAllocate)(e);return (0, t.createSessionFinalize)(r,n)},t.releaseSession=e=>{const t=(0, s.getInstance)(),n=u.get(e);if(!n)throw new Error(\"invalid session id\");const r=n[0],o=n[1],i=n[2];o.forEach(t._OrtFree),i.forEach(t._OrtFree),t._OrtReleaseSession(r),u.delete(e);},t.run=async(e,t,n,o,l)=>{const c=(0, s.getInstance)(),p=u.get(e);if(!p)throw new Error(\"invalid session id\");const d=p[0],f=p[1],h=p[2],g=t.length,m=o.length;let b=0,y=[];const w=[],_=[];try{[b,y]=(0,r.setRunOptions)(l);for(let e=0;ec.HEAP32[e++]=t));const n=c._OrtCreateTensor((0,a.tensorDataTypeStringToEnum)(t),s,u,p,r.length);if(0===n)throw new Error(\"Can't create a tensor\");w.push(n);}finally{c.stackRestore(l);}}const e=c.stackSave(),s=c.stackAlloc(4*g),u=c.stackAlloc(4*g),p=c.stackAlloc(4*m),v=c.stackAlloc(4*m);try{let e=s/4,n=u/4,r=p/4,i=v/4;for(let r=0;re*t));if(o=(0,a.tensorDataTypeEnumToString)(n),\"string\"===o){const e=[];let t=i/4;for(let n=0;n{const t=(0, s.getInstance)(),n=u.get(e);if(!n)throw new Error(\"invalid session id\");const r=n[0],o=t._OrtEndProfiling(r);if(0===o)throw new Error(\"Can't get an profile file name\");t._OrtFree(o);},t.extractTransferableBuffers=e=>{const t=[];for(const n of e){const e=n[2];!Array.isArray(e)&&e.buffer&&t.push(e.buffer);}return t};},263:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!(\"get\"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o);}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n];}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t});}:function(e,t){e.default=t;}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.dispose=t.getInstance=t.initializeWebAssembly=void 0;const a=i(n(6449)),s=n(932),u=n(3474);let l,c=!1,p=!1,d=!1;t.initializeWebAssembly=async e=>{if(c)return Promise.resolve();if(p)throw new Error(\"multiple calls to 'initializeWebAssembly()' detected.\");if(d)throw new Error(\"previous call to 'initializeWebAssembly()' failed.\");p=!0;const t=e.initTimeout,r=e.numThreads,o=e.simd,i=r>1&&(()=>{try{return \"undefined\"!=typeof SharedArrayBuffer&&(\"undefined\"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11])))}catch(e){return !1}})(),f=o&&(()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch(e){return !1}})(),h=e.wasmPaths,g=\"string\"==typeof h?h:void 0,m=((e,t)=>t?e?\"ort-wasm-simd-threaded.wasm\":\"ort-wasm-threaded.wasm\":e?\"ort-wasm-simd.wasm\":\"ort-wasm.wasm\")(f,i),b=\"object\"==typeof h?h[m]:void 0;let y=!1;const w=[];if(t>0&&w.push(new Promise((e=>{setTimeout((()=>{y=!0,e();}),t);}))),w.push(new Promise(((e,t)=>{const r=i?u:s,o={locateFile:(e,t)=>i&&e.endsWith(\".worker.js\")&&\"undefined\"!=typeof Blob?URL.createObjectURL(new Blob([n(4154)],{type:\"text/javascript\"})):e.endsWith(\".wasm\")?b||(null!=g?g:t)+m:t+e};if(i)if(\"undefined\"==typeof Blob)o.mainScriptUrlOrBlob=a.join(\"/\",\"ort-wasm-threaded.js\");else {const e=`var ortWasmThreaded=(function(){var _scriptDir;return ${r.toString()}})();`;o.mainScriptUrlOrBlob=new Blob([e],{type:\"text/javascript\"});}r(o).then((t=>{p=!1,c=!0,l=t,e();}),(e=>{p=!1,d=!0,t(e);}));}))),await Promise.race(w),y)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},t.getInstance=()=>{if(c&&l)return l;throw new Error(\"WebAssembly is not initialized yet.\")},t.dispose=()=>{var e;!c||p||d||(p=!0,null===(e=l.PThread)||void 0===e||e.terminateAllThreads(),l=void 0,p=!1,c=!1,d=!0);};},8050:(e,t,n)=>{n.d(t,{Z:()=>i});var r=n(6614),o=n.n(r);function i(){return o()('/*!\\n* ONNX Runtime Web v1.15.1\\n* Copyright (c) Microsoft Corporation. All rights reserved.\\n* Licensed under the MIT License.\\n*/\\n(()=>{var e={899:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.iterateExtraOptions=void 0,t.iterateExtraOptions=(e,n,r,a)=>{if(\"object\"==typeof e&&null!==e){if(r.has(e))throw new Error(\"Circular reference in options\");r.add(e)}Object.entries(e).forEach((([e,o])=>{const i=n?n+e:e;if(\"object\"==typeof o)(0,t.iterateExtraOptions)(o,i+\".\",r,a);else if(\"string\"==typeof o||\"number\"==typeof o)a(i,o.toString());else{if(\"boolean\"!=typeof o)throw new Error(\"Can\\'t handle extra config type: \"+typeof o);a(i,o?\"1\":\"0\")}}))}},918:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.setRunOptions=void 0;const r=n(899),a=n(444),o=n(263);t.setRunOptions=e=>{const t=(0,o.getInstance)();let n=0;const i=[],s=e||{};try{if(void 0===(null==e?void 0:e.logSeverityLevel))s.logSeverityLevel=2;else if(\"number\"!=typeof e.logSeverityLevel||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${e.logSeverityLevel}`);if(void 0===(null==e?void 0:e.logVerbosityLevel))s.logVerbosityLevel=0;else if(\"number\"!=typeof e.logVerbosityLevel||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);void 0===(null==e?void 0:e.terminate)&&(s.terminate=!1);let o=0;if(void 0!==(null==e?void 0:e.tag)&&(o=(0,a.allocWasmString)(e.tag,i)),n=t._OrtCreateRunOptions(s.logSeverityLevel,s.logVerbosityLevel,!!s.terminate,o),0===n)throw new Error(\"Can\\'t create run options\");return void 0!==(null==e?void 0:e.extra)&&(0,r.iterateExtraOptions)(e.extra,\"\",new WeakSet,((e,r)=>{const o=(0,a.allocWasmString)(e,i),s=(0,a.allocWasmString)(r,i);if(0!==t._OrtAddRunConfigEntry(n,o,s))throw new Error(`Can\\'t set a run config entry: ${e} - ${r}`)})),[n,i]}catch(e){throw 0!==n&&t._OrtReleaseRunOptions(n),i.forEach(t._free),e}}},622:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.setSessionOptions=void 0;const r=n(899),a=n(444),o=n(263);t.setSessionOptions=e=>{var t,n,i,s;const u=(0,o.getInstance)();let c=0;const l=[],f=e||{};(e=>{e.extra||(e.extra={}),e.extra.session||(e.extra.session={});const t=e.extra.session;t.use_ort_model_bytes_directly||(t.use_ort_model_bytes_directly=\"1\"),e.executionProviders&&e.executionProviders.some((e=>\"webgpu\"===(\"string\"==typeof e?e:e.name)))&&(e.enableMemPattern=!1)})(f);try{const e=(e=>{switch(e){case\"disabled\":return 0;case\"basic\":return 1;case\"extended\":return 2;case\"all\":return 99;default:throw new Error(`unsupported graph optimization level: ${e}`)}})(null!==(t=f.graphOptimizationLevel)&&void 0!==t?t:\"all\"),p=(e=>{switch(e){case\"sequential\":return 0;case\"parallel\":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}})(null!==(n=f.executionMode)&&void 0!==n?n:\"sequential\"),d=\"string\"==typeof f.logId?(0,a.allocWasmString)(f.logId,l):0,m=null!==(i=f.logSeverityLevel)&&void 0!==i?i:2;if(!Number.isInteger(m)||m<0||m>4)throw new Error(`log serverity level is not valid: ${m}`);const g=null!==(s=f.logVerbosityLevel)&&void 0!==s?s:0;if(!Number.isInteger(g)||g<0||g>4)throw new Error(`log verbosity level is not valid: ${g}`);const h=\"string\"==typeof f.optimizedModelFilePath?(0,a.allocWasmString)(f.optimizedModelFilePath,l):0;if(c=u._OrtCreateSessionOptions(e,!!f.enableCpuMemArena,!!f.enableMemPattern,p,!!f.enableProfiling,0,d,m,g,h),0===c)throw new Error(\"Can\\'t create session options\");return f.executionProviders&&((e,t,n)=>{for(const r of t){let t=\"string\"==typeof r?r:r.name;switch(t){case\"xnnpack\":t=\"XNNPACK\";break;case\"webgpu\":t=\"JS\";break;case\"wasm\":case\"cpu\":continue;default:throw new Error(`not supported EP: ${t}`)}const i=(0,a.allocWasmString)(t,n);if(0!==(0,o.getInstance)()._OrtAppendExecutionProvider(e,i))throw new Error(`Can\\'t append execution provider: ${t}`)}})(c,f.executionProviders,l),void 0!==f.extra&&(0,r.iterateExtraOptions)(f.extra,\"\",new WeakSet,((e,t)=>{const n=(0,a.allocWasmString)(e,l),r=(0,a.allocWasmString)(t,l);if(0!==u._OrtAddSessionConfigEntry(c,n,r))throw new Error(`Can\\'t set a session config entry: ${e} - ${t}`)})),[c,l]}catch(e){throw 0!==c&&u._OrtReleaseSessionOptions(c),l.forEach(u._free),e}}},444:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.allocWasmString=void 0;const r=n(263);t.allocWasmString=(e,t)=>{const n=(0,r.getInstance)(),a=n.lengthBytesUTF8(e)+1,o=n._malloc(a);return n.stringToUTF8(e,o,a),t.push(o),o}},917:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.logLevelStringToEnum=t.tensorTypeToTypedArrayConstructor=t.getTensorElementSize=t.tensorDataTypeEnumToString=t.tensorDataTypeStringToEnum=void 0,t.tensorDataTypeStringToEnum=e=>{switch(e){case\"int8\":return 3;case\"uint8\":return 2;case\"bool\":return 9;case\"int16\":return 5;case\"uint16\":return 4;case\"int32\":return 6;case\"uint32\":return 12;case\"float32\":return 1;case\"float64\":return 11;case\"string\":return 8;case\"int64\":return 7;case\"uint64\":return 13;default:throw new Error(`unsupported data type: ${e}`)}},t.tensorDataTypeEnumToString=e=>{switch(e){case 3:return\"int8\";case 2:return\"uint8\";case 9:return\"bool\";case 5:return\"int16\";case 4:return\"uint16\";case 6:return\"int32\";case 12:return\"uint32\";case 1:return\"float32\";case 11:return\"float64\";case 8:return\"string\";case 7:return\"int64\";case 13:return\"uint64\";default:throw new Error(`unsupported data type: ${e}`)}},t.getTensorElementSize=e=>[void 0,4,1,1,2,2,4,8,void 0,1,2,8,4,8,void 0,void 0,void 0][e],t.tensorTypeToTypedArrayConstructor=e=>{switch(e){case\"float32\":return Float32Array;case\"uint8\":case\"bool\":return Uint8Array;case\"int8\":return Int8Array;case\"uint16\":return Uint16Array;case\"int16\":return Int16Array;case\"int32\":return Int32Array;case\"float64\":return Float64Array;case\"uint32\":return Uint32Array;case\"int64\":return BigInt64Array;case\"uint64\":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}},t.logLevelStringToEnum=e=>{switch(e){case\"verbose\":return 0;case\"info\":return 1;case\"warning\":return 2;case\"error\":return 3;case\"fatal\":return 4;default:throw new Error(`unsupported logging level: ${e}`)}}},259:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.extractTransferableBuffers=t.endProfiling=t.run=t.releaseSession=t.createSession=t.createSessionFinalize=t.createSessionAllocate=t.initOrt=void 0;const r=n(918),a=n(622),o=n(444),i=n(917),s=n(263);t.initOrt=(e,t)=>{const n=(0,s.getInstance)()._OrtInit(e,t);if(0!==n)throw new Error(`Can\\'t initialize onnxruntime. error code = ${n}`)};const u=new Map;t.createSessionAllocate=e=>{const t=(0,s.getInstance)(),n=t._malloc(e.byteLength);return t.HEAPU8.set(e,n),[n,e.byteLength]},t.createSessionFinalize=(e,t)=>{const n=(0,s.getInstance)();let r=0,o=0,i=[];try{if([o,i]=(0,a.setSessionOptions)(t),r=n._OrtCreateSession(e[0],e[1],o),0===r)throw new Error(\"Can\\'t create a session\")}finally{n._free(e[0]),0!==o&&n._OrtReleaseSessionOptions(o),i.forEach(n._free)}const c=n._OrtGetInputCount(r),l=n._OrtGetOutputCount(r),f=[],p=[],d=[],m=[];for(let e=0;e{const r=(0,t.createSessionAllocate)(e);return(0,t.createSessionFinalize)(r,n)},t.releaseSession=e=>{const t=(0,s.getInstance)(),n=u.get(e);if(!n)throw new Error(\"invalid session id\");const r=n[0],a=n[1],o=n[2];a.forEach(t._OrtFree),o.forEach(t._OrtFree),t._OrtReleaseSession(r),u.delete(e)},t.run=async(e,t,n,a,c)=>{const l=(0,s.getInstance)(),f=u.get(e);if(!f)throw new Error(\"invalid session id\");const p=f[0],d=f[1],m=f[2],g=t.length,h=a.length;let y=0,v=[];const b=[],w=[];try{[y,v]=(0,r.setRunOptions)(c);for(let e=0;el.HEAP32[e++]=t));const n=l._OrtCreateTensor((0,i.tensorDataTypeStringToEnum)(t),s,u,f,r.length);if(0===n)throw new Error(\"Can\\'t create a tensor\");b.push(n)}finally{l.stackRestore(c)}}const e=l.stackSave(),s=l.stackAlloc(4*g),u=l.stackAlloc(4*g),f=l.stackAlloc(4*h),_=l.stackAlloc(4*h);try{let e=s/4,n=u/4,r=f/4,o=_/4;for(let r=0;re*t));if(a=(0,i.tensorDataTypeEnumToString)(n),\"string\"===a){const e=[];let t=o/4;for(let n=0;n{const t=(0,s.getInstance)(),n=u.get(e);if(!n)throw new Error(\"invalid session id\");const r=n[0],a=t._OrtEndProfiling(r);if(0===a)throw new Error(\"Can\\'t get an profile file name\");t._OrtFree(a)},t.extractTransferableBuffers=e=>{const t=[];for(const n of e){const e=n[2];!Array.isArray(e)&&e.buffer&&t.push(e.buffer)}return t}},263:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!(\"get\"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.dispose=t.getInstance=t.initializeWebAssembly=void 0;const i=o(n(449)),s=n(932),u=n(474);let c,l=!1,f=!1,p=!1;t.initializeWebAssembly=async e=>{if(l)return Promise.resolve();if(f)throw new Error(\"multiple calls to \\'initializeWebAssembly()\\' detected.\");if(p)throw new Error(\"previous call to \\'initializeWebAssembly()\\' failed.\");f=!0;const t=e.initTimeout,r=e.numThreads,a=e.simd,o=r>1&&(()=>{try{return\"undefined\"!=typeof SharedArrayBuffer&&(\"undefined\"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11])))}catch(e){return!1}})(),d=a&&(()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch(e){return!1}})(),m=e.wasmPaths,g=\"string\"==typeof m?m:void 0,h=((e,t)=>t?e?\"ort-wasm-simd-threaded.wasm\":\"ort-wasm-threaded.wasm\":e?\"ort-wasm-simd.wasm\":\"ort-wasm.wasm\")(d,o),y=\"object\"==typeof m?m[h]:void 0;let v=!1;const b=[];if(t>0&&b.push(new Promise((e=>{setTimeout((()=>{v=!0,e()}),t)}))),b.push(new Promise(((e,t)=>{const r=o?u:s,a={locateFile:(e,t)=>o&&e.endsWith(\".worker.js\")&&\"undefined\"!=typeof Blob?URL.createObjectURL(new Blob([n(154)],{type:\"text/javascript\"})):e.endsWith(\".wasm\")?y||(null!=g?g:t)+h:t+e};if(o)if(\"undefined\"==typeof Blob)a.mainScriptUrlOrBlob=i.join(\"/\",\"ort-wasm-threaded.js\");else{const e=`var ortWasmThreaded=(function(){var _scriptDir;return ${r.toString()}})();`;a.mainScriptUrlOrBlob=new Blob([e],{type:\"text/javascript\"})}r(a).then((t=>{f=!1,l=!0,c=t,e()}),(e=>{f=!1,p=!0,t(e)}))}))),await Promise.race(b),v)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},t.getInstance=()=>{if(l&&c)return c;throw new Error(\"WebAssembly is not initialized yet.\")},t.dispose=()=>{var e;!l||f||p||(f=!0,null===(e=c.PThread)||void 0===e||e.terminateAllThreads(),c=void 0,f=!1,l=!1,p=!0)}},474:(e,t,n)=>{var _scriptDir,r=(_scriptDir=(_scriptDir=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||\"/index.js\",function(e){function t(){return P.buffer!=D&&G(P.buffer),F}function r(){return P.buffer!=D&&G(P.buffer),U}function a(){return P.buffer!=D&&G(P.buffer),I}function o(){return P.buffer!=D&&G(P.buffer),W}function i(){return P.buffer!=D&&G(P.buffer),j}var s,u,c;e=e||{},s||(s=void 0!==e?e:{}),s.ready=new Promise((function(e,t){u=e,c=t}));var l,f,p,d,m,g,h=Object.assign({},s),y=\"./this.program\",v=(e,t)=>{throw t},b=\"object\"==typeof window,w=\"function\"==typeof importScripts,_=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,O=s.ENVIRONMENT_IS_PTHREAD||!1,S=\"\";function T(e){return s.locateFile?s.locateFile(e,S):S+e}if(_){let t;S=w?n(908).dirname(S)+\"/\":\"//\",g=()=>{m||(d=n(384),m=n(908))},l=function(e,t){return g(),e=m.normalize(e),d.readFileSync(e,t?void 0:\"utf8\")},p=e=>((e=l(e,!0)).buffer||(e=new Uint8Array(e)),e),f=(e,t,n)=>{g(),e=m.normalize(e),d.readFile(e,(function(e,r){e?n(e):t(r.buffer)}))},1{if(C)throw process.exitCode=e,t;t instanceof ie||x(\"exiting due to exception: \"+t),process.exit(e)},s.inspect=function(){return\"[Emscripten Module object]\"};try{t=n(925)}catch(e){throw console.error(\\'The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?\\'),e}n.g.Worker=t.Worker}else(b||w)&&(w?S=globalThis.location.href:\"undefined\"!=typeof document&&document.currentScript&&(S=document.currentScript.src),_scriptDir&&(S=_scriptDir),S=0!==S.indexOf(\"blob:\")?S.substr(0,S.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",_||(l=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},w&&(p=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),f=(e,t,n)=>{var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.responseType=\"arraybuffer\",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)}));_&&\"undefined\"==typeof performance&&(n.g.performance=n(953).performance);var A=console.log.bind(console),E=console.warn.bind(console);_&&(g(),A=e=>d.writeSync(1,e+\"\\\\n\"),E=e=>d.writeSync(2,e+\"\\\\n\"));var M,R=s.print||A,x=s.printErr||E;Object.assign(s,h),h=null,s.thisProgram&&(y=s.thisProgram),s.quit&&(v=s.quit),s.wasmBinary&&(M=s.wasmBinary);var C=s.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&ne(\"no native wasm support detected\");var P,k,D,F,U,I,W,j,H=!1,L=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function Y(e,t,n){var r=(t>>>=0)+n;for(n=t;e[n]&&!(n>=r);)++n;if(16(a=224==(240&a)?(15&a)<<12|o<<6|i:(7&a)<<18|o<<12|i<<6|63&e[t++])?r+=String.fromCharCode(a):(a-=65536,r+=String.fromCharCode(55296|a>>10,56320|1023&a))}}else r+=String.fromCharCode(a)}return r}function z(e,t){return(e>>>=0)?Y(r(),e,t):\"\"}function B(e,t,n,r){if(!(0>>=0;r=n+r-1;for(var o=0;o=i&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++o)),127>=i){if(n>=r)break;t[n++>>>0]=i}else{if(2047>=i){if(n+1>=r)break;t[n++>>>0]=192|i>>6}else{if(65535>=i){if(n+2>=r)break;t[n++>>>0]=224|i>>12}else{if(n+3>=r)break;t[n++>>>0]=240|i>>18,t[n++>>>0]=128|i>>12&63}t[n++>>>0]=128|i>>6&63}t[n++>>>0]=128|63&i}}return t[n>>>0]=0,n-a}function N(e){for(var t=0,n=0;n=r?t++:2047>=r?t+=2:55296<=r&&57343>=r?(t+=4,++n):t+=3}return t}function G(e){D=e,s.HEAP8=F=new Int8Array(e),s.HEAP16=new Int16Array(e),s.HEAP32=I=new Int32Array(e),s.HEAPU8=U=new Uint8Array(e),s.HEAPU16=new Uint16Array(e),s.HEAPU32=W=new Uint32Array(e),s.HEAPF32=new Float32Array(e),s.HEAPF64=j=new Float64Array(e)}O&&(D=s.buffer);var q=s.INITIAL_MEMORY||16777216;if(O)P=s.wasmMemory,D=s.buffer;else if(s.wasmMemory)P=s.wasmMemory;else if(!((P=new WebAssembly.Memory({initial:q/65536,maximum:65536,shared:!0})).buffer instanceof SharedArrayBuffer))throw x(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\"),_&&console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\"),Error(\"bad memory\");P&&(D=P.buffer),q=D.byteLength,G(D);var $,V=[],J=[],Q=[];function X(){var e=s.preRun.shift();V.unshift(e)}var K,Z=0,ee=null,te=null;function ne(e){throw O?postMessage({cmd:\"onAbort\",arg:e}):s.onAbort&&s.onAbort(e),x(e=\"Aborted(\"+e+\")\"),H=!0,e=new WebAssembly.RuntimeError(e+\". Build with -sASSERTIONS for more info.\"),c(e),e}function re(){return K.startsWith(\"data:application/octet-stream;base64,\")}function ae(){var e=K;try{if(e==K&&M)return new Uint8Array(M);if(p)return p(e);throw\"both async and sync fetching of the wasm failed\"}catch(e){ne(e)}}K=\"ort-wasm-threaded.wasm\",re()||(K=T(K));var oe={};function ie(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e}function se(e){(e=fe.La[e])||ne(),fe.Xa(e)}function ue(e){var t=fe.lb();if(!t)return 6;fe.Ra.push(t),fe.La[e.Ka]=t,t.Ka=e.Ka;var n={cmd:\"run\",start_routine:e.pb,arg:e.ib,pthread_ptr:e.Ka};return t.Qa=()=>{n.time=performance.now(),t.postMessage(n,e.vb)},t.loaded&&(t.Qa(),delete t.Qa),0}function ce(e){if(O)return He(1,1,e);C||(fe.qb(),s.onExit&&s.onExit(e),H=!0),v(e,new ie(e))}function le(e,t){if(!t&&O)throw de(e),\"unwind\";ce(e)}var fe={Oa:[],Ra:[],$a:[],La:{},Ua:function(){O&&fe.mb()},xb:function(){},mb:function(){fe.receiveObjectTransfer=fe.ob,fe.threadInitTLS=fe.Za,fe.setExitStatus=fe.Ya,C=!1},Ya:function(){},qb:function(){for(var e of Object.values(fe.La))fe.Xa(e);for(e of fe.Oa)e.terminate();fe.Oa=[]},Xa:function(e){var t=e.Ka;delete fe.La[t],fe.Oa.push(e),fe.Ra.splice(fe.Ra.indexOf(e),1),e.Ka=0,ct(t)},ob:function(){},Za:function(){fe.$a.forEach((e=>e()))},nb:function(e,t){e.onmessage=n=>{var r=(n=n.data).cmd;if(e.Ka&&(fe.kb=e.Ka),n.targetThread&&n.targetThread!=rt()){var a=fe.La[n.yb];a?a.postMessage(n,n.transferList):x(\\'Internal error! Worker sent a message \"\\'+r+\\'\" to target pthread \\'+n.targetThread+\", but that thread no longer exists!\")}else\"processProxyingQueue\"===r?De(n.queue):\"spawnThread\"===r?ue(n):\"cleanupThread\"===r?se(n.thread):\"killThread\"===r?(n=n.thread,r=fe.La[n],delete fe.La[n],r.terminate(),ct(n),fe.Ra.splice(fe.Ra.indexOf(r),1),r.Ka=0):\"cancelThread\"===r?fe.La[n.thread].postMessage({cmd:\"cancel\"}):\"loaded\"===r?(e.loaded=!0,t&&t(e),e.Qa&&(e.Qa(),delete e.Qa)):\"print\"===r?R(\"Thread \"+n.threadId+\": \"+n.text):\"printErr\"===r?x(\"Thread \"+n.threadId+\": \"+n.text):\"alert\"===r?alert(\"Thread \"+n.threadId+\": \"+n.text):\"setimmediate\"===n.target?e.postMessage(n):\"onAbort\"===r?s.onAbort&&s.onAbort(n.arg):r&&x(\"worker sent an unknown command \"+r);fe.kb=void 0},e.onerror=e=>{throw x(\"worker sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message),e},_&&(e.on(\"message\",(function(t){e.onmessage({data:t})})),e.on(\"error\",(function(t){e.onerror(t)})),e.on(\"detachedExit\",(function(){}))),e.postMessage({cmd:\"load\",urlOrBlob:s.mainScriptUrlOrBlob||_scriptDir,wasmMemory:P,wasmModule:k})},hb:function(){var e=T(\"ort-wasm-threaded.worker.js\");fe.Oa.push(new Worker(e))},lb:function(){return 0==fe.Oa.length&&(fe.hb(),fe.nb(fe.Oa[0])),fe.Oa.pop()}};function pe(e){for(;0>2>>>0];e=a()[e+48>>2>>>0],ft(t,t-e),dt(t)};var me,ge,he=[];function ye(e){this.Pa=e-24,this.gb=function(e){o()[this.Pa+4>>2>>>0]=e},this.cb=function(e){o()[this.Pa+8>>2>>>0]=e},this.eb=function(){a()[this.Pa>>2>>>0]=0},this.bb=function(){t()[this.Pa+12>>0>>>0]=0},this.fb=function(){t()[this.Pa+13>>0>>>0]=0},this.Ua=function(e,t){this.ab(),this.gb(e),this.cb(t),this.eb(),this.bb(),this.fb()},this.ab=function(){o()[this.Pa+16>>2>>>0]=0}}function ve(e,t,n,r){return O?He(3,1,e,t,n,r):be(e,t,n,r)}function be(e,t,n,r){if(\"undefined\"==typeof SharedArrayBuffer)return x(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var a=[];return O&&0===a.length?ve(e,t,n,r):(e={pb:n,Ka:e,ib:r,vb:a},O?(e.wb=\"spawnThread\",postMessage(e,a),0):ue(e))}function we(e,t,n){return O?He(4,1,e,t,n):0}function _e(e,t){if(O)return He(5,1,e,t)}function Oe(e,t){if(O)return He(6,1,e,t)}function Se(e,t,n){if(O)return He(7,1,e,t,n)}function Te(e,t,n){return O?He(8,1,e,t,n):0}function Ae(e,t){if(O)return He(9,1,e,t)}function Ee(e,t,n){if(O)return He(10,1,e,t,n)}function Me(e,t,n,r){if(O)return He(11,1,e,t,n,r)}function Re(e,t,n,r){if(O)return He(12,1,e,t,n,r)}function xe(e,t,n,r){if(O)return He(13,1,e,t,n,r)}function Ce(e){if(O)return He(14,1,e)}function Pe(e,t){if(O)return He(15,1,e,t)}function ke(e,t,n){if(O)return He(16,1,e,t,n)}function De(e){Atomics.store(a(),e>>2,1),rt()&&ut(e),Atomics.compareExchange(a(),e>>2,1,0)}function Fe(e){return o()[e>>>2]+4294967296*a()[e+4>>>2]}function Ue(e,t,n,r,a,o){return O?He(17,1,e,t,n,r,a,o):-52}function Ie(e,t,n,r,a,o){if(O)return He(18,1,e,t,n,r,a,o)}function We(e){var n=N(e)+1,r=at(n);return r&&B(e,t(),r,n),r}function je(e,t,n){function r(e){return(e=e.toTimeString().match(/\\\\(([A-Za-z ]+)\\\\)$/))?e[1]:\"GMT\"}if(O)return He(19,1,e,t,n);var i=(new Date).getFullYear(),s=new Date(i,0,1),u=new Date(i,6,1);i=s.getTimezoneOffset();var c=u.getTimezoneOffset(),l=Math.max(i,c);a()[e>>2>>>0]=60*l,a()[t>>2>>>0]=Number(i!=c),e=r(s),t=r(u),e=We(e),t=We(t),c>2>>>0]=e,o()[n+4>>2>>>0]=t):(o()[n>>2>>>0]=t,o()[n+4>>2>>>0]=e)}function He(e,t){var n=arguments.length-2,r=arguments;return function(e){var t=pt();return e=e(),dt(t),e}((()=>{for(var a=mt(8*n),o=a>>3,s=0;s>>0]=u}return st(e,n,a,t)}))}s.invokeEntryPoint=function(e,t){var n=he[e];n||(e>=he.length&&(he.length=e+1),he[e]=n=$.get(e)),e=n(t),C?fe.Ya(e):lt(e)},s.executeNotifiedProxyingQueue=De,ge=_?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:O?()=>performance.now()-s.__performance_now_clock_drift:()=>performance.now();var Le,Ye=[],ze={};function Be(){if(!Le){var e,t={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:y||\"./this.program\"};for(e in ze)void 0===ze[e]?delete t[e]:t[e]=ze[e];var n=[];for(e in t)n.push(e+\"=\"+t[e]);Le=n}return Le}function Ne(e,n){if(O)return He(20,1,e,n);var r=0;return Be().forEach((function(a,i){var s=n+r;for(i=o()[e+4*i>>2>>>0]=s,s=0;s>0>>>0]=a.charCodeAt(s);t()[i>>0>>>0]=0,r+=a.length+1})),0}function Ge(e,t){if(O)return He(21,1,e,t);var n=Be();o()[e>>2>>>0]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1})),o()[t>>2>>>0]=r,0}function qe(e){return O?He(22,1,e):52}function $e(e,t,n,r){return O?He(23,1,e,t,n,r):52}function Ve(e,t,n,r,a){return O?He(24,1,e,t,n,r,a):70}var Je=[null,[],[]];function Qe(e,t,n,a){if(O)return He(25,1,e,t,n,a);for(var i=0,s=0;s>2>>>0],c=o()[t+4>>2>>>0];t+=8;for(var l=0;l>>0],p=Je[e];0===f||10===f?((1===e?R:x)(Y(p,0)),p.length=0):p.push(f)}i+=c}return o()[a>>2>>>0]=i,0}function Xe(e){return 0==e%4&&(0!=e%100||0==e%400)}var Ke=[31,29,31,30,31,30,31,31,30,31,30,31],Ze=[31,28,31,30,31,30,31,31,30,31,30,31];function et(e,n,r,o){function i(e,t,n){for(e=\"number\"==typeof e?e.toString():e||\"\";e.lengthe?-1:0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return n=new Date(e.getFullYear()+1,0,4),t=c(new Date(e.getFullYear(),0,4)),n=c(n),0>=u(t,e)?0>=u(n,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var f=a()[o+40>>2>>>0];for(var p in o={tb:a()[o>>2>>>0],sb:a()[o+4>>2>>>0],Sa:a()[o+8>>2>>>0],Va:a()[o+12>>2>>>0],Ta:a()[o+16>>2>>>0],Na:a()[o+20>>2>>>0],Ja:a()[o+24>>2>>>0],Ma:a()[o+28>>2>>>0],zb:a()[o+32>>2>>>0],rb:a()[o+36>>2>>>0],ub:f?z(f):\"\"},r=z(r),f={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"})r=r.replace(new RegExp(p,\"g\"),f[p]);var d=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),m=\"January February March April May June July August September October November December\".split(\" \");for(p in f={\"%a\":function(e){return d[e.Ja].substring(0,3)},\"%A\":function(e){return d[e.Ja]},\"%b\":function(e){return m[e.Ta].substring(0,3)},\"%B\":function(e){return m[e.Ta]},\"%C\":function(e){return s((e.Na+1900)/100|0,2)},\"%d\":function(e){return s(e.Va,2)},\"%e\":function(e){return i(e.Va,2,\" \")},\"%g\":function(e){return l(e).toString().substring(2)},\"%G\":function(e){return l(e)},\"%H\":function(e){return s(e.Sa,2)},\"%I\":function(e){return 0==(e=e.Sa)?e=12:12e.Sa?\"AM\":\"PM\"},\"%S\":function(e){return s(e.tb,2)},\"%t\":function(){return\"\\\\t\"},\"%u\":function(e){return e.Ja||7},\"%U\":function(e){return s(Math.floor((e.Ma+7-e.Ja)/7),2)},\"%V\":function(e){var t=Math.floor((e.Ma+7-(e.Ja+6)%7)/7);if(2>=(e.Ja+371-e.Ma-2)%7&&t++,t)53==t&&(4==(n=(e.Ja+371-e.Ma)%7)||3==n&&Xe(e.Na)||(t=1));else{t=52;var n=(e.Ja+7-e.Ma-1)%7;(4==n||5==n&&Xe(e.Na%400-1))&&t++}return s(t,2)},\"%w\":function(e){return e.Ja},\"%W\":function(e){return s(Math.floor((e.Ma+7-(e.Ja+6)%7)/7),2)},\"%y\":function(e){return(e.Na+1900).toString().substring(2)},\"%Y\":function(e){return e.Na+1900},\"%z\":function(e){var t=0<=(e=e.rb);return e=Math.abs(e)/60,(t?\"+\":\"-\")+String(\"0000\"+(e/60*100+e%60)).slice(-4)},\"%Z\":function(e){return e.ub},\"%%\":function(){return\"%\"}},r=r.replace(/%%/g,\"\\\\0\\\\0\"),f)r.includes(p)&&(r=r.replace(new RegExp(p,\"g\"),f[p](o)));return p=function(e){var t=Array(N(e)+1);return B(e,t,0,t.length),t}(r=r.replace(/\\\\0\\\\0/g,\"%\")),p.length>n?0:(function(e,n){t().set(e,n>>>0)}(p,e),p.length-1)}fe.Ua();var tt=[null,ce,de,ve,we,_e,Oe,Se,Te,Ae,Ee,Me,Re,xe,Ce,Pe,ke,Ue,Ie,je,Ne,Ge,qe,$e,Ve,Qe],nt={b:function(e){return at(e+24)+24},c:function(e,t,n){throw new ye(e).Ua(t,n),e},L:function(e){ot(e,!w,1,!b),fe.Za()},l:function(e){O?postMessage({cmd:\"cleanupThread\",thread:e}):se(e)},D:be,i:we,R:_e,z:Oe,B:Se,T:Te,P:Ae,I:Ee,O:Me,p:Re,A:xe,x:Ce,Q:Pe,y:ke,r:function(){},j:function(){ne(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},s:function(){ne(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},q:function(){return Date.now()},E:function(){return 2097152},V:function(){return!0},F:function(e,t,n,r){if(e==t)setTimeout((()=>De(r)));else if(O)postMessage({targetThread:e,cmd:\"processProxyingQueue\",queue:r});else{if(!(e=fe.La[e]))return;e.postMessage({cmd:\"processProxyingQueue\",queue:r})}return 1},K:function(){return-1},W:function(e,t){e=new Date(1e3*Fe(e)),a()[t>>2>>>0]=e.getUTCSeconds(),a()[t+4>>2>>>0]=e.getUTCMinutes(),a()[t+8>>2>>>0]=e.getUTCHours(),a()[t+12>>2>>>0]=e.getUTCDate(),a()[t+16>>2>>>0]=e.getUTCMonth(),a()[t+20>>2>>>0]=e.getUTCFullYear()-1900,a()[t+24>>2>>>0]=e.getUTCDay(),e=(e.getTime()-Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,a()[t+28>>2>>>0]=e},X:function(e,t){e=new Date(1e3*Fe(e)),a()[t>>2>>>0]=e.getSeconds(),a()[t+4>>2>>>0]=e.getMinutes(),a()[t+8>>2>>>0]=e.getHours(),a()[t+12>>2>>>0]=e.getDate(),a()[t+16>>2>>>0]=e.getMonth(),a()[t+20>>2>>>0]=e.getFullYear()-1900,a()[t+24>>2>>>0]=e.getDay();var n=new Date(e.getFullYear(),0,1),r=(e.getTime()-n.getTime())/864e5|0;a()[t+28>>2>>>0]=r,a()[t+36>>2>>>0]=-60*e.getTimezoneOffset(),r=new Date(e.getFullYear(),6,1).getTimezoneOffset(),e=0|(r!=(n=n.getTimezoneOffset())&&e.getTimezoneOffset()==Math.min(n,r)),a()[t+32>>2>>>0]=e},Y:function(e){var t=new Date(a()[e+20>>2>>>0]+1900,a()[e+16>>2>>>0],a()[e+12>>2>>>0],a()[e+8>>2>>>0],a()[e+4>>2>>>0],a()[e>>2>>>0],0),n=a()[e+32>>2>>>0],r=t.getTimezoneOffset(),o=new Date(t.getFullYear(),0,1),i=new Date(t.getFullYear(),6,1).getTimezoneOffset(),s=o.getTimezoneOffset(),u=Math.min(s,i);return 0>n?a()[e+32>>2>>>0]=Number(i!=s&&u==r):0>2>>>0]=t.getDay(),n=(t.getTime()-o.getTime())/864e5|0,a()[e+28>>2>>>0]=n,a()[e>>2>>>0]=t.getSeconds(),a()[e+4>>2>>>0]=t.getMinutes(),a()[e+8>>2>>>0]=t.getHours(),a()[e+12>>2>>>0]=t.getDate(),a()[e+16>>2>>>0]=t.getMonth(),t.getTime()/1e3|0},G:Ue,H:Ie,Z:function e(t,n,r){e.jb||(e.jb=!0,je(t,n,r))},d:function(){ne(\"\")},m:function(){if(!_&&!w){var e=\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\";me||(me={}),me[e]||(me[e]=1,_&&(e=\"warning: \"+e),x(e))}},w:function(){return 4294901760},f:ge,S:function(e,t,n){r().copyWithin(e>>>0,t>>>0,t+n>>>0)},g:function(){return _?n(993).cpus().length:navigator.hardwareConcurrency},J:function(e,t,n){Ye.length=t,n>>=3;for(var r=0;r>>0];return(0>e?oe[-e-1]:tt[e]).apply(null,Ye)},v:function(e){var t=r().length;if((e>>>=0)<=t||4294901760=n;n*=2){var a=t*(1+.2/n);a=Math.min(a,e+100663296);var o=Math;a=Math.max(e,a),o=o.min.call(o,4294901760,a+(65536-a%65536)%65536);e:{try{P.grow(o-D.byteLength+65535>>>16),G(P.buffer);var i=1;break e}catch(e){}i=void 0}if(i)return!0}return!1},U:function(){throw\"unwind\"},M:Ne,N:Ge,k:le,h:qe,o:$e,t:Ve,n:Qe,u:function e(r,a){e.Wa||(e.Wa=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return()=>(crypto.getRandomValues(e),e[0])}if(_)try{var t=n(760);return()=>t.randomBytes(1)[0]}catch(e){}return()=>ne(\"randomDevice\")}());for(var o=0;o>0>>>0]=e.Wa();return 0},a:P||s.wasmMemory,C:et,e:function(e,t,n,r){return et(e,t,n,r)}};!function(){function e(e,t){s.asm=e.exports,fe.$a.push(s.asm.wa),$=s.asm.za,J.unshift(s.asm._),k=t,O||(Z--,s.monitorRunDependencies&&s.monitorRunDependencies(Z),0==Z&&(null!==ee&&(clearInterval(ee),ee=null),te&&(e=te,te=null,e())))}function t(t){e(t.instance,t.module)}function n(e){return function(){if(!M&&(b||w)){if(\"function\"==typeof fetch&&!K.startsWith(\"file://\"))return fetch(K,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw\"failed to load wasm binary file at \\'\"+K+\"\\'\";return e.arrayBuffer()})).catch((function(){return ae()}));if(f)return new Promise((function(e,t){f(K,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return ae()}))}().then((function(e){return WebAssembly.instantiate(e,r)})).then((function(e){return e})).then(e,(function(e){x(\"failed to asynchronously prepare wasm: \"+e),ne(e)}))}var r={a:nt};if(O||(Z++,s.monitorRunDependencies&&s.monitorRunDependencies(Z)),s.instantiateWasm)try{return s.instantiateWasm(r,e)}catch(e){return x(\"Module.instantiateWasm callback failed with error: \"+e),!1}(M||\"function\"!=typeof WebAssembly.instantiateStreaming||re()||K.startsWith(\"file://\")||_||\"function\"!=typeof fetch?n(t):fetch(K,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(t,(function(e){return x(\"wasm streaming compile failed: \"+e),x(\"falling back to ArrayBuffer instantiation\"),n(t)}))}))).catch(c)}(),s.___wasm_call_ctors=function(){return(s.___wasm_call_ctors=s.asm._).apply(null,arguments)},s._OrtInit=function(){return(s._OrtInit=s.asm.$).apply(null,arguments)},s._OrtCreateSessionOptions=function(){return(s._OrtCreateSessionOptions=s.asm.aa).apply(null,arguments)},s._OrtAppendExecutionProvider=function(){return(s._OrtAppendExecutionProvider=s.asm.ba).apply(null,arguments)},s._OrtAddSessionConfigEntry=function(){return(s._OrtAddSessionConfigEntry=s.asm.ca).apply(null,arguments)},s._OrtReleaseSessionOptions=function(){return(s._OrtReleaseSessionOptions=s.asm.da).apply(null,arguments)},s._OrtCreateSession=function(){return(s._OrtCreateSession=s.asm.ea).apply(null,arguments)},s._OrtReleaseSession=function(){return(s._OrtReleaseSession=s.asm.fa).apply(null,arguments)},s._OrtGetInputCount=function(){return(s._OrtGetInputCount=s.asm.ga).apply(null,arguments)},s._OrtGetOutputCount=function(){return(s._OrtGetOutputCount=s.asm.ha).apply(null,arguments)},s._OrtGetInputName=function(){return(s._OrtGetInputName=s.asm.ia).apply(null,arguments)},s._OrtGetOutputName=function(){return(s._OrtGetOutputName=s.asm.ja).apply(null,arguments)},s._OrtFree=function(){return(s._OrtFree=s.asm.ka).apply(null,arguments)},s._OrtCreateTensor=function(){return(s._OrtCreateTensor=s.asm.la).apply(null,arguments)},s._OrtGetTensorData=function(){return(s._OrtGetTensorData=s.asm.ma).apply(null,arguments)},s._OrtReleaseTensor=function(){return(s._OrtReleaseTensor=s.asm.na).apply(null,arguments)},s._OrtCreateRunOptions=function(){return(s._OrtCreateRunOptions=s.asm.oa).apply(null,arguments)},s._OrtAddRunConfigEntry=function(){return(s._OrtAddRunConfigEntry=s.asm.pa).apply(null,arguments)},s._OrtReleaseRunOptions=function(){return(s._OrtReleaseRunOptions=s.asm.qa).apply(null,arguments)},s._OrtRun=function(){return(s._OrtRun=s.asm.ra).apply(null,arguments)},s._OrtEndProfiling=function(){return(s._OrtEndProfiling=s.asm.sa).apply(null,arguments)};var rt=s._pthread_self=function(){return(rt=s._pthread_self=s.asm.ta).apply(null,arguments)},at=s._malloc=function(){return(at=s._malloc=s.asm.ua).apply(null,arguments)};s._free=function(){return(s._free=s.asm.va).apply(null,arguments)},s.__emscripten_tls_init=function(){return(s.__emscripten_tls_init=s.asm.wa).apply(null,arguments)};var ot=s.__emscripten_thread_init=function(){return(ot=s.__emscripten_thread_init=s.asm.xa).apply(null,arguments)};s.__emscripten_thread_crashed=function(){return(s.__emscripten_thread_crashed=s.asm.ya).apply(null,arguments)};var it,st=s._emscripten_run_in_main_runtime_thread_js=function(){return(st=s._emscripten_run_in_main_runtime_thread_js=s.asm.Aa).apply(null,arguments)},ut=s.__emscripten_proxy_execute_task_queue=function(){return(ut=s.__emscripten_proxy_execute_task_queue=s.asm.Ba).apply(null,arguments)},ct=s.__emscripten_thread_free_data=function(){return(ct=s.__emscripten_thread_free_data=s.asm.Ca).apply(null,arguments)},lt=s.__emscripten_thread_exit=function(){return(lt=s.__emscripten_thread_exit=s.asm.Da).apply(null,arguments)},ft=s._emscripten_stack_set_limits=function(){return(ft=s._emscripten_stack_set_limits=s.asm.Ea).apply(null,arguments)},pt=s.stackSave=function(){return(pt=s.stackSave=s.asm.Fa).apply(null,arguments)},dt=s.stackRestore=function(){return(dt=s.stackRestore=s.asm.Ga).apply(null,arguments)},mt=s.stackAlloc=function(){return(mt=s.stackAlloc=s.asm.Ha).apply(null,arguments)};function gt(){function e(){if(!it&&(it=!0,s.calledRun=!0,!H)&&(O||pe(J),u(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),!O)){if(s.postRun)for(\"function\"==typeof s.postRun&&(s.postRun=[s.postRun]);s.postRun.length;){var e=s.postRun.shift();Q.unshift(e)}pe(Q)}}if(!(0{var _scriptDir,r=(_scriptDir=(_scriptDir=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||\"/index.js\",function(e){var t,r,a;e=e||{},t||(t=void 0!==e?e:{}),t.ready=new Promise((function(e,t){r=e,a=t}));var o,i,s,u,c,l,f=Object.assign({},t),p=\"./this.program\",d=(e,t)=>{throw t},m=\"object\"==typeof window,g=\"function\"==typeof importScripts,h=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,y=\"\";h?(y=g?n(908).dirname(y)+\"/\":\"//\",l=()=>{c||(u=n(384),c=n(908))},o=function(e,t){return l(),e=c.normalize(e),u.readFileSync(e,t?void 0:\"utf8\")},s=e=>((e=o(e,!0)).buffer||(e=new Uint8Array(e)),e),i=(e,t,n)=>{l(),e=c.normalize(e),u.readFile(e,(function(e,r){e?n(e):t(r.buffer)}))},1{if(_)throw process.exitCode=e,t;t instanceof $||w(\"exiting due to exception: \"+t),process.exit(e)},t.inspect=function(){return\"[Emscripten Module object]\"}):(m||g)&&(g?y=globalThis.location.href:\"undefined\"!=typeof document&&document.currentScript&&(y=document.currentScript.src),_scriptDir&&(y=_scriptDir),y=0!==y.indexOf(\"blob:\")?y.substr(0,y.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",o=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},g&&(s=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),i=(e,t,n)=>{var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.responseType=\"arraybuffer\",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)});var v,b=t.print||console.log.bind(console),w=t.printErr||console.warn.bind(console);Object.assign(t,f),f=null,t.thisProgram&&(p=t.thisProgram),t.quit&&(d=t.quit),t.wasmBinary&&(v=t.wasmBinary);var _=t.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&B(\"no native wasm support detected\");var O,S,T,A,E,M,R=!1,x=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function C(e,t,n){var r=(t>>>=0)+n;for(n=t;e[n]&&!(n>=r);)++n;if(16(a=224==(240&a)?(15&a)<<12|o<<6|i:(7&a)<<18|o<<12|i<<6|63&e[t++])?r+=String.fromCharCode(a):(a-=65536,r+=String.fromCharCode(55296|a>>10,56320|1023&a))}}else r+=String.fromCharCode(a)}return r}function P(e,t){return(e>>>=0)?C(A,e,t):\"\"}function k(e,t,n,r){if(!(0>>=0;r=n+r-1;for(var o=0;o=i&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++o)),127>=i){if(n>=r)break;t[n++>>>0]=i}else{if(2047>=i){if(n+1>=r)break;t[n++>>>0]=192|i>>6}else{if(65535>=i){if(n+2>=r)break;t[n++>>>0]=224|i>>12}else{if(n+3>=r)break;t[n++>>>0]=240|i>>18,t[n++>>>0]=128|i>>12&63}t[n++>>>0]=128|i>>6&63}t[n++>>>0]=128|63&i}}return t[n>>>0]=0,n-a}function D(e){for(var t=0,n=0;n=r?t++:2047>=r?t+=2:55296<=r&&57343>=r?(t+=4,++n):t+=3}return t}function F(){var e=O.buffer;S=e,t.HEAP8=T=new Int8Array(e),t.HEAP16=new Int16Array(e),t.HEAP32=E=new Int32Array(e),t.HEAPU8=A=new Uint8Array(e),t.HEAPU16=new Uint16Array(e),t.HEAPU32=M=new Uint32Array(e),t.HEAPF32=new Float32Array(e),t.HEAPF64=new Float64Array(e)}var U=[],I=[],W=[];function j(){var e=t.preRun.shift();U.unshift(e)}var H,L=0,Y=null,z=null;function B(e){throw t.onAbort&&t.onAbort(e),w(e=\"Aborted(\"+e+\")\"),R=!0,e=new WebAssembly.RuntimeError(e+\". Build with -sASSERTIONS for more info.\"),a(e),e}function N(){return H.startsWith(\"data:application/octet-stream;base64,\")}if(H=\"ort-wasm.wasm\",!N()){var G=H;H=t.locateFile?t.locateFile(G,y):y+G}function q(){var e=H;try{if(e==H&&v)return new Uint8Array(v);if(s)return s(e);throw\"both async and sync fetching of the wasm failed\"}catch(e){B(e)}}function $(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e}function V(e){for(;0>2>>>0]=e},this.Ba=function(e){M[this.sa+8>>2>>>0]=e},this.Ga=function(){E[this.sa>>2>>>0]=0},this.Aa=function(){T[this.sa+12>>0>>>0]=0},this.Ha=function(){T[this.sa+13>>0>>>0]=0},this.ya=function(e,t){this.za(),this.Ia(e),this.Ba(t),this.Ga(),this.Aa(),this.Ha()},this.za=function(){M[this.sa+16>>2>>>0]=0}}function Q(e){var t=D(e)+1,n=ie(t);return n&&k(e,T,n,t),n}var X={};function K(){if(!Z){var e,t={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:p||\"./this.program\"};for(e in X)void 0===X[e]?delete t[e]:t[e]=X[e];var n=[];for(e in t)n.push(e+\"=\"+t[e]);Z=n}return Z}var Z,ee=[null,[],[]];function te(e){return 0==e%4&&(0!=e%100||0==e%400)}var ne=[31,29,31,30,31,30,31,31,30,31,30,31],re=[31,28,31,30,31,30,31,31,30,31,30,31];function ae(e,t,n,r){function a(e,t,n){for(e=\"number\"==typeof e?e.toString():e||\"\";e.lengthe?-1:0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1))}return n=new Date(e.getFullYear()+1,0,4),t=s(new Date(e.getFullYear(),0,4)),n=s(n),0>=i(t,e)?0>=i(n,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var c=E[r+40>>2>>>0];for(var l in r={Ea:E[r>>2>>>0],Da:E[r+4>>2>>>0],ta:E[r+8>>2>>>0],va:E[r+12>>2>>>0],ua:E[r+16>>2>>>0],ra:E[r+20>>2>>>0],la:E[r+24>>2>>>0],qa:E[r+28>>2>>>0],Ja:E[r+32>>2>>>0],Ca:E[r+36>>2>>>0],Fa:c?P(c):\"\"},n=P(n),c={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"})n=n.replace(new RegExp(l,\"g\"),c[l]);var f=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),p=\"January February March April May June July August September October November December\".split(\" \");for(l in c={\"%a\":function(e){return f[e.la].substring(0,3)},\"%A\":function(e){return f[e.la]},\"%b\":function(e){return p[e.ua].substring(0,3)},\"%B\":function(e){return p[e.ua]},\"%C\":function(e){return o((e.ra+1900)/100|0,2)},\"%d\":function(e){return o(e.va,2)},\"%e\":function(e){return a(e.va,2,\" \")},\"%g\":function(e){return u(e).toString().substring(2)},\"%G\":function(e){return u(e)},\"%H\":function(e){return o(e.ta,2)},\"%I\":function(e){return 0==(e=e.ta)?e=12:12e.ta?\"AM\":\"PM\"},\"%S\":function(e){return o(e.Ea,2)},\"%t\":function(){return\"\\\\t\"},\"%u\":function(e){return e.la||7},\"%U\":function(e){return o(Math.floor((e.qa+7-e.la)/7),2)},\"%V\":function(e){var t=Math.floor((e.qa+7-(e.la+6)%7)/7);if(2>=(e.la+371-e.qa-2)%7&&t++,t)53==t&&(4==(n=(e.la+371-e.qa)%7)||3==n&&te(e.ra)||(t=1));else{t=52;var n=(e.la+7-e.qa-1)%7;(4==n||5==n&&te(e.ra%400-1))&&t++}return o(t,2)},\"%w\":function(e){return e.la},\"%W\":function(e){return o(Math.floor((e.qa+7-(e.la+6)%7)/7),2)},\"%y\":function(e){return(e.ra+1900).toString().substring(2)},\"%Y\":function(e){return e.ra+1900},\"%z\":function(e){var t=0<=(e=e.Ca);return e=Math.abs(e)/60,(t?\"+\":\"-\")+String(\"0000\"+(e/60*100+e%60)).slice(-4)},\"%Z\":function(e){return e.Fa},\"%%\":function(){return\"%\"}},n=n.replace(/%%/g,\"\\\\0\\\\0\"),c)n.includes(l)&&(n=n.replace(new RegExp(l,\"g\"),c[l](r)));return l=function(e){var t=Array(D(e)+1);return k(e,t,0,t.length),t}(n=n.replace(/\\\\0\\\\0/g,\"%\")),l.length>t?0:(T.set(l,e>>>0),l.length-1)}var oe={a:function(e){return ie(e+24)+24},b:function(e,t,n){throw new J(e).ya(t,n),e},g:function(){return 0},I:function(){},w:function(){},y:function(){},K:function(){return 0},G:function(){},C:function(){},F:function(){},k:function(){},x:function(){},u:function(){},H:function(){},v:function(){},n:function(){},p:function(){B(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},o:function(){B(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\")},l:function(){return Date.now()},L:function(){return!0},M:function(e,t){e=new Date(1e3*(M[e>>>2]+4294967296*E[e+4>>>2])),E[t>>2>>>0]=e.getUTCSeconds(),E[t+4>>2>>>0]=e.getUTCMinutes(),E[t+8>>2>>>0]=e.getUTCHours(),E[t+12>>2>>>0]=e.getUTCDate(),E[t+16>>2>>>0]=e.getUTCMonth(),E[t+20>>2>>>0]=e.getUTCFullYear()-1900,E[t+24>>2>>>0]=e.getUTCDay(),E[t+28>>2>>>0]=(e.getTime()-Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0))/864e5|0},N:function(e,t){e=new Date(1e3*(M[e>>>2]+4294967296*E[e+4>>>2])),E[t>>2>>>0]=e.getSeconds(),E[t+4>>2>>>0]=e.getMinutes(),E[t+8>>2>>>0]=e.getHours(),E[t+12>>2>>>0]=e.getDate(),E[t+16>>2>>>0]=e.getMonth(),E[t+20>>2>>>0]=e.getFullYear()-1900,E[t+24>>2>>>0]=e.getDay();var n=new Date(e.getFullYear(),0,1);E[t+28>>2>>>0]=(e.getTime()-n.getTime())/864e5|0,E[t+36>>2>>>0]=-60*e.getTimezoneOffset();var r=new Date(e.getFullYear(),6,1).getTimezoneOffset();n=n.getTimezoneOffset(),E[t+32>>2>>>0]=0|(r!=n&&e.getTimezoneOffset()==Math.min(n,r))},O:function(e){var t=new Date(E[e+20>>2>>>0]+1900,E[e+16>>2>>>0],E[e+12>>2>>>0],E[e+8>>2>>>0],E[e+4>>2>>>0],E[e>>2>>>0],0),n=E[e+32>>2>>>0],r=t.getTimezoneOffset(),a=new Date(t.getFullYear(),0,1),o=new Date(t.getFullYear(),6,1).getTimezoneOffset(),i=a.getTimezoneOffset(),s=Math.min(i,o);return 0>n?E[e+32>>2>>>0]=Number(o!=i&&s==r):0>2>>>0]=t.getDay(),E[e+28>>2>>>0]=(t.getTime()-a.getTime())/864e5|0,E[e>>2>>>0]=t.getSeconds(),E[e+4>>2>>>0]=t.getMinutes(),E[e+8>>2>>>0]=t.getHours(),E[e+12>>2>>>0]=t.getDate(),E[e+16>>2>>>0]=t.getMonth(),t.getTime()/1e3|0},z:function(){return-52},B:function(){},m:function e(t,n,r){e.xa||(e.xa=!0,function(e,t,n){function r(e){return(e=e.toTimeString().match(/\\\\(([A-Za-z ]+)\\\\)$/))?e[1]:\"GMT\"}var a=(new Date).getFullYear(),o=new Date(a,0,1),i=new Date(a,6,1);a=o.getTimezoneOffset();var s=i.getTimezoneOffset();E[e>>2>>>0]=60*Math.max(a,s),E[t>>2>>>0]=Number(a!=s),e=r(o),t=r(i),e=Q(e),t=Q(t),s>2>>>0]=e,M[n+4>>2>>>0]=t):(M[n>>2>>>0]=t,M[n+4>>2>>>0]=e)}(t,n,r))},d:function(){B(\"\")},t:function(){return 4294901760},h:h?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now(),J:function(e,t,n){A.copyWithin(e>>>0,t>>>0,t+n>>>0)},f:function(e){var t=A.length;if(4294901760<(e>>>=0))return!1;for(var n=1;4>=n;n*=2){var r=t*(1+.2/n);r=Math.min(r,e+100663296);var a=Math;r=Math.max(e,r),a=a.min.call(a,4294901760,r+(65536-r%65536)%65536);e:{try{O.grow(a-S.byteLength+65535>>>16),F();var o=1;break e}catch(e){}o=void 0}if(o)return!0}return!1},D:function(e,t){var n=0;return K().forEach((function(r,a){var o=t+n;for(a=M[e+4*a>>2>>>0]=o,o=0;o>0>>>0]=r.charCodeAt(o);T[a>>0>>>0]=0,n+=r.length+1})),0},E:function(e,t){var n=K();M[e>>2>>>0]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1})),M[t>>2>>>0]=r,0},r:function(e){_||(t.onExit&&t.onExit(e),R=!0),d(e,new $(e))},e:function(){return 52},j:function(){return 52},q:function(){return 70},i:function(e,t,n,r){for(var a=0,o=0;o>2>>>0],s=M[t+4>>2>>>0];t+=8;for(var u=0;u>>0],l=ee[e];0===c||10===c?((1===e?b:w)(C(l,0)),l.length=0):l.push(c)}a+=s}return M[r>>2>>>0]=a,0},s:function e(t,r){e.wa||(e.wa=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return()=>(crypto.getRandomValues(e),e[0])}if(h)try{var t=n(760);return()=>t.randomBytes(1)[0]}catch(e){}return()=>B(\"randomDevice\")}());for(var a=0;a>0>>>0]=e.wa();return 0},A:ae,c:function(e,t,n,r){return ae(e,t,n,r)}};!function(){function e(e){t.asm=e.exports,O=t.asm.P,F(),I.unshift(t.asm.Q),L--,t.monitorRunDependencies&&t.monitorRunDependencies(L),0==L&&(null!==Y&&(clearInterval(Y),Y=null),z&&(e=z,z=null,e()))}function n(t){e(t.instance)}function r(e){return function(){if(!v&&(m||g)){if(\"function\"==typeof fetch&&!H.startsWith(\"file://\"))return fetch(H,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw\"failed to load wasm binary file at \\'\"+H+\"\\'\";return e.arrayBuffer()})).catch((function(){return q()}));if(i)return new Promise((function(e,t){i(H,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return q()}))}().then((function(e){return WebAssembly.instantiate(e,o)})).then((function(e){return e})).then(e,(function(e){w(\"failed to asynchronously prepare wasm: \"+e),B(e)}))}var o={a:oe};if(L++,t.monitorRunDependencies&&t.monitorRunDependencies(L),t.instantiateWasm)try{return t.instantiateWasm(o,e)}catch(e){return w(\"Module.instantiateWasm callback failed with error: \"+e),!1}(v||\"function\"!=typeof WebAssembly.instantiateStreaming||N()||H.startsWith(\"file://\")||h||\"function\"!=typeof fetch?r(n):fetch(H,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,o).then(n,(function(e){return w(\"wasm streaming compile failed: \"+e),w(\"falling back to ArrayBuffer instantiation\"),r(n)}))}))).catch(a)}(),t.___wasm_call_ctors=function(){return(t.___wasm_call_ctors=t.asm.Q).apply(null,arguments)},t._OrtInit=function(){return(t._OrtInit=t.asm.R).apply(null,arguments)},t._OrtCreateSessionOptions=function(){return(t._OrtCreateSessionOptions=t.asm.S).apply(null,arguments)},t._OrtAppendExecutionProvider=function(){return(t._OrtAppendExecutionProvider=t.asm.T).apply(null,arguments)},t._OrtAddSessionConfigEntry=function(){return(t._OrtAddSessionConfigEntry=t.asm.U).apply(null,arguments)},t._OrtReleaseSessionOptions=function(){return(t._OrtReleaseSessionOptions=t.asm.V).apply(null,arguments)},t._OrtCreateSession=function(){return(t._OrtCreateSession=t.asm.W).apply(null,arguments)},t._OrtReleaseSession=function(){return(t._OrtReleaseSession=t.asm.X).apply(null,arguments)},t._OrtGetInputCount=function(){return(t._OrtGetInputCount=t.asm.Y).apply(null,arguments)},t._OrtGetOutputCount=function(){return(t._OrtGetOutputCount=t.asm.Z).apply(null,arguments)},t._OrtGetInputName=function(){return(t._OrtGetInputName=t.asm._).apply(null,arguments)},t._OrtGetOutputName=function(){return(t._OrtGetOutputName=t.asm.$).apply(null,arguments)},t._OrtFree=function(){return(t._OrtFree=t.asm.aa).apply(null,arguments)},t._OrtCreateTensor=function(){return(t._OrtCreateTensor=t.asm.ba).apply(null,arguments)},t._OrtGetTensorData=function(){return(t._OrtGetTensorData=t.asm.ca).apply(null,arguments)},t._OrtReleaseTensor=function(){return(t._OrtReleaseTensor=t.asm.da).apply(null,arguments)},t._OrtCreateRunOptions=function(){return(t._OrtCreateRunOptions=t.asm.ea).apply(null,arguments)},t._OrtAddRunConfigEntry=function(){return(t._OrtAddRunConfigEntry=t.asm.fa).apply(null,arguments)},t._OrtReleaseRunOptions=function(){return(t._OrtReleaseRunOptions=t.asm.ga).apply(null,arguments)},t._OrtRun=function(){return(t._OrtRun=t.asm.ha).apply(null,arguments)},t._OrtEndProfiling=function(){return(t._OrtEndProfiling=t.asm.ia).apply(null,arguments)};var ie=t._malloc=function(){return(ie=t._malloc=t.asm.ja).apply(null,arguments)};t._free=function(){return(t._free=t.asm.ka).apply(null,arguments)};var se,ue=t.stackSave=function(){return(ue=t.stackSave=t.asm.ma).apply(null,arguments)},ce=t.stackRestore=function(){return(ce=t.stackRestore=t.asm.na).apply(null,arguments)},le=t.stackAlloc=function(){return(le=t.stackAlloc=t.asm.oa).apply(null,arguments)};function fe(){function e(){if(!se&&(se=!0,t.calledRun=!0,!R)){if(V(I),r(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),t.postRun)for(\"function\"==typeof t.postRun&&(t.postRun=[t.postRun]);t.postRun.length;){var e=t.postRun.shift();W.unshift(e)}V(W)}}if(!(0{\"use strict\";e.exports=\\'\"use strict\";var e={},t=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node;if(t){var r=require(\"worker_threads\"),a=r.parentPort;a.on(\"message\",(e=>onmessage({data:e})));var o=require(\"fs\");Object.assign(global,{globalThis:global,require:require,Module:e,location:{href:__filename},Worker:r.Worker,importScripts:function(e){(0,eval)(o.readFileSync(e,\"utf8\"))},postMessage:function(e){a.postMessage(e)},performance:global.performance||{now:function(){return Date.now()}}})}var s=!1,n=[],i=function(){var e=Array.prototype.slice.call(arguments).join(\" \");t?o.writeSync(2,e+\"\\\\\\\\n\"):console.error(e)};globalThis.alert=function(){var t=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:t,threadId:e._pthread_self()})},e.instantiateWasm=(t,r)=>{var a=new WebAssembly.Instance(e.wasmModule,t);return r(a),e.wasmModule=null,a.exports},globalThis.onunhandledrejection=e=>{throw e.reason??e},globalThis.onmessage=t=>{try{if(\"load\"===t.data.cmd){if(e.wasmModule=t.data.wasmModule,e.wasmMemory=t.data.wasmMemory,e.buffer=e.wasmMemory.buffer,e.ENVIRONMENT_IS_PTHREAD=!0,\"string\"==typeof t.data.urlOrBlob)importScripts(t.data.urlOrBlob);else{var r=URL.createObjectURL(t.data.urlOrBlob);importScripts(r),URL.revokeObjectURL(r)}ortWasmThreaded(e).then((function(t){e=t}))}else if(\"run\"===t.data.cmd){e.__performance_now_clock_drift=performance.now()-t.data.time,e.__emscripten_thread_init(t.data.pthread_ptr,0,0,1),e.establishStackSpace(),e.PThread.receiveObjectTransfer(t.data),e.PThread.threadInitTLS(),s||(n.forEach((t=>{e.executeNotifiedProxyingQueue(t)})),n=[],s=!0);try{e.invokeEntryPoint(t.data.start_routine,t.data.arg)}catch(t){if(\"unwind\"!=t){if(!(t instanceof e.ExitStatus))throw t;e.keepRuntimeAlive()||e.__emscripten_thread_exit(t.status)}}}else\"cancel\"===t.data.cmd?e._pthread_self()&&e.__emscripten_thread_exit(-1):\"setimmediate\"===t.data.target||(\"processProxyingQueue\"===t.data.cmd?s?e.executeNotifiedProxyingQueue(t.data.queue):n.push(t.data.queue):(i(\"worker.js received unknown command \"+t.data.cmd),i(t.data)))}catch(t){throw i(\"worker.js onmessage() captured an uncaught exception: \"+t),t&&t.stack&&i(t.stack),e.__emscripten_thread_crashed&&e.__emscripten_thread_crashed(),t}};\\\\n\\'},760:()=>{},384:()=>{},993:()=>{},908:()=>{},953:()=>{},925:()=>{},449:()=>{}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),(()=>{\"use strict\";const e=n(259),t=n(263);globalThis.onmessage=n=>{switch(n.data.type){case\"init-wasm\":(0,t.initializeWebAssembly)(n.data.in).then((()=>postMessage({type:\"init-wasm\"})),(e=>postMessage({type:\"init-wasm\",err:e})));break;case\"init-ort\":try{const{numThreads:t,loggingLevel:r}=n.data.in;(0,e.initOrt)(t,r),postMessage({type:\"init-ort\"})}catch(e){postMessage({type:\"init-ort\",err:e})}break;case\"create_allocate\":try{const{model:t}=n.data.in,r=(0,e.createSessionAllocate)(t);postMessage({type:\"create_allocate\",out:r})}catch(e){postMessage({type:\"create_allocate\",err:e})}break;case\"create_finalize\":try{const{modeldata:t,options:r}=n.data.in,a=(0,e.createSessionFinalize)(t,r);postMessage({type:\"create_finalize\",out:a})}catch(e){postMessage({type:\"create_finalize\",err:e})}break;case\"create\":try{const{model:t,options:r}=n.data.in,a=(0,e.createSession)(t,r);postMessage({type:\"create\",out:a})}catch(e){postMessage({type:\"create\",err:e})}break;case\"release\":try{const t=n.data.in;(0,e.releaseSession)(t),postMessage({type:\"release\"})}catch(e){postMessage({type:\"release\",err:e})}break;case\"run\":try{const{sessionId:t,inputIndices:r,inputs:a,outputIndices:o,options:i}=n.data.in;(0,e.run)(t,r,a,o,i).then((t=>{postMessage({type:\"run\",out:t},(0,e.extractTransferableBuffers)(t))}),(e=>{postMessage({type:\"run\",err:e})}))}catch(e){postMessage({type:\"run\",err:e})}break;case\"end-profiling\":try{const t=n.data.in;(0,e.endProfiling)(t),postMessage({type:\"end-profiling\"})}catch(e){postMessage({type:\"end-profiling\",err:e})}}}})()})();\\n',\"Worker\",void 0,void 0)}},6614:e=>{e.exports=function(e,t,n,r){var o=globalThis||window;try{try{var i;try{i=new o.Blob([e]);}catch(t){(i=new(o.BlobBuilder||o.WebKitBlobBuilder||o.MozBlobBuilder||o.MSBlobBuilder)).append(e),i=i.getBlob();}var a=o.URL||o.webkitURL,s=a.createObjectURL(i),u=new o[t](s,n);return a.revokeObjectURL(s),u}catch(r){return new o[t](\"data:application/javascript,\".concat(encodeURIComponent(e)),n)}}catch(e){if(!r)throw Error(\"Inline worker is not supported\");return new o[t](r,n)}};},3474:(e,t,n)=>{var _scriptDir,r=(_scriptDir=(_scriptDir=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||\"/index.js\",function(e){function t(){return D.buffer!=C&&H(D.buffer),R}function r(){return D.buffer!=C&&H(D.buffer),M}function o(){return D.buffer!=C&&H(D.buffer),N}function i(){return D.buffer!=C&&H(D.buffer),F}function a(){return D.buffer!=C&&H(D.buffer),L}var s,u,l;e=e||{},s||(s=void 0!==e?e:{}),s.ready=new Promise((function(e,t){u=e,l=t;}));var c,p,d,f,h,g,m=Object.assign({},s),b=\"./this.program\",y=(e,t)=>{throw t},w=\"object\"==typeof window,_=\"function\"==typeof importScripts,v=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,x=s.ENVIRONMENT_IS_PTHREAD||!1,T=\"\";function S(e){return s.locateFile?s.locateFile(e,T):T+e}if(v){let t;T=_?n(908).dirname(T)+\"/\":\"//\",g=()=>{h||(f=n(1384),h=n(908));},c=function(e,t){return g(),e=h.normalize(e),f.readFileSync(e,t?void 0:\"utf8\")},d=e=>((e=c(e,!0)).buffer||(e=new Uint8Array(e)),e),p=(e,t,n)=>{g(),e=h.normalize(e),f.readFile(e,(function(e,r){e?n(e):t(r.buffer);}));},1{if(P)throw process.exitCode=e,t;t instanceof ae||$(\"exiting due to exception: \"+t),process.exit(e);},s.inspect=function(){return \"[Emscripten Module object]\"};try{t=n(9925);}catch(e){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),e}n.g.Worker=t.Worker;}else (w||_)&&(_?T=globalThis.location.href:\"undefined\"!=typeof document&&document.currentScript&&(T=document.currentScript.src),_scriptDir&&(T=_scriptDir),T=0!==T.indexOf(\"blob:\")?T.substr(0,T.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",v||(c=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},_&&(d=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),p=(e,t,n)=>{var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.responseType=\"arraybuffer\",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n();},r.onerror=n,r.send(null);}));v&&\"undefined\"==typeof performance&&(n.g.performance=n(6953).performance);var O=console.log.bind(console),A=console.warn.bind(console);v&&(g(),O=e=>f.writeSync(1,e+\"\\n\"),A=e=>f.writeSync(2,e+\"\\n\"));var E,I=s.print||O,$=s.printErr||A;Object.assign(s,m),m=null,s.thisProgram&&(b=s.thisProgram),s.quit&&(y=s.quit),s.wasmBinary&&(E=s.wasmBinary);var P=s.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&ne(\"no native wasm support detected\");var D,k,C,R,M,N,F,L,j=!1,U=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function B(e,t,n){var r=(t>>>=0)+n;for(n=t;e[n]&&!(n>=r);)++n;if(16(o=224==(240&o)?(15&o)<<12|i<<6|a:(7&o)<<18|i<<12|a<<6|63&e[t++])?r+=String.fromCharCode(o):(o-=65536,r+=String.fromCharCode(55296|o>>10,56320|1023&o));}}else r+=String.fromCharCode(o);}return r}function G(e,t){return (e>>>=0)?B(r(),e,t):\"\"}function V(e,t,n,r){if(!(0>>=0;r=n+r-1;for(var i=0;i=a&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++i)),127>=a){if(n>=r)break;t[n++>>>0]=a;}else {if(2047>=a){if(n+1>=r)break;t[n++>>>0]=192|a>>6;}else {if(65535>=a){if(n+2>=r)break;t[n++>>>0]=224|a>>12;}else {if(n+3>=r)break;t[n++>>>0]=240|a>>18,t[n++>>>0]=128|a>>12&63;}t[n++>>>0]=128|a>>6&63;}t[n++>>>0]=128|63&a;}}return t[n>>>0]=0,n-o}function z(e){for(var t=0,n=0;n=r?t++:2047>=r?t+=2:55296<=r&&57343>=r?(t+=4,++n):t+=3;}return t}function H(e){C=e,s.HEAP8=R=new Int8Array(e),s.HEAP16=new Int16Array(e),s.HEAP32=N=new Int32Array(e),s.HEAPU8=M=new Uint8Array(e),s.HEAPU16=new Uint16Array(e),s.HEAPU32=F=new Uint32Array(e),s.HEAPF32=new Float32Array(e),s.HEAPF64=L=new Float64Array(e);}x&&(C=s.buffer);var W=s.INITIAL_MEMORY||16777216;if(x)D=s.wasmMemory,C=s.buffer;else if(s.wasmMemory)D=s.wasmMemory;else if(!((D=new WebAssembly.Memory({initial:W/65536,maximum:65536,shared:!0})).buffer instanceof SharedArrayBuffer))throw $(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\"),v&&console.log(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)\"),Error(\"bad memory\");D&&(C=D.buffer),W=C.byteLength,H(C);var q,K=[],X=[],Y=[];function J(){var e=s.preRun.shift();K.unshift(e);}var Z,Q=0,te=null;function ne(e){throw x?postMessage({cmd:\"onAbort\",arg:e}):s.onAbort&&s.onAbort(e),$(e=\"Aborted(\"+e+\")\"),j=!0,e=new WebAssembly.RuntimeError(e+\". Build with -sASSERTIONS for more info.\"),l(e),e}function re(){return Z.startsWith(\"data:application/octet-stream;base64,\")}function oe(){var e=Z;try{if(e==Z&&E)return new Uint8Array(E);if(d)return d(e);throw \"both async and sync fetching of the wasm failed\"}catch(e){ne(e);}}Z=\"ort-wasm-threaded.wasm\",re()||(Z=S(Z));var ie={};function ae(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e;}function se(e){(e=pe.La[e])||ne(),pe.Xa(e);}function ue(e){var t=pe.lb();if(!t)return 6;pe.Ra.push(t),pe.La[e.Ka]=t,t.Ka=e.Ka;var n={cmd:\"run\",start_routine:e.pb,arg:e.ib,pthread_ptr:e.Ka};return t.Qa=()=>{n.time=performance.now(),t.postMessage(n,e.vb);},t.loaded&&(t.Qa(),delete t.Qa),0}function le(e){if(x)return je(1,1,e);P||(pe.qb(),s.onExit&&s.onExit(e),j=!0),y(e,new ae(e));}function ce(e,t){if(!t&&x)throw fe(e),\"unwind\";le(e);}var pe={Oa:[],Ra:[],$a:[],La:{},Ua:function(){x&&pe.mb();},xb:function(){},mb:function(){pe.receiveObjectTransfer=pe.ob,pe.threadInitTLS=pe.Za,pe.setExitStatus=pe.Ya,P=!1;},Ya:function(){},qb:function(){for(var e of Object.values(pe.La))pe.Xa(e);for(e of pe.Oa)e.terminate();pe.Oa=[];},Xa:function(e){var t=e.Ka;delete pe.La[t],pe.Oa.push(e),pe.Ra.splice(pe.Ra.indexOf(e),1),e.Ka=0,lt(t);},ob:function(){},Za:function(){pe.$a.forEach((e=>e()));},nb:function(e,t){e.onmessage=n=>{var r=(n=n.data).cmd;if(e.Ka&&(pe.kb=e.Ka),n.targetThread&&n.targetThread!=rt()){var o=pe.La[n.yb];o?o.postMessage(n,n.transferList):$('Internal error! Worker sent a message \"'+r+'\" to target pthread '+n.targetThread+\", but that thread no longer exists!\");}else \"processProxyingQueue\"===r?Ce(n.queue):\"spawnThread\"===r?ue(n):\"cleanupThread\"===r?se(n.thread):\"killThread\"===r?(n=n.thread,r=pe.La[n],delete pe.La[n],r.terminate(),lt(n),pe.Ra.splice(pe.Ra.indexOf(r),1),r.Ka=0):\"cancelThread\"===r?pe.La[n.thread].postMessage({cmd:\"cancel\"}):\"loaded\"===r?(e.loaded=!0,t&&t(e),e.Qa&&(e.Qa(),delete e.Qa)):\"print\"===r?I(\"Thread \"+n.threadId+\": \"+n.text):\"printErr\"===r?$(\"Thread \"+n.threadId+\": \"+n.text):\"alert\"===r?alert(\"Thread \"+n.threadId+\": \"+n.text):\"setimmediate\"===n.target?e.postMessage(n):\"onAbort\"===r?s.onAbort&&s.onAbort(n.arg):r&&$(\"worker sent an unknown command \"+r);pe.kb=void 0;},e.onerror=e=>{throw $(\"worker sent an error! \"+e.filename+\":\"+e.lineno+\": \"+e.message),e},v&&(e.on(\"message\",(function(t){e.onmessage({data:t});})),e.on(\"error\",(function(t){e.onerror(t);})),e.on(\"detachedExit\",(function(){}))),e.postMessage({cmd:\"load\",urlOrBlob:s.mainScriptUrlOrBlob||_scriptDir,wasmMemory:D,wasmModule:k});},hb:function(){var e=S(\"ort-wasm-threaded.worker.js\");pe.Oa.push(new Worker(e));},lb:function(){return 0==pe.Oa.length&&(pe.hb(),pe.nb(pe.Oa[0])),pe.Oa.pop()}};function de(e){for(;0>2>>>0];e=o()[e+48>>2>>>0],pt(t,t-e),ft(t);};var he,ge,me=[];function be(e){this.Pa=e-24,this.gb=function(e){i()[this.Pa+4>>2>>>0]=e;},this.cb=function(e){i()[this.Pa+8>>2>>>0]=e;},this.eb=function(){o()[this.Pa>>2>>>0]=0;},this.bb=function(){t()[this.Pa+12>>0>>>0]=0;},this.fb=function(){t()[this.Pa+13>>0>>>0]=0;},this.Ua=function(e,t){this.ab(),this.gb(e),this.cb(t),this.eb(),this.bb(),this.fb();},this.ab=function(){i()[this.Pa+16>>2>>>0]=0;};}function ye(e,t,n,r){return x?je(3,1,e,t,n,r):we(e,t,n,r)}function we(e,t,n,r){if(\"undefined\"==typeof SharedArrayBuffer)return $(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var o=[];return x&&0===o.length?ye(e,t,n,r):(e={pb:n,Ka:e,ib:r,vb:o},x?(e.wb=\"spawnThread\",postMessage(e,o),0):ue(e))}function _e(e,t,n){return x?je(4,1,e,t,n):0}function ve(e,t){if(x)return je(5,1,e,t)}function xe(e,t){if(x)return je(6,1,e,t)}function Te(e,t,n){if(x)return je(7,1,e,t,n)}function Se(e,t,n){return x?je(8,1,e,t,n):0}function Oe(e,t){if(x)return je(9,1,e,t)}function Ae(e,t,n){if(x)return je(10,1,e,t,n)}function Ee(e,t,n,r){if(x)return je(11,1,e,t,n,r)}function Ie(e,t,n,r){if(x)return je(12,1,e,t,n,r)}function $e(e,t,n,r){if(x)return je(13,1,e,t,n,r)}function Pe(e){if(x)return je(14,1,e)}function De(e,t){if(x)return je(15,1,e,t)}function ke(e,t,n){if(x)return je(16,1,e,t,n)}function Ce(e){Atomics.store(o(),e>>2,1),rt()&&ut(e),Atomics.compareExchange(o(),e>>2,1,0);}function Re(e){return i()[e>>>2]+4294967296*o()[e+4>>>2]}function Me(e,t,n,r,o,i){return x?je(17,1,e,t,n,r,o,i):-52}function Ne(e,t,n,r,o,i){if(x)return je(18,1,e,t,n,r,o,i)}function Fe(e){var n=z(e)+1,r=ot(n);return r&&V(e,t(),r,n),r}function Le(e,t,n){function r(e){return (e=e.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?e[1]:\"GMT\"}if(x)return je(19,1,e,t,n);var a=(new Date).getFullYear(),s=new Date(a,0,1),u=new Date(a,6,1);a=s.getTimezoneOffset();var l=u.getTimezoneOffset(),c=Math.max(a,l);o()[e>>2>>>0]=60*c,o()[t>>2>>>0]=Number(a!=l),e=r(s),t=r(u),e=Fe(e),t=Fe(t),l>2>>>0]=e,i()[n+4>>2>>>0]=t):(i()[n>>2>>>0]=t,i()[n+4>>2>>>0]=e);}function je(e,t){var n=arguments.length-2,r=arguments;return function(e){var t=dt();return e=e(),ft(t),e}((()=>{for(var o=ht(8*n),i=o>>3,s=0;s>>0]=u;}return st(e,n,o,t)}))}s.invokeEntryPoint=function(e,t){var n=me[e];n||(e>=me.length&&(me.length=e+1),me[e]=n=q.get(e)),e=n(t),P?pe.Ya(e):ct(e);},s.executeNotifiedProxyingQueue=Ce,ge=v?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:x?()=>performance.now()-s.__performance_now_clock_drift:()=>performance.now();var Ue,Be=[],Ge={};function Ve(){if(!Ue){var e,t={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:b||\"./this.program\"};for(e in Ge)void 0===Ge[e]?delete t[e]:t[e]=Ge[e];var n=[];for(e in t)n.push(e+\"=\"+t[e]);Ue=n;}return Ue}function ze(e,n){if(x)return je(20,1,e,n);var r=0;return Ve().forEach((function(o,a){var s=n+r;for(a=i()[e+4*a>>2>>>0]=s,s=0;s>0>>>0]=o.charCodeAt(s);t()[a>>0>>>0]=0,r+=o.length+1;})),0}function He(e,t){if(x)return je(21,1,e,t);var n=Ve();i()[e>>2>>>0]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1;})),i()[t>>2>>>0]=r,0}function We(e){return x?je(22,1,e):52}function qe(e,t,n,r){return x?je(23,1,e,t,n,r):52}function Ke(e,t,n,r,o){return x?je(24,1,e,t,n,r,o):70}var Xe=[null,[],[]];function Ye(e,t,n,o){if(x)return je(25,1,e,t,n,o);for(var a=0,s=0;s>2>>>0],l=i()[t+4>>2>>>0];t+=8;for(var c=0;c>>0],d=Xe[e];0===p||10===p?((1===e?I:$)(B(d,0)),d.length=0):d.push(p);}a+=l;}return i()[o>>2>>>0]=a,0}function Je(e){return 0==e%4&&(0!=e%100||0==e%400)}var Ze=[31,29,31,30,31,30,31,31,30,31,30,31],Qe=[31,28,31,30,31,30,31,31,30,31,30,31];function et(e,n,r,i){function a(e,t,n){for(e=\"number\"==typeof e?e.toString():e||\"\";e.lengthe?-1:0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1));}return n=new Date(e.getFullYear()+1,0,4),t=l(new Date(e.getFullYear(),0,4)),n=l(n),0>=u(t,e)?0>=u(n,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var p=o()[i+40>>2>>>0];for(var d in i={tb:o()[i>>2>>>0],sb:o()[i+4>>2>>>0],Sa:o()[i+8>>2>>>0],Va:o()[i+12>>2>>>0],Ta:o()[i+16>>2>>>0],Na:o()[i+20>>2>>>0],Ja:o()[i+24>>2>>>0],Ma:o()[i+28>>2>>>0],zb:o()[i+32>>2>>>0],rb:o()[i+36>>2>>>0],ub:p?G(p):\"\"},r=G(r),p={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"})r=r.replace(new RegExp(d,\"g\"),p[d]);var f=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),h=\"January February March April May June July August September October November December\".split(\" \");for(d in p={\"%a\":function(e){return f[e.Ja].substring(0,3)},\"%A\":function(e){return f[e.Ja]},\"%b\":function(e){return h[e.Ta].substring(0,3)},\"%B\":function(e){return h[e.Ta]},\"%C\":function(e){return s((e.Na+1900)/100|0,2)},\"%d\":function(e){return s(e.Va,2)},\"%e\":function(e){return a(e.Va,2,\" \")},\"%g\":function(e){return c(e).toString().substring(2)},\"%G\":function(e){return c(e)},\"%H\":function(e){return s(e.Sa,2)},\"%I\":function(e){return 0==(e=e.Sa)?e=12:12e.Sa?\"AM\":\"PM\"},\"%S\":function(e){return s(e.tb,2)},\"%t\":function(){return \"\\t\"},\"%u\":function(e){return e.Ja||7},\"%U\":function(e){return s(Math.floor((e.Ma+7-e.Ja)/7),2)},\"%V\":function(e){var t=Math.floor((e.Ma+7-(e.Ja+6)%7)/7);if(2>=(e.Ja+371-e.Ma-2)%7&&t++,t)53==t&&(4==(n=(e.Ja+371-e.Ma)%7)||3==n&&Je(e.Na)||(t=1));else {t=52;var n=(e.Ja+7-e.Ma-1)%7;(4==n||5==n&&Je(e.Na%400-1))&&t++;}return s(t,2)},\"%w\":function(e){return e.Ja},\"%W\":function(e){return s(Math.floor((e.Ma+7-(e.Ja+6)%7)/7),2)},\"%y\":function(e){return (e.Na+1900).toString().substring(2)},\"%Y\":function(e){return e.Na+1900},\"%z\":function(e){var t=0<=(e=e.rb);return e=Math.abs(e)/60,(t?\"+\":\"-\")+String(\"0000\"+(e/60*100+e%60)).slice(-4)},\"%Z\":function(e){return e.ub},\"%%\":function(){return \"%\"}},r=r.replace(/%%/g,\"\\0\\0\"),p)r.includes(d)&&(r=r.replace(new RegExp(d,\"g\"),p[d](i)));return d=function(e){var t=Array(z(e)+1);return V(e,t,0,t.length),t}(r=r.replace(/\\0\\0/g,\"%\")),d.length>n?0:(function(e,n){t().set(e,n>>>0);}(d,e),d.length-1)}pe.Ua();var tt=[null,le,fe,ye,_e,ve,xe,Te,Se,Oe,Ae,Ee,Ie,$e,Pe,De,ke,Me,Ne,Le,ze,He,We,qe,Ke,Ye],nt={b:function(e){return ot(e+24)+24},c:function(e,t,n){throw new be(e).Ua(t,n),e},L:function(e){it(e,!_,1,!w),pe.Za();},l:function(e){x?postMessage({cmd:\"cleanupThread\",thread:e}):se(e);},D:we,i:_e,R:ve,z:xe,B:Te,T:Se,P:Oe,I:Ae,O:Ee,p:Ie,A:$e,x:Pe,Q:De,y:ke,r:function(){},j:function(){ne(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\");},s:function(){ne(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\");},q:function(){return Date.now()},E:function(){return 2097152},V:function(){return !0},F:function(e,t,n,r){if(e==t)setTimeout((()=>Ce(r)));else if(x)postMessage({targetThread:e,cmd:\"processProxyingQueue\",queue:r});else {if(!(e=pe.La[e]))return;e.postMessage({cmd:\"processProxyingQueue\",queue:r});}return 1},K:function(){return -1},W:function(e,t){e=new Date(1e3*Re(e)),o()[t>>2>>>0]=e.getUTCSeconds(),o()[t+4>>2>>>0]=e.getUTCMinutes(),o()[t+8>>2>>>0]=e.getUTCHours(),o()[t+12>>2>>>0]=e.getUTCDate(),o()[t+16>>2>>>0]=e.getUTCMonth(),o()[t+20>>2>>>0]=e.getUTCFullYear()-1900,o()[t+24>>2>>>0]=e.getUTCDay(),e=(e.getTime()-Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,o()[t+28>>2>>>0]=e;},X:function(e,t){e=new Date(1e3*Re(e)),o()[t>>2>>>0]=e.getSeconds(),o()[t+4>>2>>>0]=e.getMinutes(),o()[t+8>>2>>>0]=e.getHours(),o()[t+12>>2>>>0]=e.getDate(),o()[t+16>>2>>>0]=e.getMonth(),o()[t+20>>2>>>0]=e.getFullYear()-1900,o()[t+24>>2>>>0]=e.getDay();var n=new Date(e.getFullYear(),0,1),r=(e.getTime()-n.getTime())/864e5|0;o()[t+28>>2>>>0]=r,o()[t+36>>2>>>0]=-60*e.getTimezoneOffset(),r=new Date(e.getFullYear(),6,1).getTimezoneOffset(),e=0|(r!=(n=n.getTimezoneOffset())&&e.getTimezoneOffset()==Math.min(n,r)),o()[t+32>>2>>>0]=e;},Y:function(e){var t=new Date(o()[e+20>>2>>>0]+1900,o()[e+16>>2>>>0],o()[e+12>>2>>>0],o()[e+8>>2>>>0],o()[e+4>>2>>>0],o()[e>>2>>>0],0),n=o()[e+32>>2>>>0],r=t.getTimezoneOffset(),i=new Date(t.getFullYear(),0,1),a=new Date(t.getFullYear(),6,1).getTimezoneOffset(),s=i.getTimezoneOffset(),u=Math.min(s,a);return 0>n?o()[e+32>>2>>>0]=Number(a!=s&&u==r):0>2>>>0]=t.getDay(),n=(t.getTime()-i.getTime())/864e5|0,o()[e+28>>2>>>0]=n,o()[e>>2>>>0]=t.getSeconds(),o()[e+4>>2>>>0]=t.getMinutes(),o()[e+8>>2>>>0]=t.getHours(),o()[e+12>>2>>>0]=t.getDate(),o()[e+16>>2>>>0]=t.getMonth(),t.getTime()/1e3|0},G:Me,H:Ne,Z:function e(t,n,r){e.jb||(e.jb=!0,Le(t,n,r));},d:function(){ne(\"\");},m:function(){if(!v&&!_){var e=\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\";he||(he={}),he[e]||(he[e]=1,v&&(e=\"warning: \"+e),$(e));}},w:function(){return 4294901760},f:ge,S:function(e,t,n){r().copyWithin(e>>>0,t>>>0,t+n>>>0);},g:function(){return v?n(3993).cpus().length:navigator.hardwareConcurrency},J:function(e,t,n){Be.length=t,n>>=3;for(var r=0;r>>0];return (0>e?ie[-e-1]:tt[e]).apply(null,Be)},v:function(e){var t=r().length;if((e>>>=0)<=t||4294901760=n;n*=2){var o=t*(1+.2/n);o=Math.min(o,e+100663296);var i=Math;o=Math.max(e,o),i=i.min.call(i,4294901760,o+(65536-o%65536)%65536);e:{try{D.grow(i-C.byteLength+65535>>>16),H(D.buffer);var a=1;break e}catch(e){}a=void 0;}if(a)return !0}return !1},U:function(){throw \"unwind\"},M:ze,N:He,k:ce,h:We,o:qe,t:Ke,n:Ye,u:function e(r,o){e.Wa||(e.Wa=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return ()=>(crypto.getRandomValues(e),e[0])}if(v)try{var t=n(760);return ()=>t.randomBytes(1)[0]}catch(e){}return ()=>ne(\"randomDevice\")}());for(var i=0;i>0>>>0]=e.Wa();return 0},a:D||s.wasmMemory,C:et,e:function(e,t,n,r){return et(e,t,n,r)}};!function(){function e(e,t){s.asm=e.exports,pe.$a.push(s.asm.wa),q=s.asm.za,X.unshift(s.asm._),k=t,x||(Q--,s.monitorRunDependencies&&s.monitorRunDependencies(Q),0==Q&&(te&&(e=te,te=null,e())));}function t(t){e(t.instance,t.module);}function n(e){return function(){if(!E&&(w||_)){if(\"function\"==typeof fetch&&!Z.startsWith(\"file://\"))return fetch(Z,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw \"failed to load wasm binary file at '\"+Z+\"'\";return e.arrayBuffer()})).catch((function(){return oe()}));if(p)return new Promise((function(e,t){p(Z,(function(t){e(new Uint8Array(t));}),t);}))}return Promise.resolve().then((function(){return oe()}))}().then((function(e){return WebAssembly.instantiate(e,r)})).then((function(e){return e})).then(e,(function(e){$(\"failed to asynchronously prepare wasm: \"+e),ne(e);}))}var r={a:nt};if(x||(Q++,s.monitorRunDependencies&&s.monitorRunDependencies(Q)),s.instantiateWasm)try{return s.instantiateWasm(r,e)}catch(e){return $(\"Module.instantiateWasm callback failed with error: \"+e),!1}(E||\"function\"!=typeof WebAssembly.instantiateStreaming||re()||Z.startsWith(\"file://\")||v||\"function\"!=typeof fetch?n(t):fetch(Z,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,r).then(t,(function(e){return $(\"wasm streaming compile failed: \"+e),$(\"falling back to ArrayBuffer instantiation\"),n(t)}))}))).catch(l);}(),s.___wasm_call_ctors=function(){return (s.___wasm_call_ctors=s.asm._).apply(null,arguments)},s._OrtInit=function(){return (s._OrtInit=s.asm.$).apply(null,arguments)},s._OrtCreateSessionOptions=function(){return (s._OrtCreateSessionOptions=s.asm.aa).apply(null,arguments)},s._OrtAppendExecutionProvider=function(){return (s._OrtAppendExecutionProvider=s.asm.ba).apply(null,arguments)},s._OrtAddSessionConfigEntry=function(){return (s._OrtAddSessionConfigEntry=s.asm.ca).apply(null,arguments)},s._OrtReleaseSessionOptions=function(){return (s._OrtReleaseSessionOptions=s.asm.da).apply(null,arguments)},s._OrtCreateSession=function(){return (s._OrtCreateSession=s.asm.ea).apply(null,arguments)},s._OrtReleaseSession=function(){return (s._OrtReleaseSession=s.asm.fa).apply(null,arguments)},s._OrtGetInputCount=function(){return (s._OrtGetInputCount=s.asm.ga).apply(null,arguments)},s._OrtGetOutputCount=function(){return (s._OrtGetOutputCount=s.asm.ha).apply(null,arguments)},s._OrtGetInputName=function(){return (s._OrtGetInputName=s.asm.ia).apply(null,arguments)},s._OrtGetOutputName=function(){return (s._OrtGetOutputName=s.asm.ja).apply(null,arguments)},s._OrtFree=function(){return (s._OrtFree=s.asm.ka).apply(null,arguments)},s._OrtCreateTensor=function(){return (s._OrtCreateTensor=s.asm.la).apply(null,arguments)},s._OrtGetTensorData=function(){return (s._OrtGetTensorData=s.asm.ma).apply(null,arguments)},s._OrtReleaseTensor=function(){return (s._OrtReleaseTensor=s.asm.na).apply(null,arguments)},s._OrtCreateRunOptions=function(){return (s._OrtCreateRunOptions=s.asm.oa).apply(null,arguments)},s._OrtAddRunConfigEntry=function(){return (s._OrtAddRunConfigEntry=s.asm.pa).apply(null,arguments)},s._OrtReleaseRunOptions=function(){return (s._OrtReleaseRunOptions=s.asm.qa).apply(null,arguments)},s._OrtRun=function(){return (s._OrtRun=s.asm.ra).apply(null,arguments)},s._OrtEndProfiling=function(){return (s._OrtEndProfiling=s.asm.sa).apply(null,arguments)};var rt=s._pthread_self=function(){return (rt=s._pthread_self=s.asm.ta).apply(null,arguments)},ot=s._malloc=function(){return (ot=s._malloc=s.asm.ua).apply(null,arguments)};s._free=function(){return (s._free=s.asm.va).apply(null,arguments)},s.__emscripten_tls_init=function(){return (s.__emscripten_tls_init=s.asm.wa).apply(null,arguments)};var it=s.__emscripten_thread_init=function(){return (it=s.__emscripten_thread_init=s.asm.xa).apply(null,arguments)};s.__emscripten_thread_crashed=function(){return (s.__emscripten_thread_crashed=s.asm.ya).apply(null,arguments)};var at,st=s._emscripten_run_in_main_runtime_thread_js=function(){return (st=s._emscripten_run_in_main_runtime_thread_js=s.asm.Aa).apply(null,arguments)},ut=s.__emscripten_proxy_execute_task_queue=function(){return (ut=s.__emscripten_proxy_execute_task_queue=s.asm.Ba).apply(null,arguments)},lt=s.__emscripten_thread_free_data=function(){return (lt=s.__emscripten_thread_free_data=s.asm.Ca).apply(null,arguments)},ct=s.__emscripten_thread_exit=function(){return (ct=s.__emscripten_thread_exit=s.asm.Da).apply(null,arguments)},pt=s._emscripten_stack_set_limits=function(){return (pt=s._emscripten_stack_set_limits=s.asm.Ea).apply(null,arguments)},dt=s.stackSave=function(){return (dt=s.stackSave=s.asm.Fa).apply(null,arguments)},ft=s.stackRestore=function(){return (ft=s.stackRestore=s.asm.Ga).apply(null,arguments)},ht=s.stackAlloc=function(){return (ht=s.stackAlloc=s.asm.Ha).apply(null,arguments)};function gt(){function e(){if(!at&&(at=!0,s.calledRun=!0,!j)&&(x||de(X),u(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),!x)){if(s.postRun)for(\"function\"==typeof s.postRun&&(s.postRun=[s.postRun]);s.postRun.length;){var e=s.postRun.shift();Y.unshift(e);}de(Y);}}if(!(0{var _scriptDir,r=(_scriptDir=(_scriptDir=\"undefined\"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||\"/index.js\",function(e){var t,r,o;e=e||{},t||(t=void 0!==e?e:{}),t.ready=new Promise((function(e,t){r=e,o=t;}));var i,a,s,u,l,c,p=Object.assign({},t),d=\"./this.program\",f=(e,t)=>{throw t},h=\"object\"==typeof window,g=\"function\"==typeof importScripts,m=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,b=\"\";m?(b=g?n(908).dirname(b)+\"/\":\"//\",c=()=>{l||(u=n(1384),l=n(908));},i=function(e,t){return c(),e=l.normalize(e),u.readFileSync(e,t?void 0:\"utf8\")},s=e=>((e=i(e,!0)).buffer||(e=new Uint8Array(e)),e),a=(e,t,n)=>{c(),e=l.normalize(e),u.readFile(e,(function(e,r){e?n(e):t(r.buffer);}));},1{if(v)throw process.exitCode=e,t;t instanceof q||_(\"exiting due to exception: \"+t),process.exit(e);},t.inspect=function(){return \"[Emscripten Module object]\"}):(h||g)&&(g?b=globalThis.location.href:\"undefined\"!=typeof document&&document.currentScript&&(b=document.currentScript.src),_scriptDir&&(b=_scriptDir),b=0!==b.indexOf(\"blob:\")?b.substr(0,b.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",i=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},g&&(s=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),a=(e,t,n)=>{var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.responseType=\"arraybuffer\",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n();},r.onerror=n,r.send(null);});var y,w=t.print||console.log.bind(console),_=t.printErr||console.warn.bind(console);Object.assign(t,p),p=null,t.thisProgram&&(d=t.thisProgram),t.quit&&(f=t.quit),t.wasmBinary&&(y=t.wasmBinary);var v=t.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&V(\"no native wasm support detected\");var x,T,S,O,A,E,I=!1,$=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;function P(e,t,n){var r=(t>>>=0)+n;for(n=t;e[n]&&!(n>=r);)++n;if(16(o=224==(240&o)?(15&o)<<12|i<<6|a:(7&o)<<18|i<<12|a<<6|63&e[t++])?r+=String.fromCharCode(o):(o-=65536,r+=String.fromCharCode(55296|o>>10,56320|1023&o));}}else r+=String.fromCharCode(o);}return r}function D(e,t){return (e>>>=0)?P(O,e,t):\"\"}function k(e,t,n,r){if(!(0>>=0;r=n+r-1;for(var i=0;i=a&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++i)),127>=a){if(n>=r)break;t[n++>>>0]=a;}else {if(2047>=a){if(n+1>=r)break;t[n++>>>0]=192|a>>6;}else {if(65535>=a){if(n+2>=r)break;t[n++>>>0]=224|a>>12;}else {if(n+3>=r)break;t[n++>>>0]=240|a>>18,t[n++>>>0]=128|a>>12&63;}t[n++>>>0]=128|a>>6&63;}t[n++>>>0]=128|63&a;}}return t[n>>>0]=0,n-o}function C(e){for(var t=0,n=0;n=r?t++:2047>=r?t+=2:55296<=r&&57343>=r?(t+=4,++n):t+=3;}return t}function R(){var e=x.buffer;T=e,t.HEAP8=S=new Int8Array(e),t.HEAP16=new Int16Array(e),t.HEAP32=A=new Int32Array(e),t.HEAPU8=O=new Uint8Array(e),t.HEAPU16=new Uint16Array(e),t.HEAPU32=E=new Uint32Array(e),t.HEAPF32=new Float32Array(e),t.HEAPF64=new Float64Array(e);}var M=[],N=[],F=[];function L(){var e=t.preRun.shift();M.unshift(e);}var j,U=0,G=null;function V(e){throw t.onAbort&&t.onAbort(e),_(e=\"Aborted(\"+e+\")\"),I=!0,e=new WebAssembly.RuntimeError(e+\". Build with -sASSERTIONS for more info.\"),o(e),e}function z(){return j.startsWith(\"data:application/octet-stream;base64,\")}if(j=\"ort-wasm.wasm\",!z()){var H=j;j=t.locateFile?t.locateFile(H,b):b+H;}function W(){var e=j;try{if(e==j&&y)return new Uint8Array(y);if(s)return s(e);throw \"both async and sync fetching of the wasm failed\"}catch(e){V(e);}}function q(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e;}function K(e){for(;0>2>>>0]=e;},this.Ba=function(e){E[this.sa+8>>2>>>0]=e;},this.Ga=function(){A[this.sa>>2>>>0]=0;},this.Aa=function(){S[this.sa+12>>0>>>0]=0;},this.Ha=function(){S[this.sa+13>>0>>>0]=0;},this.ya=function(e,t){this.za(),this.Ia(e),this.Ba(t),this.Ga(),this.Aa(),this.Ha();},this.za=function(){E[this.sa+16>>2>>>0]=0;};}function Y(e){var t=C(e)+1,n=ae(t);return n&&k(e,S,n,t),n}var J={};function Z(){if(!Q){var e,t={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:d||\"./this.program\"};for(e in J)void 0===J[e]?delete t[e]:t[e]=J[e];var n=[];for(e in t)n.push(e+\"=\"+t[e]);Q=n;}return Q}var Q,ee=[null,[],[]];function te(e){return 0==e%4&&(0!=e%100||0==e%400)}var ne=[31,29,31,30,31,30,31,31,30,31,30,31],re=[31,28,31,30,31,30,31,31,30,31,30,31];function oe(e,t,n,r){function o(e,t,n){for(e=\"number\"==typeof e?e.toString():e||\"\";e.lengthe?-1:0r-e.getDate())){e.setDate(e.getDate()+t);break}t-=r-e.getDate()+1,e.setDate(1),11>n?e.setMonth(n+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1));}return n=new Date(e.getFullYear()+1,0,4),t=s(new Date(e.getFullYear(),0,4)),n=s(n),0>=a(t,e)?0>=a(n,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}var l=A[r+40>>2>>>0];for(var c in r={Ea:A[r>>2>>>0],Da:A[r+4>>2>>>0],ta:A[r+8>>2>>>0],va:A[r+12>>2>>>0],ua:A[r+16>>2>>>0],ra:A[r+20>>2>>>0],la:A[r+24>>2>>>0],qa:A[r+28>>2>>>0],Ja:A[r+32>>2>>>0],Ca:A[r+36>>2>>>0],Fa:l?D(l):\"\"},n=D(n),l={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"})n=n.replace(new RegExp(c,\"g\"),l[c]);var p=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),d=\"January February March April May June July August September October November December\".split(\" \");for(c in l={\"%a\":function(e){return p[e.la].substring(0,3)},\"%A\":function(e){return p[e.la]},\"%b\":function(e){return d[e.ua].substring(0,3)},\"%B\":function(e){return d[e.ua]},\"%C\":function(e){return i((e.ra+1900)/100|0,2)},\"%d\":function(e){return i(e.va,2)},\"%e\":function(e){return o(e.va,2,\" \")},\"%g\":function(e){return u(e).toString().substring(2)},\"%G\":function(e){return u(e)},\"%H\":function(e){return i(e.ta,2)},\"%I\":function(e){return 0==(e=e.ta)?e=12:12e.ta?\"AM\":\"PM\"},\"%S\":function(e){return i(e.Ea,2)},\"%t\":function(){return \"\\t\"},\"%u\":function(e){return e.la||7},\"%U\":function(e){return i(Math.floor((e.qa+7-e.la)/7),2)},\"%V\":function(e){var t=Math.floor((e.qa+7-(e.la+6)%7)/7);if(2>=(e.la+371-e.qa-2)%7&&t++,t)53==t&&(4==(n=(e.la+371-e.qa)%7)||3==n&&te(e.ra)||(t=1));else {t=52;var n=(e.la+7-e.qa-1)%7;(4==n||5==n&&te(e.ra%400-1))&&t++;}return i(t,2)},\"%w\":function(e){return e.la},\"%W\":function(e){return i(Math.floor((e.qa+7-(e.la+6)%7)/7),2)},\"%y\":function(e){return (e.ra+1900).toString().substring(2)},\"%Y\":function(e){return e.ra+1900},\"%z\":function(e){var t=0<=(e=e.Ca);return e=Math.abs(e)/60,(t?\"+\":\"-\")+String(\"0000\"+(e/60*100+e%60)).slice(-4)},\"%Z\":function(e){return e.Fa},\"%%\":function(){return \"%\"}},n=n.replace(/%%/g,\"\\0\\0\"),l)n.includes(c)&&(n=n.replace(new RegExp(c,\"g\"),l[c](r)));return c=function(e){var t=Array(C(e)+1);return k(e,t,0,t.length),t}(n=n.replace(/\\0\\0/g,\"%\")),c.length>t?0:(S.set(c,e>>>0),c.length-1)}var ie={a:function(e){return ae(e+24)+24},b:function(e,t,n){throw new X(e).ya(t,n),e},g:function(){return 0},I:function(){},w:function(){},y:function(){},K:function(){return 0},G:function(){},C:function(){},F:function(){},k:function(){},x:function(){},u:function(){},H:function(){},v:function(){},n:function(){},p:function(){V(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\");},o:function(){V(\"To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking\");},l:function(){return Date.now()},L:function(){return !0},M:function(e,t){e=new Date(1e3*(E[e>>>2]+4294967296*A[e+4>>>2])),A[t>>2>>>0]=e.getUTCSeconds(),A[t+4>>2>>>0]=e.getUTCMinutes(),A[t+8>>2>>>0]=e.getUTCHours(),A[t+12>>2>>>0]=e.getUTCDate(),A[t+16>>2>>>0]=e.getUTCMonth(),A[t+20>>2>>>0]=e.getUTCFullYear()-1900,A[t+24>>2>>>0]=e.getUTCDay(),A[t+28>>2>>>0]=(e.getTime()-Date.UTC(e.getUTCFullYear(),0,1,0,0,0,0))/864e5|0;},N:function(e,t){e=new Date(1e3*(E[e>>>2]+4294967296*A[e+4>>>2])),A[t>>2>>>0]=e.getSeconds(),A[t+4>>2>>>0]=e.getMinutes(),A[t+8>>2>>>0]=e.getHours(),A[t+12>>2>>>0]=e.getDate(),A[t+16>>2>>>0]=e.getMonth(),A[t+20>>2>>>0]=e.getFullYear()-1900,A[t+24>>2>>>0]=e.getDay();var n=new Date(e.getFullYear(),0,1);A[t+28>>2>>>0]=(e.getTime()-n.getTime())/864e5|0,A[t+36>>2>>>0]=-60*e.getTimezoneOffset();var r=new Date(e.getFullYear(),6,1).getTimezoneOffset();n=n.getTimezoneOffset(),A[t+32>>2>>>0]=0|(r!=n&&e.getTimezoneOffset()==Math.min(n,r));},O:function(e){var t=new Date(A[e+20>>2>>>0]+1900,A[e+16>>2>>>0],A[e+12>>2>>>0],A[e+8>>2>>>0],A[e+4>>2>>>0],A[e>>2>>>0],0),n=A[e+32>>2>>>0],r=t.getTimezoneOffset(),o=new Date(t.getFullYear(),0,1),i=new Date(t.getFullYear(),6,1).getTimezoneOffset(),a=o.getTimezoneOffset(),s=Math.min(a,i);return 0>n?A[e+32>>2>>>0]=Number(i!=a&&s==r):0>2>>>0]=t.getDay(),A[e+28>>2>>>0]=(t.getTime()-o.getTime())/864e5|0,A[e>>2>>>0]=t.getSeconds(),A[e+4>>2>>>0]=t.getMinutes(),A[e+8>>2>>>0]=t.getHours(),A[e+12>>2>>>0]=t.getDate(),A[e+16>>2>>>0]=t.getMonth(),t.getTime()/1e3|0},z:function(){return -52},B:function(){},m:function e(t,n,r){e.xa||(e.xa=!0,function(e,t,n){function r(e){return (e=e.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?e[1]:\"GMT\"}var o=(new Date).getFullYear(),i=new Date(o,0,1),a=new Date(o,6,1);o=i.getTimezoneOffset();var s=a.getTimezoneOffset();A[e>>2>>>0]=60*Math.max(o,s),A[t>>2>>>0]=Number(o!=s),e=r(i),t=r(a),e=Y(e),t=Y(t),s>2>>>0]=e,E[n+4>>2>>>0]=t):(E[n>>2>>>0]=t,E[n+4>>2>>>0]=e);}(t,n,r));},d:function(){V(\"\");},t:function(){return 4294901760},h:m?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now(),J:function(e,t,n){O.copyWithin(e>>>0,t>>>0,t+n>>>0);},f:function(e){var t=O.length;if(4294901760<(e>>>=0))return !1;for(var n=1;4>=n;n*=2){var r=t*(1+.2/n);r=Math.min(r,e+100663296);var o=Math;r=Math.max(e,r),o=o.min.call(o,4294901760,r+(65536-r%65536)%65536);e:{try{x.grow(o-T.byteLength+65535>>>16),R();var i=1;break e}catch(e){}i=void 0;}if(i)return !0}return !1},D:function(e,t){var n=0;return Z().forEach((function(r,o){var i=t+n;for(o=E[e+4*o>>2>>>0]=i,i=0;i>0>>>0]=r.charCodeAt(i);S[o>>0>>>0]=0,n+=r.length+1;})),0},E:function(e,t){var n=Z();E[e>>2>>>0]=n.length;var r=0;return n.forEach((function(e){r+=e.length+1;})),E[t>>2>>>0]=r,0},r:function(e){v||(t.onExit&&t.onExit(e),I=!0),f(e,new q(e));},e:function(){return 52},j:function(){return 52},q:function(){return 70},i:function(e,t,n,r){for(var o=0,i=0;i>2>>>0],s=E[t+4>>2>>>0];t+=8;for(var u=0;u>>0],c=ee[e];0===l||10===l?((1===e?w:_)(P(c,0)),c.length=0):c.push(l);}o+=s;}return E[r>>2>>>0]=o,0},s:function e(t,r){e.wa||(e.wa=function(){if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return ()=>(crypto.getRandomValues(e),e[0])}if(m)try{var t=n(760);return ()=>t.randomBytes(1)[0]}catch(e){}return ()=>V(\"randomDevice\")}());for(var o=0;o>0>>>0]=e.wa();return 0},A:oe,c:function(e,t,n,r){return oe(e,t,n,r)}};!function(){function e(e){t.asm=e.exports,x=t.asm.P,R(),N.unshift(t.asm.Q),U--,t.monitorRunDependencies&&t.monitorRunDependencies(U),0==U&&(G&&(e=G,G=null,e()));}function n(t){e(t.instance);}function r(e){return function(){if(!y&&(h||g)){if(\"function\"==typeof fetch&&!j.startsWith(\"file://\"))return fetch(j,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw \"failed to load wasm binary file at '\"+j+\"'\";return e.arrayBuffer()})).catch((function(){return W()}));if(a)return new Promise((function(e,t){a(j,(function(t){e(new Uint8Array(t));}),t);}))}return Promise.resolve().then((function(){return W()}))}().then((function(e){return WebAssembly.instantiate(e,i)})).then((function(e){return e})).then(e,(function(e){_(\"failed to asynchronously prepare wasm: \"+e),V(e);}))}var i={a:ie};if(U++,t.monitorRunDependencies&&t.monitorRunDependencies(U),t.instantiateWasm)try{return t.instantiateWasm(i,e)}catch(e){return _(\"Module.instantiateWasm callback failed with error: \"+e),!1}(y||\"function\"!=typeof WebAssembly.instantiateStreaming||z()||j.startsWith(\"file://\")||m||\"function\"!=typeof fetch?r(n):fetch(j,{credentials:\"same-origin\"}).then((function(e){return WebAssembly.instantiateStreaming(e,i).then(n,(function(e){return _(\"wasm streaming compile failed: \"+e),_(\"falling back to ArrayBuffer instantiation\"),r(n)}))}))).catch(o);}(),t.___wasm_call_ctors=function(){return (t.___wasm_call_ctors=t.asm.Q).apply(null,arguments)},t._OrtInit=function(){return (t._OrtInit=t.asm.R).apply(null,arguments)},t._OrtCreateSessionOptions=function(){return (t._OrtCreateSessionOptions=t.asm.S).apply(null,arguments)},t._OrtAppendExecutionProvider=function(){return (t._OrtAppendExecutionProvider=t.asm.T).apply(null,arguments)},t._OrtAddSessionConfigEntry=function(){return (t._OrtAddSessionConfigEntry=t.asm.U).apply(null,arguments)},t._OrtReleaseSessionOptions=function(){return (t._OrtReleaseSessionOptions=t.asm.V).apply(null,arguments)},t._OrtCreateSession=function(){return (t._OrtCreateSession=t.asm.W).apply(null,arguments)},t._OrtReleaseSession=function(){return (t._OrtReleaseSession=t.asm.X).apply(null,arguments)},t._OrtGetInputCount=function(){return (t._OrtGetInputCount=t.asm.Y).apply(null,arguments)},t._OrtGetOutputCount=function(){return (t._OrtGetOutputCount=t.asm.Z).apply(null,arguments)},t._OrtGetInputName=function(){return (t._OrtGetInputName=t.asm._).apply(null,arguments)},t._OrtGetOutputName=function(){return (t._OrtGetOutputName=t.asm.$).apply(null,arguments)},t._OrtFree=function(){return (t._OrtFree=t.asm.aa).apply(null,arguments)},t._OrtCreateTensor=function(){return (t._OrtCreateTensor=t.asm.ba).apply(null,arguments)},t._OrtGetTensorData=function(){return (t._OrtGetTensorData=t.asm.ca).apply(null,arguments)},t._OrtReleaseTensor=function(){return (t._OrtReleaseTensor=t.asm.da).apply(null,arguments)},t._OrtCreateRunOptions=function(){return (t._OrtCreateRunOptions=t.asm.ea).apply(null,arguments)},t._OrtAddRunConfigEntry=function(){return (t._OrtAddRunConfigEntry=t.asm.fa).apply(null,arguments)},t._OrtReleaseRunOptions=function(){return (t._OrtReleaseRunOptions=t.asm.ga).apply(null,arguments)},t._OrtRun=function(){return (t._OrtRun=t.asm.ha).apply(null,arguments)},t._OrtEndProfiling=function(){return (t._OrtEndProfiling=t.asm.ia).apply(null,arguments)};var ae=t._malloc=function(){return (ae=t._malloc=t.asm.ja).apply(null,arguments)};t._free=function(){return (t._free=t.asm.ka).apply(null,arguments)};var se,ue=t.stackSave=function(){return (ue=t.stackSave=t.asm.ma).apply(null,arguments)},le=t.stackRestore=function(){return (le=t.stackRestore=t.asm.na).apply(null,arguments)},ce=t.stackAlloc=function(){return (ce=t.stackAlloc=t.asm.oa).apply(null,arguments)};function pe(){function e(){if(!se&&(se=!0,t.calledRun=!0,!I)){if(K(N),r(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),t.postRun)for(\"function\"==typeof t.postRun&&(t.postRun=[t.postRun]);t.postRun.length;){var e=t.postRun.shift();F.unshift(e);}K(F);}}if(!(0{e.exports=function(e,t){for(var n=new Array(arguments.length-1),r=0,o=2,i=!0;o{var n=t;n.length=function(e){var t=e.length;if(!t)return 0;for(var n=0;--t%4>1&&\"=\"===e.charAt(t);)++n;return Math.ceil(3*e.length)/4-n};for(var r=new Array(64),o=new Array(123),i=0;i<64;)o[r[i]=i<26?i+65:i<52?i+71:i<62?i-4:i-59|43]=i++;n.encode=function(e,t,n){for(var o,i=null,a=[],s=0,u=0;t>2],o=(3&l)<<4,u=1;break;case 1:a[s++]=r[o|l>>4],o=(15&l)<<2,u=2;break;case 2:a[s++]=r[o|l>>6],a[s++]=r[63&l],u=0;}s>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,a)),s=0);}return u&&(a[s++]=r[o],a[s++]=61,1===u&&(a[s++]=61)),i?(s&&i.push(String.fromCharCode.apply(String,a.slice(0,s))),i.join(\"\")):String.fromCharCode.apply(String,a.slice(0,s))};var a=\"invalid encoding\";n.decode=function(e,t,n){for(var r,i=n,s=0,u=0;u1)break;if(void 0===(l=o[l]))throw Error(a);switch(s){case 0:r=l,s=1;break;case 1:t[n++]=r<<2|(48&l)>>4,r=l,s=2;break;case 2:t[n++]=(15&r)<<4|(60&l)>>2,r=l,s=3;break;case 3:t[n++]=(3&r)<<6|l,s=0;}}if(1===s)throw Error(a);return n-i},n.test=function(e){return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)};},9211:e=>{function t(){this._listeners={};}e.exports=t,t.prototype.on=function(e,t,n){return (this._listeners[e]||(this._listeners[e]=[])).push({fn:t,ctx:n||this}),this},t.prototype.off=function(e,t){if(void 0===e)this._listeners={};else if(void 0===t)this._listeners[e]=[];else for(var n=this._listeners[e],r=0;r{function t(e){return \"undefined\"!=typeof Float32Array?function(){var t=new Float32Array([-0]),n=new Uint8Array(t.buffer),r=128===n[3];function o(e,r,o){t[0]=e,r[o]=n[0],r[o+1]=n[1],r[o+2]=n[2],r[o+3]=n[3];}function i(e,r,o){t[0]=e,r[o]=n[3],r[o+1]=n[2],r[o+2]=n[1],r[o+3]=n[0];}function a(e,r){return n[0]=e[r],n[1]=e[r+1],n[2]=e[r+2],n[3]=e[r+3],t[0]}function s(e,r){return n[3]=e[r],n[2]=e[r+1],n[1]=e[r+2],n[0]=e[r+3],t[0]}e.writeFloatLE=r?o:i,e.writeFloatBE=r?i:o,e.readFloatLE=r?a:s,e.readFloatBE=r?s:a;}():function(){function t(e,t,n,r){var o=t<0?1:0;if(o&&(t=-t),0===t)e(1/t>0?0:2147483648,n,r);else if(isNaN(t))e(2143289344,n,r);else if(t>34028234663852886e22)e((o<<31|2139095040)>>>0,n,r);else if(t<11754943508222875e-54)e((o<<31|Math.round(t/1401298464324817e-60))>>>0,n,r);else {var i=Math.floor(Math.log(t)/Math.LN2);e((o<<31|i+127<<23|8388607&Math.round(t*Math.pow(2,-i)*8388608))>>>0,n,r);}}function a(e,t,n){var r=e(t,n),o=2*(r>>31)+1,i=r>>>23&255,a=8388607&r;return 255===i?a?NaN:o*(1/0):0===i?1401298464324817e-60*o*a:o*Math.pow(2,i-150)*(a+8388608)}e.writeFloatLE=t.bind(null,n),e.writeFloatBE=t.bind(null,r),e.readFloatLE=a.bind(null,o),e.readFloatBE=a.bind(null,i);}(),\"undefined\"!=typeof Float64Array?function(){var t=new Float64Array([-0]),n=new Uint8Array(t.buffer),r=128===n[7];function o(e,r,o){t[0]=e,r[o]=n[0],r[o+1]=n[1],r[o+2]=n[2],r[o+3]=n[3],r[o+4]=n[4],r[o+5]=n[5],r[o+6]=n[6],r[o+7]=n[7];}function i(e,r,o){t[0]=e,r[o]=n[7],r[o+1]=n[6],r[o+2]=n[5],r[o+3]=n[4],r[o+4]=n[3],r[o+5]=n[2],r[o+6]=n[1],r[o+7]=n[0];}function a(e,r){return n[0]=e[r],n[1]=e[r+1],n[2]=e[r+2],n[3]=e[r+3],n[4]=e[r+4],n[5]=e[r+5],n[6]=e[r+6],n[7]=e[r+7],t[0]}function s(e,r){return n[7]=e[r],n[6]=e[r+1],n[5]=e[r+2],n[4]=e[r+3],n[3]=e[r+4],n[2]=e[r+5],n[1]=e[r+6],n[0]=e[r+7],t[0]}e.writeDoubleLE=r?o:i,e.writeDoubleBE=r?i:o,e.readDoubleLE=r?a:s,e.readDoubleBE=r?s:a;}():function(){function t(e,t,n,r,o,i){var a=r<0?1:0;if(a&&(r=-r),0===r)e(0,o,i+t),e(1/r>0?0:2147483648,o,i+n);else if(isNaN(r))e(0,o,i+t),e(2146959360,o,i+n);else if(r>17976931348623157e292)e(0,o,i+t),e((a<<31|2146435072)>>>0,o,i+n);else {var s;if(r<22250738585072014e-324)e((s=r/5e-324)>>>0,o,i+t),e((a<<31|s/4294967296)>>>0,o,i+n);else {var u=Math.floor(Math.log(r)/Math.LN2);1024===u&&(u=1023),e(4503599627370496*(s=r*Math.pow(2,-u))>>>0,o,i+t),e((a<<31|u+1023<<20|1048576*s&1048575)>>>0,o,i+n);}}}function a(e,t,n,r,o){var i=e(r,o+t),a=e(r,o+n),s=2*(a>>31)+1,u=a>>>20&2047,l=4294967296*(1048575&a)+i;return 2047===u?l?NaN:s*(1/0):0===u?5e-324*s*l:s*Math.pow(2,u-1075)*(l+4503599627370496)}e.writeDoubleLE=t.bind(null,n,0,4),e.writeDoubleBE=t.bind(null,r,4,0),e.readDoubleLE=a.bind(null,o,0,4),e.readDoubleBE=a.bind(null,i,4,0);}(),e}function n(e,t,n){t[n]=255&e,t[n+1]=e>>>8&255,t[n+2]=e>>>16&255,t[n+3]=e>>>24;}function r(e,t,n){t[n]=e>>>24,t[n+1]=e>>>16&255,t[n+2]=e>>>8&255,t[n+3]=255&e;}function o(e,t){return (e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}function i(e,t){return (e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}e.exports=t(t);},7199:module=>{function inquire(moduleName){try{var mod=eval(\"quire\".replace(/^/,\"re\"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire;},6662:e=>{e.exports=function(e,t,n){var r=n||8192,o=r>>>1,i=null,a=r;return function(n){if(n<1||n>o)return e(n);a+n>r&&(i=e(r),a=0);var s=t.call(i,a,a+=n);return 7&a&&(a=1+(7|a)),s}};},4997:(e,t)=>{var n=t;n.length=function(e){for(var t=0,n=0,r=0;r191&&r<224?i[a++]=(31&r)<<6|63&e[t++]:r>239&&r<365?(r=((7&r)<<18|(63&e[t++])<<12|(63&e[t++])<<6|63&e[t++])-65536,i[a++]=55296+(r>>10),i[a++]=56320+(1023&r)):i[a++]=(15&r)<<12|(63&e[t++])<<6|63&e[t++],a>8191&&((o||(o=[])).push(String.fromCharCode.apply(String,i)),a=0);return o?(a&&o.push(String.fromCharCode.apply(String,i.slice(0,a))),o.join(\"\")):String.fromCharCode.apply(String,i.slice(0,a))},n.write=function(e,t,n){for(var r,o,i=n,a=0;a>6|192,t[n++]=63&r|128):55296==(64512&r)&&56320==(64512&(o=e.charCodeAt(a+1)))?(r=65536+((1023&r)<<10)+(1023&o),++a,t[n++]=r>>18|240,t[n++]=r>>12&63|128,t[n++]=r>>6&63|128,t[n++]=63&r|128):(t[n++]=r>>12|224,t[n++]=r>>6&63|128,t[n++]=63&r|128);return n-i};},3442:(e,t)=>{t.__esModule=!0;var n=function(){function e(t){if(!t)throw new TypeError(\"Invalid argument; `value` has no value.\");this.value=e.EMPTY,t&&e.isGuid(t)&&(this.value=t);}return e.isGuid=function(t){var n=t.toString();return t&&(t instanceof e||e.validator.test(n))},e.create=function(){return new e([e.gen(2),e.gen(1),e.gen(1),e.gen(1),e.gen(3)].join(\"-\"))},e.createEmpty=function(){return new e(\"emptyguid\")},e.parse=function(t){return new e(t)},e.raw=function(){return [e.gen(2),e.gen(1),e.gen(1),e.gen(1),e.gen(3)].join(\"-\")},e.gen=function(e){for(var t=\"\",n=0;n{e.exports=n;var t=null;try{t=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports;}catch(e){}function n(e,t,n){this.low=0|e,this.high=0|t,this.unsigned=!!n;}function r(e){return !0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,\"__isLong__\",{value:!0}),n.isLong=r;var o={},i={};function a(e,t){var n,r,a;return t?(a=0<=(e>>>=0)&&e<256)&&(r=i[e])?r:(n=u(e,(0|e)<0?-1:0,!0),a&&(i[e]=n),n):(a=-128<=(e|=0)&&e<128)&&(r=o[e])?r:(n=u(e,e<0?-1:0,!1),a&&(o[e]=n),n)}function s(e,t){if(isNaN(e))return t?b:m;if(t){if(e<0)return b;if(e>=f)return x}else {if(e<=-h)return T;if(e+1>=h)return v}return e<0?s(-e,t).neg():u(e%d|0,e/d|0,t)}function u(e,t,r){return new n(e,t,r)}n.fromInt=a,n.fromNumber=s,n.fromBits=u;var l=Math.pow;function c(e,t,n){if(0===e.length)throw Error(\"empty string\");if(\"NaN\"===e||\"Infinity\"===e||\"+Infinity\"===e||\"-Infinity\"===e)return m;if(\"number\"==typeof t?(n=t,t=!1):t=!!t,(n=n||10)<2||360)throw Error(\"interior hyphen\");if(0===r)return c(e.substring(1),t,n).neg();for(var o=s(l(n,8)),i=m,a=0;a>>0:this.low},S.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},S.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((i=u).isZero())return c+a;for(;c.length<6;)c=\"0\"+c;a=\"\"+c+a;}},S.getHighBits=function(){return this.high},S.getHighBitsUnsigned=function(){return this.high>>>0},S.getLowBits=function(){return this.low},S.getLowBitsUnsigned=function(){return this.low>>>0},S.getNumBitsAbs=function(){if(this.isNegative())return this.eq(T)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},S.isOdd=function(){return 1==(1&this.low)},S.isEven=function(){return 0==(1&this.low)},S.equals=function(e){return r(e)||(e=p(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&this.high===e.high&&this.low===e.low},S.eq=S.equals,S.notEquals=function(e){return !this.eq(e)},S.neq=S.notEquals,S.ne=S.notEquals,S.lessThan=function(e){return this.comp(e)<0},S.lt=S.lessThan,S.lessThanOrEqual=function(e){return this.comp(e)<=0},S.lte=S.lessThanOrEqual,S.le=S.lessThanOrEqual,S.greaterThan=function(e){return this.comp(e)>0},S.gt=S.greaterThan,S.greaterThanOrEqual=function(e){return this.comp(e)>=0},S.gte=S.greaterThanOrEqual,S.ge=S.greaterThanOrEqual,S.compare=function(e){if(r(e)||(e=p(e)),this.eq(e))return 0;var t=this.isNegative(),n=e.isNegative();return t&&!n?-1:!t&&n?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},S.comp=S.compare,S.negate=function(){return !this.unsigned&&this.eq(T)?T:this.not().add(y)},S.neg=S.negate,S.add=function(e){r(e)||(e=p(e));var t=this.high>>>16,n=65535&this.high,o=this.low>>>16,i=65535&this.low,a=e.high>>>16,s=65535&e.high,l=e.low>>>16,c=0,d=0,f=0,h=0;return f+=(h+=i+(65535&e.low))>>>16,d+=(f+=o+l)>>>16,c+=(d+=n+s)>>>16,c+=t+a,u((f&=65535)<<16|(h&=65535),(c&=65535)<<16|(d&=65535),this.unsigned)},S.subtract=function(e){return r(e)||(e=p(e)),this.add(e.neg())},S.sub=S.subtract,S.multiply=function(e){if(this.isZero())return m;if(r(e)||(e=p(e)),t)return u(t.mul(this.low,this.high,e.low,e.high),t.get_high(),this.unsigned);if(e.isZero())return m;if(this.eq(T))return e.isOdd()?T:m;if(e.eq(T))return this.isOdd()?T:m;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(g)&&e.lt(g))return s(this.toNumber()*e.toNumber(),this.unsigned);var n=this.high>>>16,o=65535&this.high,i=this.low>>>16,a=65535&this.low,l=e.high>>>16,c=65535&e.high,d=e.low>>>16,f=65535&e.low,h=0,b=0,y=0,w=0;return y+=(w+=a*f)>>>16,b+=(y+=i*f)>>>16,y&=65535,b+=(y+=a*d)>>>16,h+=(b+=o*f)>>>16,b&=65535,h+=(b+=i*d)>>>16,b&=65535,h+=(b+=a*c)>>>16,h+=n*f+o*d+i*c+a*l,u((y&=65535)<<16|(w&=65535),(h&=65535)<<16|(b&=65535),this.unsigned)},S.mul=S.multiply,S.divide=function(e){if(r(e)||(e=p(e)),e.isZero())throw Error(\"division by zero\");var n,o,i;if(t)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?u((this.unsigned?t.div_u:t.div_s)(this.low,this.high,e.low,e.high),t.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?b:m;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return b;if(e.gt(this.shru(1)))return w;i=b;}else {if(this.eq(T))return e.eq(y)||e.eq(_)?T:e.eq(T)?y:(n=this.shr(1).div(e).shl(1)).eq(m)?e.isNegative()?y:_:(o=this.sub(e.mul(n)),i=n.add(o.div(e)));if(e.eq(T))return this.unsigned?b:m;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();i=m;}for(o=this;o.gte(e);){n=Math.max(1,Math.floor(o.toNumber()/e.toNumber()));for(var a=Math.ceil(Math.log(n)/Math.LN2),c=a<=48?1:l(2,a-48),d=s(n),f=d.mul(e);f.isNegative()||f.gt(o);)f=(d=s(n-=c,this.unsigned)).mul(e);d.isZero()&&(d=y),i=i.add(d),o=o.sub(f);}return i},S.div=S.divide,S.modulo=function(e){return r(e)||(e=p(e)),t?u((this.unsigned?t.rem_u:t.rem_s)(this.low,this.high,e.low,e.high),t.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},S.mod=S.modulo,S.rem=S.modulo,S.not=function(){return u(~this.low,~this.high,this.unsigned)},S.and=function(e){return r(e)||(e=p(e)),u(this.low&e.low,this.high&e.high,this.unsigned)},S.or=function(e){return r(e)||(e=p(e)),u(this.low|e.low,this.high|e.high,this.unsigned)},S.xor=function(e){return r(e)||(e=p(e)),u(this.low^e.low,this.high^e.high,this.unsigned)},S.shiftLeft=function(e){return r(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?u(this.low<>>32-e,this.unsigned):u(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):u(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},S.shr=S.shiftRight,S.shiftRightUnsigned=function(e){if(r(e)&&(e=e.toInt()),0==(e&=63))return this;var t=this.high;return e<32?u(this.low>>>e|t<<32-e,t>>>e,this.unsigned):u(32===e?t:t>>>e-32,0,this.unsigned)},S.shru=S.shiftRightUnsigned,S.shr_u=S.shiftRightUnsigned,S.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},S.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},S.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},S.toBytesLE=function(){var e=this.high,t=this.low;return [255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},S.toBytesBE=function(){var e=this.high,t=this.low;return [e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)};},1446:(e,t,n)=>{var r,o,i,a=n(2100),s=a.Reader,u=a.Writer,l=a.util,c=a.roots.default||(a.roots.default={});c.onnx=((i={}).Version=(r={},(o=Object.create(r))[r[0]=\"_START_VERSION\"]=0,o[r[1]=\"IR_VERSION_2017_10_10\"]=1,o[r[2]=\"IR_VERSION_2017_10_30\"]=2,o[r[3]=\"IR_VERSION_2017_11_3\"]=3,o[r[4]=\"IR_VERSION_2019_1_22\"]=4,o[r[5]=\"IR_VERSION\"]=5,o),i.AttributeProto=function(){function e(e){if(this.floats=[],this.ints=[],this.strings=[],this.tensors=[],this.graphs=[],e)for(var t=Object.keys(e),n=0;n>>3){case 1:r.name=e.string();break;case 21:r.refAttrName=e.string();break;case 13:r.docString=e.string();break;case 20:r.type=e.int32();break;case 2:r.f=e.float();break;case 3:r.i=e.int64();break;case 4:r.s=e.bytes();break;case 5:r.t=c.onnx.TensorProto.decode(e,e.uint32());break;case 6:r.g=c.onnx.GraphProto.decode(e,e.uint32());break;case 7:if(r.floats&&r.floats.length||(r.floats=[]),2==(7&o))for(var i=e.uint32()+e.pos;e.pos>>0,e.i.high>>>0).toNumber())),null!=e.s&&(\"string\"==typeof e.s?l.base64.decode(e.s,t.s=l.newBuffer(l.base64.length(e.s)),0):e.s.length&&(t.s=e.s)),null!=e.t){if(\"object\"!=typeof e.t)throw TypeError(\".onnx.AttributeProto.t: object expected\");t.t=c.onnx.TensorProto.fromObject(e.t);}if(null!=e.g){if(\"object\"!=typeof e.g)throw TypeError(\".onnx.AttributeProto.g: object expected\");t.g=c.onnx.GraphProto.fromObject(e.g);}if(e.floats){if(!Array.isArray(e.floats))throw TypeError(\".onnx.AttributeProto.floats: array expected\");t.floats=[];for(var n=0;n>>0,e.ints[n].high>>>0).toNumber());}if(e.strings){if(!Array.isArray(e.strings))throw TypeError(\".onnx.AttributeProto.strings: array expected\");for(t.strings=[],n=0;n>>0,e.i.high>>>0).toNumber():e.i),null!=e.s&&e.hasOwnProperty(\"s\")&&(n.s=t.bytes===String?l.base64.encode(e.s,0,e.s.length):t.bytes===Array?Array.prototype.slice.call(e.s):e.s),null!=e.t&&e.hasOwnProperty(\"t\")&&(n.t=c.onnx.TensorProto.toObject(e.t,t)),null!=e.g&&e.hasOwnProperty(\"g\")&&(n.g=c.onnx.GraphProto.toObject(e.g,t)),e.floats&&e.floats.length){n.floats=[];for(var o=0;o>>0,e.ints[o].high>>>0).toNumber():e.ints[o];if(e.strings&&e.strings.length)for(n.strings=[],o=0;o>>3){case 1:r.name=e.string();break;case 2:r.type=c.onnx.TypeProto.decode(e,e.uint32());break;case 3:r.docString=e.string();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.name&&e.hasOwnProperty(\"name\")&&!l.isString(e.name))return \"name: string expected\";if(null!=e.type&&e.hasOwnProperty(\"type\")){var t=c.onnx.TypeProto.verify(e.type);if(t)return \"type.\"+t}return null!=e.docString&&e.hasOwnProperty(\"docString\")&&!l.isString(e.docString)?\"docString: string expected\":null},e.fromObject=function(e){if(e instanceof c.onnx.ValueInfoProto)return e;var t=new c.onnx.ValueInfoProto;if(null!=e.name&&(t.name=String(e.name)),null!=e.type){if(\"object\"!=typeof e.type)throw TypeError(\".onnx.ValueInfoProto.type: object expected\");t.type=c.onnx.TypeProto.fromObject(e.type);}return null!=e.docString&&(t.docString=String(e.docString)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.name=\"\",n.type=null,n.docString=\"\"),null!=e.name&&e.hasOwnProperty(\"name\")&&(n.name=e.name),null!=e.type&&e.hasOwnProperty(\"type\")&&(n.type=c.onnx.TypeProto.toObject(e.type,t)),null!=e.docString&&e.hasOwnProperty(\"docString\")&&(n.docString=e.docString),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e}(),i.NodeProto=function(){function e(e){if(this.input=[],this.output=[],this.attribute=[],e)for(var t=Object.keys(e),n=0;n>>3){case 1:r.input&&r.input.length||(r.input=[]),r.input.push(e.string());break;case 2:r.output&&r.output.length||(r.output=[]),r.output.push(e.string());break;case 3:r.name=e.string();break;case 4:r.opType=e.string();break;case 7:r.domain=e.string();break;case 5:r.attribute&&r.attribute.length||(r.attribute=[]),r.attribute.push(c.onnx.AttributeProto.decode(e,e.uint32()));break;case 6:r.docString=e.string();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.input&&e.hasOwnProperty(\"input\")){if(!Array.isArray(e.input))return \"input: array expected\";for(var t=0;t>>3){case 1:r.irVersion=e.int64();break;case 8:r.opsetImport&&r.opsetImport.length||(r.opsetImport=[]),r.opsetImport.push(c.onnx.OperatorSetIdProto.decode(e,e.uint32()));break;case 2:r.producerName=e.string();break;case 3:r.producerVersion=e.string();break;case 4:r.domain=e.string();break;case 5:r.modelVersion=e.int64();break;case 6:r.docString=e.string();break;case 7:r.graph=c.onnx.GraphProto.decode(e,e.uint32());break;case 14:r.metadataProps&&r.metadataProps.length||(r.metadataProps=[]),r.metadataProps.push(c.onnx.StringStringEntryProto.decode(e,e.uint32()));break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.irVersion&&e.hasOwnProperty(\"irVersion\")&&!(l.isInteger(e.irVersion)||e.irVersion&&l.isInteger(e.irVersion.low)&&l.isInteger(e.irVersion.high)))return \"irVersion: integer|Long expected\";if(null!=e.opsetImport&&e.hasOwnProperty(\"opsetImport\")){if(!Array.isArray(e.opsetImport))return \"opsetImport: array expected\";for(var t=0;t>>0,e.irVersion.high>>>0).toNumber())),e.opsetImport){if(!Array.isArray(e.opsetImport))throw TypeError(\".onnx.ModelProto.opsetImport: array expected\");t.opsetImport=[];for(var n=0;n>>0,e.modelVersion.high>>>0).toNumber())),null!=e.docString&&(t.docString=String(e.docString)),null!=e.graph){if(\"object\"!=typeof e.graph)throw TypeError(\".onnx.ModelProto.graph: object expected\");t.graph=c.onnx.GraphProto.fromObject(e.graph);}if(e.metadataProps){if(!Array.isArray(e.metadataProps))throw TypeError(\".onnx.ModelProto.metadataProps: array expected\");for(t.metadataProps=[],n=0;n>>0,e.irVersion.high>>>0).toNumber():e.irVersion),null!=e.producerName&&e.hasOwnProperty(\"producerName\")&&(n.producerName=e.producerName),null!=e.producerVersion&&e.hasOwnProperty(\"producerVersion\")&&(n.producerVersion=e.producerVersion),null!=e.domain&&e.hasOwnProperty(\"domain\")&&(n.domain=e.domain),null!=e.modelVersion&&e.hasOwnProperty(\"modelVersion\")&&(\"number\"==typeof e.modelVersion?n.modelVersion=t.longs===String?String(e.modelVersion):e.modelVersion:n.modelVersion=t.longs===String?l.Long.prototype.toString.call(e.modelVersion):t.longs===Number?new l.LongBits(e.modelVersion.low>>>0,e.modelVersion.high>>>0).toNumber():e.modelVersion),null!=e.docString&&e.hasOwnProperty(\"docString\")&&(n.docString=e.docString),null!=e.graph&&e.hasOwnProperty(\"graph\")&&(n.graph=c.onnx.GraphProto.toObject(e.graph,t)),e.opsetImport&&e.opsetImport.length){n.opsetImport=[];for(var o=0;o>>3){case 1:r.key=e.string();break;case 2:r.value=e.string();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){return \"object\"!=typeof e||null===e?\"object expected\":null!=e.key&&e.hasOwnProperty(\"key\")&&!l.isString(e.key)?\"key: string expected\":null!=e.value&&e.hasOwnProperty(\"value\")&&!l.isString(e.value)?\"value: string expected\":null},e.fromObject=function(e){if(e instanceof c.onnx.StringStringEntryProto)return e;var t=new c.onnx.StringStringEntryProto;return null!=e.key&&(t.key=String(e.key)),null!=e.value&&(t.value=String(e.value)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.key=\"\",n.value=\"\"),null!=e.key&&e.hasOwnProperty(\"key\")&&(n.key=e.key),null!=e.value&&e.hasOwnProperty(\"value\")&&(n.value=e.value),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e}(),i.TensorAnnotation=function(){function e(e){if(this.quantParameterTensorNames=[],e)for(var t=Object.keys(e),n=0;n>>3){case 1:r.tensorName=e.string();break;case 2:r.quantParameterTensorNames&&r.quantParameterTensorNames.length||(r.quantParameterTensorNames=[]),r.quantParameterTensorNames.push(c.onnx.StringStringEntryProto.decode(e,e.uint32()));break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.tensorName&&e.hasOwnProperty(\"tensorName\")&&!l.isString(e.tensorName))return \"tensorName: string expected\";if(null!=e.quantParameterTensorNames&&e.hasOwnProperty(\"quantParameterTensorNames\")){if(!Array.isArray(e.quantParameterTensorNames))return \"quantParameterTensorNames: array expected\";for(var t=0;t>>3){case 1:r.node&&r.node.length||(r.node=[]),r.node.push(c.onnx.NodeProto.decode(e,e.uint32()));break;case 2:r.name=e.string();break;case 5:r.initializer&&r.initializer.length||(r.initializer=[]),r.initializer.push(c.onnx.TensorProto.decode(e,e.uint32()));break;case 10:r.docString=e.string();break;case 11:r.input&&r.input.length||(r.input=[]),r.input.push(c.onnx.ValueInfoProto.decode(e,e.uint32()));break;case 12:r.output&&r.output.length||(r.output=[]),r.output.push(c.onnx.ValueInfoProto.decode(e,e.uint32()));break;case 13:r.valueInfo&&r.valueInfo.length||(r.valueInfo=[]),r.valueInfo.push(c.onnx.ValueInfoProto.decode(e,e.uint32()));break;case 14:r.quantizationAnnotation&&r.quantizationAnnotation.length||(r.quantizationAnnotation=[]),r.quantizationAnnotation.push(c.onnx.TensorAnnotation.decode(e,e.uint32()));break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.node&&e.hasOwnProperty(\"node\")){if(!Array.isArray(e.node))return \"node: array expected\";for(var t=0;t>>3){case 1:if(r.dims&&r.dims.length||(r.dims=[]),2==(7&o))for(var i=e.uint32()+e.pos;e.pos>>0,e.dims[n].high>>>0).toNumber());}if(null!=e.dataType&&(t.dataType=0|e.dataType),null!=e.segment){if(\"object\"!=typeof e.segment)throw TypeError(\".onnx.TensorProto.segment: object expected\");t.segment=c.onnx.TensorProto.Segment.fromObject(e.segment);}if(e.floatData){if(!Array.isArray(e.floatData))throw TypeError(\".onnx.TensorProto.floatData: array expected\");for(t.floatData=[],n=0;n>>0,e.int64Data[n].high>>>0).toNumber());}if(null!=e.name&&(t.name=String(e.name)),null!=e.docString&&(t.docString=String(e.docString)),null!=e.rawData&&(\"string\"==typeof e.rawData?l.base64.decode(e.rawData,t.rawData=l.newBuffer(l.base64.length(e.rawData)),0):e.rawData.length&&(t.rawData=e.rawData)),e.externalData){if(!Array.isArray(e.externalData))throw TypeError(\".onnx.TensorProto.externalData: array expected\");for(t.externalData=[],n=0;n>>0,e.uint64Data[n].high>>>0).toNumber(!0));}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.dims=[],n.floatData=[],n.int32Data=[],n.stringData=[],n.int64Data=[],n.doubleData=[],n.uint64Data=[],n.externalData=[]),t.defaults&&(n.dataType=0,n.segment=null,n.name=\"\",t.bytes===String?n.rawData=\"\":(n.rawData=[],t.bytes!==Array&&(n.rawData=l.newBuffer(n.rawData))),n.docString=\"\",n.dataLocation=t.enums===String?\"DEFAULT\":0),e.dims&&e.dims.length){n.dims=[];for(var r=0;r>>0,e.dims[r].high>>>0).toNumber():e.dims[r];}if(null!=e.dataType&&e.hasOwnProperty(\"dataType\")&&(n.dataType=e.dataType),null!=e.segment&&e.hasOwnProperty(\"segment\")&&(n.segment=c.onnx.TensorProto.Segment.toObject(e.segment,t)),e.floatData&&e.floatData.length)for(n.floatData=[],r=0;r>>0,e.int64Data[r].high>>>0).toNumber():e.int64Data[r];if(null!=e.name&&e.hasOwnProperty(\"name\")&&(n.name=e.name),null!=e.rawData&&e.hasOwnProperty(\"rawData\")&&(n.rawData=t.bytes===String?l.base64.encode(e.rawData,0,e.rawData.length):t.bytes===Array?Array.prototype.slice.call(e.rawData):e.rawData),e.doubleData&&e.doubleData.length)for(n.doubleData=[],r=0;r>>0,e.uint64Data[r].high>>>0).toNumber(!0):e.uint64Data[r];if(null!=e.docString&&e.hasOwnProperty(\"docString\")&&(n.docString=e.docString),e.externalData&&e.externalData.length)for(n.externalData=[],r=0;r>>3){case 1:r.begin=e.int64();break;case 2:r.end=e.int64();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){return \"object\"!=typeof e||null===e?\"object expected\":null!=e.begin&&e.hasOwnProperty(\"begin\")&&!(l.isInteger(e.begin)||e.begin&&l.isInteger(e.begin.low)&&l.isInteger(e.begin.high))?\"begin: integer|Long expected\":null!=e.end&&e.hasOwnProperty(\"end\")&&!(l.isInteger(e.end)||e.end&&l.isInteger(e.end.low)&&l.isInteger(e.end.high))?\"end: integer|Long expected\":null},e.fromObject=function(e){if(e instanceof c.onnx.TensorProto.Segment)return e;var t=new c.onnx.TensorProto.Segment;return null!=e.begin&&(l.Long?(t.begin=l.Long.fromValue(e.begin)).unsigned=!1:\"string\"==typeof e.begin?t.begin=parseInt(e.begin,10):\"number\"==typeof e.begin?t.begin=e.begin:\"object\"==typeof e.begin&&(t.begin=new l.LongBits(e.begin.low>>>0,e.begin.high>>>0).toNumber())),null!=e.end&&(l.Long?(t.end=l.Long.fromValue(e.end)).unsigned=!1:\"string\"==typeof e.end?t.end=parseInt(e.end,10):\"number\"==typeof e.end?t.end=e.end:\"object\"==typeof e.end&&(t.end=new l.LongBits(e.end.low>>>0,e.end.high>>>0).toNumber())),t},e.toObject=function(e,t){t||(t={});var n={};if(t.defaults){if(l.Long){var r=new l.Long(0,0,!1);n.begin=t.longs===String?r.toString():t.longs===Number?r.toNumber():r;}else n.begin=t.longs===String?\"0\":0;l.Long?(r=new l.Long(0,0,!1),n.end=t.longs===String?r.toString():t.longs===Number?r.toNumber():r):n.end=t.longs===String?\"0\":0;}return null!=e.begin&&e.hasOwnProperty(\"begin\")&&(\"number\"==typeof e.begin?n.begin=t.longs===String?String(e.begin):e.begin:n.begin=t.longs===String?l.Long.prototype.toString.call(e.begin):t.longs===Number?new l.LongBits(e.begin.low>>>0,e.begin.high>>>0).toNumber():e.begin),null!=e.end&&e.hasOwnProperty(\"end\")&&(\"number\"==typeof e.end?n.end=t.longs===String?String(e.end):e.end:n.end=t.longs===String?l.Long.prototype.toString.call(e.end):t.longs===Number?new l.LongBits(e.end.low>>>0,e.end.high>>>0).toNumber():e.end),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e}(),e.DataLocation=function(){var e={},t=Object.create(e);return t[e[0]=\"DEFAULT\"]=0,t[e[1]=\"EXTERNAL\"]=1,t}(),e}(),i.TensorShapeProto=function(){function e(e){if(this.dim=[],e)for(var t=Object.keys(e),n=0;n>>3==1?(r.dim&&r.dim.length||(r.dim=[]),r.dim.push(c.onnx.TensorShapeProto.Dimension.decode(e,e.uint32()))):e.skipType(7&o);}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.dim&&e.hasOwnProperty(\"dim\")){if(!Array.isArray(e.dim))return \"dim: array expected\";for(var t=0;t>>3){case 1:r.dimValue=e.int64();break;case 2:r.dimParam=e.string();break;case 3:r.denotation=e.string();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";var t={};if(null!=e.dimValue&&e.hasOwnProperty(\"dimValue\")&&(t.value=1,!(l.isInteger(e.dimValue)||e.dimValue&&l.isInteger(e.dimValue.low)&&l.isInteger(e.dimValue.high))))return \"dimValue: integer|Long expected\";if(null!=e.dimParam&&e.hasOwnProperty(\"dimParam\")){if(1===t.value)return \"value: multiple values\";if(t.value=1,!l.isString(e.dimParam))return \"dimParam: string expected\"}return null!=e.denotation&&e.hasOwnProperty(\"denotation\")&&!l.isString(e.denotation)?\"denotation: string expected\":null},e.fromObject=function(e){if(e instanceof c.onnx.TensorShapeProto.Dimension)return e;var t=new c.onnx.TensorShapeProto.Dimension;return null!=e.dimValue&&(l.Long?(t.dimValue=l.Long.fromValue(e.dimValue)).unsigned=!1:\"string\"==typeof e.dimValue?t.dimValue=parseInt(e.dimValue,10):\"number\"==typeof e.dimValue?t.dimValue=e.dimValue:\"object\"==typeof e.dimValue&&(t.dimValue=new l.LongBits(e.dimValue.low>>>0,e.dimValue.high>>>0).toNumber())),null!=e.dimParam&&(t.dimParam=String(e.dimParam)),null!=e.denotation&&(t.denotation=String(e.denotation)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.denotation=\"\"),null!=e.dimValue&&e.hasOwnProperty(\"dimValue\")&&(\"number\"==typeof e.dimValue?n.dimValue=t.longs===String?String(e.dimValue):e.dimValue:n.dimValue=t.longs===String?l.Long.prototype.toString.call(e.dimValue):t.longs===Number?new l.LongBits(e.dimValue.low>>>0,e.dimValue.high>>>0).toNumber():e.dimValue,t.oneofs&&(n.value=\"dimValue\")),null!=e.dimParam&&e.hasOwnProperty(\"dimParam\")&&(n.dimParam=e.dimParam,t.oneofs&&(n.value=\"dimParam\")),null!=e.denotation&&e.hasOwnProperty(\"denotation\")&&(n.denotation=e.denotation),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e}(),e}(),i.TypeProto=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n>>3){case 1:r.tensorType=c.onnx.TypeProto.Tensor.decode(e,e.uint32());break;case 6:r.denotation=e.string();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.tensorType&&e.hasOwnProperty(\"tensorType\")){var t=c.onnx.TypeProto.Tensor.verify(e.tensorType);if(t)return \"tensorType.\"+t}return null!=e.denotation&&e.hasOwnProperty(\"denotation\")&&!l.isString(e.denotation)?\"denotation: string expected\":null},e.fromObject=function(e){if(e instanceof c.onnx.TypeProto)return e;var t=new c.onnx.TypeProto;if(null!=e.tensorType){if(\"object\"!=typeof e.tensorType)throw TypeError(\".onnx.TypeProto.tensorType: object expected\");t.tensorType=c.onnx.TypeProto.Tensor.fromObject(e.tensorType);}return null!=e.denotation&&(t.denotation=String(e.denotation)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.denotation=\"\"),null!=e.tensorType&&e.hasOwnProperty(\"tensorType\")&&(n.tensorType=c.onnx.TypeProto.Tensor.toObject(e.tensorType,t),t.oneofs&&(n.value=\"tensorType\")),null!=e.denotation&&e.hasOwnProperty(\"denotation\")&&(n.denotation=e.denotation),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e.Tensor=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n>>3){case 1:r.elemType=e.int32();break;case 2:r.shape=c.onnx.TensorShapeProto.decode(e,e.uint32());break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){if(\"object\"!=typeof e||null===e)return \"object expected\";if(null!=e.elemType&&e.hasOwnProperty(\"elemType\")&&!l.isInteger(e.elemType))return \"elemType: integer expected\";if(null!=e.shape&&e.hasOwnProperty(\"shape\")){var t=c.onnx.TensorShapeProto.verify(e.shape);if(t)return \"shape.\"+t}return null},e.fromObject=function(e){if(e instanceof c.onnx.TypeProto.Tensor)return e;var t=new c.onnx.TypeProto.Tensor;if(null!=e.elemType&&(t.elemType=0|e.elemType),null!=e.shape){if(\"object\"!=typeof e.shape)throw TypeError(\".onnx.TypeProto.Tensor.shape: object expected\");t.shape=c.onnx.TensorShapeProto.fromObject(e.shape);}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.elemType=0,n.shape=null),null!=e.elemType&&e.hasOwnProperty(\"elemType\")&&(n.elemType=e.elemType),null!=e.shape&&e.hasOwnProperty(\"shape\")&&(n.shape=c.onnx.TensorShapeProto.toObject(e.shape,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e}(),e}(),i.OperatorSetIdProto=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n>>3){case 1:r.domain=e.string();break;case 2:r.version=e.int64();break;default:e.skipType(7&o);}}return r},e.decodeDelimited=function(e){return e instanceof s||(e=new s(e)),this.decode(e,e.uint32())},e.verify=function(e){return \"object\"!=typeof e||null===e?\"object expected\":null!=e.domain&&e.hasOwnProperty(\"domain\")&&!l.isString(e.domain)?\"domain: string expected\":null!=e.version&&e.hasOwnProperty(\"version\")&&!(l.isInteger(e.version)||e.version&&l.isInteger(e.version.low)&&l.isInteger(e.version.high))?\"version: integer|Long expected\":null},e.fromObject=function(e){if(e instanceof c.onnx.OperatorSetIdProto)return e;var t=new c.onnx.OperatorSetIdProto;return null!=e.domain&&(t.domain=String(e.domain)),null!=e.version&&(l.Long?(t.version=l.Long.fromValue(e.version)).unsigned=!1:\"string\"==typeof e.version?t.version=parseInt(e.version,10):\"number\"==typeof e.version?t.version=e.version:\"object\"==typeof e.version&&(t.version=new l.LongBits(e.version.low>>>0,e.version.high>>>0).toNumber())),t},e.toObject=function(e,t){t||(t={});var n={};if(t.defaults)if(n.domain=\"\",l.Long){var r=new l.Long(0,0,!1);n.version=t.longs===String?r.toString():t.longs===Number?r.toNumber():r;}else n.version=t.longs===String?\"0\":0;return null!=e.domain&&e.hasOwnProperty(\"domain\")&&(n.domain=e.domain),null!=e.version&&e.hasOwnProperty(\"version\")&&(\"number\"==typeof e.version?n.version=t.longs===String?String(e.version):e.version:n.version=t.longs===String?l.Long.prototype.toString.call(e.version):t.longs===Number?new l.LongBits(e.version.low>>>0,e.version.high>>>0).toNumber():e.version),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,a.util.toJSONOptions)},e}(),i),e.exports=c;},2100:(e,t,n)=>{e.exports=n(9482);},9482:(e,t,n)=>{var r=t;function o(){r.util._configure(),r.Writer._configure(r.BufferWriter),r.Reader._configure(r.BufferReader);}r.build=\"minimal\",r.Writer=n(1173),r.BufferWriter=n(3155),r.Reader=n(1408),r.BufferReader=n(593),r.util=n(9693),r.rpc=n(5994),r.roots=n(5054),r.configure=o,o();},1408:(e,t,n)=>{e.exports=u;var r,o=n(9693),i=o.LongBits,a=o.utf8;function s(e,t){return RangeError(\"index out of range: \"+e.pos+\" + \"+(t||1)+\" > \"+e.len)}function u(e){this.buf=e,this.pos=0,this.len=e.length;}var l,c=\"undefined\"!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new u(e);throw Error(\"illegal buffer\")}:function(e){if(Array.isArray(e))return new u(e);throw Error(\"illegal buffer\")},p=function(){return o.Buffer?function(e){return (u.create=function(e){return o.Buffer.isBuffer(e)?new r(e):c(e)})(e)}:c};function d(){var e=new i(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw s(this);if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(127&this.buf[this.pos++])<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf[this.pos])<<7*t)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(127&this.buf[this.pos])<<28)>>>0,e.hi=(e.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw s(this);if(e.hi=(e.hi|(127&this.buf[this.pos])<<7*t+3)>>>0,this.buf[this.pos++]<128)return e}throw Error(\"invalid varint encoding\")}function f(e,t){return (e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}function h(){if(this.pos+8>this.len)throw s(this,8);return new i(f(this.buf,this.pos+=4),f(this.buf,this.pos+=4))}u.create=p(),u.prototype._slice=o.Array.prototype.subarray||o.Array.prototype.slice,u.prototype.uint32=(l=4294967295,function(){if(l=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)return l;if(l=(l|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128)return l;if((this.pos+=5)>this.len)throw this.pos=this.len,s(this,10);return l}),u.prototype.int32=function(){return 0|this.uint32()},u.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},u.prototype.bool=function(){return 0!==this.uint32()},u.prototype.fixed32=function(){if(this.pos+4>this.len)throw s(this,4);return f(this.buf,this.pos+=4)},u.prototype.sfixed32=function(){if(this.pos+4>this.len)throw s(this,4);return 0|f(this.buf,this.pos+=4)},u.prototype.float=function(){if(this.pos+4>this.len)throw s(this,4);var e=o.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},u.prototype.double=function(){if(this.pos+8>this.len)throw s(this,4);var e=o.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},u.prototype.bytes=function(){var e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw s(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,n):t===n?new this.buf.constructor(0):this._slice.call(this.buf,t,n)},u.prototype.string=function(){var e=this.bytes();return a.read(e,0,e.length)},u.prototype.skip=function(e){if(\"number\"==typeof e){if(this.pos+e>this.len)throw s(this,e);this.pos+=e;}else do{if(this.pos>=this.len)throw s(this)}while(128&this.buf[this.pos++]);return this},u.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(\"invalid wire type \"+e+\" at offset \"+this.pos)}return this},u._configure=function(e){r=e,u.create=p(),r._configure();var t=o.Long?\"toLong\":\"toNumber\";o.merge(u.prototype,{int64:function(){return d.call(this)[t](!1)},uint64:function(){return d.call(this)[t](!0)},sint64:function(){return d.call(this).zzDecode()[t](!1)},fixed64:function(){return h.call(this)[t](!0)},sfixed64:function(){return h.call(this)[t](!1)}});};},593:(e,t,n)=>{e.exports=i;var r=n(1408);(i.prototype=Object.create(r.prototype)).constructor=i;var o=n(9693);function i(e){r.call(this,e);}i._configure=function(){o.Buffer&&(i.prototype._slice=o.Buffer.prototype.slice);},i.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString(\"utf-8\",this.pos,this.pos=Math.min(this.pos+e,this.len))},i._configure();},5054:e=>{e.exports={};},5994:(e,t,n)=>{t.Service=n(7948);},7948:(e,t,n)=>{e.exports=o;var r=n(9693);function o(e,t,n){if(\"function\"!=typeof e)throw TypeError(\"rpcImpl must be a function\");r.EventEmitter.call(this),this.rpcImpl=e,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(n);}(o.prototype=Object.create(r.EventEmitter.prototype)).constructor=o,o.prototype.rpcCall=function e(t,n,o,i,a){if(!i)throw TypeError(\"request must be specified\");var s=this;if(!a)return r.asPromise(e,s,t,n,o,i);if(s.rpcImpl)try{return s.rpcImpl(t,n[s.requestDelimited?\"encodeDelimited\":\"encode\"](i).finish(),(function(e,n){if(e)return s.emit(\"error\",e,t),a(e);if(null!==n){if(!(n instanceof o))try{n=o[s.responseDelimited?\"decodeDelimited\":\"decode\"](n);}catch(e){return s.emit(\"error\",e,t),a(e)}return s.emit(\"data\",n,t),a(null,n)}s.end(!0);}))}catch(e){return s.emit(\"error\",e,t),void setTimeout((function(){a(e);}),0)}else setTimeout((function(){a(Error(\"already ended\"));}),0);},o.prototype.end=function(e){return this.rpcImpl&&(e||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit(\"end\").off()),this};},1945:(e,t,n)=>{e.exports=o;var r=n(9693);function o(e,t){this.lo=e>>>0,this.hi=t>>>0;}var i=o.zero=new o(0,0);i.toNumber=function(){return 0},i.zzEncode=i.zzDecode=function(){return this},i.length=function(){return 1};var a=o.zeroHash=\"\\0\\0\\0\\0\\0\\0\\0\\0\";o.fromNumber=function(e){if(0===e)return i;var t=e<0;t&&(e=-e);var n=e>>>0,r=(e-n)/4294967296>>>0;return t&&(r=~r>>>0,n=~n>>>0,++n>4294967295&&(n=0,++r>4294967295&&(r=0))),new o(n,r)},o.from=function(e){if(\"number\"==typeof e)return o.fromNumber(e);if(r.isString(e)){if(!r.Long)return o.fromNumber(parseInt(e,10));e=r.Long.fromString(e);}return e.low||e.high?new o(e.low>>>0,e.high>>>0):i},o.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,n=~this.hi>>>0;return t||(n=n+1>>>0),-(t+4294967296*n)}return this.lo+4294967296*this.hi},o.prototype.toLong=function(e){return r.Long?new r.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var s=String.prototype.charCodeAt;o.fromHash=function(e){return e===a?i:new o((s.call(e,0)|s.call(e,1)<<8|s.call(e,2)<<16|s.call(e,3)<<24)>>>0,(s.call(e,4)|s.call(e,5)<<8|s.call(e,6)<<16|s.call(e,7)<<24)>>>0)},o.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},o.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},o.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},o.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10};},9693:function(e,t,n){var r=t;function o(e,t,n){for(var r=Object.keys(t),o=0;o0)},r.Buffer=function(){try{var e=r.inquire(\"buffer\").Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),r._Buffer_from=null,r._Buffer_allocUnsafe=null,r.newBuffer=function(e){return \"number\"==typeof e?r.Buffer?r._Buffer_allocUnsafe(e):new r.Array(e):r.Buffer?r._Buffer_from(e):\"undefined\"==typeof Uint8Array?e:new Uint8Array(e)},r.Array=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,r.Long=r.global.dcodeIO&&r.global.dcodeIO.Long||r.global.Long||r.inquire(\"long\"),r.key2Re=/^true|false|0|1$/,r.key32Re=/^-?(?:0|[1-9][0-9]*)$/,r.key64Re=/^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,r.longToHash=function(e){return e?r.LongBits.from(e).toHash():r.LongBits.zeroHash},r.longFromHash=function(e,t){var n=r.LongBits.fromHash(e);return r.Long?r.Long.fromBits(n.lo,n.hi,t):n.toNumber(Boolean(t))},r.merge=o,r.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},r.newError=i,r.ProtocolError=i(\"ProtocolError\"),r.oneOfGetter=function(e){for(var t={},n=0;n-1;--n)if(1===t[e[n]]&&void 0!==this[e[n]]&&null!==this[e[n]])return e[n]}},r.oneOfSetter=function(e){return function(t){for(var n=0;n{e.exports=p;var r,o=n(9693),i=o.LongBits,a=o.base64,s=o.utf8;function u(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n;}function l(){}function c(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states;}function p(){this.len=0,this.head=new u(l,0,0),this.tail=this.head,this.states=null;}var d=function(){return o.Buffer?function(){return (p.create=function(){return new r})()}:function(){return new p}};function f(e,t,n){t[n]=255&e;}function h(e,t){this.len=e,this.next=void 0,this.val=t;}function g(e,t,n){for(;e.hi;)t[n++]=127&e.lo|128,e.lo=(e.lo>>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[n++]=127&e.lo|128,e.lo=e.lo>>>7;t[n++]=e.lo;}function m(e,t,n){t[n]=255&e,t[n+1]=e>>>8&255,t[n+2]=e>>>16&255,t[n+3]=e>>>24;}p.create=d(),p.alloc=function(e){return new o.Array(e)},o.Array!==Array&&(p.alloc=o.pool(p.alloc,o.Array.prototype.subarray)),p.prototype._push=function(e,t,n){return this.tail=this.tail.next=new u(e,t,n),this.len+=t,this},h.prototype=Object.create(u.prototype),h.prototype.fn=function(e,t,n){for(;e>127;)t[n++]=127&e|128,e>>>=7;t[n]=e;},p.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new h((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},p.prototype.int32=function(e){return e<0?this._push(g,10,i.fromNumber(e)):this.uint32(e)},p.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},p.prototype.uint64=function(e){var t=i.from(e);return this._push(g,t.length(),t)},p.prototype.int64=p.prototype.uint64,p.prototype.sint64=function(e){var t=i.from(e).zzEncode();return this._push(g,t.length(),t)},p.prototype.bool=function(e){return this._push(f,1,e?1:0)},p.prototype.fixed32=function(e){return this._push(m,4,e>>>0)},p.prototype.sfixed32=p.prototype.fixed32,p.prototype.fixed64=function(e){var t=i.from(e);return this._push(m,4,t.lo)._push(m,4,t.hi)},p.prototype.sfixed64=p.prototype.fixed64,p.prototype.float=function(e){return this._push(o.float.writeFloatLE,4,e)},p.prototype.double=function(e){return this._push(o.float.writeDoubleLE,8,e)};var b=o.Array.prototype.set?function(e,t,n){t.set(e,n);}:function(e,t,n){for(var r=0;r>>0;if(!t)return this._push(f,1,0);if(o.isString(e)){var n=p.alloc(t=a.length(e));a.decode(e,n,0),e=n;}return this.uint32(t)._push(b,t,e)},p.prototype.string=function(e){var t=s.length(e);return t?this.uint32(t)._push(s.write,t,e):this._push(f,1,0)},p.prototype.fork=function(){return this.states=new c(this),this.head=this.tail=new u(l,0,0),this.len=0,this},p.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new u(l,0,0),this.len=0),this},p.prototype.ldelim=function(){var e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=e.next,this.tail=t,this.len+=n),this},p.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),n=0;e;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t},p._configure=function(e){r=e,p.create=d(),r._configure();};},3155:(e,t,n)=>{e.exports=i;var r=n(1173);(i.prototype=Object.create(r.prototype)).constructor=i;var o=n(9693);function i(){r.call(this);}function a(e,t,n){e.length<40?o.utf8.write(e,t,n):t.utf8Write?t.utf8Write(e,n):t.write(e,n);}i._configure=function(){i.alloc=o._Buffer_allocUnsafe,i.writeBytesBuffer=o.Buffer&&o.Buffer.prototype instanceof Uint8Array&&\"set\"===o.Buffer.prototype.set.name?function(e,t,n){t.set(e,n);}:function(e,t,n){if(e.copy)e.copy(t,n,0,e.length);else for(var r=0;r>>0;return this.uint32(t),t&&this._push(i.writeBytesBuffer,t,e),this},i.prototype.string=function(e){var t=o.Buffer.byteLength(e);return this.uint32(t),t&&this._push(a,t,e),this},i._configure();},4154:e=>{e.exports='\"use strict\";var e={},t=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node;if(t){var r=require(\"worker_threads\"),a=r.parentPort;a.on(\"message\",(e=>onmessage({data:e})));var o=require(\"fs\");Object.assign(global,{globalThis:global,require:require,Module:e,location:{href:__filename},Worker:r.Worker,importScripts:function(e){(0,eval)(o.readFileSync(e,\"utf8\"))},postMessage:function(e){a.postMessage(e)},performance:global.performance||{now:function(){return Date.now()}}})}var s=!1,n=[],i=function(){var e=Array.prototype.slice.call(arguments).join(\" \");t?o.writeSync(2,e+\"\\\\n\"):console.error(e)};globalThis.alert=function(){var t=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:t,threadId:e._pthread_self()})},e.instantiateWasm=(t,r)=>{var a=new WebAssembly.Instance(e.wasmModule,t);return r(a),e.wasmModule=null,a.exports},globalThis.onunhandledrejection=e=>{throw e.reason??e},globalThis.onmessage=t=>{try{if(\"load\"===t.data.cmd){if(e.wasmModule=t.data.wasmModule,e.wasmMemory=t.data.wasmMemory,e.buffer=e.wasmMemory.buffer,e.ENVIRONMENT_IS_PTHREAD=!0,\"string\"==typeof t.data.urlOrBlob)importScripts(t.data.urlOrBlob);else{var r=URL.createObjectURL(t.data.urlOrBlob);importScripts(r),URL.revokeObjectURL(r)}ortWasmThreaded(e).then((function(t){e=t}))}else if(\"run\"===t.data.cmd){e.__performance_now_clock_drift=performance.now()-t.data.time,e.__emscripten_thread_init(t.data.pthread_ptr,0,0,1),e.establishStackSpace(),e.PThread.receiveObjectTransfer(t.data),e.PThread.threadInitTLS(),s||(n.forEach((t=>{e.executeNotifiedProxyingQueue(t)})),n=[],s=!0);try{e.invokeEntryPoint(t.data.start_routine,t.data.arg)}catch(t){if(\"unwind\"!=t){if(!(t instanceof e.ExitStatus))throw t;e.keepRuntimeAlive()||e.__emscripten_thread_exit(t.status)}}}else\"cancel\"===t.data.cmd?e._pthread_self()&&e.__emscripten_thread_exit(-1):\"setimmediate\"===t.data.target||(\"processProxyingQueue\"===t.data.cmd?s?e.executeNotifiedProxyingQueue(t.data.queue):n.push(t.data.queue):(i(\"worker.js received unknown command \"+t.data.cmd),i(t.data)))}catch(t){throw i(\"worker.js onmessage() captured an uncaught exception: \"+t),t&&t.stack&&i(t.stack),e.__emscripten_thread_crashed&&e.__emscripten_thread_crashed(),t}};\\n';},7067:()=>{},1296:()=>{},760:()=>{},1384:()=>{},3993:()=>{},908:()=>{},6953:()=>{},9925:()=>{},2806:()=>{},6449:()=>{},2850:()=>{},5381:()=>{},5686:(e,t,n)=>{n.r(t),n.d(t,{flatbuffers:()=>r});var r={};r.Offset,r.Table,r.SIZEOF_SHORT=2,r.SIZEOF_INT=4,r.FILE_IDENTIFIER_LENGTH=4,r.SIZE_PREFIX_LENGTH=4,r.Encoding={UTF8_BYTES:1,UTF16_STRING:2},r.int32=new Int32Array(2),r.float32=new Float32Array(r.int32.buffer),r.float64=new Float64Array(r.int32.buffer),r.isLittleEndian=1===new Uint16Array(new Uint8Array([1,0]).buffer)[0],r.Long=function(e,t){this.low=0|e,this.high=0|t;},r.Long.create=function(e,t){return 0==e&&0==t?r.Long.ZERO:new r.Long(e,t)},r.Long.prototype.toFloat64=function(){return (this.low>>>0)+4294967296*this.high},r.Long.prototype.equals=function(e){return this.low==e.low&&this.high==e.high},r.Long.ZERO=new r.Long(0,0),r.Builder=function(e){if(e)t=e;else var t=1024;this.bb=r.ByteBuffer.allocate(t),this.space=t,this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1;},r.Builder.prototype.clear=function(){this.bb.clear(),this.space=this.bb.capacity(),this.minalign=1,this.vtable=null,this.vtable_in_use=0,this.isNested=!1,this.object_start=0,this.vtables=[],this.vector_num_elems=0,this.force_defaults=!1;},r.Builder.prototype.forceDefaults=function(e){this.force_defaults=e;},r.Builder.prototype.dataBuffer=function(){return this.bb},r.Builder.prototype.asUint8Array=function(){return this.bb.bytes().subarray(this.bb.position(),this.bb.position()+this.offset())},r.Builder.prototype.prep=function(e,t){e>this.minalign&&(this.minalign=e);for(var n=1+~(this.bb.capacity()-this.space+t)&e-1;this.space=0&&0==this.vtable[t];t--);for(var n=t+1;t>=0;t--)this.addInt16(0!=this.vtable[t]?e-this.vtable[t]:0);this.addInt16(e-this.object_start);var o=(n+2)*r.SIZEOF_SHORT;this.addInt16(o);var i=0,a=this.space;e:for(t=0;t=0;a--)this.writeInt8(i.charCodeAt(a));}this.prep(this.minalign,r.SIZEOF_INT+o),this.addOffset(e),o&&this.addInt32(this.bb.capacity()-this.space),this.bb.setPosition(this.space);},r.Builder.prototype.finishSizePrefixed=function(e,t){this.finish(e,t,!0);},r.Builder.prototype.requiredField=function(e,t){var n=this.bb.capacity()-e,r=n-this.bb.readInt32(n);if(0==this.bb.readInt16(r+t))throw new Error(\"FlatBuffers: field \"+t+\" must be set\")},r.Builder.prototype.startVector=function(e,t,n){this.notNested(),this.vector_num_elems=t,this.prep(r.SIZEOF_INT,e*t),this.prep(n,e*t);},r.Builder.prototype.endVector=function(){return this.writeInt32(this.vector_num_elems),this.offset()},r.Builder.prototype.createString=function(e){if(e instanceof Uint8Array)var t=e;else {t=[];for(var n=0;n=56320?o:(o<<10)+e.charCodeAt(n++)+-56613888)<128?t.push(r):(r<2048?t.push(r>>6&31|192):(r<65536?t.push(r>>12&15|224):t.push(r>>18&7|240,r>>12&63|128),t.push(r>>6&63|128)),t.push(63&r|128));}}this.addInt8(0),this.startVector(1,t.length,1),this.bb.setPosition(this.space-=t.length),n=0;for(var i=this.space,a=this.bb.bytes();n>24},r.ByteBuffer.prototype.readUint8=function(e){return this.bytes_[e]},r.ByteBuffer.prototype.readInt16=function(e){return this.readUint16(e)<<16>>16},r.ByteBuffer.prototype.readUint16=function(e){return this.bytes_[e]|this.bytes_[e+1]<<8},r.ByteBuffer.prototype.readInt32=function(e){return this.bytes_[e]|this.bytes_[e+1]<<8|this.bytes_[e+2]<<16|this.bytes_[e+3]<<24},r.ByteBuffer.prototype.readUint32=function(e){return this.readInt32(e)>>>0},r.ByteBuffer.prototype.readInt64=function(e){return new r.Long(this.readInt32(e),this.readInt32(e+4))},r.ByteBuffer.prototype.readUint64=function(e){return new r.Long(this.readUint32(e),this.readUint32(e+4))},r.ByteBuffer.prototype.readFloat32=function(e){return r.int32[0]=this.readInt32(e),r.float32[0]},r.ByteBuffer.prototype.readFloat64=function(e){return r.int32[r.isLittleEndian?0:1]=this.readInt32(e),r.int32[r.isLittleEndian?1:0]=this.readInt32(e+4),r.float64[0]},r.ByteBuffer.prototype.writeInt8=function(e,t){this.bytes_[e]=t;},r.ByteBuffer.prototype.writeUint8=function(e,t){this.bytes_[e]=t;},r.ByteBuffer.prototype.writeInt16=function(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8;},r.ByteBuffer.prototype.writeUint16=function(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8;},r.ByteBuffer.prototype.writeInt32=function(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24;},r.ByteBuffer.prototype.writeUint32=function(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24;},r.ByteBuffer.prototype.writeInt64=function(e,t){this.writeInt32(e,t.low),this.writeInt32(e+4,t.high);},r.ByteBuffer.prototype.writeUint64=function(e,t){this.writeUint32(e,t.low),this.writeUint32(e+4,t.high);},r.ByteBuffer.prototype.writeFloat32=function(e,t){r.float32[0]=t,this.writeInt32(e,r.int32[0]);},r.ByteBuffer.prototype.writeFloat64=function(e,t){r.float64[0]=t,this.writeInt32(e,r.int32[r.isLittleEndian?0:1]),this.writeInt32(e+4,r.int32[r.isLittleEndian?1:0]);},r.ByteBuffer.prototype.getBufferIdentifier=function(){if(this.bytes_.length>10),56320+(1023&a)));}return o},r.ByteBuffer.prototype.__indirect=function(e){return e+this.readInt32(e)},r.ByteBuffer.prototype.__vector=function(e){return e+this.readInt32(e)+r.SIZEOF_INT},r.ByteBuffer.prototype.__vector_len=function(e){return this.readInt32(e+this.readInt32(e))},r.ByteBuffer.prototype.__has_identifier=function(e){if(e.length!=r.FILE_IDENTIFIER_LENGTH)throw new Error(\"FlatBuffers: file identifier must be length \"+r.FILE_IDENTIFIER_LENGTH);for(var t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]});},__webpack_require__.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0});};var __webpack_exports__=__webpack_require__(1057);return __webpack_exports__})()));\n\n}(ort_min));\n\nvar __awaiter$5 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n/**\r\n * Shared resource manager used to preload and share resources across different pipelines.\r\n * This is useful when multiple pipelines are using the same model or when the model needs\r\n * to be preloaded before the pipeline is created.\r\n */\r\nclass SharedResourceManager {\r\n constructor() {\r\n this.modelSessions = {};\r\n }\r\n /**\r\n * Initialize the worker using the provided configuration.\r\n *\r\n * @param {PreloadConfig} config The configuration object.\r\n * @returns {Promise} A promise that resolves when the worker is initialized.\r\n * @example\r\n * await initializeWorker(config);\r\n */\r\n initializeWorker(config) {\r\n return __awaiter$5(this, void 0, void 0, function* () {\r\n if (typeof Worker === 'undefined') {\r\n throw new Error('[ladon-ts] web workers are not supported in this environment');\r\n }\r\n const crossOriginScriptUrl = config.mask.worker_uri;\r\n const content = yield (yield fetch(crossOriginScriptUrl, { cache: 'force-cache' })).text();\r\n this.workerUrl = URL.createObjectURL(new Blob([content], { type: 'text/javascript' }));\r\n this.worker = new Worker(this.workerUrl, { type: 'module' });\r\n return this.worker;\r\n });\r\n }\r\n /**\r\n * Terminate the worker.\r\n */\r\n terminateWorker() {\r\n if (this.worker) {\r\n this.worker.terminate();\r\n this.worker = undefined;\r\n }\r\n }\r\n /**\r\n * Preload the model using the provided configuration.\r\n *\r\n * @param {PreloadConfig} config The configuration object.\r\n * @returns {Promise} A promise that resolves when the model is preloaded.\r\n * @example\r\n * await preloadModel(config);\r\n */\r\n preloadModel(config) {\r\n var _a;\r\n var _b;\r\n return __awaiter$5(this, void 0, void 0, function* () {\r\n if (config.wasm_uri) {\r\n ort_min.exports.env.wasm.wasmPaths = toAbsoluteURI(config.wasm_uri, config.base_url);\r\n }\r\n ort_min.exports.env.wasm.numThreads = 1;\r\n // Resolve the model URL based on the configuration.\r\n const modelUrl = yield this.getModelUrl(config);\r\n // Use the model session cache to avoid creating multiple sessions for the same model.\r\n (_a = (_b = this.modelSessions)[modelUrl]) !== null && _a !== void 0 ? _a : (_b[modelUrl] = yield ort_min.exports.InferenceSession.create(modelUrl, {\r\n executionProviders: ['wasm'],\r\n }));\r\n // Warmup the model with a dummy input to avoid latency when running the model for the first time.\r\n yield this.warmupModel(this.modelSessions[modelUrl], config.mask.input_size, config.mask.model_rank);\r\n return this.modelSessions[modelUrl];\r\n });\r\n }\r\n /**\r\n * Preload the worker using the provided configuration.\r\n *\r\n * @param {PreloadConfig} config The configuration object.\r\n * @returns {Promise} A promise that resolves when the worker is preloaded.\r\n * @example\r\n * await preloadWorker(config);\r\n */\r\n preloadWorker(config) {\r\n var _a;\r\n return __awaiter$5(this, void 0, void 0, function* () {\r\n // If the model URL resolver is a function, We can't send the function to the worker so\r\n // we resolve the model URL here and send the resolved URL to the worker.\r\n const modelUrl = yield this.getModelUrl(config);\r\n const newConfig = Object.assign(Object.assign({}, config), { mask: Object.assign(Object.assign({}, config.mask), { model_url_resolver: modelUrl }) });\r\n // Initialize the worker.\r\n yield this.initializeWorker(newConfig);\r\n // Send the preload message to the worker.\r\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.postMessage({ type: 'preload', config: newConfig });\r\n });\r\n }\r\n /**\r\n * Warmup the model session with a dummy input to avoid latency when running the model for the first time.\r\n *\r\n * @param {ort.InferenceSession} session The model session.\r\n * @param {SizeConfig} inputSize The input size of the model.\r\n * @param {number} inputChannels The number of input channels (e.g., RGB is 3).\r\n * @param {ort.Tensor.Type} inputType The input tensor type.\r\n * @returns {Promise} A promise that resolves when the model is warmed up.\r\n * @example\r\n * await warmupModel(session, inputSize, inputChannels, inputType);\r\n */\r\n warmupModel(session, inputSize = { width: 1280, height: 720 }, inputChannels = 3, inputType = 'float32') {\r\n return __awaiter$5(this, void 0, void 0, function* () {\r\n const numPixels = inputSize.height * inputSize.width;\r\n const dummyInputData = new Float32Array(inputChannels * numPixels).fill(0);\r\n const dummyInput = new ort_min.exports.Tensor(inputType, dummyInputData, [\r\n 1,\r\n inputChannels,\r\n inputSize.height,\r\n inputSize.width,\r\n ]);\r\n const feed = { [session.inputNames[0]]: dummyInput };\r\n // Use an additional dummy tensor if the model expects a previous mask.\r\n if (inputChannels === 3) {\r\n const dummyMaskData = new Float32Array(numPixels).fill(0);\r\n const prevMaskTensor = new ort_min.exports.Tensor(inputType, dummyMaskData, [\r\n 1,\r\n 1,\r\n inputSize.height,\r\n inputSize.width,\r\n ]);\r\n feed[session.inputNames[1]] = prevMaskTensor;\r\n }\r\n // Run the model with the dummy input to warm it up.\r\n yield session.run(feed);\r\n });\r\n }\r\n /**\r\n * Get the model session for the provided model URL.\r\n *\r\n * @param {string} modelUrl The model URL.\r\n * @returns {ort.InferenceSession} The model session.\r\n * @example\r\n * const session = getModelSession(modelUrl);\r\n */\r\n getModelSession(modelUrl) {\r\n return this.modelSessions[modelUrl];\r\n }\r\n /**\r\n * Resolves the model URL based on the configuration.\r\n *\r\n * @param {PipelineConfig} config The configuration object.\r\n * @returns {Promise} The resolved model URL.\r\n * @example\r\n * const modelUrl = await getModelUrl(config);\r\n */\r\n getModelUrl({ mask: { model_url_resolver, model_uri } }) {\r\n return __awaiter$5(this, void 0, void 0, function* () {\r\n let modelUrl;\r\n if (typeof model_url_resolver === 'string') {\r\n modelUrl = model_url_resolver;\r\n }\r\n else {\r\n modelUrl = yield model_url_resolver(model_uri);\r\n }\r\n return modelUrl;\r\n });\r\n }\r\n getWorker() {\r\n return this.worker;\r\n }\r\n getWorkerUrl() {\r\n return this.workerUrl;\r\n }\r\n}\r\n// Global instance of the shared resource manager.\r\nconst sharedResourceManager = new SharedResourceManager();\r\n/**\r\n * Preload the resources using the provided configuration. This function is used to preload the model\r\n * and the worker before creating the pipeline.\r\n *\r\n * @param config - The configuration object.\r\n */\r\nconst preload = (config) => __awaiter$5(void 0, void 0, void 0, function* () {\r\n if (config.mask.generator === 'worker') {\r\n yield sharedResourceManager.preloadWorker(config);\r\n }\r\n else {\r\n yield sharedResourceManager.preloadModel(config);\r\n }\r\n});\n\nvar __awaiter$4 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nclass LocalGenerator {\r\n constructor(config) {\r\n this.config = config;\r\n this.last_mask_generation = 0;\r\n this.last_mask = new ort_min.exports.Tensor('float32', new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width), [1, 1, this.config.mask.output_size.height, this.config.mask.output_size.width]);\r\n }\r\n /**\r\n * This method preprocesses an input Uint8ClampedArray to a Float32Array\r\n * while maintaining memory efficiency by reusing a class-scoped output buffer.\r\n * If the model rank is 4 (e.g., newer tiny model), it sets an alpha channel value.\r\n *\r\n * @param {Uint8ClampedArray} input - The input data to be preprocessed\r\n * @param {Float32Array} alpha - The alpha channel data\r\n * @returns {Float32Array} - The processed data\r\n */\r\n preprocess(input, alpha) {\r\n const { model_rank, input_size, output_size } = this.config.mask;\r\n const { height, width } = input_size;\r\n const numImagePixels = height * width;\r\n if (!this.output) {\r\n this.output = new Float32Array(numImagePixels * model_rank);\r\n }\r\n // In-place modification of class-scoped output buffer\r\n const channelFlipOffset = model_rank === 4 ? 2 : 0;\r\n const numInputPixels = input.length / 4;\r\n // Loop over all color channels in the image\r\n for (let channel = 0; channel < 3; channel++) {\r\n // For each pixel in the input image...\r\n for (let pixel = 0; pixel < numInputPixels; pixel++) {\r\n // ...copy the color channel value from input to output, potentially\r\n // potentially flipping the color channel order for the tiny.\r\n this.output[pixel + channel * numImagePixels] =\r\n input[pixel * 4 + Math.abs(channelFlipOffset - channel)];\r\n }\r\n }\r\n // If the model_rank is 4, an additional alpha channel needs to be set\r\n if (model_rank === 4) {\r\n // Scaling factors for width and height based on the ratio of output to input sizes\r\n const widthScale = output_size.width / width;\r\n const heightScale = output_size.height / height;\r\n // Iterate over each pixel in the width of the input image\r\n for (let x = 0; x < width; x++) {\r\n const nearestNeighborX = Math.floor(x * widthScale);\r\n // Iterate over each pixel in the height of the input image\r\n for (let y = 0; y < height; y++) {\r\n const nearestNeighborY = Math.floor(y * heightScale);\r\n const maskIdx = nearestNeighborX + nearestNeighborY * output_size.width;\r\n const outputIdx = x + y * width + 3 * numImagePixels;\r\n // Normalize the alpha value to range between 0 and 1, and scale it to the range of 0-255\r\n const normalizedValue = Math.min(Math.max(alpha[maskIdx], 0), 1) * 255;\r\n // Assign the normalized value to the output at the computed index\r\n this.output[outputIdx] = normalizedValue;\r\n }\r\n }\r\n }\r\n return this.output;\r\n }\r\n getMask(input) {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n if (!this.mask_model) {\r\n throw new Error('[ladon-ts] - mask model not loaded.');\r\n }\r\n const mask_generation_timeout = Date.now() - this.last_mask_generation > this.config.mask.generation_interval_ms;\r\n if (!mask_generation_timeout) {\r\n return {\r\n data: this.last_mask.data,\r\n warm: false,\r\n };\r\n }\r\n this.last_mask_generation = Date.now();\r\n const image_tns = new ort_min.exports.Tensor('float32', this.preprocess(input, this.last_mask.data), [\r\n 1,\r\n this.config.mask.model_rank,\r\n this.config.mask.input_size.height,\r\n this.config.mask.input_size.width,\r\n ]);\r\n if (this.config.mask.model_rank === 4) {\r\n // This feed uses the new model input params for the tiny model.\r\n const results = yield this.mask_model.run({ input: image_tns });\r\n this.last_mask = results.segmentation;\r\n }\r\n else {\r\n const results = yield this.mask_model.run({\r\n input_image: image_tns,\r\n prev_mask: this.last_mask,\r\n });\r\n this.last_mask = results.output_mask;\r\n }\r\n return {\r\n data: this.last_mask.data,\r\n warm: true,\r\n };\r\n });\r\n }\r\n load() {\r\n var _a;\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n const modelUrl = yield sharedResourceManager.getModelUrl(this.config);\r\n // Attempt to retrieve a preloaded InferenceSession from the shared resource manager.\r\n this.mask_model = sharedResourceManager.getModelSession(modelUrl);\r\n // If the model is not preloaded, load it from the provided model URL.\r\n (_a = this.mask_model) !== null && _a !== void 0 ? _a : (this.mask_model = yield sharedResourceManager.preloadModel(this.config));\r\n if (!this.mask_model) {\r\n throw new Error('Failed to load the ONNX model.');\r\n }\r\n });\r\n }\r\n isLoaded() {\r\n return !!this.mask_model;\r\n }\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n postRender(_) {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n // empty for local generator\r\n });\r\n }\r\n destroy() {\r\n // empty for local generator\r\n }\r\n}\r\nclass NullGenerator {\r\n constructor(config) {\r\n this.config = config;\r\n this.last_mask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);\r\n }\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n getMask(_) {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n return {\r\n data: this.last_mask,\r\n warm: false,\r\n };\r\n });\r\n }\r\n load() {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n // empty for null generator\r\n });\r\n }\r\n isLoaded() {\r\n return true;\r\n }\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n postRender(_) {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n // empty for null generator\r\n });\r\n }\r\n destroy() {\r\n // empty for null generator\r\n }\r\n}\r\nclass WorkerGenerator {\r\n constructor(config) {\r\n this.config = config;\r\n this.new_mask = true;\r\n this.last_mask = new Float32Array(this.config.mask.output_size.height * this.config.mask.output_size.width);\r\n }\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n getMask(_) {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n const toReturn = {\r\n data: this.last_mask,\r\n warm: this.new_mask,\r\n };\r\n this.new_mask = false;\r\n return toReturn;\r\n });\r\n }\r\n load() {\r\n var _a;\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n this.worker = sharedResourceManager.getWorker();\r\n (_a = this.worker) !== null && _a !== void 0 ? _a : (this.worker = yield sharedResourceManager.initializeWorker(this.config));\r\n if (!this.worker) {\r\n throw new Error('[ladon-ts] - worker is not defined.');\r\n }\r\n const modelUrl = yield sharedResourceManager.getModelUrl(this.config);\r\n const workerConfig = {\r\n base_url: this.config.base_url,\r\n input: this.config.input,\r\n mask: Object.assign(Object.assign({}, this.config.mask), { model_url_resolver: modelUrl }),\r\n wasm_uri: this.config.wasm_uri,\r\n render: { type: 'passthrough' },\r\n };\r\n this.worker.postMessage({ type: 'init', config: workerConfig });\r\n let resolutionCb;\r\n const result = new Promise((resolve) => {\r\n resolutionCb = resolve;\r\n });\r\n this.worker.onmessage = (event) => {\r\n if (event.data.mask) {\r\n this.last_mask = event.data.mask;\r\n this.new_mask = true;\r\n }\r\n else {\r\n const workerUrl = sharedResourceManager.getWorkerUrl();\r\n if (workerUrl) {\r\n URL.revokeObjectURL(workerUrl);\r\n }\r\n resolutionCb === null || resolutionCb === void 0 ? void 0 : resolutionCb();\r\n }\r\n };\r\n return result;\r\n });\r\n }\r\n isLoaded() {\r\n return !!this.worker;\r\n }\r\n postRender(input) {\r\n return __awaiter$4(this, void 0, void 0, function* () {\r\n // claim ownership of the input tensor's buffer and forward to worker\r\n if (!this.worker) {\r\n throw new Error('[ladon-ts] - worker is not defined.');\r\n }\r\n this.worker.postMessage({\r\n type: 'generate',\r\n image: input,\r\n }, [input.buffer]);\r\n });\r\n }\r\n destroy() {\r\n sharedResourceManager.terminateWorker();\r\n }\r\n}\n\nclass WebGLRenderer {\r\n constructor(output_canvas, config) {\r\n this.output_canvas = output_canvas;\r\n this.config = config;\r\n this.verts = new Float32Array([\r\n -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0,\r\n 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, -1.0, -1.0, 0.0,\r\n ]);\r\n this.vertex_shader_src = `#version 300 es\n\nin vec4 position;\n\nvoid main() {\n gl_Position = position;\n}\n`;\r\n const gl = this.output_canvas.getContext('webgl2');\r\n if (!gl) {\r\n const output_2d = this.output_canvas.getContext('2d');\r\n if (!output_2d) {\r\n throw new Error('[ladon-ts] - output canvas context must be webgl2 or 2d');\r\n }\r\n this.output_canvas_2d = output_2d;\r\n this.intermediate_canvas = document.createElement('canvas');\r\n this.intermediate_canvas.height = this.config.input.height;\r\n this.intermediate_canvas.width = this.config.input.width;\r\n const gl_intermediate = this.intermediate_canvas.getContext('webgl2');\r\n if (!gl_intermediate) {\r\n throw new Error('[ladon-ts] - error getting output context webgl');\r\n }\r\n this.gl = gl_intermediate;\r\n }\r\n else {\r\n this.gl = gl;\r\n }\r\n // Input image texture.\r\n const image_texture = this.gl.createTexture();\r\n if (!image_texture) {\r\n throw new Error('[ladon-ts] - error creating input texture');\r\n }\r\n this.image_texture = image_texture;\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.image_texture);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.config.input.width, this.config.input.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, null);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\r\n const mask_texture = this.gl.createTexture();\r\n if (!mask_texture) {\r\n throw new Error('[ladon-ts] - error creating mask texture');\r\n }\r\n // Mask texture.\r\n this.mask_texture = mask_texture;\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.mask_texture);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.NEAREST);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.NEAREST);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.R32F, this.config.mask.output_size.width, this.config.mask.output_size.height, 0, this.gl.RED, this.gl.FLOAT, null);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\r\n const vertex_array = this.gl.createVertexArray();\r\n if (!vertex_array) {\r\n throw new Error('[ladon-ts] - error creating vertex array');\r\n }\r\n this.gl.bindVertexArray(vertex_array);\r\n const buffer = this.gl.createBuffer();\r\n if (!buffer) {\r\n throw new Error('[ladon-ts] - error creating buffer');\r\n }\r\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);\r\n this.gl.bufferData(this.gl.ARRAY_BUFFER, this.verts, this.gl.STATIC_DRAW);\r\n this.gl.vertexAttribPointer(0, 3, this.gl.FLOAT, false, 0, 0);\r\n this.gl.enableVertexAttribArray(0);\r\n this.gl.viewport(0, 0, this.config.input.width, this.config.input.height);\r\n }\r\n getUVCalculation() {\r\n if (this.config.render.horizontal_mirror) {\r\n return `vec2 st = -(gl_FragCoord.xy / u_resolution) + 1.0;`;\r\n }\r\n return `vec2 st = vec2((gl_FragCoord.x / u_resolution.x), -(gl_FragCoord.y / u_resolution.y) + 1.0);`;\r\n }\r\n setSharedUniforms(program) {\r\n const u_resolution = this.gl.getUniformLocation(program, 'u_resolution');\r\n if (!u_resolution) {\r\n throw new Error('[ladon-ts] - error finding \"u_resolution\" uniform');\r\n }\r\n this.gl.uniform2f(u_resolution, this.config.input.width, this.config.input.height);\r\n const u_image = this.gl.getUniformLocation(program, 'u_image');\r\n if (!u_image) {\r\n throw new Error('[ladon-ts] - error finding \"u_image\" uniform');\r\n }\r\n this.gl.activeTexture(this.gl.TEXTURE0);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.image_texture);\r\n this.gl.uniform1i(u_image, 0);\r\n const u_mask = this.gl.getUniformLocation(program, 'u_mask');\r\n if (u_mask) {\r\n this.gl.activeTexture(this.gl.TEXTURE1);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.mask_texture);\r\n this.gl.uniform1i(u_mask, 1);\r\n }\r\n }\r\n uploadVideoStream(input) {\r\n this.gl.activeTexture(this.gl.TEXTURE0);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.image_texture);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.config.input.width, this.config.input.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, input);\r\n }\r\n postDraw() {\r\n if (this.output_canvas_2d && this.intermediate_canvas) {\r\n this.output_canvas_2d.drawImage(this.intermediate_canvas, 0, 0, this.config.input.width, this.config.input.height);\r\n }\r\n }\r\n}\n\nvar __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nclass BlurRenderer extends WebGLRenderer {\r\n constructor(output_canvas, config) {\r\n super(output_canvas, config);\r\n this.output_canvas = output_canvas;\r\n this.config = config;\r\n this.fragment_shader_common = `#version 300 es\nprecision highp float;\n\n#define KERNEL_SIZE ${this.config.render.kernel_size}\n#define HORIZONTAL vec2(1.0, 0.0)\n#define VERTICAL vec2(0.0, 1.0)\n#define EPSILON 0.00001\n\nout vec4 outColor;\n\nuniform sampler2D u_image;\nuniform float u_kernel[KERNEL_SIZE];\nuniform sampler2D u_mask;\nuniform vec2 u_resolution;\n\n\nfloat get_mask(vec2 st) {\n return clamp(texture(u_mask, st).r, 0.0, 1.0);\n}\n\nfloat get_inv_mask(vec2 st) {\n return 1.0 - get_mask(st);\n}\n\nvec4 get_offset_mul(sampler2D src, vec2 uv, float weight) {\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n return vec4(vec3(0.0), weight);\n }\n\n // 4th channel is masked weight value\n return vec4(vec3(texture(src, uv).rgb * get_inv_mask(uv) * weight), get_mask(uv) * weight);\n}\n\nvec3 blur(sampler2D src, vec2 uv, vec2 direction) {\n vec4 result = vec4(0.0);\n\n vec2 step = (direction / u_resolution);\n int offset = (KERNEL_SIZE - 1) / 2;\n\n for (int i = 0; i < KERNEL_SIZE; i++) {\n vec2 offset = step * float(i - offset);\n result += get_offset_mul(src, uv + offset, u_kernel[i]);\n }\n\n if (abs(result.a - 1.0) < EPSILON) {\n return vec3(0.0);\n }\n\n // redistribute weights from masked areas\n return result.rgb * (1.0 + (result.a / (1.0 - result.a)));\n}\n`;\r\n this.fragment_shader_pass_1_src = this.fragment_shader_common +\r\n `\nvoid main() {\n vec2 st = gl_FragCoord.xy / u_resolution;\n\n outColor = vec4(blur(u_image, st, HORIZONTAL) * get_inv_mask(st), 1.0);\n}\n`;\r\n this.fragment_shader_pass_2_src = this.fragment_shader_common +\r\n `\nuniform sampler2D u_blur;\n\n\nvoid main() {\n ${this.getUVCalculation()}\n\n vec3 blurred = blur(u_blur, st, VERTICAL);\n vec3 image = texture(u_image, st).rgb;\n float mask = texture(u_mask, st).r;\n\n outColor = vec4(blurred * (1.0 - mask) + image * mask, 1.0);\n}\n`;\r\n if (this.config.render.kernel_size % 2 === 0) {\r\n throw new Error('[ladon-ts] - kernel_size must be odd');\r\n }\r\n // program pass 1 setup\r\n {\r\n const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);\r\n const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader_pass_1_src);\r\n this.program_1 = linkProgram(this.gl, vertex_shader, fragment_shader);\r\n this.gl.useProgram(this.program_1);\r\n const framebuffer = this.gl.createFramebuffer();\r\n if (!framebuffer) {\r\n throw new Error('[ladon-ts] - error creating framebuffer');\r\n }\r\n this.framebuffer = framebuffer;\r\n const transfer_texture = this.gl.createTexture();\r\n if (!transfer_texture) {\r\n throw new Error('[ladon-ts] - error creating output texture');\r\n }\r\n this.transfer_texture = transfer_texture;\r\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.config.input.width, this.config.input.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, null);\r\n this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER, this.gl.COLOR_ATTACHMENT0, this.gl.TEXTURE_2D, this.transfer_texture, 0);\r\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\r\n this.setSharedUniforms(this.program_1);\r\n const u_kernel = this.gl.getUniformLocation(this.program_1, 'u_kernel');\r\n if (!u_kernel) {\r\n throw new Error('[ladon-ts] - error finding \"u_kernel\" uniform');\r\n }\r\n this.gl.uniform1fv(u_kernel, this.getBlurKernel());\r\n }\r\n // program pass 2 setup\r\n {\r\n const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);\r\n const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader_pass_2_src);\r\n this.program_2 = linkProgram(this.gl, vertex_shader, fragment_shader);\r\n this.gl.useProgram(this.program_2);\r\n const u_blur = this.gl.getUniformLocation(this.program_2, 'u_blur');\r\n if (!u_blur) {\r\n throw new Error('[ladon-ts] - error finding \"u_blur\" uniform');\r\n }\r\n this.u_blur = u_blur;\r\n this.gl.activeTexture(this.gl.TEXTURE2);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture);\r\n this.gl.uniform1i(this.u_blur, 2);\r\n this.setSharedUniforms(this.program_2);\r\n const u_kernel = this.gl.getUniformLocation(this.program_2, 'u_kernel');\r\n if (!u_kernel) {\r\n throw new Error('[ladon-ts] - error finding \"u_kernel\" uniform');\r\n }\r\n this.gl.uniform1fv(u_kernel, this.getBlurKernel());\r\n }\r\n }\r\n render(input, mask) {\r\n return __awaiter$3(this, void 0, void 0, function* () {\r\n this.uploadVideoStream(input);\r\n if (mask.warm) {\r\n this.gl.activeTexture(this.gl.TEXTURE1);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.mask_texture);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.R32F, this.config.mask.output_size.width, this.config.mask.output_size.height, 0, this.gl.RED, this.gl.FLOAT, mask.data);\r\n }\r\n // program pass 1 - blur in one direction & output to framebuffer\r\n this.gl.useProgram(this.program_1);\r\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer);\r\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\r\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\r\n // program pass 2 - blur in other direction & draw to screen\r\n this.gl.useProgram(this.program_2);\r\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\r\n this.postDraw();\r\n });\r\n }\r\n load() {\r\n return __awaiter$3(this, void 0, void 0, function* () {\r\n // empty\r\n });\r\n }\r\n destroy() {\r\n // empty\r\n }\r\n getBlurKernel() {\r\n const kernel = [];\r\n let sum = 0;\r\n for (let i = 0; i < this.config.render.kernel_size; i++) {\r\n let w = i - (this.config.render.kernel_size - 1) / 2;\r\n w = Math.exp(-(Math.pow(w, 2)) / Math.pow(this.config.render.sigma, 2));\r\n kernel.push(w);\r\n sum += w;\r\n }\r\n for (let i = 0; i < this.config.render.kernel_size; i++) {\r\n kernel[i] = kernel[i] / sum;\r\n }\r\n return new Float32Array(kernel);\r\n }\r\n}\n\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nclass PassthroughRenderer extends WebGLRenderer {\r\n constructor(output_canvas, config) {\r\n super(output_canvas, config);\r\n this.output_canvas = output_canvas;\r\n this.config = config;\r\n this.fragment_shader = `#version 300 es\nprecision highp float;\n\nout vec4 outColor;\n\nuniform sampler2D u_image;\nuniform vec2 u_resolution;\n\n\nvoid main() {\n ${this.getUVCalculation()}\n\n outColor = vec4(texture(u_image, st).rgb, 1.0);\n}\n`;\r\n const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);\r\n const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader);\r\n this.program = linkProgram(this.gl, vertex_shader, fragment_shader);\r\n this.gl.useProgram(this.program);\r\n this.setSharedUniforms(this.program);\r\n }\r\n render(input, \r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n _) {\r\n return __awaiter$2(this, void 0, void 0, function* () {\r\n this.uploadVideoStream(input);\r\n this.gl.useProgram(this.program);\r\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\r\n this.postDraw();\r\n });\r\n }\r\n load() {\r\n return __awaiter$2(this, void 0, void 0, function* () {\r\n // empty\r\n });\r\n }\r\n destroy() {\r\n // empty\r\n }\r\n}\n\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nclass ReplacementRenderer extends WebGLRenderer {\r\n constructor(output_canvas, config) {\r\n super(output_canvas, config);\r\n this.output_canvas = output_canvas;\r\n this.config = config;\r\n this.fragment_shader = `#version 300 es\nprecision highp float;\n\nout vec4 outColor;\n\nuniform sampler2D u_background;\nuniform sampler2D u_image;\nuniform sampler2D u_mask;\nuniform vec2 u_resolution;\n\n\nfloat get_mask(vec2 st) {\n return clamp(texture(u_mask, st).r, 0.0, 1.0);\n}\n\nfloat get_inv_mask(vec2 st) {\n return 1.0 - get_mask(st);\n}\n\nvoid main() {\n ${this.getUVCalculation()}\n\n outColor = vec4(texture(u_background, st).rgb * get_inv_mask(st) + texture(u_image, st).rgb * get_mask(st), 1.0);\n}\n`;\r\n const background_canvas_ctx = this.config.render.background.getContext('2d');\r\n if (!background_canvas_ctx) {\r\n throw new Error('[ladon-ts] - could not get background canvas context 2d');\r\n }\r\n this.background_canvas_ctx = background_canvas_ctx;\r\n const background_data = this.background_canvas_ctx.getImageData(0, 0, this.config.render.background.width, this.config.render.background.height).data;\r\n if (this.config.render.kernel_size % 2 === 0) {\r\n throw new Error('[ladon-ts] - kernel_size must be odd');\r\n }\r\n const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);\r\n const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader);\r\n this.program = linkProgram(this.gl, vertex_shader, fragment_shader);\r\n this.gl.useProgram(this.program);\r\n this.setSharedUniforms(this.program);\r\n const background_texture = this.gl.createTexture();\r\n if (!background_texture) {\r\n throw new Error('[ladon-ts] - error creating input texture');\r\n }\r\n this.background_texture = background_texture;\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.background_texture);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.config.render.background.width, this.config.render.background.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, background_data);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\r\n const u_background = this.gl.getUniformLocation(this.program, 'u_background');\r\n if (!u_background) {\r\n throw new Error('[ladon-ts] - error finding \"u_background\" uniform');\r\n }\r\n this.gl.activeTexture(this.gl.TEXTURE2);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.background_texture);\r\n this.gl.uniform1i(u_background, 2);\r\n }\r\n render(input, mask) {\r\n return __awaiter$1(this, void 0, void 0, function* () {\r\n this.uploadVideoStream(input);\r\n if (mask.warm) {\r\n this.gl.activeTexture(this.gl.TEXTURE1);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.mask_texture);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.R32F, this.config.mask.output_size.width, this.config.mask.output_size.height, 0, this.gl.RED, this.gl.FLOAT, mask.data);\r\n }\r\n if (!this.config.render.static) {\r\n const background_data = this.background_canvas_ctx.getImageData(0, 0, this.config.render.background.width, this.config.render.background.height).data;\r\n this.gl.activeTexture(this.gl.TEXTURE2);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.background_texture);\r\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.config.input.width, this.config.input.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, background_data);\r\n }\r\n this.gl.useProgram(this.program);\r\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\r\n this.postDraw();\r\n });\r\n }\r\n load() {\r\n return __awaiter$1(this, void 0, void 0, function* () {\r\n // empty\r\n });\r\n }\r\n destroy() {\r\n // empty\r\n }\r\n}\n\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nclass Pipeline {\r\n constructor(input_canvas, output_canvas, config) {\r\n this.input_canvas = input_canvas;\r\n this.output_canvas = output_canvas;\r\n this.config = config;\r\n this.loaded = false;\r\n const input_ctx = this.input_canvas.getContext('2d', {\r\n alpha: false,\r\n willReadFrequently: true,\r\n });\r\n if (!input_ctx) {\r\n throw new Error('[ladon-ts] - error getting input context 2d');\r\n }\r\n this.input_ctx = input_ctx;\r\n }\r\n onFrame() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!this.generator || !this.renderer) {\r\n throw new Error('[ladon-ts] - pipeline is not loaded.');\r\n }\r\n const rawImageData = this.input_ctx.getImageData(0, 0, this.config.input.width, this.config.input.height).data;\r\n let maskImageData = rawImageData;\r\n // Resize the image data if the model expects a fixed size input (e.g., tiny model).\r\n if (this.config.mask.input_size.width !== this.config.input.width) {\r\n maskImageData = resizeImage(rawImageData, this.config.input.width, this.config.input.height, this.config.mask.input_size.width, this.config.mask.input_size.height);\r\n }\r\n const mask = yield this.generator.getMask(maskImageData);\r\n // Render the full size video image in the background with the mask on top.\r\n yield this.renderer.render(rawImageData, mask);\r\n // Cleanup the mask data.\r\n yield this.generator.postRender(maskImageData);\r\n });\r\n }\r\n isLoaded() {\r\n return this.loaded;\r\n }\r\n load() {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n switch (this.config.render.type) {\r\n case 'blur':\r\n this.renderer = new BlurRenderer(this.output_canvas, this.config);\r\n break;\r\n case 'passthrough':\r\n this.renderer = new PassthroughRenderer(this.output_canvas, this.config);\r\n break;\r\n case 'replacement':\r\n this.renderer = new ReplacementRenderer(this.output_canvas, this.config);\r\n break;\r\n default:\r\n throw new Error('[ladon-ts] - renderer not implemented.');\r\n }\r\n yield this.renderer.load();\r\n if (this.config.render.type === 'passthrough') {\r\n // automatically disable model evaluation when the renderer is set to passthrough\r\n // Note: this may change when gestures are detected (model eval will be a dependency for more than rendering)\r\n this.generator = new NullGenerator(this.config);\r\n }\r\n else {\r\n switch (this.config.mask.generator) {\r\n case 'local':\r\n this.generator = new LocalGenerator(this.config);\r\n break;\r\n case 'worker':\r\n this.generator = new WorkerGenerator(this.config);\r\n break;\r\n default:\r\n throw new Error('[ladon-ts] - generator not implemented.');\r\n }\r\n }\r\n yield this.generator.load();\r\n this.loaded = true;\r\n });\r\n }\r\n destroy() {\r\n var _a, _b;\r\n (_a = this.generator) === null || _a === void 0 ? void 0 : _a.destroy();\r\n (_b = this.renderer) === null || _b === void 0 ? void 0 : _b.destroy();\r\n }\r\n}\n\nconst generateUuid = () => String(Math.random() * 1e17);\r\nconst getOrCreateEl = (kind, height, width, uniqueId = generateUuid(), addToDom = false) => {\r\n const id = `web-media-effects-${kind}-${uniqueId}`;\r\n let el = document.getElementById(id);\r\n if (!el) {\r\n el = document.createElement(kind);\r\n el.id = id;\r\n el.style.bottom = '0';\r\n el.style.opacity = '0';\r\n el.style.position = 'fixed';\r\n el.style.zIndex = '-2147483647';\r\n el.style.height = '0px';\r\n el.style.width = '0px';\r\n el.setAttribute('height', height.toString());\r\n el.setAttribute('width', width.toString());\r\n if (addToDom) {\r\n document.body.appendChild(el);\r\n }\r\n }\r\n return el;\r\n};\r\nconst getCanvasEl = (height, width, uniqueId, showInDom) => getOrCreateEl('canvas', height, width, uniqueId, showInDom);\r\nconst getVideoEl = (height, width, uniqueId) => getOrCreateEl('video', height, width, uniqueId);\n\nconst isIos = () => {\r\n var _a, _b, _c;\r\n return Boolean(['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.platform) ||\r\n (((_c = (_b = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _b === void 0 ? void 0 : _b.userAgent) === null || _c === void 0 ? void 0 : _c.includes('Mac')) && 'ontouchend' in (globalThis === null || globalThis === void 0 ? void 0 : globalThis.document)));\r\n};\r\nconst portraitMql = () => { var _a; return (_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.matchMedia) === null || _a === void 0 ? void 0 : _a.call(globalThis, '(orientation: portrait)'); };\n\nconst drawImage = (srcEl, destEl) => {\r\n const { height: sh, width: sw } = srcEl;\r\n const { height: dh, width: dw } = destEl;\r\n const ctx = destEl.getContext('2d');\r\n ctx === null || ctx === void 0 ? void 0 : ctx.clearRect(0, 0, dw, dh);\r\n ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(srcEl, 0, 0, sw, sh, 0, 0, dw, dh);\r\n};\n\nconst getBackgroundConfig = (backgroundEl, video = false, mirror = false) => ({\r\n type: 'replacement',\r\n horizontal_mirror: mirror,\r\n background: backgroundEl,\r\n static: !video,\r\n});\n\nconst loadImageFromUrl = (url) => new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve(image);\r\n };\r\n image.onerror = (e) => reject(e);\r\n image.src = url;\r\n image.crossOrigin = 'anonymous';\r\n});\r\nconst loadVideoFromUrl = (url) => new Promise((resolve, reject) => {\r\n const video = getOrCreateEl('video', 0, 0, undefined, true);\r\n video.onloadeddata = () => {\r\n video.height = video.videoHeight;\r\n video.width = video.videoWidth;\r\n resolve(video);\r\n };\r\n video.onerror = () => reject();\r\n video.autoplay = true;\r\n video.playsInline = true;\r\n video.loop = true;\r\n video.muted = true;\r\n video.src = url;\r\n video.crossOrigin = 'anonymous';\r\n});\n\nconst DEFAULT_FRAME_RATE = 24;\r\nvar VirtualBackgroundMode;\r\n(function (VirtualBackgroundMode) {\r\n VirtualBackgroundMode[\"Blur\"] = \"BLUR\";\r\n VirtualBackgroundMode[\"Image\"] = \"IMAGE\";\r\n VirtualBackgroundMode[\"Video\"] = \"VIDEO\";\r\n})(VirtualBackgroundMode || (VirtualBackgroundMode = {}));\r\nconst defaultOptions = Object.freeze({\r\n mode: VirtualBackgroundMode.Blur,\r\n blurStrength: BlurStrength.STRONG,\r\n generator: 'worker',\r\n quality: Quality.LOW,\r\n authToken: '',\r\n mirror: false,\r\n});\r\nconst omitAuthToken = (obj) => omitKey('authToken', obj);\r\nclass VirtualBackgroundEffect extends BaseCameraEffect {\r\n get isReady() {\r\n var _a;\r\n return !!((_a = this.model) === null || _a === void 0 ? void 0 : _a.isLoaded());\r\n }\r\n get isLoaded() {\r\n return !!this.loadFuture;\r\n }\r\n get frameRate() {\r\n var _a, _b, _c;\r\n return (_c = (_a = this.options.frameRate) !== null && _a !== void 0 ? _a : (_b = this.trackSettings) === null || _b === void 0 ? void 0 : _b.frameRate) !== null && _c !== void 0 ? _c : DEFAULT_FRAME_RATE;\r\n }\r\n constructor(options) {\r\n super();\r\n this.defaultOptions = defaultOptions;\r\n this.uniqueId = Date.now();\r\n this.lastFrameTime = 0;\r\n this.frameInterval = 1000 / DEFAULT_FRAME_RATE;\r\n this.restoreEffectOnTrackEnable = false;\r\n this.handleOrientationChange = (mql) => {\r\n const isPortrait = mql.matches;\r\n if (!this.trackSettings) {\r\n throw new Error(`virtual background: unable to determine input track settings`);\r\n }\r\n let { height, width } = this.trackSettings;\r\n if (!height || !width) {\r\n logger.log(`virtual background: orientation change detected but unknown height or width`, {\r\n height,\r\n width,\r\n });\r\n return;\r\n }\r\n logger.log(`virtual background: orientation change detected`, {\r\n height,\r\n width,\r\n });\r\n if ((isPortrait && height < width) || (!isPortrait && height > width)) {\r\n [height, width] = [width, height];\r\n }\r\n logger.log(`virtual background: orientation changed to ${isPortrait ? 'portrait' : 'landscape'}`, {\r\n height,\r\n width,\r\n });\r\n [this.videoEl, this.inputEl, this.outputEl, this.backgroundEl].forEach((el) => {\r\n if (height) {\r\n el === null || el === void 0 ? void 0 : el.setAttribute('height', height.toString());\r\n }\r\n if (width) {\r\n el === null || el === void 0 ? void 0 : el.setAttribute('width', width.toString());\r\n }\r\n });\r\n };\r\n this.options = Object.assign(Object.assign({}, defaultOptions), options);\r\n logger.log('virtual background: init effect', omitAuthToken(this.options));\r\n this.loadModel = this.loadModel.bind(this);\r\n this.handleFrame = this.handleFrame.bind(this);\r\n this.handleOrientationChange = this.handleOrientationChange.bind(this);\r\n this.handleVideoLoadedMetadata = this.handleVideoLoadedMetadata.bind(this);\r\n this.handleVideoResize = this.handleVideoResize.bind(this);\r\n this.handleModelResolver = this.handleModelResolver.bind(this);\r\n }\r\n preloadAssets() {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n const start = performance.now();\r\n if (this.preloadFuture) {\r\n yield this.preloadFuture.promise;\r\n return;\r\n }\r\n this.preloadFuture = new Future();\r\n logger.log('virtual background: preloading assets');\r\n try {\r\n const preloadConfig = getPreloadConfig(this.options.quality, this.options.generator, this.handleModelResolver, \"https://models.intelligence.webex.com/ladon\", \"false\" === 'true');\r\n yield preload(preloadConfig);\r\n const end = performance.now();\r\n const duration = Math.round(end - start) / 1000;\r\n logger.log(`virtual background: preload completed in ${duration} seconds`);\r\n this.preloadFuture.resolve();\r\n }\r\n catch (error) {\r\n this.preloadFuture.reject(error);\r\n this.preloadFuture = undefined;\r\n throw error;\r\n }\r\n });\r\n }\r\n loadMediaStream(input) {\r\n const _super = Object.create(null, {\r\n loadMedia: { get: () => super.loadMedia }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('virtual background: load stream', input);\r\n const [videoTrack] = input.getVideoTracks();\r\n if (!videoTrack) {\r\n throw new Error('virtual background: load stream failed, no video track found');\r\n }\r\n yield _super.loadMedia.call(this, videoTrack, input);\r\n yield this.loadDomAndModel();\r\n if (!this.outputStream) {\r\n throw new Error('virtual background: failed to create output stream');\r\n }\r\n logger.log('virtual background: setting new track enabled state', videoTrack.enabled);\r\n this.outputStream.getVideoTracks()[0].enabled = videoTrack.enabled;\r\n return this.outputStream;\r\n });\r\n }\r\n loadMediaStreamTrack(input) {\r\n const _super = Object.create(null, {\r\n loadMedia: { get: () => super.loadMedia }\r\n });\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('virtual background: load track', input);\r\n _super.loadMedia.call(this, input);\r\n yield this.loadDomAndModel();\r\n if (!this.outputTrack) {\r\n throw new Error('virtual background: failed to create output track');\r\n }\r\n return this.outputTrack;\r\n });\r\n }\r\n loadDomAndModel() {\r\n var _a, _b, _c, _d;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (!this.inputStream) {\r\n throw new Error('virtual background: failed to create input stream');\r\n }\r\n if (!this.loadFuture) {\r\n this.loadFuture = new Future();\r\n yield ((_a = this.disposeFuture) === null || _a === void 0 ? void 0 : _a.promise);\r\n this.disposeFuture = new Future();\r\n this.trackSettings = (_b = this.inputTrack) === null || _b === void 0 ? void 0 : _b.getSettings();\r\n if (!this.trackSettings) {\r\n throw new Error('virtual background: unable to determine input track settings');\r\n }\r\n this.setupDom(this.trackSettings.height, this.trackSettings.width);\r\n this.detectQuirks();\r\n yield this.preloadAssets();\r\n yield this.loadModel();\r\n if (!this.videoEl) {\r\n throw new Error('virtual background: unable to create input video element');\r\n }\r\n this.videoEl.srcObject = this.inputStream;\r\n logger.log(`virtual background: capturing output stream at frameRate = ${this.frameRate}`);\r\n const effectStream = (_c = this.outputEl) === null || _c === void 0 ? void 0 : _c.captureStream(this.frameRate);\r\n this.effectTrack = effectStream === null || effectStream === void 0 ? void 0 : effectStream.getVideoTracks()[0];\r\n this.frameInterval = 1000 / this.frameRate;\r\n this.requestFrame = () => requestAnimationFrame(this.handleFrame);\r\n try {\r\n this.lastFrameTime = performance.now();\r\n (_d = this.requestFrame) === null || _d === void 0 ? void 0 : _d.call(this);\r\n this.loadFuture.resolve();\r\n }\r\n catch (error) {\r\n this.loadFuture.reject(error);\r\n throw error;\r\n }\r\n }\r\n return this.loadFuture.promise;\r\n });\r\n }\r\n createPipeline(renderConfig) {\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('virtual background: creating pipeline', renderConfig);\r\n return new Promise((resolve) => {\r\n if (!this.outputEl || !this.inputEl) {\r\n throw new Error('virtual background: unable to create pipeline');\r\n }\r\n const config = getConfig(this.outputEl.height, this.outputEl.width, this.options.quality, this.options.generator, renderConfig, this.handleModelResolver, \"https://models.intelligence.webex.com/ladon\", \"false\" === 'true');\r\n logger.log('virtual background: pipeline created', config);\r\n resolve(new Pipeline(this.inputEl, this.outputEl, config));\r\n });\r\n });\r\n }\r\n loadModel() {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n let config;\r\n logger.log('virtual background: loading model with mode:', this.options.mode);\r\n switch (this.options.mode) {\r\n case VirtualBackgroundMode.Blur: {\r\n if (!this.options.blurStrength) {\r\n throw new Error('virtual background: missing `blurStrength` option');\r\n }\r\n config = getBlurConfig(this.options.blurStrength, this.options.mirror);\r\n break;\r\n }\r\n case VirtualBackgroundMode.Image: {\r\n if (!this.options.bgImageUrl) {\r\n throw new Error('virtual background: missing `bgImageUrl` option');\r\n }\r\n if (!this.backgroundEl) {\r\n throw new Error('virtual background: missing hidden background element');\r\n }\r\n const image = yield loadImageFromUrl(this.options.bgImageUrl);\r\n config = getBackgroundConfig(this.backgroundEl, false, this.options.mirror);\r\n drawImage(image, this.backgroundEl);\r\n break;\r\n }\r\n case VirtualBackgroundMode.Video: {\r\n if (!this.options.bgVideoUrl) {\r\n throw new Error('virtual background: missing `bgVideoUrl` option');\r\n }\r\n if (!this.backgroundEl) {\r\n throw new Error('virtual background: missing hidden background element');\r\n }\r\n config = getBackgroundConfig(this.backgroundEl, true, this.options.mirror);\r\n this.virtualVideoEl = yield loadVideoFromUrl(this.options.bgVideoUrl);\r\n break;\r\n }\r\n default:\r\n throw new Error('virtual background: invalid options supplied to the effect');\r\n }\r\n yield ((_a = this.model) === null || _a === void 0 ? void 0 : _a.destroy());\r\n this.model = yield this.createPipeline(config);\r\n return (_b = this.model) === null || _b === void 0 ? void 0 : _b.load();\r\n });\r\n }\r\n handleFrame(timestamp) {\r\n var _a, _b, _c, _d;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n const elapsedSinceLastFrame = timestamp - this.lastFrameTime;\r\n if (elapsedSinceLastFrame < this.frameInterval) {\r\n (_a = this.requestFrame) === null || _a === void 0 ? void 0 : _a.call(this);\r\n return;\r\n }\r\n this.lastFrameTime += this.frameInterval;\r\n try {\r\n if (!this.videoEl) {\r\n throw new Error('virtual background: missing hidden video element');\r\n }\r\n if (!this.inputEl) {\r\n throw new Error('virtual background: missing input canvas element');\r\n }\r\n if (!this.isReady) {\r\n return;\r\n }\r\n yield this.manageEffectRestoration();\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n drawImage(this.videoEl, this.inputEl);\r\n if (this.options.mode === VirtualBackgroundMode.Video) {\r\n if (!this.virtualVideoEl) {\r\n throw new Error('virtual background: no background video element');\r\n }\r\n if (!this.backgroundEl) {\r\n throw new Error('virtual background: no background element');\r\n }\r\n drawImage(this.virtualVideoEl, this.backgroundEl);\r\n }\r\n yield ((_b = this.model) === null || _b === void 0 ? void 0 : _b.onFrame());\r\n try {\r\n (_c = this.onFrameProcessedCallback) === null || _c === void 0 ? void 0 : _c.call(this, timestamp);\r\n }\r\n catch (e) {\r\n logger.log('virtual background: issue invoking callback', e);\r\n }\r\n }\r\n catch (e) {\r\n logger.log('virtual background: issue rendering frame');\r\n }\r\n (_d = this.requestFrame) === null || _d === void 0 ? void 0 : _d.call(this);\r\n });\r\n }\r\n manageEffectRestoration() {\r\n var _a, _b, _c, _d;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n const inputTrackEnabled = ((_a = this.inputTrack) === null || _a === void 0 ? void 0 : _a.enabled) && !((_b = this.inputTrack) === null || _b === void 0 ? void 0 : _b.muted);\r\n if (this.restoreEffectOnTrackEnable && !inputTrackEnabled) {\r\n (_c = this.requestFrame) === null || _c === void 0 ? void 0 : _c.call(this);\r\n return;\r\n }\r\n if (this.restoreEffectOnTrackEnable && inputTrackEnabled) {\r\n logger.log('virtual background: re-enabling effect as the track is now enabled');\r\n this.restoreEffectOnTrackEnable = false;\r\n yield this.enable();\r\n return;\r\n }\r\n if (this.isEnabled && !inputTrackEnabled) {\r\n logger.log('virtual background: input track disabled; disabling effect');\r\n this.restoreEffectOnTrackEnable = true;\r\n yield this.disable();\r\n (_d = this.requestFrame) === null || _d === void 0 ? void 0 : _d.call(this);\r\n }\r\n });\r\n }\r\n setupDom(height, width) {\r\n logger.log('virtual background: setting up dom with dimension', { height, width });\r\n if (!height || !width) {\r\n throw new Error(`virtual background: missing dimensions: height=${height}, width=${width})`);\r\n }\r\n this.uniqueId = Date.now();\r\n this.videoEl = getVideoEl(height, width, this.uniqueId.toString());\r\n this.inputEl = getCanvasEl(height, width, `input-${this.uniqueId}`);\r\n this.outputEl = getCanvasEl(height, width, `output-${this.uniqueId}`, true);\r\n this.backgroundEl = getCanvasEl(height, width, `background-${this.uniqueId}`);\r\n this.videoEl.setAttribute('autoplay', '');\r\n this.videoEl.setAttribute('playsinline', '');\r\n this.videoEl.setAttribute('muted', '');\r\n this.videoEl.addEventListener('loadedmetadata', this.handleVideoLoadedMetadata);\r\n this.videoEl.addEventListener('resize', this.handleVideoResize, false);\r\n }\r\n detectQuirks() {\r\n var _a, _b;\r\n (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.getContext('2d', { willReadFrequently: true });\r\n (_b = this.outputEl) === null || _b === void 0 ? void 0 : _b.getContext('webgl2');\r\n if (isIos()) {\r\n const mql = portraitMql();\r\n this.handleOrientationChange(mql);\r\n mql === null || mql === void 0 ? void 0 : mql.addEventListener('change', this.handleOrientationChange);\r\n }\r\n }\r\n handleVideoLoadedMetadata() {\r\n var _a;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield ((_a = this.videoEl) === null || _a === void 0 ? void 0 : _a.play());\r\n });\r\n }\r\n handleVideoResize() {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n yield ((_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.promise);\r\n const oldSettings = this.trackSettings;\r\n const newSettings = (_b = this.inputTrack) === null || _b === void 0 ? void 0 : _b.getSettings();\r\n if (((newSettings === null || newSettings === void 0 ? void 0 : newSettings.width) && (oldSettings === null || oldSettings === void 0 ? void 0 : oldSettings.width) && (newSettings === null || newSettings === void 0 ? void 0 : newSettings.width) !== (oldSettings === null || oldSettings === void 0 ? void 0 : oldSettings.width)) ||\r\n ((newSettings === null || newSettings === void 0 ? void 0 : newSettings.height) && (oldSettings === null || oldSettings === void 0 ? void 0 : oldSettings.height) && (newSettings === null || newSettings === void 0 ? void 0 : newSettings.height) !== (oldSettings === null || oldSettings === void 0 ? void 0 : oldSettings.height))) {\r\n logger.log('virtual background: video resize detected', { oldSettings, newSettings });\r\n yield this.updateSize(newSettings.width, newSettings.height);\r\n }\r\n });\r\n }\r\n handleModelResolver(modelPath) {\r\n return memoizedFetchSignedUrl(`ladon${modelPath}`, this.options.authToken, this.options.env);\r\n }\r\n enable() {\r\n const _super = Object.create(null, {\r\n enable: { get: () => super.enable }\r\n });\r\n var _a, _b, _c, _d, _e, _f;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (((_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.state) === FutureState.Rejected) {\r\n logger.warn('virtual background: model load failed, cannot enable effect');\r\n return false;\r\n }\r\n if (((_b = this.loadFuture) === null || _b === void 0 ? void 0 : _b.state) === FutureState.Pending) {\r\n yield ((_c = this.loadFuture) === null || _c === void 0 ? void 0 : _c.promise);\r\n }\r\n logger.log('virtual background: enabling effect');\r\n if (this.isReady && this.effectTrack && this.inputTrack) {\r\n try {\r\n yield _super.enable.call(this);\r\n (_d = this.outputStream) === null || _d === void 0 ? void 0 : _d.removeTrack(this.inputTrack);\r\n (_e = this.outputStream) === null || _e === void 0 ? void 0 : _e.addTrack(this.effectTrack);\r\n (_f = this.requestFrame) === null || _f === void 0 ? void 0 : _f.call(this);\r\n return true;\r\n }\r\n catch (e) {\r\n this.isEnabled = false;\r\n throw e;\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n disable() {\r\n const _super = Object.create(null, {\r\n disable: { get: () => super.disable }\r\n });\r\n var _a, _b, _c, _d, _e;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (((_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.state) === FutureState.Rejected) {\r\n logger.warn('virtual background: model load failed, disabling effect anyway');\r\n }\r\n if (((_b = this.loadFuture) === null || _b === void 0 ? void 0 : _b.state) === FutureState.Pending) {\r\n yield ((_c = this.loadFuture) === null || _c === void 0 ? void 0 : _c.promise);\r\n }\r\n logger.log('virtual background: disabling effect');\r\n if (this.isReady && this.effectTrack && this.inputTrack) {\r\n try {\r\n yield _super.disable.call(this);\r\n (_d = this.outputStream) === null || _d === void 0 ? void 0 : _d.removeTrack(this.effectTrack);\r\n (_e = this.outputStream) === null || _e === void 0 ? void 0 : _e.addTrack(this.inputTrack);\r\n return true;\r\n }\r\n catch (e) {\r\n this.isEnabled = true;\r\n throw e;\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n dispose() {\r\n const _super = Object.create(null, {\r\n dispose: { get: () => super.dispose }\r\n });\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n logger.log('virtual background: disposing effect');\r\n if (((_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.state) === FutureState.Rejected) {\r\n logger.warn('virtual background: model load failed, cleaning up resources');\r\n }\r\n else if (((_b = this.loadFuture) === null || _b === void 0 ? void 0 : _b.state) === FutureState.Pending) {\r\n this.loadFuture.reject(new Error('virtual background: loading interrupted by dispose'));\r\n }\r\n else if (((_c = this.loadFuture) === null || _c === void 0 ? void 0 : _c.state) === FutureState.Resolved) {\r\n yield this.loadFuture.promise;\r\n this.emit(EffectEvent.Disposed);\r\n }\r\n yield this.disable();\r\n yield ((_d = this.model) === null || _d === void 0 ? void 0 : _d.destroy());\r\n (_e = portraitMql()) === null || _e === void 0 ? void 0 : _e.removeEventListener('change', this.handleOrientationChange);\r\n (_f = this.videoEl) === null || _f === void 0 ? void 0 : _f.removeEventListener('loadedmetadata', this.handleVideoLoadedMetadata);\r\n (_g = this.videoEl) === null || _g === void 0 ? void 0 : _g.removeEventListener('resize', this.handleVideoResize);\r\n (_h = this.inputEl) === null || _h === void 0 ? void 0 : _h.remove();\r\n (_j = this.outputEl) === null || _j === void 0 ? void 0 : _j.remove();\r\n (_k = this.videoEl) === null || _k === void 0 ? void 0 : _k.remove();\r\n (_l = this.backgroundEl) === null || _l === void 0 ? void 0 : _l.remove();\r\n (_m = this.virtualVideoEl) === null || _m === void 0 ? void 0 : _m.remove();\r\n delete this.requestFrame;\r\n delete this.model;\r\n delete this.inputEl;\r\n delete this.outputEl;\r\n delete this.videoEl;\r\n delete this.backgroundEl;\r\n delete this.virtualVideoEl;\r\n try {\r\n yield _super.dispose.call(this);\r\n (_o = this.disposeFuture) === null || _o === void 0 ? void 0 : _o.resolve();\r\n }\r\n catch (error) {\r\n (_p = this.disposeFuture) === null || _p === void 0 ? void 0 : _p.reject(error);\r\n throw error;\r\n }\r\n this.loadFuture = undefined;\r\n });\r\n }\r\n setOnFrameProcessedCallback(callback) {\r\n this.onFrameProcessedCallback = callback;\r\n }\r\n updateOptions(options) {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (((_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.state) === FutureState.Pending) {\r\n try {\r\n yield this.loadFuture.promise;\r\n }\r\n catch (error) {\r\n logger.warn('virtual background: previous loading failed, continuing with update', error);\r\n }\r\n }\r\n Object.keys(options).forEach((key) => {\r\n var _a;\r\n this.options[key] = (_a = options[key]) !== null && _a !== void 0 ? _a : this.options[key];\r\n });\r\n logger.log('virtual background: reloading effect with updated options', omitAuthToken(this.options));\r\n this.loadFuture = new Future();\r\n try {\r\n yield this.loadModel();\r\n this.loadFuture.resolve();\r\n (_b = this.requestFrame) === null || _b === void 0 ? void 0 : _b.call(this);\r\n }\r\n catch (error) {\r\n this.loadFuture.reject(error);\r\n throw error;\r\n }\r\n });\r\n }\r\n updateSize(width, height) {\r\n var _a, _b;\r\n return __awaiter$6(this, void 0, void 0, function* () {\r\n if (((_a = this.loadFuture) === null || _a === void 0 ? void 0 : _a.state) === FutureState.Pending) {\r\n try {\r\n yield this.loadFuture.promise;\r\n }\r\n catch (error) {\r\n logger.warn('virtual background: previous loading failed, continuing with size update', error);\r\n }\r\n }\r\n if (this.videoEl) {\r\n this.videoEl.width = width;\r\n this.videoEl.height = height;\r\n }\r\n if (this.inputEl) {\r\n this.inputEl.width = width;\r\n this.inputEl.height = height;\r\n }\r\n if (this.outputEl) {\r\n this.outputEl.width = width;\r\n this.outputEl.height = height;\r\n }\r\n if (this.backgroundEl) {\r\n this.backgroundEl.width = width;\r\n this.backgroundEl.height = height;\r\n }\r\n if (this.trackSettings) {\r\n this.trackSettings.width = width;\r\n this.trackSettings.height = height;\r\n }\r\n logger.log('virtual background: updating size', { width, height });\r\n this.loadFuture = new Future();\r\n try {\r\n yield this.loadModel();\r\n this.loadFuture.resolve();\r\n (_b = this.requestFrame) === null || _b === void 0 ? void 0 : _b.call(this);\r\n }\r\n catch (error) {\r\n this.loadFuture.reject(error);\r\n throw error;\r\n }\r\n });\r\n }\r\n}\r\nVirtualBackgroundEffect.kind = 'virtual-background-effect';\r\nVirtualBackgroundEffect.BlurStrength = BlurStrength;\r\nVirtualBackgroundEffect.Quality = Quality;\r\nconst createVirtualBackgroundEffect = (options, preloadAssets) => createEffect(VirtualBackgroundEffect, options, preloadAssets);\n\nexport { BaseCameraEffect, BaseEffect, BaseMicrophoneEffect, BlurStrength, DEFAULT_FRAME_RATE, EffectEnv, EffectEvent, GainEffect, Logger, NoiseReductionEffect, NoiseReductionMode, Quality, RateEstimator, RateEstimatorEvent, RateEstimatorStatus, VirtualBackgroundEffect, VirtualBackgroundMode, createEffect, createNoiseReductionEffect, createVirtualBackgroundEffect, defaultOptions, logger };\n//# sourceMappingURL=index.js.map\n","var assign = require('lodash/assign');\n\n/// Following code is largely pasted from Backbone.js\n\n// Helper function to correctly set up the prototype chain, for subclasses.\n// Similar to `goog.inherits`, but uses a hash of prototype properties and\n// class properties to be extended.\nvar extend = function(protoProps) {\n var parent = this;\n var child;\n var args = [].slice.call(arguments);\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent's constructor.\n if (protoProps && protoProps.hasOwnProperty('constructor')) {\n child = protoProps.constructor;\n } else {\n child = function () {\n return parent.apply(this, arguments);\n };\n }\n\n // Add static properties to the constructor function from parent\n assign(child, parent);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function.\n var Surrogate = function(){ this.constructor = child; };\n Surrogate.prototype = parent.prototype;\n child.prototype = new Surrogate();\n\n // Mix in all prototype properties to the subclass if supplied.\n if (protoProps) {\n args.unshift(child.prototype);\n assign.apply(null, args);\n }\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n};\n\n// Expose the extend function\nmodule.exports = extend;\n","var AmpersandEvents = require('ampersand-events');\nvar classExtend = require('ampersand-class-extend');\nvar isArray = require('lodash/isArray');\nvar bind = require('lodash/bind');\nvar assign = require('lodash/assign');\nvar slice = [].slice;\n\nfunction Collection(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator) this.comparator = options.comparator;\n if (options.parent) this.parent = options.parent;\n if (!this.mainIndex) {\n var idAttribute = this.model && this.model.prototype && this.model.prototype.idAttribute;\n this.mainIndex = idAttribute || 'id';\n }\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, assign({silent: true}, options));\n}\n\nassign(Collection.prototype, AmpersandEvents, {\n initialize: function () {},\n\n isModel: function (model) {\n return this.model && model instanceof this.model;\n },\n\n add: function (models, options) {\n return this.set(models, assign({merge: false, add: true, remove: false}, options));\n },\n\n // overridable parse method\n parse: function (res, options) {\n return res;\n },\n\n // overridable serialize method\n serialize: function () {\n return this.map(function (model) {\n if (model.serialize) {\n return model.serialize();\n } else {\n var out = {};\n assign(out, model);\n delete out.collection;\n return out;\n }\n });\n },\n\n toJSON: function () {\n return this.serialize();\n },\n\n set: function (models, options) {\n options = assign({add: true, remove: true, merge: true}, options);\n if (options.parse) models = this.parse(models, options);\n var singular = !isArray(models);\n models = singular ? (models ? [models] : []) : models.slice();\n var id, model, attrs, existing, sort, i, length;\n var at = options.at;\n var sortable = this.comparator && (at == null) && options.sort !== false;\n var sortAttr = ('string' === typeof this.comparator) ? this.comparator : null;\n var toAdd = [], toRemove = [], modelMap = {};\n var add = options.add, merge = options.merge, remove = options.remove;\n var order = !sortable && add && remove ? [] : false;\n var targetProto = this.model && this.model.prototype || Object.prototype;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n for (i = 0, length = models.length; i < length; i++) {\n attrs = models[i] || {};\n if (this.isModel(attrs)) {\n id = model = attrs;\n } else if (targetProto.generateId) {\n id = targetProto.generateId(attrs);\n } else {\n id = attrs[this.mainIndex];\n if (id === undefined && this._isDerivedIndex(targetProto)) {\n id = targetProto._derived[this.mainIndex].fn.call(attrs);\n }\n }\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n if (existing = this.get(id)) {\n if (remove) modelMap[existing.cid || existing[this.mainIndex]] = true;\n if (merge) {\n attrs = attrs === model ? model.attributes : attrs;\n if (options.parse) attrs = existing.parse(attrs, options);\n // if this is model\n if (existing.set) {\n existing.set(attrs, options);\n if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;\n } else {\n // if not just update the properties\n assign(existing, attrs);\n }\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(attrs, options);\n if (!model) continue;\n toAdd.push(model);\n this._addReference(model, options);\n }\n\n // Do not add multiple models with the same `id`.\n model = existing || model;\n if (!model) continue;\n if (order && ((model.isNew && model.isNew() || !model[this.mainIndex]) || !modelMap[model.cid || model[this.mainIndex]])) order.push(model);\n modelMap[model[this.mainIndex]] = true;\n }\n\n // Remove nonexistent models if appropriate.\n if (remove) {\n for (i = 0, length = this.length; i < length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid || model[this.mainIndex]]) toRemove.push(model);\n }\n if (toRemove.length) this.remove(toRemove, options);\n\n // Add indexes again to make sure they were not removed above.\n for (i = 0, length = toAdd.length; i < length; i++) {\n this._index(toAdd[i]);\n }\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n if (toAdd.length || (order && order.length)) {\n if (sortable) sort = true;\n if (at != null) {\n for (i = 0, length = toAdd.length; i < length; i++) {\n this.models.splice(at + i, 0, toAdd[i]);\n }\n } else {\n var orderedModels = order || toAdd;\n for (i = 0, length = orderedModels.length; i < length; i++) {\n this.models.push(orderedModels[i]);\n }\n }\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort events.\n if (!options.silent) {\n for (i = 0, length = toAdd.length; i < length; i++) {\n model = toAdd[i];\n if (model.trigger) {\n model.trigger('add', model, this, options);\n } else {\n this.trigger('add', model, this, options);\n }\n }\n if (sort || (order && order.length)) this.trigger('sort', this, options);\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n get: function (query, indexName) {\n if (query == null) return;\n\n var collectionMainIndex = this.mainIndex;\n var index = this._indexes[indexName || collectionMainIndex];\n\n return (\n (\n index && (\n index[query] || (\n query[collectionMainIndex] !== undefined &&\n index[query[collectionMainIndex]]\n )\n )\n ) ||\n this._indexes.cid[query] ||\n this._indexes.cid[query.cid]\n );\n },\n\n // Get the model at the given index.\n at: function (index) {\n return this.models[index];\n },\n\n remove: function (models, options) {\n var singular = !isArray(models);\n var i, length, model, index;\n\n models = singular ? [models] : slice.call(models);\n options || (options = {});\n for (i = 0, length = models.length; i < length; i++) {\n model = models[i] = this.get(models[i]);\n if (!model) continue;\n this._deIndex(model);\n index = this.models.indexOf(model);\n this.models.splice(index, 1);\n if (!options.silent) {\n options.index = index;\n if (model.trigger) {\n model.trigger('remove', model, this, options);\n } else {\n this.trigger('remove', model, this, options);\n }\n }\n this._removeReference(model, options);\n }\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function (models, options) {\n options || (options = {});\n for (var i = 0, length = this.models.length; i < length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, assign({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n sort: function (options) {\n var self = this;\n if (!this.comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n if (typeof this.comparator === 'string') {\n this.models.sort(function (left, right) {\n if (left.get) {\n left = left.get(self.comparator);\n right = right.get(self.comparator);\n } else {\n left = left[self.comparator];\n right = right[self.comparator];\n }\n if (left > right || left === void 0) return 1;\n if (left < right || right === void 0) return -1;\n return 0;\n });\n } else if (this.comparator.length === 1) {\n this.models.sort(function (left, right) {\n left = self.comparator(left);\n right = self.comparator(right);\n if (left > right || left === void 0) return 1;\n if (left < right || right === void 0) return -1;\n return 0;\n });\n } else {\n this.models.sort(bind(this.comparator,this));\n }\n\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function () {\n var list = slice.call(this.indexes || []);\n var i = 0;\n list.push(this.mainIndex);\n list.push('cid');\n var l = list.length;\n this.models = [];\n this._indexes = {};\n for (; i < l; i++) {\n this._indexes[list[i]] = {};\n }\n },\n\n _prepareModel: function (attrs, options) {\n // if we haven't defined a constructor, skip this\n if (!this.model) return attrs;\n\n if (this.isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n } else {\n options = options ? assign({}, options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n }\n },\n\n _deIndex: function (model, attribute, value) {\n var indexVal;\n if (attribute !== undefined) {\n if (undefined === this._indexes[attribute]) throw new Error('Given attribute is not an index');\n delete this._indexes[attribute][value];\n return;\n }\n // Not a specific attribute\n for (var indexAttr in this._indexes) {\n indexVal = model.hasOwnProperty(indexAttr) ? model[indexAttr] : (model.get && model.get(indexAttr));\n delete this._indexes[indexAttr][indexVal];\n }\n },\n\n _index: function (model, attribute) {\n var indexVal;\n if (attribute !== undefined) {\n if (undefined === this._indexes[attribute]) throw new Error('Given attribute is not an index');\n indexVal = model[attribute] || (model.get && model.get(attribute));\n if (indexVal) this._indexes[attribute][indexVal] = model;\n return;\n }\n // Not a specific attribute\n for (var indexAttr in this._indexes) {\n indexVal = model.hasOwnProperty(indexAttr) ? model[indexAttr] : (model.get && model.get(indexAttr));\n if (indexVal != null) this._indexes[indexAttr][indexVal] = model;\n }\n },\n\n _isDerivedIndex: function(proto) {\n if (!proto || typeof proto._derived !== 'object') {\n return false;\n }\n return Object.keys(proto._derived).indexOf(this.mainIndex) >= 0;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function (model, options) {\n this._index(model);\n if (!model.collection) model.collection = this;\n if (model.on) model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function (model, options) {\n if (this === model.collection) delete model.collection;\n this._deIndex(model);\n if (model.off) model.off('all', this._onModelEvent, this);\n },\n\n _onModelEvent: function (event, model, collection, options) {\n var eventName = event.split(':')[0];\n var attribute = event.split(':')[1];\n\n if ((eventName === 'add' || eventName === 'remove') && collection !== this) return;\n if (eventName === 'destroy') this.remove(model, options);\n if (model && eventName === 'change' && attribute && this._indexes[attribute]) {\n this._deIndex(model, attribute, model.previousAttributes()[attribute]);\n this._index(model, attribute);\n }\n this.trigger.apply(this, arguments);\n }\n});\n\nObject.defineProperties(Collection.prototype, {\n length: {\n get: function () {\n return this.models.length;\n }\n },\n isCollection: {\n get: function () {\n return true;\n }\n }\n});\n\nvar arrayMethods = [\n 'indexOf',\n 'lastIndexOf',\n 'every',\n 'some',\n 'forEach',\n 'map',\n 'filter',\n 'reduce',\n 'reduceRight'\n];\n\narrayMethods.forEach(function (method) {\n Collection.prototype[method] = function () {\n return this.models[method].apply(this.models, arguments);\n };\n});\n\n// alias each/forEach for maximum compatibility\nCollection.prototype.each = Collection.prototype.forEach;\n\nCollection.extend = classExtend;\n\nmodule.exports = Collection;\n","/*$AMPERSAND_VERSION*/\nvar runOnce = require('lodash/once');\nvar keys = require('lodash/keys');\nvar isEmpty = require('lodash/isEmpty');\nvar assign = require('lodash/assign');\nvar forEach = require('lodash/forEach');\nvar slice = Array.prototype.slice;\n\nvar utils = require('./libs/utils');\n\nvar Events = {\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n on: function (name, callback, context) {\n if (!utils.eventsApi(this, 'on', name, [callback, context]) || !callback) return this;\n this._events || (this._events = {});\n var events = this._events[name] || (this._events[name] = []);\n events.push({callback: callback, context: context, ctx: context || this});\n return this;\n },\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, it will be removed.\n once: function (name, callback, context) {\n if (!utils.eventsApi(this, 'once', name, [callback, context]) || !callback) return this;\n var self = this;\n var once = runOnce(function () {\n self.off(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n return this.on(name, once, context);\n },\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n off: function (name, callback, context) {\n var retain, ev, events, names, i, l, j, k;\n if (!this._events || !utils.eventsApi(this, 'off', name, [callback, context])) return this;\n if (!name && !callback && !context) {\n this._events = void 0;\n return this;\n }\n names = name ? [name] : keys(this._events);\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (events = this._events[name]) {\n this._events[name] = retain = [];\n if (callback || context) {\n for (j = 0, k = events.length; j < k; j++) {\n ev = events[j];\n if ((callback && callback !== ev.callback && callback !== ev.callback._callback) ||\n (context && context !== ev.context)) {\n retain.push(ev);\n }\n }\n }\n if (!retain.length) delete this._events[name];\n }\n }\n\n return this;\n },\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n trigger: function (name) {\n if (!this._events) return this;\n var args = slice.call(arguments, 1);\n if (!utils.eventsApi(this, 'trigger', name, args)) return this;\n var events = this._events[name];\n var allEvents = this._events.all;\n if (events) utils.triggerEvents(events, args);\n if (allEvents) utils.triggerEvents(allEvents, arguments);\n return this;\n },\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n stopListening: function (obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n var remove = !name && !callback;\n if (!callback && typeof name === 'object') callback = this;\n if (obj) (listeningTo = {})[obj._listenId] = obj;\n var self = this;\n forEach(listeningTo, function (item, id) {\n item.off(name, callback, self);\n if (remove || isEmpty(item._events)) delete self._listeningTo[id];\n });\n return this;\n },\n\n // extend an object with event capabilities if passed\n // or just return a new one.\n createEmitter: function (obj) {\n return assign(obj || {}, Events);\n },\n\n listenTo: utils.createListenMethod('on'),\n\n listenToOnce: utils.createListenMethod('once'),\n\n listenToAndRun: function (obj, name, callback) {\n this.listenTo.apply(this, arguments);\n if (!callback && typeof name === 'object') callback = this;\n callback.apply(this);\n return this;\n }\n};\n\n// setup aliases\nEvents.bind = Events.on;\nEvents.unbind = Events.off;\nEvents.removeListener = Events.off;\nEvents.removeAllListeners = Events.off;\nEvents.emit = Events.trigger;\n\nmodule.exports = Events;\n","var uniqueId = require('lodash/uniqueId');\nvar eventSplitter = /\\s+/;\n\n// A difficult-to-believe, but optimized internal dispatch function for\n// triggering events. Tries to keep the usual cases speedy.\nexports.triggerEvents = function triggerEvents(events, args) {\n var ev;\n var i = -1;\n var l = events.length;\n var a1 = args[0];\n var a2 = args[1];\n var a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n};\n\n// Implement fancy features of the Events API such as multiple event\n// names `\"change blur\"` and jQuery-style event maps `{change: action}`\n// in terms of the existing API.\nexports.eventsApi = function eventsApi(obj, action, name, rest) {\n if (!name) return true;\n\n // Handle event maps.\n if (typeof name === 'object') {\n for (var key in name) {\n obj[action].apply(obj, [key, name[key]].concat(rest));\n }\n return false;\n }\n\n // Handle space separated event names.\n if (eventSplitter.test(name)) {\n var names = name.split(eventSplitter);\n for (var i = 0, l = names.length; i < l; i++) {\n obj[action].apply(obj, [names[i]].concat(rest));\n }\n return false;\n }\n\n return true;\n};\n\n// Inversion-of-control versions of `on` and `once`. Tell *this* object to\n// listen to an event in another object ... keeping track of what it's\n// listening to.\nexports.createListenMethod = function createListenMethod(implementation) {\n return function listenMethod(obj, name, callback) {\n if (!obj) {\n throw new Error('Trying to listenTo event: \\'' + name + '\\' but the target object is undefined');\n }\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var id = obj._listenId || (obj._listenId = uniqueId('l'));\n listeningTo[id] = obj;\n if (!callback && typeof name === 'object') callback = this;\n if (typeof obj[implementation] !== 'function') {\n throw new Error('Trying to listenTo event: \\'' + name + '\\' on object: ' + obj.toString() + ' but it does not have an \\'on\\' method so is unbindable');\n }\n obj[implementation](name, callback, this);\n return this;\n };\n};\n","'use strict';\n/*$AMPERSAND_VERSION*/\nvar uniqueId = require('lodash/uniqueId');\nvar assign = require('lodash/assign');\nvar cloneObj = function(obj) { return assign({}, obj); };\nvar omit = require('lodash/omit');\nvar escape = require('lodash/escape');\nvar forOwn = require('lodash/forOwn');\nvar includes = require('lodash/includes');\nvar isString = require('lodash/isString');\nvar isObject = require('lodash/isObject');\nvar isDate = require('lodash/isDate');\nvar isFunction = require('lodash/isFunction');\nvar _isEqual = require('lodash/isEqual'); // to avoid shadowing\nvar has = require('lodash/has');\nvar result = require('lodash/result');\nvar union = require('lodash/union');\nvar Events = require('ampersand-events');\nvar KeyTree = require('key-tree-store');\nvar arrayNext = require('array-next');\nvar changeRE = /^change:/;\nvar noop = function () {};\n\nfunction Base(attrs, options) {\n options || (options = {});\n this.cid || (this.cid = uniqueId('state'));\n this._events = {};\n this._values = {};\n this._eventBubblingHandlerCache = {};\n this._definition = Object.create(this._definition);\n if (options.parse) attrs = this.parse(attrs, options);\n this.parent = options.parent;\n this.collection = options.collection;\n this._keyTree = new KeyTree();\n this._initCollections();\n this._initChildren();\n this._cache = {};\n this._previousAttributes = {};\n if (attrs) this.set(attrs, assign({silent: true, initial: true}, options));\n this._changed = {};\n if (this._derived) this._initDerived();\n if (options.init !== false) this.initialize.apply(this, arguments);\n}\n\nassign(Base.prototype, Events, {\n // can be allow, ignore, reject\n extraProperties: 'ignore',\n\n idAttribute: 'id',\n\n namespaceAttribute: 'namespace',\n\n typeAttribute: 'modelType',\n\n // Stubbed out to be overwritten\n initialize: function () {\n return this;\n },\n\n // Get ID of model per configuration.\n // Should *always* be how ID is determined by other code.\n getId: function () {\n return this[this.idAttribute];\n },\n\n // Get namespace of model per configuration.\n // Should *always* be how namespace is determined by other code.\n getNamespace: function () {\n return this[this.namespaceAttribute];\n },\n\n // Get type of model per configuration.\n // Should *always* be how type is determined by other code.\n getType: function () {\n return this[this.typeAttribute];\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function () {\n return this.getId() == null;\n },\n\n // get HTML-escaped value of attribute\n escape: function (attr) {\n return escape(this.get(attr));\n },\n\n // Check if the model is currently in a valid state.\n isValid: function (options) {\n return this._validate({}, assign(options || {}, { validate: true }));\n },\n\n // Parse can be used remap/restructure/rename incoming properties\n // before they are applied to attributes.\n parse: function (resp, options) {\n //jshint unused:false\n return resp;\n },\n\n // Serialize is the inverse of `parse` it lets you massage data\n // on the way out. Before, sending to server, for example.\n serialize: function (options) {\n var attrOpts = assign({props: true}, options);\n var res = this.getAttributes(attrOpts, true);\n \n var setFromSerializedValue = function (value, key) {\n\t res[key] = this[key].serialize();\n }.bind(this);\n \n forOwn(this._children, setFromSerializedValue);\n forOwn(this._collections, setFromSerializedValue);\n return res;\n },\n\n // Main set method used by generated setters/getters and can\n // be used directly if you need to pass options or set multiple\n // properties at once.\n set: function (key, value, options) {\n var self = this;\n var extraProperties = this.extraProperties;\n var wasChanging, changeEvents, newType, newVal, def, cast, err, attr,\n attrs, dataType, silent, unset, currentVal, initial, hasChanged, isEqual, onChange;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n if (isObject(key) || key === null) {\n attrs = key;\n options = value;\n } else {\n attrs = {};\n attrs[key] = value;\n }\n\n options = options || {};\n\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n unset = options.unset;\n silent = options.silent;\n initial = options.initial;\n\n // Initialize change tracking.\n wasChanging = this._changing;\n this._changing = true;\n changeEvents = [];\n\n // if not already changing, store previous\n if (initial) {\n this._previousAttributes = {};\n } else if (!wasChanging) {\n this._previousAttributes = this.attributes;\n this._changed = {};\n }\n\n // For each `set` attribute...\n for (var i = 0, keys = Object.keys(attrs), len = keys.length; i < len; i++) {\n attr = keys[i];\n newVal = attrs[attr];\n newType = typeof newVal;\n currentVal = this._values[attr];\n def = this._definition[attr];\n\n if (!def) {\n // if this is a child model or collection\n if (this._children[attr] || this._collections[attr]) {\n if (!isObject(newVal)) {\n newVal = {};\n }\n\n this[attr].set(newVal, options);\n continue;\n } else if (extraProperties === 'ignore') {\n continue;\n } else if (extraProperties === 'reject') {\n throw new TypeError('No \"' + attr + '\" property defined on ' + (this.type || 'this') + ' model and extraProperties not set to \"ignore\" or \"allow\"');\n } else if (extraProperties === 'allow') {\n def = this._createPropertyDefinition(attr, 'any');\n } else if (extraProperties) {\n throw new TypeError('Invalid value for extraProperties: \"' + extraProperties + '\"');\n }\n }\n\n isEqual = this._getCompareForType(def.type);\n onChange = this._getOnChangeForType(def.type);\n dataType = this._dataTypes[def.type];\n\n // check type if we have one\n if (dataType && dataType.set) {\n cast = dataType.set(newVal);\n newVal = cast.val;\n newType = cast.type;\n }\n\n // If we've defined a test, run it\n if (def.test) {\n err = def.test.call(this, newVal, newType);\n if (err) {\n throw new TypeError('Property \\'' + attr + '\\' failed validation with error: ' + err);\n }\n }\n\n // If we are required but undefined, throw error.\n // If we are null and are not allowing null, throw error\n // If we have a defined type and the new type doesn't match, and we are not null, throw error.\n // If we require specific value and new one is not one of them, throw error (unless it has default value or we're unsetting it with undefined).\n\n if (newVal === undefined && def.required) {\n throw new TypeError('Required property \\'' + attr + '\\' must be of type ' + def.type + '. Tried to set ' + newVal);\n }\n if (newVal === null && def.required && !def.allowNull) {\n throw new TypeError('Property \\'' + attr + '\\' must be of type ' + def.type + ' (cannot be null). Tried to set ' + newVal);\n }\n if ((def.type && def.type !== 'any' && def.type !== newType) && newVal !== null && newVal !== undefined) {\n throw new TypeError('Property \\'' + attr + '\\' must be of type ' + def.type + '. Tried to set ' + newVal);\n }\n if (def.values && !includes(def.values, newVal)) {\n var defaultValue = result(def, 'default');\n if (unset && defaultValue !== undefined) {\n newVal = defaultValue;\n } else if (!unset || (unset && newVal !== undefined)) {\n throw new TypeError('Property \\'' + attr + '\\' must be one of values: ' + def.values.join(', ') + '. Tried to set ' + newVal);\n }\n }\n\n // We know this has 'changed' if it's the initial set, so skip a potentially expensive isEqual check.\n hasChanged = initial || !isEqual(currentVal, newVal, attr);\n\n // enforce `setOnce` for properties if set\n if (def.setOnce && currentVal !== undefined && hasChanged) {\n throw new TypeError('Property \\'' + attr + '\\' can only be set once.');\n }\n\n // set/unset attributes.\n // If this is not the initial set, keep track of changed attributes\n // and push to changeEvents array so we can fire events.\n if (hasChanged) {\n\n // This fires no matter what, even on initial set.\n onChange(newVal, currentVal, attr);\n\n // If this is a change (not an initial set), mark the change.\n // Note it's impossible to unset on the initial set (it will already be unset),\n // so we only include that logic here.\n if (!initial) {\n this._changed[attr] = newVal;\n this._previousAttributes[attr] = currentVal;\n if (unset) {\n // FIXME delete is very slow. Can we get away with setting to undefined?\n delete this._values[attr];\n }\n if (!silent) {\n changeEvents.push({prev: currentVal, val: newVal, key: attr});\n }\n }\n if (!unset) {\n this._values[attr] = newVal;\n }\n } else {\n // Not changed\n // FIXME delete is very slow. Can we get away with setting to undefined?\n delete this._changed[attr];\n }\n }\n\n // Fire events. This array is not populated if we are told to be silent.\n if (changeEvents.length) this._pending = true;\n changeEvents.forEach(function (change) {\n self.trigger('change:' + change.key, self, change.val, options);\n });\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (wasChanging) return this;\n while (this._pending) {\n this._pending = false;\n this.trigger('change', this, options);\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n get: function (attr) {\n return this[attr];\n },\n\n // Toggle boolean properties or properties that have a `values`\n // array in its definition.\n toggle: function (property) {\n var def = this._definition[property];\n if (def.type === 'boolean') {\n // if it's a bool, just flip it\n this[property] = !this[property];\n } else if (def && def.values) {\n // If it's a property with an array of values\n // skip to the next one looping back if at end.\n this[property] = arrayNext(def.values, this[property]);\n } else {\n throw new TypeError('Can only toggle properties that are type `boolean` or have `values` array.');\n }\n return this;\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function () {\n return cloneObj(this._previousAttributes);\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function (attr) {\n if (attr == null) return !!Object.keys(this._changed).length;\n if (has(this._derived, attr)) {\n return this._derived[attr].depList.some(function (dep) {\n return this.hasChanged(dep);\n }, this);\n }\n return has(this._changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function (diff) {\n if (!diff) return this.hasChanged() ? cloneObj(this._changed) : false;\n var val, changed = false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var def, isEqual;\n for (var attr in diff) {\n def = this._definition[attr];\n if (!def) continue;\n isEqual = this._getCompareForType(def.type);\n if (isEqual(old[attr], (val = diff[attr]))) continue;\n (changed || (changed = {}))[attr] = val;\n }\n return changed;\n },\n\n toJSON: function () {\n return this.serialize();\n },\n\n unset: function (attrs, options) {\n var self = this;\n attrs = Array.isArray(attrs) ? attrs : [attrs];\n attrs.forEach(function (key) {\n var def = self._definition[key];\n if (!def) return;\n var val;\n if (def.required) {\n val = result(def, 'default');\n return self.set(key, val, options);\n } else {\n return self.set(key, val, assign({}, options, {unset: true}));\n }\n });\n },\n\n clear: function (options) {\n var self = this;\n Object.keys(this.attributes).forEach(function (key) {\n self.unset(key, options);\n });\n return this;\n },\n\n previous: function (attr) {\n if (attr == null || !Object.keys(this._previousAttributes).length) return null;\n return this._previousAttributes[attr];\n },\n\n // Get default values for a certain type\n _getDefaultForType: function (type) {\n var dataType = this._dataTypes[type];\n return dataType && dataType['default'];\n },\n\n // Determine which comparison algorithm to use for comparing a property\n _getCompareForType: function (type) {\n var dataType = this._dataTypes[type];\n if (dataType && dataType.compare) return dataType.compare.bind(this);\n return _isEqual; // if no compare function is defined, use _.isEqual\n },\n\n _getOnChangeForType : function(type){\n var dataType = this._dataTypes[type];\n if (dataType && dataType.onChange) return dataType.onChange.bind(this);\n return noop;\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function (attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = assign({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, assign(options || {}, {validationError: error}));\n return false;\n },\n\n _createPropertyDefinition: function (name, desc, isSession) {\n return createPropertyDefinition(this, name, desc, isSession);\n },\n\n // just makes friendlier errors when trying to define a new model\n // only used when setting up original property definitions\n _ensureValidType: function (type) {\n return includes(['string', 'number', 'boolean', 'array', 'object', 'date', 'state', 'any']\n .concat(Object.keys(this._dataTypes)), type) ? type : undefined;\n },\n\n getAttributes: function (options, raw) {\n options = assign({\n session: false,\n props: false,\n derived: false\n }, options || {});\n var res = {};\n var val, def;\n for (var item in this._definition) {\n def = this._definition[item];\n if ((options.session && def.session) || (options.props && !def.session)) {\n val = raw ? this._values[item] : this[item];\n if (raw && val && isFunction(val.serialize)) val = val.serialize();\n if (typeof val === 'undefined') val = result(def, 'default');\n if (typeof val !== 'undefined') res[item] = val;\n }\n }\n if (options.derived) {\n for (var derivedItem in this._derived) res[derivedItem] = this[derivedItem];\n }\n return res;\n },\n\n _initDerived: function () {\n var self = this;\n\n forOwn(this._derived, function (value, name) {\n var def = self._derived[name];\n def.deps = def.depList;\n\n var update = function () {\n var newVal = def.fn.call(self);\n\n if (self._cache[name] !== newVal || !def.cache) {\n if (def.cache) {\n self._previousAttributes[name] = self._cache[name];\n }\n self._cache[name] = newVal;\n self.trigger('change:' + name, self, self._cache[name]);\n }\n };\n\n def.deps.forEach(function (propString) {\n self._keyTree.add(propString, update);\n });\n });\n\n this.on('all', function (eventName) {\n if (changeRE.test(eventName)) {\n self._keyTree.get(eventName.split(':')[1]).forEach(function (fn) {\n fn();\n });\n }\n }, this);\n },\n\n _getDerivedProperty: function (name, flushCache) {\n // is this a derived property that is cached\n if (this._derived[name].cache) {\n //set if this is the first time, or flushCache is set\n if (flushCache || !this._cache.hasOwnProperty(name)) {\n this._cache[name] = this._derived[name].fn.apply(this);\n }\n return this._cache[name];\n } else {\n return this._derived[name].fn.apply(this);\n }\n },\n\n _initCollections: function () {\n var coll;\n if (!this._collections) return;\n for (coll in this._collections) {\n this._safeSet(coll, new this._collections[coll](null, {parent: this}));\n }\n },\n\n _initChildren: function () {\n var child;\n if (!this._children) return;\n for (child in this._children) {\n this._safeSet(child, new this._children[child]({}, {parent: this}));\n this.listenTo(this[child], 'all', this._getCachedEventBubblingHandler(child));\n }\n },\n\n // Returns a bound handler for doing event bubbling while\n // adding a name to the change string.\n _getCachedEventBubblingHandler: function (propertyName) {\n if (!this._eventBubblingHandlerCache[propertyName]) {\n this._eventBubblingHandlerCache[propertyName] = function (name, model, newValue) {\n if (changeRE.test(name)) {\n this.trigger('change:' + propertyName + '.' + name.split(':')[1], model, newValue);\n } else if (name === 'change') {\n this.trigger('change', this);\n }\n }.bind(this);\n }\n return this._eventBubblingHandlerCache[propertyName];\n },\n\n // Check that all required attributes are present\n _verifyRequired: function () {\n var attrs = this.attributes; // should include session\n for (var def in this._definition) {\n if (this._definition[def].required && typeof attrs[def] === 'undefined') {\n return false;\n }\n }\n return true;\n },\n\n // expose safeSet method\n _safeSet: function safeSet(property, value) {\n if (property in this) {\n throw new Error('Encountered namespace collision while setting instance property `' + property + '`');\n }\n this[property] = value;\n return this;\n }\n});\n\n// getter for attributes\nObject.defineProperties(Base.prototype, {\n attributes: {\n get: function () {\n return this.getAttributes({props: true, session: true});\n }\n },\n all: {\n get: function () {\n return this.getAttributes({\n session: true,\n props: true,\n derived: true\n });\n }\n },\n isState: {\n get: function () { return true; },\n set: function () { }\n }\n});\n\n// helper for creating/storing property definitions and creating\n// appropriate getters/setters\nfunction createPropertyDefinition(object, name, desc, isSession) {\n var def = object._definition[name] = {};\n var type, descArray;\n\n if (isString(desc)) {\n // grab our type if all we've got is a string\n type = object._ensureValidType(desc);\n if (type) def.type = type;\n } else {\n //Transform array of ['type', required, default] to object form\n if (Array.isArray(desc)) {\n descArray = desc;\n desc = {\n type: descArray[0],\n required: descArray[1],\n 'default': descArray[2]\n };\n }\n\n type = object._ensureValidType(desc.type);\n if (type) def.type = type;\n\n if (desc.required) def.required = true;\n\n if (desc['default'] && typeof desc['default'] === 'object') {\n throw new TypeError('The default value for ' + name + ' cannot be an object/array, must be a value or a function which returns a value/object/array');\n }\n\n def['default'] = desc['default'];\n\n def.allowNull = desc.allowNull ? desc.allowNull : false;\n if (desc.setOnce) def.setOnce = true;\n if (def.required && def['default'] === undefined && !def.setOnce) def['default'] = object._getDefaultForType(type);\n def.test = desc.test;\n def.values = desc.values;\n }\n if (isSession) def.session = true;\n\n if (!type) {\n type = isString(desc) ? desc : desc.type;\n // TODO: start throwing a TypeError in future major versions instead of warning\n console.warn('Invalid data type of `' + type + '` for `' + name + '` property. Use one of the default types or define your own');\n }\n\n // define a getter/setter on the prototype\n // but they get/set on the instance\n Object.defineProperty(object, name, {\n set: function (val) {\n this.set(name, val);\n },\n get: function () {\n if (!this._values) {\n throw Error('You may be trying to `extend` a state object with \"' + name + '\" which has been defined in `props` on the object being extended');\n }\n var value = this._values[name];\n var typeDef = this._dataTypes[def.type];\n if (typeof value !== 'undefined') {\n if (typeDef && typeDef.get) {\n value = typeDef.get(value);\n }\n return value;\n }\n var defaultValue = result(def, 'default');\n this._values[name] = defaultValue;\n // If we've set a defaultValue, fire a change handler effectively marking\n // its change from undefined to the default value.\n if (typeof defaultValue !== 'undefined') {\n var onChange = this._getOnChangeForType(def.type);\n onChange(defaultValue, value, name);\n }\n return defaultValue;\n }\n });\n\n return def;\n}\n\n// helper for creating derived property definitions\nfunction createDerivedProperty(modelProto, name, definition) {\n var def = modelProto._derived[name] = {\n fn: isFunction(definition) ? definition : definition.fn,\n cache: (definition.cache !== false),\n depList: definition.deps || []\n };\n\n // add to our shared dependency list\n def.depList.forEach(function (dep) {\n modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);\n });\n\n // defined a top-level getter for derived names\n Object.defineProperty(modelProto, name, {\n get: function () {\n return this._getDerivedProperty(name);\n },\n set: function () {\n throw new TypeError(\"`\" + name + \"` is a derived property, it can't be set directly.\");\n }\n });\n}\n\nvar dataTypes = {\n string: {\n 'default': function () {\n return '';\n }\n },\n date: {\n set: function (newVal) {\n var newType;\n if (newVal == null) {\n newType = typeof null;\n } else if (!isDate(newVal)) {\n var err = null;\n var dateVal = new Date(newVal).valueOf();\n if (isNaN(dateVal)) {\n // If the newVal cant be parsed, then try parseInt first\n dateVal = new Date(parseInt(newVal, 10)).valueOf();\n if (isNaN(dateVal)) err = true;\n }\n newVal = dateVal;\n newType = 'date';\n if (err) {\n newType = typeof newVal;\n }\n } else {\n newType = 'date';\n newVal = newVal.valueOf();\n }\n\n return {\n val: newVal,\n type: newType\n };\n },\n get: function (val) {\n if (val == null) { return val; }\n return new Date(val);\n },\n 'default': function () {\n return new Date();\n }\n },\n array: {\n set: function (newVal) {\n return {\n val: newVal,\n type: Array.isArray(newVal) ? 'array' : typeof newVal\n };\n },\n 'default': function () {\n return [];\n }\n },\n object: {\n set: function (newVal) {\n var newType = typeof newVal;\n // we have to have a way of supporting \"missing\" objects.\n // Null is an object, but setting a value to undefined\n // should work too, IMO. We just override it, in that case.\n if (newType !== 'object' && newVal === undefined) {\n newVal = null;\n newType = 'object';\n }\n return {\n val: newVal,\n type: newType\n };\n },\n 'default': function () {\n return {};\n }\n },\n // the `state` data type is a bit special in that setting it should\n // also bubble events\n state: {\n set: function (newVal) {\n var isInstance = newVal instanceof Base || (newVal && newVal.isState);\n if (isInstance) {\n return {\n val: newVal,\n type: 'state'\n };\n } else {\n return {\n val: newVal,\n type: typeof newVal\n };\n }\n },\n compare: function (currentVal, newVal) {\n return currentVal === newVal;\n },\n\n onChange : function(newVal, previousVal, attributeName){\n // if this has changed we want to also handle\n // event propagation\n if (previousVal) {\n this.stopListening(previousVal, 'all', this._getCachedEventBubblingHandler(attributeName));\n }\n\n if (newVal != null) {\n this.listenTo(newVal, 'all', this._getCachedEventBubblingHandler(attributeName));\n }\n }\n }\n};\n\n// the extend method used to extend prototypes, maintain inheritance chains for instanceof\n// and allow for additions to the model definitions.\nfunction extend(protoProps) {\n /*jshint validthis:true*/\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent's constructor.\n if (protoProps && protoProps.hasOwnProperty('constructor')) {\n child = protoProps.constructor;\n } else {\n child = function () {\n return parent.apply(this, arguments);\n };\n }\n\n // Add static properties to the constructor function from parent\n assign(child, parent);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function.\n var Surrogate = function () { this.constructor = child; };\n Surrogate.prototype = parent.prototype;\n child.prototype = new Surrogate();\n\n // set prototype level objects\n child.prototype._derived = assign({}, parent.prototype._derived);\n child.prototype._deps = assign({}, parent.prototype._deps);\n child.prototype._definition = assign({}, parent.prototype._definition);\n child.prototype._collections = assign({}, parent.prototype._collections);\n child.prototype._children = assign({}, parent.prototype._children);\n child.prototype._dataTypes = assign({}, parent.prototype._dataTypes || dataTypes);\n\n // Mix in all prototype properties to the subclass if supplied.\n if (protoProps) {\n var omitFromExtend = [\n 'dataTypes', 'props', 'session', 'derived', 'collections', 'children'\n ];\n for(var i = 0; i < arguments.length; i++) {\n var def = arguments[i];\n if (def.dataTypes) {\n forOwn(def.dataTypes, function (def, name) {\n child.prototype._dataTypes[name] = def;\n });\n }\n if (def.props) {\n forOwn(def.props, function (def, name) {\n createPropertyDefinition(child.prototype, name, def);\n });\n }\n if (def.session) {\n forOwn(def.session, function (def, name) {\n createPropertyDefinition(child.prototype, name, def, true);\n });\n }\n if (def.derived) {\n forOwn(def.derived, function (def, name) {\n createDerivedProperty(child.prototype, name, def);\n });\n }\n if (def.collections) {\n forOwn(def.collections, function (constructor, name) {\n child.prototype._collections[name] = constructor;\n });\n }\n if (def.children) {\n forOwn(def.children, function (constructor, name) {\n child.prototype._children[name] = constructor;\n });\n }\n assign(child.prototype, omit(def, omitFromExtend));\n }\n }\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n}\n\nBase.extend = extend;\n\n// Our main exports\nmodule.exports = Base;\n","module.exports = function arrayNext(array, currentItem) {\n var len = array.length;\n var newIndex = array.indexOf(currentItem) + 1;\n if (newIndex > (len - 1)) newIndex = 0;\n return array[newIndex];\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Wrapper around setTimout which (in node) unrefs the returned timer to avoid\n * wedging the process open unexpectedly.\n * @param {Mixed} args\n * @protected\n * @returns {NodeJS.Timeout|Number}\n */\nexport function safeSetTimeout(...args: Parameters): number | NodeJS.Timeout {\n const timer = setTimeout(...args);\n\n if (timer.unref) {\n timer.unref();\n }\n\n return timer;\n}\n\n/**\n * Wrapper around setInterval which (in node) unrefs the returned timer to avoid\n * wedging the process open unexpectedly.\n * @param {Mixed} args\n * @protected\n * @returns {NodeJS.Timeout|Number}\n */\nexport function safeSetInterval(...args: Parameters): number | NodeJS.Timeout {\n const interval = setInterval(...args);\n\n if (interval.unref) {\n interval.unref();\n }\n\n return interval;\n}\n\n/**\n * Create a restartable timer\n */\nexport class Timer {\n private state: 'init' | 'running' | 'done';\n private readonly timeout: number;\n private readonly callback: () => void;\n private currentTimer: number | NodeJS.Timeout;\n\n /**\n * Construct timer\n * @param {Function} callback Function called when the timer expired\n * @param {number} timeout duration of the timeout in milliseconds\n */\n constructor(callback: () => void, timeout: number) {\n this.state = 'init';\n this.timeout = timeout;\n this.callback = () => {\n this.state = 'done';\n callback();\n };\n }\n\n /**\n * Start timer\n * @returns {void}\n */\n start() {\n if (this.state !== 'init') {\n throw new Error(`Can't start the timer when it's in ${this.state} state`);\n }\n\n this.startTimer();\n this.state = 'running';\n }\n\n /**\n * Clear the current timer and start a new one\n * @returns {void}\n */\n reset() {\n if (this.state !== 'running') {\n throw new Error(`Can't reset the timer when it's in ${this.state} state`);\n }\n this.clearTimer();\n this.startTimer();\n }\n\n /**\n * Clear the timer\n * @returns {void}\n */\n cancel() {\n if (this.state !== 'running') {\n throw new Error(`Can't cancel the timer when it's in ${this.state} state`);\n }\n this.clearTimer();\n this.state = 'done';\n }\n\n /**\n * Create the actual timer\n * @private\n * @returns {undefined}\n */\n private startTimer() {\n this.currentTimer = safeSetTimeout(this.callback, this.timeout);\n }\n\n /**\n * Clear the actual timer\n * @private\n * @returns {undefined}\n */\n private clearTimer() {\n clearTimeout(this.currentTimer);\n }\n}\n","/**\n *\n * Grabbed from https://github.com/feross/is-buffer/blob/master/index.js => es6 + prettier\n *\n * @param {buffer} buffer\n * @returns {boolean}\n */\nexport default (buffer) =>\n buffer != null &&\n buffer.constructor != null &&\n typeof buffer.constructor.isBuffer === 'function' &&\n buffer.constructor.isBuffer(buffer);\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport UrlSafeBase64 from 'urlsafe-base64';\nimport {Buffer} from 'safe-buffer';\n\nimport isBuffer from './isBuffer';\n\n/**\n * Converts a string from a base64url-encoded string\n * @param {string} str\n * @returns {string}\n */\nexport function fromBase64url(str) {\n return UrlSafeBase64.decode(str).toString();\n}\n\n/**\n * Converts a string to a base64url-encoded string. It also accepts a buffer\n * @param {string|buffer} str\n * @returns {string}\n */\nexport function toBase64Url(str) {\n let buffer = str;\n\n if (!isBuffer(buffer)) {\n buffer = Buffer.from(buffer);\n }\n\n return UrlSafeBase64.encode(buffer);\n}\n\n/**\n * Converts a string to a base64url-encoded string. It also accepts a buffer\n * @param {string|buffer} str\n * @returns {string}\n */\nexport function encode(str) {\n return toBase64Url(str);\n}\n\n/**\n * Converts a string from a base64url-encoded string\n * @param {string} str\n * @returns {string}\n */\nexport function decode(str) {\n return fromBase64url(str);\n}\n\n/**\n * Indicates if the provided string is, in fact, a base64 string\n * @param {String} str\n * @returns {Boolean}\n */\nexport function validate(str) {\n return UrlSafeBase64.validate(str);\n}\n\nexport default {\n fromBase64url,\n toBase64Url,\n encode,\n decode,\n validate,\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Behaves like debounce, but additionally executes after a number of calls are\n * attempted, rather than just time\n * @param {Function} fn\n * @param {Number} wait\n * @param {Object} options\n * @returns {Function}\n */\nexport default function debounce(fn, wait, options) {\n /* eslint no-invalid-this: [0] */\n\n if (!fn) {\n throw new Error('`fn` must be a function');\n }\n\n if (!wait) {\n throw new Error('`wait` is required');\n }\n\n options = options || {};\n if (!options.maxWait) {\n throw new Error('`options.maxWait` is required');\n }\n if (!options.maxCalls) {\n throw new Error('`options.maxCalls` is required');\n }\n\n const {maxCalls, maxWait} = options;\n let count = 0;\n let maxWaitTimer;\n let waitTimer;\n\n return function wrapper() {\n count += 1;\n\n clearTimeout(waitTimer);\n waitTimer = setTimeout(() => exec(), wait);\n\n if (!maxWaitTimer) {\n maxWaitTimer = setTimeout(() => exec(), maxWait);\n }\n\n if (count >= maxCalls) {\n Reflect.apply(exec, this, []);\n }\n };\n\n /**\n * @private\n * @returns {undefined}\n */\n function exec() {\n clearTimeout(waitTimer);\n waitTimer = null;\n clearTimeout(maxWaitTimer);\n maxWaitTimer = null;\n count = 0;\n\n Reflect.apply(fn, this, []);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Check object for the specified keys\n * @param {Array} keys\n * @param {Object} object\n * @returns {undefined}\n * @throws Error\n */\nexport default function checkRequired(keys, object) {\n keys.forEach((key) => {\n if (!object[key]) {\n throw new Error(`missing required property ${key} from ${object}`);\n }\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Creates a new `Defer`red object,\n * @returns {Defer}\n */\nexport default function Defer() {\n this.promise = new Promise((resolve, reject) => {\n /**\n * @instance\n * @memberof Defer\n * @type {function}\n */\n this.resolve = resolve;\n /**\n * @instance\n * @memberof Defer\n * @type {function}\n */\n this.reject = reject;\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Reminder: any class using this function must have something like the\n// following in its initialize method:\n//\n// // HACK to deal with the fact that AmpersandState#dataTypes#set is a pure\n// // function.\n// this._dataTypes = cloneDeep(this._dataTypes);\n// Object.keys(this._dataTypes).forEach((key) => {\n// if (this._dataTypes[key].set) {\n// this._dataTypes[key].set = this._dataTypes[key].set.bind(this);\n// }\n// });\n// // END HACK\n\n/**\n * Creates an ampersand state object that wires its event handlers like a an\n * ampersand child\n * @param {Function} Constructor\n * @param {string} name\n * @returns {Object}\n */\nexport default function makeStateDataType(Constructor, name) {\n if (!Constructor || !name) {\n throw new Error('missing parameter for makeStateDataType');\n }\n\n return {\n dataType: {\n set: function set(newVal) {\n // newVal.parent = this;\n if (newVal instanceof Constructor) {\n newVal.parent = this;\n\n return {\n val: newVal,\n type: name,\n };\n }\n\n // We only want to construct the new instance if we have some set of\n // attributes (even an empty object) to base it on. This is to deal with\n // the unexpected side effect that AmpState#unset will create a new\n // instance.\n return {\n val: newVal ? new Constructor(newVal, {parent: this}) : undefined,\n type: name,\n };\n },\n compare: function compare(currentValue, newVal) {\n return currentValue === newVal;\n },\n onChange: function onChange(newVal, previousVal, attributeName) {\n // Copied from ampersand-state.js\n // if this has changed we want to also handle\n // event propagation\n if (previousVal) {\n this.stopListening(\n previousVal,\n 'all',\n this._getCachedEventBubblingHandler(attributeName)\n );\n }\n\n if (newVal) {\n this.listenTo(newVal, 'all', this._getCachedEventBubblingHandler(attributeName));\n }\n },\n },\n prop: {\n /**\n * This is a really unfortunate hack to deal with ampersand`s decision to\n * make the dateType#set function pure. The only function called with the\n * scope of the parent at set time seems to be test\n * @param {AmpersandState} newVal\n * @returns {boolean}\n */\n test: function test(newVal) {\n if (!newVal) {\n return false;\n }\n newVal.parent = this;\n\n return false;\n },\n type: name,\n },\n };\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\n/**\n * Factory which produces a multi-keyed container based on the provided set of\n * constructors\n * @param {mixed} containers\n * @returns {Container}\n */\nfunction make(...containers) {\n const TopContainer = containers.shift();\n\n const data = new WeakMap();\n const sizes = new WeakMap();\n\n const ChildContainer = containers.length > 1 ? make(...containers) : containers[0];\n\n const name = `(${[TopContainer.name]\n .concat(containers.map((container) => container.name))\n .join(', ')})`;\n\n /**\n * Container that wraps an arbitrary set of tupples to their values\n */\n class Container {\n /**\n * @constructs Container\n */\n constructor(...args) {\n data.set(this, new TopContainer(...args));\n sizes.set(this, 0);\n }\n\n /**\n * getter for .size\n * @returns {number}\n */\n get size() {\n return sizes.get(this);\n }\n\n /**\n * Identical to Container#set() but leads slightly more intuitive code when\n * the container is based on a Set rather than a Map.\n * @returns {Container}\n */\n add(...args) {\n return this.set(...args);\n }\n\n /**\n * Removes all items from the container\n * @returns {undefined}\n */\n clear() {\n const ret = data.get(this).clear();\n\n sizes.set(this, 0);\n\n return ret;\n }\n\n /**\n * Removes the specified item to the container\n * @param {mixed} key\n * @param {Array} keys\n * @returns {boolean}\n */\n delete(key, ...keys) {\n const mine = data.get(this);\n\n if (!keys.length) {\n return mine.delete(key);\n }\n\n const next = mine.get(key);\n\n if (!next) {\n return false;\n }\n\n const ret = next.delete(...keys);\n\n if (ret) {\n sizes.set(this, sizes.get(this) - 1);\n }\n\n if (next.size === 0) {\n mine.delete(key);\n }\n\n return ret;\n }\n\n /**\n * Retrieves the specified item from the container\n * @param {mixed} key\n * @param {Array} keys\n * @returns {mixed}\n */\n get(key, ...keys) {\n const mine = data.get(this);\n\n if (!mine.get) {\n return mine;\n }\n\n if (!keys.length) {\n return mine.get(key);\n }\n\n const next = mine.get(key);\n\n if (!next) {\n return undefined;\n }\n\n if (!next.get) {\n return next;\n }\n\n return next.get(...keys);\n }\n\n /**\n * Indicates whether the container holds the specified item\n * @param {mixed} key\n * @param {Array} keys\n * @returns {Boolean}\n */\n has(...args) {\n return typeof this.get(...args) !== 'undefined';\n }\n\n /**\n * Stores the specified item in the container\n * @param {mixed} key\n * @param {Array} args\n * @param {mixed} value\n * @returns {Container}\n */\n set(...args) {\n let overwrite = false;\n\n if (this.has(...args)) {\n overwrite = true;\n }\n const mine = data.get(this);\n\n const key = args.shift();\n\n if (!mine.get) {\n insert(mine, key, ...args);\n\n return this;\n }\n\n let next = mine.get(key);\n\n if (!next) {\n if (!ChildContainer) {\n insert(mine, key, ...args);\n\n return this;\n }\n next = new ChildContainer();\n insert(mine, key, next);\n }\n insert(next, ...args);\n\n if (!overwrite) {\n sizes.set(this, sizes.get(this) + 1);\n }\n\n return this;\n }\n\n /**\n * @private\n * @returns {string}\n */\n inspect() {\n return `Container${name} {\n ${util.inspect(data.get(this), {depth: null})}\n}`;\n }\n }\n\n return Container;\n}\n\n/**\n * Inserts into an arbitrary container\n * @param {Map|WeakMap|Set|WeakSet} container\n * @param {Array} args\n * @private\n * @returns {undefined}\n */\nfunction insert(container, ...args) {\n if (container.add) {\n container.add(...args);\n\n return;\n }\n\n if (container.set) {\n container.set(...args);\n\n return;\n }\n\n if (container.push) {\n container.push(...args);\n\n return;\n }\n throw new TypeError('Could not determine how to insert into the specified container');\n}\nexport {make as default};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {wrap} from 'lodash';\n\nimport make from './template-container';\n\n// Alias Map and WeakMap to get around a babel compiler bug\nconst W = WeakMap;\nconst M = Map;\nconst WeakMappedMappedMap = make(W, M, M);\n\nconst flights = new WeakMappedMappedMap();\n\n/**\n * @memberof Util\n * @param {Object} options\n * @param {Function} options.keyFactory\n * @param {boolean} options.cacheFailures\n * @param {boolean} options.cacheSuccesses\n * @returns {Function}\n */\nexport default function oneFlight(...params) {\n if (params.length === 3) {\n return Reflect.apply(oneFlightDecorator, null, params);\n }\n\n const options = params[0] || {};\n\n const {cacheFailures, cacheSuccesses, keyFactory} = options;\n\n return oneFlightDecorator;\n\n /**\n * @param {Object} target\n * @param {string} prop\n * @param {Object} descriptor\n * @private\n * @returns {Object}\n */\n function oneFlightDecorator(target, prop, descriptor) {\n const key = prop;\n\n descriptor.value = wrap(descriptor.value, function oneFlightExecutor(fn, ...args) {\n let innerKey = key;\n\n if (keyFactory) {\n innerKey = `${innerKey}_${keyFactory(...args)}`;\n }\n\n /* eslint no-invalid-this: [0] */\n let flight = flights.get(this, target, innerKey);\n\n if (flight) {\n return flight;\n }\n\n flight = Reflect.apply(fn, this, args);\n if (!cacheFailures && flight && flight.catch) {\n flight = flight.catch((reason) => {\n flights.delete(this, target, innerKey);\n\n return Promise.reject(reason);\n });\n }\n\n if (!cacheSuccesses && flight && flight.then) {\n flight = flight.then((result) => {\n flights.delete(this, target, innerKey);\n\n return result;\n });\n }\n\n flights.set(this, target, innerKey, flight);\n\n return flight;\n });\n\n // This *should* make decorators compatible with AmpersandState class\n // definitions\n if (typeof target === 'object' && !target.prototype) {\n target[prop] = descriptor.value;\n }\n\n return descriptor;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @description Set of regex patterns to compile once and use throughout the\n * app. All non-prefixed patterns have start/end characters to ensure exact\n * matches. Patterns prefixed with \"exec\" are the same as their non-prefixed\n * counterparts but without the start/end characters so they can be used with\n * methods like `RegExp#exec`.\n */\nexport default {\n /**\n * Regular express that validates a string is strictly an email.\n * Allows for validation of emails within services such as conversation\n * activities or user details.\n * See [RegEx information here]{@link https://ihateregex.io/expr/email-2}.\n *\n * @type {RegExp}\n */\n email:\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n\n /**\n * Regular expression that validates an ambiguous string contains emails\n * (one or more) within.\n * See [RegEx information here]{@link https://ihateregex.io/expr/email-2}.\n *\n * @type {RegExp}\n */\n containsEmails:\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g,\n\n /**\n * Matches a UUID\n * @type {RegExp}\n */\n uuid: /^[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12}$/,\n\n /**\n * Regular expression that validates an ambiguous string contains MTID\n * @type {RegExp}\n */\n containsMTID: /(MTID=)[^&$#]*/g,\n\n /**\n * Same as this.email, but allows for surrounding characters\n * @type {RegExp}\n */\n execEmail: /[^\\s]+?@[^\\s]+?/,\n\n /**\n * Same as this.uuid but allows for surrounding characters\n * @type {RegExp}\n */\n execUuid: /[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12}/,\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {isArray} from 'lodash';\n\n/**\n * Proxies the event binding methods of emitter onto proxy\n * @param {EventEmitter|EventEmitterProxy} emitter\n * @param {mixed} proxy (probably a promise)\n * @returns {EventEmitter} Returns the source emitter to ease use in promise chains\n */\nexport function proxyEvents(emitter, proxy) {\n ['on', 'once'].forEach((key) => {\n proxy[key] = (...args) => {\n emitter[key](...args);\n\n return proxy;\n };\n });\n\n return emitter;\n}\n\n/**\n * Given a list of events, fires them on drain when they're emitted from source\n * @param {Array|string} events\n * @param {EventEmitter} source\n * @param {EventEmitter} drain\n * @returns {undefined}\n */\nexport function transferEvents(events, source, drain) {\n events = isArray(events) ? events : [events];\n events.forEach((event) => {\n if (source.on) {\n source.on(event, (...args) => emit(drain, event, ...args));\n }\n });\n}\n\n/**\n * Emits an event\n * @param {EventEmitter} target The EventEmitter from which to emit an event\n * @returns {mixed}\n */\nfunction emit(target, ...rest) {\n const method = target.trigger || target.emit;\n\n /* istanbul ignore if */\n if (!method) {\n throw new Error('count not determine emit method');\n }\n\n return Reflect.apply(method, target, rest);\n}\n","export const SDK_EVENT = {\n INTERNAL: {\n WEBEX_ACTIVITY: 'event:conversation.activity',\n ACTIVITY_FIELD: {\n ACTOR: 'actor',\n OBJECT: 'object',\n TARGET: 'target',\n },\n ACTIVITY_VERB: {\n ACKNOWLEDGE: 'acknowledge',\n CARD_ACTION: 'cardAction',\n CREATE: 'create',\n POST: 'post',\n SHARE: 'share',\n DELETE: 'delete',\n ADD: 'add',\n LEAVE: 'leave',\n ADD_MODERATOR: 'assignModerator',\n REMOVE_MODERATOR: 'unassignModerator',\n LOCK: 'lock',\n UNLOCK: 'unlock',\n HIDE: 'hide',\n UPDATE: 'update',\n },\n ACTIVITY_TAG: {\n HIDDEN: 'HIDDEN',\n ONE_ON_ONE: 'ONE_ON_ONE',\n LOCKED: 'LOCKED',\n },\n },\n EXTERNAL: {\n EVENT_TYPE: {\n CREATED: 'created',\n DELETED: 'deleted',\n UPDATED: 'updated',\n SEEN: 'seen',\n },\n OWNER: {\n CREATOR: 'creator',\n ORG: 'org',\n },\n STATUS: {\n ACTIVE: 'active',\n DISABLED: 'disabled',\n },\n SPACE_TYPE: {\n DIRECT: 'direct',\n GROUP: 'group',\n },\n RESOURCE: {\n ATTACHMENT_ACTIONS: 'attachmentActions',\n MEMBERSHIPS: 'memberships',\n MESSAGES: 'messages',\n ROOMS: 'rooms',\n },\n ATTACHMENTS: {\n CARD_CONTENT_TYPE: 'application/vnd.microsoft.card.adaptive',\n },\n },\n};\n\nexport const browserDetection = {\n unableToAccessUserAgent: 'unable to access window.navigator.userAgent',\n};\n\nexport const hydraTypes = {\n ATTACHMENT_ACTION: 'ATTACHMENT_ACTION',\n CONTENT: 'CONTENT',\n MEMBERSHIP: 'MEMBERSHIP',\n MESSAGE: 'MESSAGE',\n ORGANIZATION: 'ORGANIZATION',\n PEOPLE: 'PEOPLE',\n ROOM: 'ROOM',\n TEAM: 'TEAM',\n};\n\nexport const deviceType = {\n PROVISIONAL: 'PROVISIONAL',\n WEB: 'WEB',\n};\n\nexport const INTERNAL_US_CLUSTER_NAME = 'urn:TEAM:us-east-2_a';\nexport const INTERNAL_US_INTEGRATION_CLUSTER_NAME = 'urn:TEAM:us-east-1_int13';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {SDK_EVENT} from './constants';\n\n/**\n * Creates a 'webhook' envelope to wrap Webex events in\n * @param {object} webex - sdk object\n * @param {string} resource - resource to create an envelope for\n * @returns {object} - Returns a promise of an event envelope object\n */\nexport function createEventEnvelope(webex, resource) {\n return ensureMyIdIsAvailable(webex)\n .then(() =>\n Promise.resolve({\n createdBy: webex.internal.me.id,\n orgId: webex.internal.me.orgId,\n resource,\n // id -- webhook id concept does not correlate to SDK socket event\n // name -- webhook name concept does not correlate to SDK socket event\n // targetUrl -- targetUrl concept does not correlate to SDK socket event\n // secret -- secret concept does not correlate to SDK socket event\n ownedBy: SDK_EVENT.EXTERNAL.OWNER.CREATOR,\n status: SDK_EVENT.EXTERNAL.STATUS.ACTIVE,\n created: new Date().toISOString(),\n data: {},\n })\n )\n .catch((e) => {\n Promise.reject(\n new Error(`Unable to get person info for ${resource} \\\nevent envelope: ${e.message}`)\n );\n });\n}\n\n/**\n * Stores SDK users info in the sdk object if it doesn't already exist\n * @param {object} webex - sdk object\n * @returns {Promise} - Returns a promise that user info will be available\n */\nexport async function ensureMyIdIsAvailable(webex) {\n // If we don't have it, save info about our user\n if ('me' in webex.internal) {\n return Promise.resolve();\n }\n\n return webex.people.get('me').then((person) => {\n webex.internal.me = person;\n\n return Promise.resolve();\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {defaults, isFunction, wrap} from 'lodash';\nimport backoff from 'backoff';\n\n/* eslint max-nested-callbacks: [0] */\n\n/**\n * Makes a promise-returning method retryable according to the specified backoff\n * pattern\n * @param {Object} options\n * @param {boolean} options.backoff\n * @param {number} options.delay\n * @param {number} options.initialDelay\n * @param {number} options.maxAttempts\n * @param {number} options.maxDelay\n *\n * @returns {Function}\n */\nexport default function retry(...params) {\n let options = params[0] || {};\n\n options = {...options};\n defaults(options, {\n backoff: true,\n delay: 1,\n maxAttempts: 3,\n });\n\n let strategyOptions;\n\n if (options.backoff) {\n strategyOptions = {\n initialDelay: options.delay,\n maxDelay: options.maxDelay,\n };\n } else {\n strategyOptions = {\n initialDelay: 1,\n maxDelay: 1,\n };\n }\n\n if (params.length === 3) {\n return Reflect.apply(retryDecorator, null, params);\n }\n\n return retryDecorator;\n\n /**\n * @param {Object} target\n * @param {string} prop\n * @param {Object} descriptor\n * @private\n * @returns {Object}\n */\n function retryDecorator(target, prop, descriptor) {\n descriptor.value = wrap(descriptor.value, function retryExecutor(fn, ...args) {\n const emitter = new EventEmitter();\n const promise = new Promise((resolve, reject) => {\n // backoff.call is not Function.prototype.call; it's an unfortunate naming\n // collision.\n /* eslint prefer-reflect: [0] */\n const call = backoff.call(\n (cb) => {\n /* eslint no-invalid-this: [0] */\n const innerPromise = Reflect.apply(fn, this, args);\n\n if (isFunction(innerPromise.on)) {\n innerPromise.on('progress', emitter.emit.bind(emitter, 'progress'));\n innerPromise.on('upload-progress', emitter.emit.bind(emitter, 'upload-progress'));\n innerPromise.on('download-progress', emitter.emit.bind(emitter, 'download-progress'));\n }\n\n return innerPromise\n .then((res) => {\n cb(null, res);\n })\n .catch((reason) => {\n if (!reason) {\n reason = new Error('retryable method failed without providing an error object');\n }\n cb(reason);\n });\n },\n (err, res) => {\n if (err) {\n return reject(err);\n }\n\n return resolve(res);\n }\n );\n\n call.setStrategy(new backoff.ExponentialStrategy(strategyOptions));\n if (options.maxAttempts) {\n call.failAfter(options.maxAttempts - 1);\n }\n\n call.start();\n });\n\n promise.on = function on(key, callback) {\n emitter.on(key, callback);\n\n return promise;\n };\n\n return promise;\n });\n\n // This *should* make decorators compatible with AmpersandState class\n // definitions\n if (typeof target === 'object' && !target.prototype) {\n target[prop] = descriptor.value;\n }\n\n return descriptor;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Injects code into a promise chain without modifying the promise chain's result\n * @param {Function} fn\n * @returns {Promise}\n * @example\n * function f() {\n * return Promise.resolve(5);\n * }\n *\n * f()\n * .then(tap(() => 12))\n * // => 5\n */\nexport default function tap(fn) {\n return (r) =>\n new Promise((resolve) => {\n resolve(fn(r));\n })\n .then(() => r)\n .catch(() => r);\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-invalid-this: [0] */\n\nimport {wrap} from 'lodash';\n\nimport tap from './tap';\n\n/**\n * While the promise returned by the decorated is unfullfilled, sets, the\n * specified boolean on the target class to `true`\n * @param {string} param\n * @returns {Function}\n */\nexport default function whileInFlight(param) {\n return function whileInFlightDecorator(target, name, descriptor) {\n descriptor.value = wrap(descriptor.value, function whileInFlightExecutor(fn, ...args) {\n return new Promise((resolve) => {\n this[param] = true;\n resolve(\n Reflect.apply(fn, this, args)\n .then(\n tap(() => {\n this[param] = false;\n })\n )\n .catch((reason) => {\n this[param] = false;\n\n return Promise.reject(reason);\n })\n );\n });\n });\n };\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Base Exception class\n */\nexport default class Exception extends Error {\n static defaultMessage = 'An error occurred';\n\n /**\n * constructor\n * @param {mixed} args\n * @returns {Exception}\n */\n constructor(...args) {\n super(...args);\n\n let message;\n\n if (this.parse) {\n message = this.parse(...args);\n } else if (this.constructor.parse) {\n message = this.constructor.parse(...args);\n }\n\n if (!message) {\n message = this.constructor.defaultMessage;\n }\n\n this.name = this.constructor.name;\n\n this.message = message;\n }\n\n /**\n * Generates the value assigned to `this.message`. You'll probably want to\n * override this in your custom Exception\n * @param {mixed} args\n * @returns {string}\n */\n static parse(...args) {\n return args[0];\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {deprecated} from 'core-decorators';\n\n/**\n * @private\n * @returns {function}\n */\nfunction emptyDecorator() {\n return function noop() {\n /* eslint no-empty:[0] */\n };\n}\n\nconst exportedDeprecated = process.env.NODE_ENV === 'production' ? emptyDecorator : deprecated;\n\nexport default exportedDeprecated;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default true;\n","import bowser from 'bowser';\nimport {memoize} from 'lodash';\nimport window from 'global/window';\nimport {browserDetection} from './constants';\n\nexport const getBrowserSerial = () => {\n let browserData;\n try {\n browserData = window?.navigator?.userAgent\n ? bowser.getParser(window.navigator.userAgent)\n : {error: browserDetection.unableToAccessUserAgent};\n } catch (err) {\n browserData = {error: err.message};\n }\n\n return browserData;\n};\n\nconst mockDetectionObject = {\n /* eslint-disable global-require */\n getOSName: () => require('os').platform(),\n getOSVersion: () => require('os').release(),\n /* eslint-enable global-require */\n getBrowserName: () => '',\n getBrowserVersion: () => '',\n isBrowser: () => false,\n};\n\nconst createDetectionObject = (results) => {\n const getOSName = () => results?.getOSName() ?? '';\n const getOSVersion = () => results?.getOSVersion() ?? '';\n\n const getBrowserName = () => results?.getBrowserName() ?? '';\n const getBrowserVersion = () => results?.getBrowserVersion() ?? '';\n\n const isBrowser = (name) => !!results?.isBrowser(name, true);\n\n return {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion,\n isBrowser,\n };\n};\n\nexport default memoize((agent) =>\n agent || window.navigator?.userAgent\n ? createDetectionObject(bowser.getParser(agent || window.navigator.userAgent))\n : mockDetectionObject\n);\n","import {encode, decode} from './base64';\nimport {\n SDK_EVENT,\n hydraTypes,\n INTERNAL_US_CLUSTER_NAME,\n INTERNAL_US_INTEGRATION_CLUSTER_NAME,\n} from './constants';\n\nconst hydraBaseUrl = 'https://api.ciscospark.com/v1';\n\nconst isRequired = () => {\n throw Error('parameter is required');\n};\n\n/**\n * Constructs a Hydra ID for a given UUID and type.\n *\n * @export\n * @param {string} type one of PEOPLE, TEAM, ROOM\n * @param {any} id identifying the \"TYPE\" object\n * @param {string} cluster containing the \"TYPE\" object\n * @returns {string}\n */\nexport function constructHydraId(type = isRequired(), id = isRequired(), cluster = 'us') {\n if (!type.toUpperCase) {\n throw Error('\"type\" must be a string');\n }\n\n if (type === hydraTypes.PEOPLE || type === hydraTypes.ORGANIZATION) {\n // Cluster is always \"us\" for people and orgs\n return encode(`ciscospark://us/${type.toUpperCase()}/${id}`);\n }\n\n return encode(`ciscospark://${cluster}/${type.toUpperCase()}/${id}`);\n}\n\n/**\n * @typedef {Object} DeconstructedHydraId\n * @property {UUID} id identifying the object\n * @property {String} type of the object\n * @property {String} cluster containing the object\n */\n\n/**\n * Deconstructs a Hydra ID.\n *\n * @export\n * @param {String} id Hydra style id\n * @returns {DeconstructedHydraId} deconstructed id\n */\nexport function deconstructHydraId(id) {\n const payload = decode(id).split('/');\n\n return {\n id: payload.pop(),\n type: payload.pop(),\n cluster: payload.pop(),\n };\n}\n\n/**\n * Constructs a Hydra ID for a message based on internal UUID\n *\n * @export\n * @param {any} uuid\n * @param {string} cluster containing the message\n * @returns {string}\n */\nexport function buildHydraMessageId(uuid, cluster) {\n return constructHydraId(hydraTypes.MESSAGE, uuid, cluster);\n}\n\n/**\n * Constructs a Hydra ID for a person based on internal UUID\n *\n * @export\n * @param {any} uuid\n * @param {string} cluster containing the person\n * @returns {string}\n */\nexport function buildHydraPersonId(uuid, cluster) {\n return constructHydraId(hydraTypes.PEOPLE, uuid, cluster);\n}\n\n/**\n * Constructs a Hydra ID for a room based on internal UUID\n *\n * @export\n * @param {any} uuid\n * @param {string} cluster containing the room\n * @returns {string}\n */\nexport function buildHydraRoomId(uuid, cluster) {\n return constructHydraId(hydraTypes.ROOM, uuid, cluster);\n}\n\n/**\n * Constructs a Hydra ID for an organization based on internal UUID\n *\n * @export\n * @param {any} uuid\n * @param {string} cluster containing the organization\n * @returns {string}\n */\nexport function buildHydraOrgId(uuid, cluster) {\n return constructHydraId(hydraTypes.ORGANIZATION, uuid, cluster);\n}\n\n/**\n * Constructs a Hydra ID for an membership based on an\n * internal UUID for the person, and the space\n *\n * @export\n * @param {any} personUUID\n * @param {any} spaceUUID\n * @param {string} cluster containing the membership\n * @returns {string}\n */\nexport function buildHydraMembershipId(personUUID, spaceUUID, cluster) {\n return constructHydraId(hydraTypes.MEMBERSHIP, `${personUUID}:${spaceUUID}`, cluster);\n}\n\n/**\n * Returns a hydra cluster string based on a conversation url\n * @private\n * @memberof Messages\n * @param {Object} webex sdk instance\n * @param {String} conversationUrl url of space where activity took place\n * @returns {String} string suitable for UUID -> public ID encoding\n */\nexport function getHydraClusterString(webex, conversationUrl) {\n const internalClusterString = webex.internal.services.getClusterId(conversationUrl);\n\n if (\n internalClusterString.startsWith(INTERNAL_US_CLUSTER_NAME) ||\n internalClusterString.startsWith(INTERNAL_US_INTEGRATION_CLUSTER_NAME)\n ) {\n // Original US cluster is simply 'us' for backwards compatibility\n return 'us';\n }\n const clusterParts = internalClusterString.split(':');\n\n if (clusterParts.length < 3) {\n throw Error(`Unable to determine cluster for convo: ${conversationUrl}`);\n }\n\n return `${clusterParts[0]}:${clusterParts[1]}:${clusterParts[2]}`;\n}\n\n/**\n * Returns a Hydra roomType based on conversation tags\n *\n * @export\n * @param {arra} tags\n * @returns {string}\n */\nexport function getHydraRoomType(tags) {\n if (tags.includes(SDK_EVENT.INTERNAL.ACTIVITY_TAG.ONE_ON_ONE)) {\n return SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT;\n }\n\n return SDK_EVENT.EXTERNAL.SPACE_TYPE.GROUP;\n}\n\n/**\n * Returns file URLs for the activity, adhering to Hydra details,\n * e.g., https://api.ciscospark.com/v1/contents/Y2lzY29zcGF...\n * @see https://developer.webex.com/docs/api/v1/messages/get-message-details\n * @param {Object} activity from mercury\n * @param {string} cluster containing the files\n * @returns {Array} file URLs\n */\nexport function getHydraFiles(activity, cluster) {\n const hydraFiles = [];\n const {files} = activity.object;\n\n if (files) {\n const {items} = files;\n\n // Note: Generated ID is dependent on file order.\n for (let i = 0; i < items.length; i += 1) {\n const contentId = constructHydraId(hydraTypes.CONTENT, `${activity.id}/${i}`, cluster);\n\n hydraFiles.push(`${hydraBaseUrl}/contents/${contentId}`);\n }\n }\n\n return hydraFiles;\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @param {Error} Base\n * @returns {undefined}\n */\nexport default function makeSubTypes(Base) {\n /**\n * NetworkOrCORSError\n */\n class NetworkOrCORSError extends Base {}\n /**\n * BadRequest\n */\n class BadRequest extends Base {}\n /**\n * Unauthorized\n */\n class Unauthorized extends BadRequest {}\n /**\n * PaymentRequired\n */\n class PaymentRequired extends BadRequest {}\n /**\n * Forbidden\n */\n class Forbidden extends BadRequest {}\n /**\n * NotFound\n */\n class NotFound extends BadRequest {}\n /**\n * MethodNotAllowed\n */\n class MethodNotAllowed extends BadRequest {}\n /**\n * NotAcceptable\n */\n class NotAcceptable extends BadRequest {}\n /**\n * ProxyAuthenticationRequired\n */\n class ProxyAuthenticationRequired extends BadRequest {}\n /**\n * RequestTimeout\n */\n class RequestTimeout extends BadRequest {}\n /**\n * Conflict\n */\n class Conflict extends BadRequest {}\n /**\n * Gone\n */\n class Gone extends BadRequest {}\n /**\n * LengthRequired\n */\n class LengthRequired extends BadRequest {}\n /**\n * PreconditionFailed\n */\n class PreconditionFailed extends BadRequest {}\n /**\n * RequestEntityTooLarge\n */\n class RequestEntityTooLarge extends BadRequest {}\n /**\n * RequestUriTooLong\n */\n class RequestUriTooLong extends BadRequest {}\n /**\n * UnsupportedMediaType\n */\n class UnsupportedMediaType extends BadRequest {}\n /**\n * RequestRangeNotSatisfiable\n */\n class RequestRangeNotSatisfiable extends BadRequest {}\n /**\n * ExpectationFailed\n */\n class ExpectationFailed extends BadRequest {}\n /**\n * TooManyRequests\n */\n class TooManyRequests extends BadRequest {}\n /**\n * InternalServerError\n */\n class InternalServerError extends Base {}\n /**\n * NotImplemented\n */\n class NotImplemented extends InternalServerError {}\n /**\n * BadGateway\n */\n class BadGateway extends InternalServerError {}\n /**\n * ServiceUnavailable\n */\n class ServiceUnavailable extends InternalServerError {}\n /**\n * GatewayTimeout\n */\n class GatewayTimeout extends InternalServerError {}\n /**\n * HttpVersionNotSupported\n */\n class HttpVersionNotSupported extends InternalServerError {}\n\n Object.assign(Base, {\n 0: NetworkOrCORSError,\n NetworkOrCORSError,\n 400: BadRequest,\n BadRequest,\n 401: Unauthorized,\n Unauthorized,\n 402: PaymentRequired,\n PaymentRequired,\n 403: Forbidden,\n Forbidden,\n 404: NotFound,\n NotFound,\n 405: MethodNotAllowed,\n MethodNotAllowed,\n 406: NotAcceptable,\n NotAcceptable,\n 407: ProxyAuthenticationRequired,\n ProxyAuthenticationRequired,\n 408: RequestTimeout,\n RequestTimeout,\n 409: Conflict,\n Conflict,\n 410: Gone,\n Gone,\n 411: LengthRequired,\n LengthRequired,\n 412: PreconditionFailed,\n PreconditionFailed,\n 413: RequestEntityTooLarge,\n RequestEntityTooLarge,\n 414: RequestUriTooLong,\n RequestUriTooLong,\n 415: UnsupportedMediaType,\n UnsupportedMediaType,\n 416: RequestRangeNotSatisfiable,\n RequestRangeNotSatisfiable,\n 417: ExpectationFailed,\n ExpectationFailed,\n 429: TooManyRequests,\n TooManyRequests,\n 500: InternalServerError,\n InternalServerError,\n 501: NotImplemented,\n NotImplemented,\n 502: BadGateway,\n BadGateway,\n 503: ServiceUnavailable,\n ServiceUnavailable,\n 504: GatewayTimeout,\n GatewayTimeout,\n 505: HttpVersionNotSupported,\n HttpVersionNotSupported,\n select(statusCode) {\n if (typeof statusCode === 'undefined' || statusCode === null) {\n return Base;\n }\n\n statusCode = statusCode.statusCode || statusCode;\n const E = Base[statusCode];\n\n if (E) {\n return E;\n }\n\n // Fallback to the default for the category (e.g. BadRequest for 429)\n statusCode = `${statusCode.toString().split('').shift()}00`;\n statusCode = parseInt(statusCode, 10);\n\n return Base[statusCode] || Base;\n },\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {pick} from 'lodash';\nimport {Exception} from '@webex/common';\n\nimport makeSubTypes from './http-error-subtypes';\n\n/**\n * Base HttpError class. Unlikely to be thrown directly, but handy for general\n * type comparison.\n */\nexport default class HttpError extends Exception {\n /**\n * @example Extend via\n * MyError extends HttpError {\n * static errorKeys = HttpError.errorKeys.concat([\n * `key1`,\n * `key2`\n * ])\n * }\n *\n * @type {Array}\n */\n static errorKeys = ['error', 'errorString', 'response', 'errorResponse', 'message', 'msg'];\n\n /**\n * Default error string if no error can be extracted from the http response\n * @type {string}\n */\n static defaultMessage = 'An error was received while trying to fulfill the request';\n\n /**\n * Parses HttpResponse objects for useful information (status, headers, etc)\n * as well as attempting to extract a useful error message.\n * @param {HttpResponse} res\n * @returns {string}\n */\n parse(res) {\n // complexity is high here because of all the default values below.\n /* eslint complexity: [0] */\n let {body} = res;\n let message;\n\n switch (typeof body) {\n case 'string':\n try {\n body = JSON.parse(body);\n message = this.parseObject(body);\n } catch (err) {\n message = body;\n }\n break;\n case 'object':\n message = this.parseObject(body);\n break;\n default:\n }\n\n if (!message) {\n message = this.defaultMessage;\n }\n\n Object.defineProperties(this, {\n body: {\n enumerable: false,\n value: body,\n },\n httpVersion: {\n enumerable: false,\n value: res.httpVersion,\n },\n headers: {\n enumerable: false,\n value: res.headers || {},\n },\n rawHeaders: {\n enumerable: false,\n value: res.rawHeaders || [],\n },\n trailers: {\n enumerable: false,\n value: res.trailers || {},\n },\n rawTrailers: {\n enumerable: false,\n value: res.rawTrailers || [],\n },\n method: {\n enumerable: false,\n value: res.method,\n },\n url: {\n enumerable: false,\n value: res.url,\n },\n statusCode: {\n enumerable: false,\n value: res.statusCode,\n },\n statusMessage: {\n enumerable: false,\n value: res.statusMessage,\n },\n socket: {\n enumerable: false,\n value: res.socket,\n },\n _res: {\n enumerable: false,\n value: res,\n },\n });\n\n return message;\n }\n\n /**\n * Recursively parses an error body looking for a likely error candidate\n * @param {object} body\n * @returns {string}\n */\n parseObject(body) {\n // Search body for common names of error strings\n const messages = Object.values(pick(body, HttpError.errorKeys));\n\n // If no error candidate was found, stringify the entire body\n if (messages.length === 0) {\n return JSON.stringify(body, null, 2);\n }\n\n // Assume the first key found was the error explanation\n const message = messages[0];\n\n // If the explanation is an object, recurse and try again\n if (typeof message === 'object') {\n return this.parseObject(message);\n }\n\n // Return the first key\n return message;\n }\n}\n\nmakeSubTypes(HttpError);\nHttpError.makeSubTypes = makeSubTypes;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get} from 'lodash';\n\n/**\n * @class\n */\nexport default class Interceptor {\n /**\n * @constructor\n * @param {Object} attrs\n * @returns {UrlInterceptor}\n */\n constructor(attrs) {\n if (attrs) {\n Object.keys(attrs).forEach((key) => {\n const value = attrs[key];\n\n Reflect.defineProperty(this, key, {\n enumerable: true,\n value,\n });\n });\n }\n }\n\n /**\n * Logs the options of a request. This should be utilized\n * during the intercepting process, but can be used at any\n * time otherwise.\n * @param {object} options\n * @returns {void}\n */\n logOptions(options = {}) {\n const logger = get(this, 'webex.logger', console);\n\n if (!process.env.ENABLE_VERBOSE_NETWORK_LOGGING || !logger) {\n return;\n }\n\n // prepend a header for the interceptor\n logger.info('/***** Interceptor ****************************************************\\\\');\n\n logger.info(`${this.constructor.name} - ${JSON.stringify(options, null, 2)}`);\n }\n\n /**\n * @abstract\n * @returns {Interceptor}\n */\n static create() {\n throw new Error('`Interceptor.create()` must be defined');\n }\n\n /**\n * Transform request options before sending them\n * @param {Object} options\n * @returns {Promise}\n */\n onRequest(options) {\n return Promise.resolve(options);\n }\n\n /**\n * Handle request failures\n * @param {Object} options\n * @param {Error} reason\n * @returns {RejectedPromise}\n */\n onRequestError(options, reason) {\n return Promise.reject(reason);\n }\n\n /**\n * Transform response before returning it\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Promise}\n */\n onResponse(options, response) {\n return Promise.resolve(response);\n }\n\n /**\n * Handle response errors\n * @param {Object} options\n * @param {WebexHttpError} reason\n * @returns {Promise}\n */\n onResponseError(options, reason) {\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport HttpError from '../http-error';\nimport Interceptor from '../lib/interceptor';\n\nconst LOCUS_REDIRECT_ERROR = 2000002;\n\n/**\n * @class\n */\nexport default class HttpStatusInterceptor extends Interceptor {\n /**\n * @param {Object} webex\n * @param {Object} options\n * @returns {HttpStatusInterceptor}\n */\n constructor(webex, options) {\n super(webex);\n const ErrorConstructor = (options && (options.error || options.ErrorConstructor)) || HttpError;\n\n Object.defineProperties(this, {\n ErrorConstructor: {\n value: ErrorConstructor,\n },\n });\n }\n\n /**\n * @param {Object} options\n * @returns {HttpStatusInterceptor}\n */\n static create(options) {\n return new HttpStatusInterceptor(this, options);\n }\n\n /**\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Promise}\n */\n onResponse(options, response) {\n if (response.statusCode) {\n if (response.statusCode < 400) {\n return Promise.resolve(response);\n }\n // to handle locus redirects\n if (\n response.statusCode === 404 &&\n response.body &&\n response.body.errorCode === LOCUS_REDIRECT_ERROR\n ) {\n return Promise.resolve(response);\n }\n }\n\n // Note: the extra parenthesis below are required to make sure `new` is\n // applied to the correct method (i.e., the result of `select()`, not\n // `select()` itself).\n return Promise.reject(new (this.ErrorConstructor.select(response.statusCode))(response));\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Need to fork xhr to support environments with full object freezing; namely,\n// SalesForce's Aura and Locker environment.\n\n// See https://github.com/naugtur/xhr for license information\n\n// Maintain the original code style of https://github.com/naugtur/xhr since\n// we're trying to diverge as little as possible.\n/* eslint-disable */\n\n'use strict';\nvar window = require('global/window');\nvar isFunction = require('is-function');\nvar parseHeaders = require('parse-headers');\nvar xtend = require('xtend');\n\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest =\n 'withCredentials' in new createXHR.XMLHttpRequest()\n ? createXHR.XMLHttpRequest\n : window.XDomainRequest;\n\nforEachArray(['get', 'put', 'post', 'patch', 'head', 'delete'], function (method) {\n createXHR[method === 'delete' ? 'del' : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i += 1) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n if (typeof uri === 'string') {\n params = {uri: uri};\n }\n } else {\n params = xtend(options, {uri: uri});\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === 'undefined') {\n throw new Error('callback argument missing');\n }\n\n var called = false;\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n if (!(evt instanceof Error)) {\n if (evt instanceof ProgressEvent) {\n evt = new Error(`XMLHttpRequest Error: ProgressEvent: loaded=${evt.loaded}, total=${evt.total}, lengthComputable=${evt.lengthComputable}, target.readyState=${evt.target?.readyState}`)\n } else {\n evt = new Error('' + (evt || 'Unknown XMLHttpRequest Error'));\n }\n }\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr,\n };\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error('Internal XMLHttpRequest Error');\n }\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = options.uri || options.url;\n var method = options.method || 'GET';\n var body = options.body || options.data;\n var headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr,\n };\n\n if ('json' in options && options.json !== false) {\n isJson = true;\n headers['accept'] || headers['Accept'] || (headers['Accept'] = 'application/json'); //Don't override existing accept header declared by user\n if (method !== 'GET' && method !== 'HEAD') {\n headers['content-type'] ||\n headers['Content-Type'] ||\n (headers['Content-Type'] = 'application/json'); //Don't override existing accept header declared by user\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc;\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n };\n xhr.onabort = function () {\n aborted = true;\n };\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password);\n //has to be after open\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n xhr.abort('timeout');\n var e = new Error('XMLHttpRequest timeout');\n e.code = 'ETIMEDOUT';\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error('Headers cannot be set on an XDomainRequest object');\n }\n\n if ('responseType' in options) {\n xhr.responseType = options.responseType;\n }\n\n if ('beforeSend' in options && typeof options.beforeSend === 'function') {\n options.beforeSend(xhr);\n }\n\n // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n xhr.send(body || null);\n\n return xhr;\n}\n\nfunction getXml(xhr) {\n if (xhr.responseType === 'document') {\n return xhr.responseXML;\n }\n var firefoxBugTakenEffect =\n xhr.responseXML && xhr.responseXML.documentElement.nodeName === 'parsererror';\n if (xhr.responseType === '' && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n\n return null;\n}\n\nfunction noop() {}\n\nexport default createXHR;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {fromBuffer} from 'file-type';\n\n/**\n * Determine mimeType for the specified buffer;\n * @param {Buffer|Uint8Array|ArrayBuffer} buffer\n * @returns {Promise}\n */\nexport default async function detect(buffer) {\n if (\n !(buffer instanceof Blob) &&\n !(buffer instanceof ArrayBuffer) &&\n !(buffer instanceof Uint8Array)\n ) {\n throw new Error('`detect` requires a buffer of type Blob, ArrayBuffer, or Uint8Array');\n }\n\n if (buffer instanceof Blob) {\n return buffer.type;\n }\n\n // `fromBuffer()` can take a buffer that is either a ArrayBuffer or Uinit8Array\n const fileType = await fromBuffer(buffer);\n\n if (!fileType) {\n return 'application/octet-stream';\n }\n\n return fileType.mime;\n}\n","/* eslint-disable no-underscore-dangle */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\n// Note: several code paths are ignored in this file. As far as I can tell, any\n// error conditions that would provoke those paths are otherwise prevented and\n// reported.\n\nimport {defaults, isArray, pick} from 'lodash';\nimport qs from 'qs';\n\nimport xhr from '../lib/xhr';\nimport detect from '../lib/detect';\n\n/**\n * @name request\n * @param {Object} options\n * @returns {Promise}\n */\nexport default function _request(options) {\n return new Promise((resolve) => {\n const params = pick(\n options,\n 'method',\n 'uri',\n 'withCredentials',\n 'headers',\n 'timeout',\n 'responseType'\n );\n\n // Set `response` to `true` to approximate an `HttpResponse` object\n params.response = true;\n\n setXhr(params);\n bindProgressEvents(params, options);\n setAuth(params, options);\n setCookies(params, options);\n setDefaults(params, options);\n setResponseType(params, options);\n setContentType(params, options);\n setPayload(params, options);\n setQs(params, options);\n\n options.logger.debug(\n `start http ${options.method ? options.method : 'request'} to ${options.uri}`\n );\n\n const x = xhr(params, (error, response) => {\n /* istanbul ignore next */\n if (error) {\n options.logger.warn(\n `XHR error for ${options.method || 'request'} to ${options.uri} :`,\n error\n );\n }\n\n /* istanbul ignore else */\n if (response) {\n if (response.statusCode >= 400) {\n options.logger.warn(\n `http ${options.method ? options.method : 'request'} to ${options.uri} result: ${\n response.statusCode\n }`\n );\n } else {\n options.logger.debug(\n `http ${options.method ? options.method : 'request'} to ${options.uri} result: ${\n response.statusCode\n }`\n );\n }\n response.options = options;\n processResponseJson(response, params);\n resolve(response);\n } else {\n resolve({\n statusCode: 0,\n options,\n headers: options.headers,\n method: options.method,\n url: options.uri,\n body: error,\n });\n }\n });\n\n x.onprogress = options.download.emit.bind(options.download, 'progress');\n }).catch((error) => {\n options.logger.warn(error);\n\n /* eslint arrow-body-style: [0] */\n /* istanbul ignore next */\n return {\n statusCode: 0,\n options,\n headers: options.headers,\n method: options.method,\n url: options.uri,\n body: error,\n };\n });\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function bindProgressEvents(params, o) {\n if (params.method && ['PATCH', 'POST', 'PUT'].includes(params.method.toUpperCase())) {\n if (!params.xhr) {\n params.xhr = new XMLHttpRequest();\n }\n params.xhr.upload.onprogress = o.upload.emit.bind(o.upload, 'progress');\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setXhr(params) {\n params.xhr = new XMLHttpRequest();\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setAuth(params, o) {\n if (o.auth) {\n if (o.auth.bearer) {\n params.headers.authorization = `Bearer ${o.auth.bearer}`;\n } else {\n const user = o.auth.user || o.auth.username;\n const pass = o.auth.pass || o.auth.password;\n\n const token = btoa(`${user}:${pass}`);\n\n params.headers.Authorization = `Basic ${token}`;\n }\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setCookies(params, o) {\n if (o.jar) {\n params.withCredentials = true;\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setDefaults(params, o) {\n const defs = {\n cors: true,\n // raynos/xhr defaults withCredentials to true if cors is true, so we need\n // to make it explicitly false by default\n withCredentials: false,\n timeout: 0,\n };\n\n defaults(params, pick(o, Object.keys(defs)), defs);\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setResponseType(params, o) {\n if (o.responseType === 'buffer') {\n params.responseType = 'arraybuffer';\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n async function setContentType(params, o) {\n if (o.body instanceof Blob || o.body instanceof ArrayBuffer) {\n o.json = params.json = false;\n params.headers['content-type'] = params.headers['content-type'] || (await detect(o.body));\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setQs(params, o) {\n if (o.qs) {\n params.uri += `?${qs.stringify(o.qs)}`;\n }\n }\n\n /**\n * Converts arraybuffers to blobs before uploading them\n * @param {mixed} file\n * @private\n * @returns {mixed}\n */\n function ensureBlob(file) {\n if (file instanceof ArrayBuffer) {\n const ret = file.type ? new Blob([file], {type: file.type}) : new Blob([file]);\n\n ret.filename = file.filename || file.name || 'untitled';\n\n return ret;\n }\n\n return file;\n }\n\n /**\n * Appends an item to a form\n * @param {FormData} form\n * @param {string} key\n * @param {mixed} value\n * @returns {undefined}\n */\n function append(form, key, value) {\n if (isArray(value)) {\n for (const v of value) {\n append(form, key, v);\n }\n\n return;\n }\n\n value = ensureBlob(value);\n if (value.name) {\n value.filename = value.name;\n form.append(key, value, value.name);\n } else {\n form.append(key, value);\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setPayload(params, o) {\n if ((!('json' in o) || o.json === true) && o.body) {\n params.json = o.body;\n } else if (o.form) {\n params.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n params.body = qs.stringify(o.form);\n Reflect.deleteProperty(params, 'json');\n } else if (o.formData) {\n params.body = Object.keys(o.formData).reduce((fd, key) => {\n const value = o.formData[key];\n\n append(fd, key, value);\n\n return fd;\n }, new FormData());\n } else {\n params.body = o.body;\n Reflect.deleteProperty(params, 'json');\n }\n }\n\n /**\n * @param {Object} response\n * @param {Object} params\n * @private\n * @returns {undefined}\n */\n function processResponseJson(response, params) {\n // If params.json is not defined, xhr won't deserialize the response\n // so we should give it a shot just in case.\n if (!params.json && typeof response.body !== 'object') {\n try {\n response.body = JSON.parse(response.body);\n } catch (e) {\n /* eslint no-empty: [0] */\n }\n }\n }\n}\n","/* eslint-disable import/prefer-default-export */\nimport {EventEmitter} from 'events';\nimport Interceptor from '../lib/interceptor';\n\n/**\n * @param {Object} options\n * @param {Array} interceptors\n * @param {string} key\n * @param {Object | undefined} res\n * @private\n * @returns {Promise}\n */\nexport function intercept(\n options: object,\n interceptors: Array,\n key: string,\n res: object = undefined\n): Promise {\n const successKey = `on${key}`;\n const errorKey = `on${key}Error`;\n\n return interceptors.reduce(\n (promise, interceptor) =>\n promise.then(\n (result) => {\n interceptor.logOptions(options);\n if (interceptor[successKey]) {\n return interceptor[successKey](options, result);\n }\n\n return Promise.resolve(result);\n },\n (reason) => {\n interceptor.logOptions(options);\n if (interceptor[errorKey]) {\n return interceptor[errorKey](options, reason);\n }\n\n return Promise.reject(reason);\n }\n ),\n Promise.resolve(res)\n );\n}\n\n/**\n * Prepare options for a fetch.\n * @param {object} options\n * @returns {Promise}\n */\nexport async function prepareFetchOptions(options: any): Promise {\n if (options.url) {\n options.uri = options.url;\n options.url = null;\n }\n\n options.headers = options.headers || {};\n\n if (options.json) {\n // don't override existing accept header declared by user\n options.headers.accept = options.headers.accept || options.headers.Accept || 'application/json';\n\n // don't override existing content-type header declared by user\n if (options.method !== 'GET' && options.method !== 'HEAD') {\n options.headers['content-type'] =\n options.headers['content-type'] || options.headers['Content-Type'] || 'application/json';\n options.body = JSON.stringify(options.json === true ? options.body : options.json);\n }\n } else if (options.json !== undefined) {\n Reflect.deleteProperty(options, 'json');\n }\n\n options.download = new EventEmitter();\n options.upload = new EventEmitter();\n options.keepalive = true;\n\n return intercept(options, options.interceptors, 'Request').then(() => options);\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {assign, curry, defaults as lodashDefaults, isString} from 'lodash';\n\nimport HttpStatusInterceptor from './interceptors/http-status';\nimport _request from './request';\nimport {prepareFetchOptions as _prepareFetchOptions} from './request/utils';\n\n// Curry protorequest so we generate a function with default options built in.\nconst protorequest = curry(function protorequest(defaultOptions, options) {\n // allow for options to be a string (and therefore expect options in the third\n // position) to match request's api.\n if (isString(options)) {\n const uri = options;\n\n /* eslint prefer-rest-params: [0] */\n options = arguments[2] || {};\n options.uri = uri;\n }\n\n // Hide useless elements from logs\n ['download', 'interceptors', 'logger', 'upload'].forEach((prop) => {\n let descriptor = Reflect.getOwnPropertyDescriptor(options, prop);\n\n descriptor = assign({}, descriptor, {\n enumerable: false,\n writable: true,\n });\n Reflect.defineProperty(options, prop, descriptor);\n });\n\n lodashDefaults(options, defaultOptions);\n\n if (!options.json && options.json !== false) {\n Reflect.deleteProperty(options, 'json');\n }\n\n options.logger = options.logger || this.logger || console;\n\n return _request(options);\n});\n\nexport const protoprepareFetchOptions = curry(function protoprepareFetchOptions(\n defaultOptions,\n options\n) {\n // Hide useless elements from logs\n ['download', 'interceptors', 'logger', 'upload'].forEach((prop) => {\n let descriptor = Reflect.getOwnPropertyDescriptor(options, prop);\n\n descriptor = assign({}, descriptor, {\n enumerable: false,\n writable: true,\n });\n Reflect.defineProperty(options, prop, descriptor);\n });\n\n lodashDefaults(options, defaultOptions);\n\n options.logger = options.logger || this.logger || console;\n\n return _prepareFetchOptions(options);\n});\n\n/**\n * Sets the $timings value(s) before the request/fetch.\n * This function is only useful if you are about to send a request\n * using prepared fetch options; normally it is done in webex.request();\n *\n * @param {any} options\n * @returns {any} the updated options object\n */\nconst setRequestTimings = (options) => {\n const now = new Date().getTime();\n options.$timings = options.$timings || {};\n options.$timings.requestStart = now;\n options.$timings.networkStart = now;\n\n return options;\n};\n\n/**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" values to Date.now() since the existing times were set when\n * the options were built (not submitted).\n *\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to a response object\n */\nexport const setTimingsAndFetch = (options) => {\n const opts = setRequestTimings(options);\n\n // call the fetch API\n return fetch(opts.uri, opts);\n};\n\nconst defaultOptions = {\n json: true,\n interceptors: [\n // Reminder: this is supposed to be an instantiated interceptor.\n HttpStatusInterceptor.create(),\n ],\n};\n\nexport const defaults = protorequest;\nexport const request = protorequest(defaultOptions);\nexport {default as ProgressEvent} from './progress-event';\nexport {default as Interceptor} from './lib/interceptor';\nexport {default as HttpError} from './http-error';\nexport {default as HttpStatusInterceptor} from './interceptors/http-status';\nexport {default as detect} from './lib/detect';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport _request from './request';\nimport {intercept} from './utils';\n\n/**\n * @param {Object} options\n * @returns {Promise}\n */\nexport default function request(options) {\n if (options.url) {\n options.uri = options.url;\n options.url = null;\n }\n\n options.headers = options.headers || {};\n\n options.download = new EventEmitter();\n options.upload = new EventEmitter();\n\n return intercept(options, options.interceptors, 'Request')\n .then((...args) => _request(options, ...args))\n .then((...args) =>\n intercept(options, options.interceptors.slice().reverse(), 'Response', ...args)\n );\n}\n","const CalendarUtil = {\n // calculate the end time for the meeting based on the duration so it's stored on\n // the scheduled meeting item, that way client can display start and end without\n // calculation on their side\n // gets the start time from server, and the duration, and reformats\n /**\n * calculates the end time for meeting\n * @param {Object} item the locus.host property\n * @param {Object} item.start start time of the meeting\n * @param {Object} item.duration duration of the meeting\n * @returns {Object} end time of the meeting\n * @memberof CalendarUtil\n */\n calculateEndTime(item) {\n return {\n ...item,\n endTime: new Date(new Date(item.start).getTime() + item.durationMinutes * 60000),\n };\n },\n};\n\nexport default CalendarUtil;\n","import {find} from 'lodash';\n\nimport CalendarUtil from './util';\nimport {CALENDAR} from './constants';\n/**\n * @class CalendarCollection\n */\nconst CalendarCollection = {\n namespace: CALENDAR,\n items: {},\n /**\n * @param {String} id calendar ID\n * @returns {Any} Calendar Item specifc to that id\n * @private\n * @memberof CalendarCollection\n */\n get(id) {\n return this.items[id];\n },\n\n /**\n * @param {String} key any key and the corresponding calendar Item\n * @param {String} value any values corresponding to calendar item\n * @returns {Any} returns whatever is being stuffed into the collection\n * @private\n * @memberof CalendarCollection\n */\n getBy(key, value) {\n if (key && value) {\n return find(this.items, (item) => item[key] === value);\n }\n\n return null;\n },\n\n /**\n * @param {Object} item CalendarObject passed to the collection\n * @returns {Any} returns calender id whats get set\n * @private\n * @memberof CalendarCollection\n */\n set(item) {\n const itemId = item.id;\n const meeting = CalendarUtil.calculateEndTime(item);\n\n this.items[itemId] = meeting;\n\n return itemId;\n },\n\n /**\n * resets all the values in the calendarcollection\n * @returns {undefined}\n * @private\n * @memberof CalendarCollection\n */\n reset() {\n this.items = {};\n },\n\n /**\n * @param {Id} id is the id for the calendar item to be removed\n * @returns {Any} calendar item which got removed\n * @private\n * @memberof CalendarCollection\n */\n remove(id) {\n const meeting = this.get(id);\n\n delete this.items[id];\n\n return meeting;\n },\n\n /**\n * sets all the item passed to the collection\n * @param {Array} items array of calendar items\n * @private\n * @returns {undefined}\n * @memberof CalendarCollection\n */\n setAll(items) {\n items.forEach((item) => {\n this.set(item);\n });\n },\n\n /**\n * gets all the calendar stored in the collection\n * @param {Array} items array of calendar items\n * @private\n * @returns {Array} returns an array of calendar items\n * @memberof CalendarCollection\n */\n getAll() {\n return Object.values(this.items);\n },\n};\n\nexport default CalendarCollection;\n","export const CALENDAR_REGISTERED = 'calendar:registered';\nexport const CALENDAR_UNREGISTERED = 'calendar:unregistered';\nexport const CALENDAR_UPDATED = 'calendar:update';\nexport const CALENDAR_DELETE = 'calendar:delete';\nexport const CALENDAR_CREATE = 'calendar:create';\nexport const CALENDAR = 'CALENDAR';\n","import {isArray} from 'lodash';\n\nconst _encryptTextProp = (ctx, name, key, object) => {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, object[name])\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n};\n\nconst _encryptCalendarEventPayload = (data, ctx) => {\n Object.assign(data, {encryptionKeyUrl: ctx.encryptionKeyUrl});\n\n const encryptedAttendees = data.attendees\n ? data.attendees.map((attendee) =>\n Promise.all([\n _encryptTextProp(ctx, 'displayName', data.encryptionKeyUrl, attendee),\n _encryptTextProp(ctx, 'email', data.encryptionKeyUrl, attendee),\n ])\n )\n : [];\n\n return Promise.all(\n [\n _encryptTextProp(ctx, 'subject', data.encryptionKeyUrl, data),\n _encryptTextProp(ctx, 'notes', data.encryptionKeyUrl, data),\n _encryptTextProp(ctx, 'webexOptions', data.encryptionKeyUrl, data),\n ].concat([encryptedAttendees])\n );\n};\n\nconst _encryptFreeBusyPayload = (data, ctx) => {\n Object.assign(data, {encryptionKeyUrl: ctx.encryptionKeyUrl});\n\n const promises = [];\n if (data.emails && Array.isArray(data.emails)) {\n data.emails.map((item, index) =>\n promises.push(\n ctx.webex.internal.encryption\n .encryptText(data.encryptionKeyUrl, item)\n .then((encryptText) => {\n data.emails[index] = encryptText;\n })\n )\n );\n }\n\n return Promise.all(promises);\n};\n\nconst EncryptHelper = {\n /**\n * Encrypt create / update calendar event request payload\n * @param {object} [ctx] context\n * @param {object} [data] meeting payload data\n * @returns {Promise} Resolves with encrypted request payload\n * */\n encryptCalendarEventRequest: (ctx, data) => {\n if (ctx.encryptionKeyUrl) {\n return _encryptCalendarEventPayload(data, ctx);\n }\n\n return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then((keys) => {\n const key = isArray(keys) ? keys[0] : keys;\n ctx.encryptionKeyUrl = key.uri;\n\n return _encryptCalendarEventPayload(data, ctx);\n });\n },\n /**\n * Encrypt free-busy request payload, if request payload only includes the sensitive data, like email, need to encrypt these reqeust parameters, and playload includes encrypt url.\n * Otherwise, don't encrypt playload and without encrypt url,Due to calendar serivce will vaild both encrypt url and sensitive that are both present. if not, will return 400 bad reqeust to caller.\n * @param {object} [ctx] context\n * @param {object} [data] free busy payload data\n * @returns {Promise} Resolves with encrypted request payload\n * */\n encryptFreeBusyRequest: (ctx, data) => {\n if (!data.emails || !Array.isArray(data.emails)) {\n return Promise.resolve();\n }\n if (ctx.encryptionKeyUrl) {\n return _encryptFreeBusyPayload(data, ctx);\n }\n\n return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then((keys) => {\n const key = isArray(keys) ? keys[0] : keys;\n ctx.encryptionKeyUrl = key.uri;\n\n return _encryptFreeBusyPayload(data, ctx);\n });\n },\n};\n\nexport default EncryptHelper;\n","const _decryptTextProp = (ctx, name, key, object) => {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .decryptText(key.uri || key, object[name])\n .then((plaintext) => {\n object[name] = plaintext;\n });\n};\n\nconst DecryptHelper = {\n /**\n * Decrypt scheduler data response\n * @param {object} [ctx] context\n * @param {object} [data] scheduler data response\n * @returns {Promise} Resolves with decrypted response\n * */\n decryptSchedulerDataResponse: (ctx, data) => {\n if (!data) {\n return Promise.resolve();\n }\n\n if (!data.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties if meeting object contains participants\n const decryptedParticipants = data.encryptedParticipants\n ? data.encryptedParticipants.map((participant) =>\n Promise.all([\n _decryptTextProp(ctx, 'encryptedEmailAddress', data.encryptionKeyUrl, participant),\n _decryptTextProp(ctx, 'encryptedName', data.encryptionKeyUrl, participant),\n ])\n )\n : [];\n\n // Decrypt encryptedScheduleFor properties if meeting object contains SOB\n const decryptedScheduleFor = Promise.all(\n Object.values(data.encryptedScheduleFor || {}).flatMap((item) => [\n _decryptTextProp(ctx, 'encryptedEmail', data.encryptionKeyUrl, item),\n _decryptTextProp(ctx, 'encryptedDisplayName', data.encryptionKeyUrl, item),\n ])\n );\n\n // Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo\n const decryptedMeetingJoinInfo = data.meetingJoinInfo\n ? Promise.all([\n _decryptTextProp(ctx, 'meetingJoinURI', data.encryptionKeyUrl, data.meetingJoinInfo),\n _decryptTextProp(ctx, 'meetingJoinURL', data.encryptionKeyUrl, data.meetingJoinInfo),\n ])\n : [];\n\n const decryptedOrganizer = data.encryptedOrganizer\n ? Promise.all([\n _decryptTextProp(\n ctx,\n 'encryptedEmailAddress',\n data.encryptionKeyUrl,\n data.encryptedOrganizer\n ),\n _decryptTextProp(ctx, 'encryptedName', data.encryptionKeyUrl, data.encryptedOrganizer),\n ])\n : [];\n\n return Promise.all(\n [\n _decryptTextProp(ctx, 'encryptedSubject', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'encryptedLocation', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'encryptedNotes', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'webexURI', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'webexURL', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'spaceMeetURL', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'spaceURI', data.encryptionKeyUrl, data),\n _decryptTextProp(ctx, 'spaceURL', data.encryptionKeyUrl, data),\n ].concat(\n decryptedOrganizer,\n decryptedParticipants,\n decryptedScheduleFor,\n decryptedMeetingJoinInfo\n )\n );\n },\n /**\n * Decrypt free-busy response\n * @param {object} [ctx] context\n * @param {object} [data] free-busy response\n * @returns {Promise} Resolves with decrypted response\n * */\n decryptFreeBusyResponse: (ctx, data) => {\n if (!data) {\n return Promise.resolve();\n }\n\n if (!data.calendarFreeBusyScheduleResponse) {\n return Promise.resolve();\n }\n\n if (!data.calendarFreeBusyScheduleResponse.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n const calendarFreeBusyItems = data.calendarFreeBusyScheduleResponse.calendarFreeBusyItems\n ? data.calendarFreeBusyScheduleResponse.calendarFreeBusyItems.map((calendarFreeBusyItem) =>\n Promise.all([\n _decryptTextProp(\n ctx,\n 'email',\n data.calendarFreeBusyScheduleResponse.encryptionKeyUrl,\n calendarFreeBusyItem\n ),\n ])\n )\n : [];\n\n return Promise.all([].concat(calendarFreeBusyItems));\n },\n};\n\nexport default DecryptHelper;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Calendar Item Create Event\n * Emitted when a calendar item has been added\n * @event calendar:meeting:create\n * @instance\n * @memberof Calendar\n */\n\n/**\n * Calendar Item Update Event\n * Emitted when a calendar item has been updated\n * @event calendar:meeting:update\n * @instance\n * @memberof Calendar\n */\n\n/**\n * Calendar Item Update Event\n * Emitted when a calendar item has been deleted\n * @event calendar:meeting:delete\n * @instance\n * @memberof Calendar\n */\n\n/**\n * Calendar Registered Event\n * Emitted when the calendar instance has been registered and listening\n * @event calendar:registered\n * @instance\n * @memberof Calendar\n */\n\n/**\n * Calendar Registered Event\n * Emitted when the calendar instance has been registered and listening\n * @event calendar:unregistered\n * @instance\n * @memberof Calendar\n */\nimport {isArray} from 'lodash';\nimport {base64} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CalendarCollection from './collection';\nimport {\n CALENDAR_REGISTERED,\n CALENDAR_UNREGISTERED,\n CALENDAR_DELETE,\n CALENDAR_CREATE,\n CALENDAR_UPDATED,\n} from './constants';\n\nimport EncryptHelper from './calendar.encrypt.helper';\nimport DecryptHelper from './calendar.decrypt.helper';\n\nconst Calendar = WebexPlugin.extend({\n namespace: 'Calendar',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof Calendar\n */\n registered: false,\n\n /**\n * Cache all rpc event request locally\n * */\n rpcEventRequests: [],\n\n /**\n * Cache KMS encryptionKeyUrl\n * */\n encryptionKeyUrl: null,\n\n /**\n * Pre-fetch a KMS encryption key url to improve performance.\n * Waits for the user to be authorized and skips if an unverified guest.\n * @private\n * @returns {void}\n */\n prefetchEncryptionKey() {\n if (!this.webex.canAuthorize) {\n this.listenToOnce(this.webex, 'change:canAuthorize', () => {\n this.prefetchEncryptionKey();\n });\n\n return;\n }\n\n if (this.webex.credentials.isUnverifiedGuest) {\n return;\n }\n\n this.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then((keys) => {\n const key = isArray(keys) ? keys[0] : keys;\n this.encryptionKeyUrl = key ? key.uri : null;\n this.logger.info('calendar->bind a KMS encryption key url');\n this.webex.internal.encryption\n .getKey(this.encryptionKeyUrl, {onBehalfOf: null})\n .then((retrievedKey) => {\n this.encryptionKeyUrl = retrievedKey ? retrievedKey.uri : null;\n this.logger.info('calendar->retrieve the KMS encryption key url and cache it');\n });\n });\n },\n\n /**\n * WebexPlugin initialize method. This triggers once Webex has completed its\n * initialization workflow.\n *\n * If the plugin is meant to perform startup actions, place them in this\n * `initialize()` method instead of the `constructor()` method.\n * @private\n * @returns {void}\n */\n initialize() {\n // Used to perform actions after webex is fully qualified and ready for\n // operation.\n this.listenToOnce(this.webex, 'ready', () => {\n this.prefetchEncryptionKey();\n });\n },\n\n /**\n * Explicitly sets up the calendar plugin by registering\n * the device, connecting to mercury, and listening for calendar events.\n * @returns {Promise}\n * @public\n * @memberof Calendar\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('calendar->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('calendar->register#INFO, Calendar plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.device\n .register()\n .then(() => this.webex.internal.mercury.connect())\n .then(() => {\n this.listenForEvents();\n this.trigger(CALENDAR_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`calendar->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the calendar plugin by deregistering\n * the device, disconnecting from mercury, and stops listening to calendar events\n *\n * @returns {Promise}\n * @public\n * @memberof Calendar\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('calendar->unregister#INFO, Calendar plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return this.webex.internal.mercury\n .disconnect()\n .then(() => this.webex.internal.device.unregister())\n .then(() => {\n this.trigger(CALENDAR_UNREGISTERED);\n this.registered = false;\n });\n },\n\n /**\n * registers for calendar events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n // Calendar mercury events listener\n this.webex.internal.mercury.on('event:calendar.meeting.create', (envelope) => {\n this._handleCreate(envelope.data);\n });\n this.webex.internal.mercury.on('event:calendar.meeting.update', (envelope) => {\n this._handleUpdate(envelope.data);\n });\n this.webex.internal.mercury.on('event:calendar.meeting.create.minimal', (envelope) => {\n this._handleCreate(envelope.data);\n });\n this.webex.internal.mercury.on('event:calendar.meeting.update.minimal', (envelope) => {\n this._handleUpdate(envelope.data);\n });\n this.webex.internal.mercury.on('event:calendar.meeting.delete', (envelope) => {\n this._handleDelete(envelope.data);\n });\n this.webex.internal.mercury.on('event:calendar.free_busy', (envelope) => {\n this._handleFreeBusy(envelope.data);\n });\n },\n\n /**\n * unregisteres all the calendar events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off('event:calendar.meeting.create');\n this.webex.internal.mercury.off('event:calendar.meeting.create.minimal');\n this.webex.internal.mercury.off('event:calendar.meeting.update');\n this.webex.internal.mercury.off('event:calendar.meeting.update.minimal');\n this.webex.internal.mercury.off('event:calendar.meeting.delete');\n this.webex.internal.mercury.off('event:calendar.free_busy');\n },\n\n /**\n * handles update events, triggers after collection updates\n * @param {Object} data\n * @returns {undefined}\n * @private\n */\n _handleUpdate(data) {\n const id = CalendarCollection.set(data.calendarMeetingExternal);\n\n this.trigger(CALENDAR_UPDATED, CalendarCollection.get(id));\n },\n\n /**\n * handles create events, triggers after collection updates\n * @param {Object} data\n * @returns {undefined}\n * @private\n */\n _handleCreate(data) {\n const id = CalendarCollection.set(data.calendarMeetingExternal);\n\n this.trigger(CALENDAR_CREATE, CalendarCollection.get(id));\n },\n\n /**\n * handles delete events, triggers after collection updates\n * @param {Object} data\n * @returns {undefined}\n * @private\n */\n _handleDelete(data) {\n const item = CalendarCollection.remove(data.calendarMeetingExternal.id);\n\n this.trigger(CALENDAR_DELETE, item);\n },\n\n /**\n * handles free_busy events\n * @param {Object} data\n * @returns {undefined}\n * @private\n */\n _handleFreeBusy(data) {\n DecryptHelper.decryptFreeBusyResponse(this, data).then(() => {\n let response = {};\n if (data && data.calendarFreeBusyScheduleResponse) {\n response = data.calendarFreeBusyScheduleResponse;\n }\n if (response && response.requestId && response.requestId in this.rpcEventRequests) {\n this.logger.log(\n `webex.internal.calendar - receive requests, requestId: ${response.requestId}`\n );\n delete response.encryptionKeyUrl;\n const {resolve} = this.rpcEventRequests[response.requestId];\n resolve(response);\n delete this.rpcEventRequests[response.requestId];\n } else {\n this.logger.log('webex.internal.calendar - receive other requests.');\n }\n });\n },\n\n /**\n * Retrieves a collection of calendars based on the request parameters\n * Defaults to 1 day before and 7 days ahead\n * @param {Object} options\n * @param {Date} options.fromDate the start of the time range\n * @param {Date} options.toDate the end of the time range\n * @returns {Promise} Resolves with an array of calendars\n */\n syncCalendar(options = {fromDate: this.config.fromDate, toDate: this.config.toDate}) {\n return this.list({fromDate: options.fromDate, toDate: options.toDate}).then((res) => {\n CalendarCollection.setAll(res);\n\n return CalendarCollection.getAll();\n });\n },\n /**\n * get the calendar item that has a matching value\n * @param {String} key meeting property\n * @param {Any} value the meeting property to match\n * @returns {Object}\n */\n getByType(key, value) {\n if (['spaceURI', 'spaceMeetURL', 'conversationId'].includes(key)) {\n return CalendarCollection.getBy(key, value);\n }\n throw new Error('key must be one of, spaceURI, spaceMeetURL, or conversationId');\n },\n\n /**\n * gets all the calendar items that have been populated\n * @returns {Object}\n */\n getAll() {\n return CalendarCollection.getAll();\n },\n\n /**\n * Decrypts an encrypted incoming calendar event\n * @param {Object} event\n * @returns {Promise} Resolves with a decrypted calendar event\n */\n processMeetingEvent(event) {\n return this.webex.transform('inbound', event).then(() => event);\n },\n\n /**\n * Retrieves an array of meeting participants for the meeting participantsUrl\n * @param {String} participantsUrl\n * @returns {Promise} Resolves with an object of meeting participants\n */\n getParticipants(participantsUrl) {\n return this.request({\n method: 'GET',\n uri: participantsUrl,\n });\n },\n\n /**\n * get meeting notes using notesUrl from meeting object.\n * @param {String} notesUrl\n * @returns {Promise} Resolves with an object of meeting notes\n */\n getNotesByUrl(notesUrl) {\n return this.request({\n method: 'GET',\n uri: notesUrl,\n });\n },\n\n /**\n * Retrieves a collection of meetings based on the request parameters\n * @param {String} id\n * @returns {Promise} Resolves with an object of meeting notes\n */\n getNotes(id) {\n return this.request({\n method: 'GET',\n service: 'calendar',\n resource: `calendarEvents/${base64.encode(id)}/notes`,\n });\n },\n\n /**\n * Retrieves a collection of meetings based on the request parameters\n * @param {Object} options\n * @param {Date} options.fromDate the start of the time range\n * @param {Date} options.toDate the end of the time range\n * @returns {Promise} Resolves with an array of meetings\n */\n list(options) {\n options = options || {};\n\n return this.webex\n .request({\n method: 'GET',\n service: 'calendar',\n resource: 'calendarEvents',\n qs: options,\n })\n .then((res) => {\n const meetingObjects = res.body.items;\n const promises = [];\n\n meetingObjects.forEach((meeting) => {\n if (!meeting.encryptedParticipants) {\n promises.push(\n this.getParticipants(meeting.participantsUrl).then((notesResponse) => {\n meeting.encryptedParticipants = notesResponse.body.encryptedParticipants;\n })\n );\n }\n });\n\n return Promise.all(promises).then(() => meetingObjects);\n });\n },\n\n /**\n * Create calendar event\n * @param {object} [data] meeting payload data\n * @param {object} [query] the query parameters for specific usage\n * @returns {Promise} Resolves with creating calendar event response\n * */\n createCalendarEvent(data, query) {\n return EncryptHelper.encryptCalendarEventRequest(this, data).then(() =>\n this.request({\n method: 'POST',\n service: 'calendar',\n body: data,\n resource: 'calendarEvents/sync',\n qs: query || {},\n })\n );\n },\n\n /**\n * Update calendar event\n * @param {string} [id] calendar event id\n * @param {object} [data] meeting payload data\n * @param {object} [query] the query parameters for specific usage\n * @returns {Promise} Resolves with updating calendar event response\n * */\n updateCalendarEvent(id, data, query) {\n return EncryptHelper.encryptCalendarEventRequest(this, data).then(() =>\n this.request({\n method: 'PATCH',\n service: 'calendar',\n body: data,\n resource: `calendarEvents/${base64.encode(id)}/sync`,\n qs: query || {},\n })\n );\n },\n\n /**\n * Delete calendar event\n * @param {string} [id] calendar event id\n * @param {object} [query] the query parameters for specific usage\n * @returns {Promise} Resolves with deleting calendar event response\n * */\n deleteCalendarEvent(id, query) {\n return this.request({\n method: 'DELETE',\n service: 'calendar',\n resource: `calendarEvents/${base64.encode(id)}/sync`,\n qs: query || {},\n });\n },\n\n /**\n * @typedef QuerySchedulerDataOptions\n * @param {string} [siteName] it is site full url, must have. Example: ccctest.dmz.webex.com\n * @param {string} [id] it is seriesOrOccurrenceId. If present, the series/occurrence meeting ID to fetch data for.\n * Example: 040000008200E00074C5B7101A82E008000000004A99F11A0841D9010000000000000000100000009EE499D4A71C1A46B51494C70EC7BFE5\n * @param {string} [clientMeetingId] If present, the client meeting UUID to fetch data for.\n * Example: 7f318aa9-887c-6e94-802a-8dc8e6eb1a0a\n * @param {string} [scheduleTemplateId] it template id.\n * @param {string} [sessionTypeId] it session type id.\n * @param {string} [organizerCIUserId] required in schedule-on-behalf case. It is the organizer's CI UUID.\n * @param {boolean} [usmPreference]\n * @param {string} [webexMeetingId] webex side meeting UUID\n * @param {string} [eventId] event ID.\n * @param {string} [icalUid] icalendar UUID.\n * @param {string} [thirdPartyType] third part type, such as: Microsoft\n */\n /**\n * Get scheduler data from calendar service\n * @param {QuerySchedulerDataOptions} [query] the command parameters for fetching scheduler data.\n * @returns {Promise} Resolves with a decrypted scheduler data\n * */\n getSchedulerData(query) {\n return this.request({\n method: 'GET',\n service: 'calendar',\n resource: 'schedulerData',\n qs: query || {},\n }).then((response) => {\n return DecryptHelper.decryptSchedulerDataResponse(this, response.body).then(() => response);\n });\n },\n\n /**\n * Get free busy status from calendar service\n * @param {Object} [data] the command parameters for fetching free busy status.\n * @param {object} [query] the query parameters for specific usage\n * @returns {Promise} Resolves with a decrypted response\n * */\n getFreeBusy(data, query) {\n return EncryptHelper.encryptFreeBusyRequest(this, data)\n .then(() => {\n return this.request({\n method: 'POST',\n service: 'calendar',\n body: data,\n resource: 'freebusy',\n qs: query || {},\n });\n })\n .then(() => {\n return new Promise((resolve, reject) => {\n this.rpcEventRequests[data.requestId] = {resolve, reject};\n });\n })\n .catch((error) => {\n throw error;\n });\n },\n});\n\nexport default Calendar;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n calendar: {\n fromDate: new Date(new Date().setDate(new Date().getDate() - 1)),\n toDate: new Date(new Date().setDate(new Date().getDate() + 7)),\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-conversation';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Calendar from './calendar';\nimport config from './config';\n\nregisterInternalPlugin('calendar', Calendar, {\n config,\n payloadTransformer: {\n predicates: [\n {\n name: 'transformMeetingNotes',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.encryptedNotes') &&\n !(\n response.options &&\n response.options.service === 'calendar' &&\n response.options.method === 'GET' &&\n response.options.resource === 'schedulerData'\n )\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'transformMeetingParticipants',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.encryptedParticipants') &&\n !(\n response.options &&\n response.options.service === 'calendar' &&\n response.options.method === 'GET' &&\n response.options.resource === 'schedulerData'\n )\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'transformMeetingArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.items[0].seriesId'));\n },\n extract(response) {\n return Promise.resolve(response.body.items);\n },\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.seriesId') &&\n !(\n response.options &&\n response.options.service === 'calendar' &&\n response.options.method === 'GET' &&\n response.options.resource === 'schedulerData'\n )\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'calendarMeetingExternal'));\n },\n extract(response) {\n return Promise.resolve(response.calendarMeetingExternal);\n },\n },\n ],\n transforms: [\n {\n name: 'transformMeetingArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformMeeting', item)));\n },\n },\n {\n name: 'transformMeeting',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties if meeting object contains participants\n const decryptedParticipants = object.encryptedParticipants\n ? object.encryptedParticipants.map((participant) =>\n Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'encryptedEmailAddress',\n object.encryptionKeyUrl,\n participant\n ),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedName',\n object.encryptionKeyUrl,\n participant\n ),\n ])\n )\n : [];\n\n // Decrypt meetingJoinInfo properties if meeting object contains meetingJoinInfo\n const decryptedMeetingJoinInfo = object.meetingJoinInfo\n ? Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'meetingJoinURI',\n object.encryptionKeyUrl,\n object.meetingJoinInfo\n ),\n ctx.transform(\n 'decryptTextProp',\n 'meetingJoinURL',\n object.encryptionKeyUrl,\n object.meetingJoinInfo\n ),\n ])\n : [];\n\n const decryptedOrganizer = object.encryptedOrganizer\n ? Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'encryptedEmailAddress',\n object.encryptionKeyUrl,\n object.encryptedOrganizer\n ),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedName',\n object.encryptionKeyUrl,\n object.encryptedOrganizer\n ),\n ])\n : [];\n\n return Promise.all(\n [\n ctx.transform('decryptTextProp', 'encryptedSubject', object.encryptionKeyUrl, object),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedLocation',\n object.encryptionKeyUrl,\n object\n ),\n ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'webexURI', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'webexURL', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceMeetURL', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceURI', object.encryptionKeyUrl, object),\n ctx.transform('decryptTextProp', 'spaceURL', object.encryptionKeyUrl, object),\n ].concat(decryptedOrganizer, decryptedParticipants, decryptedMeetingJoinInfo)\n );\n },\n },\n {\n name: 'transformMeetingNotes',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl) {\n return Promise.resolve();\n }\n\n return Promise.all([\n ctx.transform('decryptTextProp', 'encryptedNotes', object.encryptionKeyUrl, object),\n ]);\n },\n },\n {\n name: 'transformMeetingParticipants',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.encryptionKeyUrl || !object.encryptedParticipants) {\n return Promise.resolve();\n }\n\n // Decrypt participant properties\n const decryptedParticipants = object.encryptedParticipants.map((participant) =>\n Promise.all([\n ctx.transform(\n 'decryptTextProp',\n 'encryptedEmailAddress',\n object.encryptionKeyUrl,\n participant\n ),\n ctx.transform(\n 'decryptTextProp',\n 'encryptedName',\n object.encryptionKeyUrl,\n participant\n ),\n ])\n );\n\n return Promise.all(decryptedParticipants);\n },\n },\n ],\n },\n});\n\nexport {default} from './calendar';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport {curry, forEach, includes, reduce} from 'lodash';\n\nexport {escape, escapeSync} from './html-base';\n\n/**\n * Some browsers don't implement {@link Element#remove()} or\n * {@link NodeList#remove()} or {@link HTMLCollection#remove()}. This wrapper\n * calls the appropriate `#remove()` method if available, or falls back to a\n * non-global-polluting polyfill.\n * @param {Element|NodeList|HTMLCollection} node\n * @returns {undefined}\n */\nfunction removeNode(node) {\n if (node.remove) {\n node.remove();\n\n return;\n }\n\n if (node.parentElement) {\n node.parentElement.removeChild(node);\n\n return;\n }\n\n if ('length' in node) {\n for (let i = node.length - 1; i >= 0; i -= 1) {\n removeNode(node[i]);\n }\n\n return;\n }\n\n throw new Error('Could not find a way to remove node');\n}\n\n/**\n * @param {Object} allowedTags\n * @param {Array} allowedStyles\n * @param {string} html\n * @private\n * @returns {string}\n */\nfunction _filter(...args) {\n return new Promise((resolve) => {\n resolve(_filterSync(...args));\n });\n}\n\n/**\n * Curried async HTML filter.\n * @param {Object} allowedTags Map of tagName -> array of allowed attributes\n * @param {Array} allowedStyles Array of allowed styles\n * @param {string} html html to filter\n * @returns {string}\n */\nexport const filter = curry(_filter, 4);\n\n/**\n * @param {function} processCallback callback function to do additional\n * processing on node. of the form process(node)\n * @param {Object} allowedTags\n * @param {Array} allowedStyles\n * @param {string} html\n * @private\n * @returns {string}\n */\nfunction _filterSync(processCallback, allowedTags, allowedStyles, html) {\n if (!html || !allowedStyles || !allowedTags) {\n if (html.length === 0) {\n return html;\n }\n\n throw new Error('`allowedTags`, `allowedStyles`, and `html` must be provided');\n }\n\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n depthFirstForEach(doc.body.childNodes, filterNode);\n processCallback(doc.body);\n\n if (html.indexOf('body') === 1) {\n return `${doc.body.innerHTML}`;\n }\n\n return doc.body.innerHTML;\n\n /**\n * @param {Node} node\n * @private\n * @returns {undefined}\n */\n function filterNode(node) {\n if (!isElement(node)) {\n return;\n }\n\n const nodeName = node.nodeName.toLowerCase();\n const allowedTagNames = Object.keys(allowedTags);\n\n depthFirstForEach(node.childNodes, filterNode);\n\n if (includes(allowedTagNames, nodeName)) {\n const allowedAttributes = allowedTags[nodeName];\n\n forEach(listAttributeNames(node.attributes), (attrName) => {\n if (!includes(allowedAttributes, attrName)) {\n node.removeAttribute(attrName);\n } else if (attrName === 'href' || attrName === 'src') {\n const attrValue = node.attributes.getNamedItem(attrName).value.trim().toLowerCase();\n\n // We're doing at runtime what the no-script-url rule does at compile\n // time\n // eslint-disable-next-line no-script-url\n if (attrValue.indexOf('javascript:') === 0 || attrValue.indexOf('vbscript:') === 0) {\n reparent(node);\n }\n } else if (attrName === 'style') {\n const styles = node.attributes\n .getNamedItem('style')\n .value.split(';')\n .map((style) => {\n const styleName = trim(style.split(':')[0]);\n\n if (includes(allowedStyles, styleName)) {\n return style;\n }\n\n return null;\n })\n .filter((style) => Boolean(style))\n .join(';');\n\n node.setAttribute('style', styles);\n }\n });\n } else {\n reparent(node);\n }\n }\n}\n\n/**\n * Same as _filter, but escapes rather than removes disallowed values\n * @param {Function} processCallback\n * @param {Object} allowedTags\n * @param {Array} allowedStyles\n * @param {string} html\n * @returns {Promise}\n */\nfunction _filterEscape(...args) {\n return new Promise((resolve) => {\n resolve(_filterEscapeSync(...args));\n });\n}\n\n/**\n * Same as _filterSync, but escapes rather than removes disallowed values\n * @param {Function} processCallback\n * @param {Object} allowedTags\n * @param {Array} allowedStyles\n * @param {string} html\n * @returns {string}\n */\nfunction _filterEscapeSync(processCallback, allowedTags, allowedStyles, html) {\n if (!html || !allowedStyles || !allowedTags) {\n if (html.length === 0) {\n return html;\n }\n\n throw new Error('`allowedTags`, `allowedStyles`, and `html` must be provided');\n }\n\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n depthFirstForEach(doc.body.childNodes, filterNode);\n processCallback(doc.body);\n\n if (html.indexOf('body') === 1) {\n return `${doc.body.innerHTML}`;\n }\n\n return doc.body.innerHTML;\n\n /**\n * @param {Node} node\n * @private\n * @returns {undefined}\n */\n function filterNode(node) {\n if (!isElement(node)) {\n return;\n }\n\n depthFirstForEach(node.childNodes, filterNode);\n\n const nodeName = node.nodeName.toLowerCase();\n const allowedTagNames = Object.keys(allowedTags);\n\n if (includes(allowedTagNames, nodeName)) {\n const allowedAttributes = allowedTags[nodeName];\n\n forEach(listAttributeNames(node.attributes), (attrName) => {\n if (!includes(allowedAttributes, attrName)) {\n node.removeAttribute(attrName);\n } else if (attrName === 'href' || attrName === 'src') {\n const attrValue = node.attributes.getNamedItem(attrName).value.toLowerCase();\n\n // We're doing at runtime what the no-script-url rule does at compile\n // time\n // eslint-disable-next-line no-script-url\n if (attrValue.indexOf('javascript:') === 0 || attrValue.indexOf('vbscript:') === 0) {\n reparent(node);\n }\n } else if (attrName === 'style') {\n const styles = node.attributes\n .getNamedItem('style')\n .value.split(';')\n .map((style) => {\n const styleName = trim(style.split(':')[0]);\n\n if (includes(allowedStyles, styleName)) {\n return style;\n }\n\n return null;\n })\n .filter((style) => Boolean(style))\n .join(';');\n\n node.setAttribute('style', styles);\n }\n });\n } else {\n escapeNode(node);\n }\n }\n}\n\n/**\n * Escapes a given html node\n * @param {Node} node\n * @returns {undefined}\n */\nfunction escapeNode(node) {\n const before = document.createTextNode(`<${node.nodeName.toLowerCase()}>`);\n const after = document.createTextNode(``);\n\n node.parentNode.insertBefore(before, node);\n while (node.childNodes.length > 0) {\n node.parentNode.insertBefore(node.childNodes[0], node);\n }\n node.parentNode.insertBefore(after, node);\n\n removeNode(node);\n}\n\nconst trimPattern = /^\\s|\\s$/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction trim(str) {\n return str.replace(trimPattern, '');\n}\n\n/**\n * @param {Node} node\n * @private\n * @returns {undefined}\n */\nfunction reparent(node) {\n while (node.childNodes.length > 0) {\n node.parentNode.insertBefore(node.childNodes[0], node);\n }\n removeNode(node);\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @private\n * @returns {Array}\n */\nfunction listAttributeNames(attributes) {\n return reduce(\n attributes,\n (attrNames, attr) => {\n attrNames.push(attr.name);\n\n return attrNames;\n },\n []\n );\n}\n\n/**\n * @param {Array} list\n * @param {Function} fn\n * @private\n * @returns {undefined}\n */\nfunction depthFirstForEach(list, fn) {\n for (let i = list.length; i >= 0; i -= 1) {\n fn(list[i]);\n }\n}\n\n/**\n * @param {Node} o\n * @private\n * @returns {Boolean}\n */\nfunction isElement(o) {\n if (!o) {\n return false;\n }\n\n if (o.ownerDocument === undefined) {\n return false;\n }\n\n if (o.nodeType !== 1) {\n return false;\n }\n\n if (typeof o.nodeName !== 'string') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Curried HTML filter.\n * @param {Object} allowedTags Map of tagName -> array of allowed attributes\n * @param {Array} allowedStyles Array of allowed styles\n * @param {string} html html to filter\n * @returns {string}\n */\nexport const filterSync = curry(_filterSync, 4);\n\n/**\n * Curried HTML filter that escapes rather than removes disallowed tags\n * @param {Object} allowedTags Map of tagName -> array of allowed attributes\n * @param {Array} allowedStyles Array of allowed styles\n * @param {string} html html to filter\n * @returns {Promise}\n */\nexport const filterEscape = curry(_filterEscape, 4);\n\n/**\n * Curried HTML filter that escapes rather than removes disallowed tags\n * @param {Object} allowedTags Map of tagName -> array of allowed attributes\n * @param {Array} allowedStyles Array of allowed styles\n * @param {string} html html to filter\n * @returns {string}\n */\nexport const filterEscapeSync = curry(_filterEscapeSync, 4);\n","export default function _OverloadYield(t, e) {\n this.v = t, this.k = e;\n}","import OverloadYield from \"./OverloadYield.js\";\nexport default function _awaitAsyncGenerator(e) {\n return new OverloadYield(e, 0);\n}","import _Promise from \"core-js/library/fn/promise.js\";\nimport _Symbol from \"core-js/library/fn/symbol/index.js\";\nimport OverloadYield from \"./OverloadYield.js\";\nexport default function AsyncGenerator(e) {\n var r, t;\n function resume(r, t) {\n try {\n var n = e[r](t),\n o = n.value,\n u = o instanceof OverloadYield;\n _Promise.resolve(u ? o.v : o).then(function (t) {\n if (u) {\n var i = \"return\" === r ? \"return\" : \"next\";\n if (!o.k || t.done) return resume(i, t);\n t = e[i](t).value;\n }\n settle(n.done ? \"return\" : \"normal\", t);\n }, function (e) {\n resume(\"throw\", e);\n });\n } catch (e) {\n settle(\"throw\", e);\n }\n }\n function settle(e, n) {\n switch (e) {\n case \"return\":\n r.resolve({\n value: n,\n done: !0\n });\n break;\n case \"throw\":\n r.reject(n);\n break;\n default:\n r.resolve({\n value: n,\n done: !1\n });\n }\n (r = r.next) ? resume(r.key, r.arg) : t = null;\n }\n this._invoke = function (e, n) {\n return new _Promise(function (o, u) {\n var i = {\n key: e,\n arg: n,\n resolve: o,\n reject: u,\n next: null\n };\n t ? t = t.next = i : (r = t = i, resume(e, n));\n });\n }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof _Symbol && _Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n return this;\n}, AsyncGenerator.prototype.next = function (e) {\n return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n return this._invoke(\"return\", e);\n};","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-unused-vars: [\"error\", { \"vars\": \"local\" }] */\n// eslint-disable-next-line no-redeclare\n\nconst {Buffer} = require('safe-buffer');\nconst {parse} = require('exifr/dist/lite.umd');\n\n/**\n * Updates the image file with exif information, required to correctly rotate the image activity\n * @param {Object} file\n * @param {Object} options\n * @param {boolean} options.shouldNotAddExifData\n * @returns {Promise}\n */\nexport function updateImageOrientation(file, options = {}) {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsArrayBuffer(file);\n reader.onload = function onload() {\n const arrayBuffer = reader.result;\n const buf = Buffer.from(arrayBuffer);\n\n resolve(buf);\n };\n }).then((buf) => {\n if (options.shouldNotAddExifData) {\n return buf;\n }\n\n return readExifData(file, buf);\n });\n}\n\n/**\n * Adds exif orientation information on the image file\n * @param {Object} file\n * @param {Object} buf\n * @returns {Promise}\n */\nexport async function readExifData(file, buf) {\n // For avatar images the file.type is set as image/jpeg, however for images shared in an activity file.mimeType is set as image/jpeg. Handling both conditions.\n if (file && (file.type === 'image/jpeg' || file.mimeType === 'image/jpeg')) {\n const exifData = await parse(buf, {translateValues: false});\n\n if (exifData) {\n const {Orientation, ExifImageHeight, ExifImageWidth} = exifData;\n\n file.orientation = Orientation;\n file.exifHeight = ExifImageHeight;\n file.exifWidth = ExifImageWidth;\n\n if (file.image) {\n file.image.orientation = Orientation;\n }\n }\n }\n\n return buf;\n}\n\n/* eslint-enable complexity */\n\nexport {default as processImage} from './process-image';\nexport {default as detectFileType} from './detect-filetype';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * General conversation error\n */\nexport class ConversationError extends Exception {}\n\n/**\n * InvalidUserCreation thrown when failed to create conversation with invalid user\n */\nexport class InvalidUserCreation extends ConversationError {}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport SCR from 'node-scr';\nimport {proxyEvents, transferEvents} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {filter, map, pick, some} from 'lodash';\nimport {detectFileType, processImage} from '@webex/helper-image';\nimport sha256 from 'crypto-js/sha256';\n\nexport const EMITTER_SYMBOL = Symbol('EMITTER_SYMBOL');\nexport const FILE_SYMBOL = Symbol('FILE_SYMBOL');\nconst PROMISE_SYMBOL = Symbol('PROMISE_SYMBOL');\n\n/**\n * @class\n */\nconst ShareActivity = WebexPlugin.extend({\n getSymbols() {\n return {\n file: FILE_SYMBOL,\n emitter: EMITTER_SYMBOL,\n };\n },\n\n namespace: 'Conversation',\n\n derived: {\n target: {\n deps: ['conversation'],\n fn() {\n return this.conversation;\n },\n },\n },\n\n session: {\n claimedFileType: 'string',\n conversation: {\n required: true,\n type: 'object',\n },\n\n content: 'string',\n\n clientTempId: 'string',\n\n displayName: 'string',\n\n enableThumbnails: {\n default: true,\n type: 'boolean',\n },\n\n hiddenSpaceUrl: 'object',\n\n mentions: 'object',\n\n spaceUrl: 'object',\n\n uploads: {\n type: 'object',\n default() {\n return new Map();\n },\n },\n },\n\n initialize(attrs, options) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n if (attrs && attrs.conversation) {\n this.spaceUrl = Promise.resolve(\n attrs.conversation._spaceUrl ||\n this._retrieveSpaceUrl(`${attrs.conversation.url}/space`).then((url) => {\n attrs.conversation._spaceUrl = url;\n\n return url;\n })\n );\n this.hiddenSpaceUrl = Promise.resolve(\n attrs.conversation._hiddenSpaceUrl ||\n this._retrieveSpaceUrl(`${attrs.conversation.url}/space/hidden`).then((url) => {\n attrs.conversation._hiddenSpaceUrl = url;\n\n return url;\n })\n );\n }\n },\n\n /**\n * Adds an additional GIF to the share activity\n * Different from regular add to skip uploading to webex files service\n * @param {File} gif\n * @param {File} gif.image // thumbnail\n * @param {Object} options\n * @param {Object} options.actions\n * @returns {Promise}\n */\n addGif(gif, options) {\n let gifToAdd = this.uploads.get(gif);\n\n // If the gif already exists, then don't do anything\n if (gifToAdd) {\n return Promise.resolve();\n }\n\n gifToAdd = {\n displayName: gif.name,\n fileSize: gif.size || gif.byteLength || gif.length,\n mimeType: gif.type,\n url: 'https://giphy.com',\n objectType: 'file',\n height: gif.height,\n width: gif.width,\n image: {\n height: gif.image.height,\n width: gif.image.width,\n url: 'https://giphy.com',\n },\n [FILE_SYMBOL]: gif,\n ...pick(options, 'actions'),\n };\n\n this.uploads.set(gif, gifToAdd);\n\n /* Instead of encryptBinary, which produces a encrypted version of\n * the file for upload and a SCR (contains info needed to encrypt the\n * SCR itself and the displayName), we directly create an SCR.\n * Because we are skipping uploading, the encrypted file is not needed.\n */\n return SCR.create()\n .then((scr) => {\n scr.loc = gif.url;\n gifToAdd.scr = scr;\n\n return SCR.create();\n })\n .then((thumbnailScr) => {\n thumbnailScr.loc = gif.image.url;\n gifToAdd.image.scr = thumbnailScr;\n });\n },\n\n /**\n * Adds an additional file to the share and begins submitting it to webex\n * files\n * @param {File} file\n * @param {Object} options\n * @param {Object} options.actions\n * @returns {EventEmittingPromise}\n */\n add(file, options) {\n options = options || {};\n options.claimedFileType = file.name.substring(file.name.lastIndexOf('.'));\n let upload = this.uploads.get(file);\n\n if (upload) {\n return upload[PROMISE_SYMBOL];\n }\n const emitter = new EventEmitter();\n\n upload = {\n displayName: file.name,\n fileSize: file.size || file.byteLength || file.length,\n mimeType: file.type,\n objectType: 'file',\n [EMITTER_SYMBOL]: emitter,\n [FILE_SYMBOL]: file,\n ...pick(options, 'actions'),\n };\n\n this.uploads.set(file, upload);\n const promise = detectFileType(file, this.logger)\n .then((type) => {\n upload.mimeType = type;\n\n return processImage({\n file,\n type,\n thumbnailMaxWidth: this.config.thumbnailMaxWidth,\n thumbnailMaxHeight: this.config.thumbnailMaxHeight,\n enableThumbnails: this.enableThumbnails,\n logger: this.logger,\n });\n })\n .then((imageData) => {\n const main = this.webex.internal.encryption\n .encryptBinary(file)\n .then(({scr, cdata}) => {\n upload.scr = scr;\n\n return Promise.all([cdata, this.spaceUrl]);\n })\n .then(([cdata, spaceUrl]) => {\n const uploadPromise = this._upload(cdata, `${spaceUrl}/upload_sessions`, options);\n\n transferEvents('progress', uploadPromise, emitter);\n\n return uploadPromise;\n })\n .then((metadata) => {\n upload.url = upload.scr.loc = metadata.downloadUrl;\n });\n\n let thumb;\n\n if (imageData) {\n const [thumbnail, fileDimensions, thumbnailDimensions] = imageData;\n\n Object.assign(upload, fileDimensions);\n\n if (thumbnail && thumbnailDimensions) {\n upload.image = thumbnailDimensions;\n thumb = this.webex.internal.encryption\n .encryptBinary(thumbnail)\n .then(({scr, cdata}) => {\n upload.image.scr = scr;\n\n return Promise.all([cdata, this.hiddenSpaceUrl]);\n })\n .then(([cdata, spaceUrl]) => this._upload(cdata, `${spaceUrl}/upload_sessions`))\n .then((metadata) => {\n upload.image.url = upload.image.scr.loc = metadata.downloadUrl;\n });\n }\n }\n\n return Promise.all([main, thumb]);\n });\n\n upload[PROMISE_SYMBOL] = promise;\n\n proxyEvents(emitter, promise);\n\n return promise;\n },\n\n /**\n * Fetches the files from the share\n * @returns {Array}\n */\n getFiles() {\n const files = [];\n\n for (const [key] of this.uploads) {\n files.push(this.uploads.get(key)[FILE_SYMBOL]);\n }\n\n return files;\n },\n\n /**\n * @param {File} file\n * @param {string} uri\n * @param {Object} uploadOptions - Optional object adding additional params to request body\n * @private\n * @returns {Promise}\n */\n _upload(file, uri, uploadOptions) {\n const fileSize = file.length || file.size || file.byteLength;\n const fileHash = sha256(file).toString();\n const {role, claimedFileType} = uploadOptions ?? {};\n const initializeBody = {fileSize, claimedFileType, ...(role && {role})};\n\n return this.webex.upload({\n uri,\n file,\n qs: {\n transcode: true,\n },\n phases: {\n initialize: {\n body: initializeBody,\n },\n upload: {\n $url(session) {\n return session.uploadUrl;\n },\n },\n finalize: {\n $uri(session) {\n return session.finishUploadUrl;\n },\n body: {fileSize, fileHash},\n },\n },\n });\n },\n\n /**\n * Removes the specified file from the share (Does not currently delete the\n * uploaded file)\n * @param {File} file\n * @returns {Promise}\n */\n remove(file) {\n this.uploads.delete(file);\n\n // Returns a promise for future-proofiness.\n return Promise.resolve();\n },\n\n /**\n * @private\n * @returns {Promise}\n */\n prepare() {\n if (!this.uploads.size) {\n throw new Error('Cannot submit a share activity without at least one file');\n }\n\n const activity = {\n verb: 'share',\n object: {\n objectType: 'content',\n displayName: this.object && this.object.displayName ? this.object.displayName : undefined,\n content: this.object && this.object.content ? this.object.content : undefined,\n mentions: this.object && this.object.mentions ? this.object.mentions : undefined,\n files: {\n items: [],\n },\n },\n clientTempId: this.clientTempId,\n };\n\n const promises = [];\n\n this.uploads.forEach((item) => {\n activity.object.files.items.push(item);\n promises.push(item[PROMISE_SYMBOL]);\n });\n\n activity.object.contentCategory = this._determineContentCategory(activity.object.files.items);\n\n return Promise.all(promises).then(() => activity);\n },\n\n /**\n * @param {Array} items\n * @param {string} mimeType\n * @private\n * @returns {boolean}\n */\n _itemContainsActionWithMimeType(items, mimeType) {\n return some(items.map((item) => some(item.actions, {mimeType})));\n },\n\n /**\n * @param {Array} items\n * @private\n * @returns {string}\n */\n _determineContentCategory(items) {\n // determine if the items contain an image\n if (this._itemContainsActionWithMimeType(items, 'application/x-cisco-webex-whiteboard')) {\n return 'documents';\n }\n\n const mimeTypes = filter(map(items, 'mimeType'));\n\n if (mimeTypes.length !== items.length) {\n return 'documents';\n }\n\n const contentCategory = mimeTypes[0].split('/').shift();\n\n if (contentCategory !== 'video' && contentCategory !== 'image') {\n return 'documents';\n }\n\n for (const mimeType of mimeTypes) {\n if (mimeType.split('/').shift() !== contentCategory) {\n return 'documents';\n }\n }\n\n return `${contentCategory}s`;\n },\n\n /**\n * @param {string} uri\n * @returns {Promise}\n */\n _retrieveSpaceUrl(uri) {\n return this.webex\n .request({\n method: 'PUT',\n uri,\n })\n .then((res) => res.body.spaceUrl);\n },\n});\n\n/**\n * Instantiates a ShareActivity\n * @param {Object} conversation\n * @param {ShareActivity|Object|array} object\n * @param {ProxyWebex} webex\n * @returns {ShareActivity}\n */\nShareActivity.create = function create(conversation, object, webex) {\n if (object instanceof ShareActivity) {\n return object;\n }\n\n let files;\n\n if (object?.object?.files) {\n files = object.object.files;\n Reflect.deleteProperty(object.object, 'files');\n }\n\n const share = new ShareActivity(\n {\n conversation,\n ...object,\n },\n {\n parent: webex,\n }\n );\n\n files = files?.items ?? files;\n if (files) {\n files.forEach((file) => share.add(file));\n }\n\n return share;\n};\n\nexport default ShareActivity;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {detect} from '@webex/http-core';\nimport {getType} from 'mime';\n\n/**\n * Determines the file type of the specified file\n * @param {FileLike} file\n * @param {Object} logger\n * @returns {Promise}\n */\nexport default function detectFileType(file, logger) {\n if (file.type) {\n logger.info(`file already has type ${file.type}. using existing file.type.`);\n\n return Promise.resolve(file.type);\n }\n\n if (file.mimeType) {\n logger.info(`file already has mimeType ${file.type}. using existing file.mimeType.`);\n\n return Promise.resolve(file.mimeType);\n }\n\n // This kinda belongs in http core, but since we have no guarantee that\n // buffers are expected to have names there, it'll stay here for now.\n return detect(file).then((type) => {\n if (type === 'application/x-msi' || type === 'application/octet-stream') {\n logger.info(`detected filetype to be ${type}. Falling back to mime.lookup`);\n\n return getType(file.name);\n }\n\n logger.info(`detected filetype to be ${type}. returning it`);\n\n return type;\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {pick} from 'lodash';\n\nimport {orient} from './orient';\n/* eslint-env browser */\n\n/**\n * Determins the dimensions of an image\n * @param {Object} constraints\n * @param {Number} constraints.width\n * @param {Number} constraints.height\n * @param {Number} maxWidth\n * @param {Number} maxHeight\n * @returns {Object}\n */\nfunction computeDimensions({width, height}, maxWidth, maxHeight) {\n if (height > width) {\n if (height > maxHeight) {\n width = (width * maxHeight) / height;\n height = maxHeight;\n }\n\n if (width > maxWidth) {\n height = (height * maxWidth) / width;\n width = maxWidth;\n }\n } else {\n if (width > maxWidth) {\n height = (height * maxWidth) / width;\n width = maxWidth;\n }\n\n if (height > maxHeight) {\n width = (width * maxHeight) / height;\n height = maxHeight;\n }\n }\n\n return {height, width};\n}\n\n/**\n * Measures an image file and produces a thumbnail for it\n * @param {Object} options\n * @param {Blob|ArrayBuffer} options.file\n * @param {Number} options.thumbnailMaxWidth\n * @param {Number} options.thumbnailMaxHeight\n * @param {Boolean} options.enableThumbnails\n * @param {Object} options.logger\n * @param {Boolean} options.isAvatar\n * @returns {Promise} Buffer, Dimensions, thumbnailDimensions\n */\nexport default function processImage({\n file,\n type,\n thumbnailMaxWidth,\n thumbnailMaxHeight,\n enableThumbnails,\n logger,\n isAvatar,\n}) {\n if (!type || !type.startsWith('image')) {\n return Promise.resolve();\n }\n\n file = file instanceof Blob ? file : new Blob([file]);\n\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.onload = function onload() {\n resolve(img);\n };\n img.onerror = reject;\n img.src = URL.createObjectURL(file);\n }).then((img) => {\n const fileDimensions = pick(img, 'height', 'width');\n\n if (isAvatar) {\n // only if image is a profile avatar\n logger.info('dimensions will be set for avatar image');\n const size =\n fileDimensions.height > fileDimensions.width ? fileDimensions.height : fileDimensions.width;\n\n fileDimensions.height = size;\n fileDimensions.width = size;\n }\n if (!enableThumbnails) {\n logger.info('thumbnails not enabled');\n\n return [null, fileDimensions, null];\n }\n const thumbnailDimensions = computeDimensions(\n fileDimensions,\n thumbnailMaxWidth,\n thumbnailMaxHeight\n );\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const {width, height} = thumbnailDimensions;\n\n // explanation of orientation:\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n if (file.orientation && file.orientation > 4) {\n canvas.width = height;\n canvas.height = width;\n thumbnailDimensions.width = height;\n thumbnailDimensions.height = width;\n } else {\n canvas.width = thumbnailDimensions.width;\n canvas.height = thumbnailDimensions.height;\n }\n\n orient(\n {\n orientation: file && file.orientation ? file.orientation : '',\n img,\n x: 0,\n y: 0,\n width,\n height,\n ctx,\n },\n file\n );\n\n const parts = canvas.toDataURL('image/png').split(',');\n // Thumbnail uploads were failing with common/base64 decoding\n const byteString = atob(parts[1]);\n\n const buffer = new ArrayBuffer(byteString.length);\n const view = new DataView(buffer);\n\n for (let i = 0; i < byteString.length; i += 1) {\n view.setUint8(i, byteString.charCodeAt(i));\n }\n\n return [buffer, fileDimensions, thumbnailDimensions];\n });\n}\n","/* eslint-disable complexity */\n/**\n * Rotates/flips the image on the canvas as per exif information\n * @param {Object} options(orientation: image exif orientation range from 1-8, img: Image object, x: start x-axis, y: start y-axis, width: width of the thumbnail, height: height of the thumbnail, ctx: canvas context)\n * @param {Object} file\n * @returns {Object}\n */\nexport function orient(options, file) {\n const {width, height, ctx, img, orientation, x, y} = options;\n\n if (file && file.orientation && file.orientation !== 1) {\n // explanation of orientation:\n // https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images\n switch (orientation) {\n case 2:\n // flip\n ctx.transform(-1, 0, 0, 1, width, 0);\n break;\n case 3:\n // rotateImage180\n ctx.transform(-1, 0, 0, -1, width, height);\n break;\n case 4:\n // rotate180AndFlipImage\n ctx.transform(1, 0, 0, -1, 0, height);\n break;\n case 5:\n // rotate90AndFlipImage\n ctx.transform(0, 1, 1, 0, 0, 0);\n break;\n case 6:\n // rotateImage90\n ctx.transform(0, 1, -1, 0, height, 0);\n break;\n case 7:\n // rotateNeg90AndFlipImage\n ctx.transform(0, -1, -1, 0, height, width);\n break;\n case 8:\n // rotateNeg90\n ctx.transform(0, -1, 1, 0, 0, width);\n break;\n default:\n break;\n }\n }\n ctx.drawImage(img, x, y, width, height);\n}\n","import {sortBy} from 'lodash';\n\nexport const OLDER = 'older';\nexport const NEWER = 'newer';\nexport const MID = 'mid';\nexport const INITIAL = 'initial';\n\nexport const ACTIVITY_TYPES = {\n REPLY: 'REPLY',\n EDIT: 'EDIT',\n REACTION: 'REACTION',\n REACTION_SELF: 'REACTION_SELF',\n ROOT: 'ROOT',\n CREATE: 'CREATE',\n TOMBSTONE: 'TOMBSTONE',\n DELETE: 'DELETE',\n REPLY_EDIT: 'REPLY_EDIT',\n};\n\nconst REPLY = 'reply';\nconst EDIT = 'edit';\nconst REACTION_SUMMARY = 'reactionSummary';\nconst REACTION_SELF_SUMMARY = 'reactionSelfSummary';\nconst CREATE = 'create';\nconst TOMBSTONE = 'tombstone';\nconst DELETE = 'delete';\nconst ADD = 'add';\n\nexport const getActivityType = (activity) => {\n if (activity.parent?.type === REPLY) {\n return ACTIVITY_TYPES.REPLY;\n }\n if (activity.parent?.type === EDIT) {\n return ACTIVITY_TYPES.EDIT;\n }\n if (activity.verb === ADD || activity.type === REACTION_SUMMARY) {\n return ACTIVITY_TYPES.REACTION;\n }\n if (activity.type === REACTION_SELF_SUMMARY) {\n return ACTIVITY_TYPES.REACTION_SELF;\n }\n if (activity.verb === CREATE) {\n return ACTIVITY_TYPES.CREATE;\n }\n if (activity.verb === TOMBSTONE) {\n return ACTIVITY_TYPES.TOMBSTONE;\n }\n if (activity.verb === DELETE) {\n return ACTIVITY_TYPES.DELETE;\n }\n\n return ACTIVITY_TYPES.ROOT;\n};\n\nexport const getPublishedDate = (activity = {}) => new Date(activity.published).getTime();\n\n/**\n * @param {Object} activity1\n * @param {Object} activity2\n * @returns {boolean} true if first activity is newer than second\n */\nexport const isNewer = (activity1, activity2) =>\n getPublishedDate(activity1) > getPublishedDate(activity2);\n\nexport const sortActivitiesByPublishedDate = (activities) =>\n sortBy(activities, (activity) => getPublishedDate(activity));\n\nexport const getParentId = (activity) => activity?.parent?.id;\n\nexport const isRootActivity = (act) => getActivityType(act) === ACTIVITY_TYPES.ROOT;\nexport const isReplyActivity = (act) => getActivityType(act) === ACTIVITY_TYPES.REPLY;\nexport const isEditActivity = (act) => getActivityType(act) === ACTIVITY_TYPES.EDIT;\nexport const isCreateActivity = (act) => getActivityType(act) === ACTIVITY_TYPES.CREATE;\nexport const isDeleteActivity = (act) => getActivityType(act) === ACTIVITY_TYPES.DELETE;\n\nexport const sanitizeActivity = (activity) => {\n const final = {...activity};\n\n final.reaction = activity.reaction || {};\n final.reactionSelf = activity.reactionSelf || {};\n\n // replies will be spread in order beneath parent, no need to include on final objects\n delete final.replies;\n\n return final;\n};\n\nexport const getIsActivityOrphaned = (activity, activities) =>\n activity.parent && activity.parent.id && !activities[activity.parent.id];\n\nconst getIsReplyEditActivity = (activity, activities) => {\n const parentId = activity.parent.id;\n const parentActivity = activities[parentId];\n\n return parentActivity && isReplyActivity(parentActivity);\n};\n\nexport const determineActivityType = (activity, activities) => {\n const initialType = getActivityType(activity);\n\n // edits to a reply, while they are replies themselves, appear in every way as edits\n // the only way to dermine their status as an edited reply is to find the original reply\n if (initialType === ACTIVITY_TYPES.EDIT) {\n const isReplyEditActivity = getIsReplyEditActivity(activity, activities);\n\n return isReplyEditActivity ? ACTIVITY_TYPES.REPLY_EDIT : initialType;\n }\n\n return initialType;\n};\n\nexport const createRootActivity = (activity) => activity;\n\nexport const createReplyActivity = (activity) => {\n const replyAct = {\n ...activity,\n replyParent: activity.parent,\n };\n\n return replyAct;\n};\n\nexport const createEditActivity = (editActivity, activities) => {\n const editActParentObj = editActivity.parent;\n const parentId = editActParentObj.id;\n const parentAct = activities[parentId];\n\n const joinedEditAct = {\n ...parentAct,\n id: editActivity.id,\n parent: editActParentObj,\n editParent: editActParentObj,\n object: editActivity.object,\n published: editActivity.published,\n };\n\n return joinedEditAct;\n};\n\n// takes an edit activity whose parent is a reply activity\nexport const createReplyEditActivity = (editActivity, activities) => {\n const editActParentObj = editActivity.parent;\n const parentId = editActParentObj.id;\n const parentReplyAct = activities[parentId];\n\n const joinedReplyEditActivity = {\n ...parentReplyAct,\n id: editActivity.id,\n parent: editActParentObj,\n editParent: editActParentObj,\n replyParent: parentReplyAct.parent,\n object: editActivity.object,\n published: editActivity.published,\n };\n\n return joinedReplyEditActivity;\n};\n","import {last} from 'lodash';\n\nimport {\n ACTIVITY_TYPES,\n getParentId,\n isNewer,\n getActivityType,\n sortActivitiesByPublishedDate,\n NEWER,\n OLDER,\n INITIAL,\n MID,\n} from './activities';\n\nexport const defaultMinDisplayableActivities = 20;\nexport const minBatchSize = 10;\nexport const fetchLoopCountMax = 100;\nexport const batchSizeIncrementCount = 10;\n\n// use accessors for ease of refactoring underlying implementation\n/**\n * @param {Map} destination destination map object for data. Currently a Map, but could be refactored to use any type.\n * @param {string} key\n * @param {any} value\n * @returns {Map}\n */\nexport const setValue = (destination, key, value) => destination.set(key, value);\n/**\n * @param {Map} source source map object to access. Currently expects a Map, but could be refactored to use any type\n * @param {string} key\n * @returns {Map}\n */\nexport const getValue = (source, key) => source.get(key);\n\nexport const getActivityObjectsFromMap = (hashMap) =>\n Array.from(hashMap).map(([, activity]) => activity);\n/**\n * creates maps for various activity types and defines handlers for working with stored activities\n * utilizes revealing module pattern to close over state and only expose certain necessary functions for altering state\n * @function\n * @returns {object}\n * getActivityHandlerByKey(activityType) - accepts a key to map to a defined activity handler\n * getActivityByTypeAndParentId(activityType, parentId) accepts a key and a parent ID to return an activity of that type whose parent is the parentId\n */\nexport const activityManager = () => {\n const replyActivityHash = new Map();\n const editActivityHash = new Map();\n const reactionActivityHash = new Map();\n const reactionSelfActivityHash = new Map();\n\n const handleNewReply = (replyAct) => {\n const replyParentId = getParentId(replyAct);\n const existingReplyHash = getValue(replyActivityHash, replyParentId);\n\n if (existingReplyHash) {\n setValue(existingReplyHash, replyAct.id, replyAct);\n } else {\n const replyHash = new Map();\n\n setValue(replyHash, replyAct.id, replyAct);\n setValue(replyActivityHash, replyParentId, replyHash);\n }\n };\n\n const handleNewEdit = (editAct) => {\n const isTombstone = editAct.verb === ACTIVITY_TYPES.TOMBSTONE;\n\n // we can ignore tombstone edits in favor of the newer one\n if (isTombstone) {\n return;\n }\n\n const editParentId = getParentId(editAct);\n const existingEdit = getValue(editActivityHash, editParentId);\n\n // edited activity must be newer than what we already have\n if (!existingEdit || isNewer(editAct, existingEdit)) {\n setValue(editActivityHash, editParentId, editAct);\n }\n };\n\n // logic is identical between reactions and reaction selfs, so handler simply passes the activity and the correct hash\n const reactionHelper = (reactionAct, hash) => {\n const reactionParentId = getParentId(reactionAct);\n const existingReaction = getValue(hash, reactionParentId);\n\n // reaction activity must be newer than what we already have\n if (!existingReaction || isNewer(reactionAct, existingReaction)) {\n setValue(hash, reactionParentId, reactionAct);\n }\n };\n\n const handleNewReaction = (reactionAct) => {\n reactionHelper(reactionAct, reactionActivityHash);\n };\n\n const handleNewReactionSelf = (reactionSelfAct) => {\n reactionHelper(reactionSelfAct, reactionSelfActivityHash);\n };\n\n const getActivityHandlerByKey = (key) =>\n ({\n [ACTIVITY_TYPES.REACTION]: handleNewReaction,\n [ACTIVITY_TYPES.REACTION_SELF]: handleNewReactionSelf,\n [ACTIVITY_TYPES.EDIT]: handleNewEdit,\n [ACTIVITY_TYPES.REPLY]: handleNewReply,\n }[key]);\n\n const getActivityByTypeAndParentId = (type, id) =>\n ({\n [ACTIVITY_TYPES.EDIT]: getValue(editActivityHash, id),\n [ACTIVITY_TYPES.REPLY]: getValue(replyActivityHash, id),\n [ACTIVITY_TYPES.REACTION]: getValue(reactionActivityHash, id),\n [ACTIVITY_TYPES.REACTION_SELF]: getValue(reactionSelfActivityHash, id),\n }[type]);\n\n return {\n getActivityHandlerByKey,\n getActivityByTypeAndParentId,\n };\n};\n\n/**\n * encapsulates state and logic for managing oldest and newest activities\n * @returns {object} setters and getters for activity state management\n */\nexport const bookendManager = () => {\n // keep track of generator state, like what our current oldest & newest activities are\n let oldestAct;\n let newestAct;\n\n const getOldestAct = () => oldestAct;\n const getNewestAct = () => newestAct;\n\n const setOldestAct = (act) => {\n if (!oldestAct) {\n oldestAct = act;\n } else if (isNewer(oldestAct, act)) {\n oldestAct = act;\n }\n };\n\n const setNewestAct = (act) => {\n if (!newestAct) {\n newestAct = act;\n } else if (isNewer(act, newestAct)) {\n newestAct = act;\n }\n };\n\n const setBookends = (activities) => {\n const oldestActsFirst = sortActivitiesByPublishedDate(activities);\n\n const newestInBatch = last(oldestActsFirst);\n const oldestInBatch = oldestActsFirst[0];\n\n setOldestAct(oldestInBatch);\n setNewestAct(newestInBatch);\n };\n\n return {\n setBookends,\n getNewestAct,\n getOldestAct,\n };\n};\n\n/**\n * encapsulates state and logic for when there are no more fetchable activities from convo\n * @returns {object} setters and getters for no more activities logic\n */\nexport const noMoreActivitiesManager = () => {\n // used to determine if we should continue to fetch older activities\n // must be set per iteration, as querying newer activities is still valid when all end of convo has been reached\n let noMoreActs = false;\n let noOlderActs = false;\n let noNewerActs = false;\n\n const getNoMoreActs = () => noMoreActs;\n\n const checkAndSetNoOlderActs = (act) => {\n if (!noOlderActs && getActivityType(act) === ACTIVITY_TYPES.CREATE) {\n noOlderActs = true;\n }\n };\n\n const checkAndSetNoNewerActs = (activities) => {\n if (!activities || !activities.length) {\n noNewerActs = true;\n }\n };\n\n const checkAndSetNoMoreActs = (queryType, visibleActs, currentBatchSize) => {\n if (\n (queryType === NEWER && noNewerActs) ||\n ((queryType === OLDER || queryType === INITIAL) && noOlderActs) ||\n (queryType === MID && visibleActs < currentBatchSize && noOlderActs)\n ) {\n noMoreActs = true;\n }\n };\n\n return {\n getNoMoreActs,\n checkAndSetNoMoreActs,\n checkAndSetNoNewerActs,\n checkAndSetNoOlderActs,\n };\n};\n\n/**\n * encapsulates state and logic for managing root activities\n * @returns {object} setters and getters for activity state management\n */\nexport const rootActivityManager = () => {\n const rootActivityHash = new Map();\n\n const addNewRoot = (rootAct) => {\n setValue(rootActivityHash, rootAct.id, rootAct);\n };\n\n const getRootActivityHash = () => rootActivityHash;\n\n return {\n addNewRoot,\n getRootActivityHash,\n };\n};\n\nexport const getLoopCounterFailsafe = () => {\n let fetchLoopCount = 0;\n\n return () => {\n fetchLoopCount += 1;\n if (fetchLoopCount > fetchLoopCountMax) {\n throw new Error('max fetches reached');\n }\n };\n};\n\n/**\n * creates activity query object\n * @param {string} type type of query to create\n * @param {object} queryOptions options to define query\n * @param {string} [queryOptions.newestPublishedDate] the date of the newest fetched activity\n * @param {string} [queryOptions.oldestPublishedDate] the date of the oldest fetched activity\n * @param {number} [queryOptions.batchSize] the number of activities to query\n * @param {object} [queryOptions.activityToSearch] a server activity to use to build middate query\n * @returns {object}\n */\nexport const getQuery = (type, queryOptions) => {\n const {newestPublishedDate, oldestPublishedDate, batchSize, activityToSearch = {}} = queryOptions;\n\n switch (type) {\n case NEWER: {\n const sinceDate = newestPublishedDate + 1;\n const lastActivityFirst = false;\n\n return {sinceDate, lastActivityFirst};\n }\n case MID: {\n const searchType = getActivityType(activityToSearch);\n let midDate;\n\n if (searchType === ACTIVITY_TYPES.REPLY || searchType === ACTIVITY_TYPES.EDIT) {\n midDate = activityToSearch.parent.published;\n } else {\n midDate = activityToSearch.published;\n }\n\n return {midDate, limit: batchSize};\n }\n case OLDER: {\n const maxDate = oldestPublishedDate - 1;\n\n return {maxDate};\n }\n case INITIAL:\n default: {\n return {};\n }\n }\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\nimport {EventEmitter} from 'events';\n\nimport hmacSHA256 from 'crypto-js/hmac-sha256';\nimport hex from 'crypto-js/enc-hex';\nimport {proxyEvents, tap} from '@webex/common';\nimport {Page, WebexPlugin} from '@webex/webex-core';\nimport {\n cloneDeep,\n cloneDeepWith,\n defaults,\n isArray,\n isObject,\n isString,\n last,\n map,\n merge,\n omit,\n pick,\n uniq,\n} from 'lodash';\nimport {readExifData} from '@webex/helper-image';\nimport uuid from 'uuid';\n\nimport {InvalidUserCreation} from './convo-error';\nimport ShareActivity from './share-activity';\nimport {\n minBatchSize,\n defaultMinDisplayableActivities,\n getLoopCounterFailsafe,\n batchSizeIncrementCount,\n getActivityObjectsFromMap,\n bookendManager,\n noMoreActivitiesManager,\n getQuery,\n rootActivityManager,\n activityManager,\n} from './activity-thread-ordering';\nimport {\n ACTIVITY_TYPES,\n getActivityType,\n isDeleteActivity,\n getIsActivityOrphaned,\n determineActivityType,\n createRootActivity,\n createReplyActivity,\n createEditActivity,\n createReplyEditActivity,\n OLDER,\n MID,\n INITIAL,\n NEWER,\n getPublishedDate,\n sortActivitiesByPublishedDate,\n sanitizeActivity,\n} from './activities';\nimport {ENCRYPTION_KEY_URL_MISMATCH, KEY_ALREADY_ROTATED, KEY_ROTATION_REQUIRED} from './constants';\n\nconst idToUrl = new Map();\n\nconst getConvoLimit = (options = {}) => {\n let limit;\n\n if (options.conversationsLimit) {\n limit = {\n value: options.conversationsLimit,\n name: 'conversationsLimit',\n };\n }\n\n return limit;\n};\n\nconst Conversation = WebexPlugin.extend({\n namespace: 'Conversation',\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the conversation\n */\n getUrlFromClusterId({cluster = 'us', id} = {}) {\n const url = this.webex.internal.services.getServiceUrlFromClusterId(\n {\n cluster,\n },\n this.webex\n );\n\n return id ? `${url}/conversations/${id}` : url;\n },\n\n /**\n * @param {Object} conversation\n * @param {Object} object\n * @param {Object} activity\n * @returns {Promise}\n */\n acknowledge(conversation, object, activity) {\n const url = this.getConvoUrl(conversation);\n const convoWithUrl = {...conversation, url};\n\n if (!isObject(object)) {\n return Promise.reject(new Error('`object` must be an object'));\n }\n\n return this.prepare(activity, {\n verb: 'acknowledge',\n target: this.prepareConversation(convoWithUrl),\n object: {\n objectType: 'activity',\n id: object.id,\n url: object.url,\n },\n }).then((a) => this.submit(a));\n },\n\n /**\n * Adds a participant to a conversation\n * @param {Object} conversation\n * @param {Object|string} participant\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise}\n */\n add(conversation, participant, activity) {\n const url = this.getConvoUrl(conversation);\n const convoWithUrl = {...conversation, url};\n\n return this.webex.internal.user.asUUID(participant, {create: true}).then((id) =>\n this.prepare(activity, {\n verb: 'add',\n target: this.prepareConversation(convoWithUrl),\n object: {\n id,\n objectType: 'person',\n },\n kmsMessage: {\n method: 'create',\n uri: '/authorizations',\n resourceUri: '',\n userIds: [id],\n },\n }).then((a) => this.submit(a))\n );\n },\n\n /**\n * Creates a conversation\n * @param {Object} params\n * @param {Array} params.participants\n * @param {Array} params.files\n * @param {string} params.comment\n * @param {string} params.html\n * @param {Object} params.displayName\n * @param {string} params.classificationId\n * @param {string} params.effectiveDate\n * @param {Boolean} params.isDefaultClassification\n * @param {Array} params.tags\n * @param {Boolean} params.favorite\n * @param {Object} options\n * @param {Boolean} options.allowPartialCreation\n * @param {Boolean} options.forceGrouped\n * @param {Boolean} options.skipOneOnOneFetch skips checking 1:1 exists before creating conversation\n * @returns {Promise}\n */\n create(params, options = {}) {\n if (!params.participants || params.participants.length === 0) {\n return Promise.reject(new Error('`params.participants` is required'));\n }\n\n return Promise.all(\n params.participants.map((participant) =>\n this.webex.internal.user\n .asUUID(participant, {create: true})\n // eslint-disable-next-line arrow-body-style\n .catch((err) => {\n return options.allowPartialCreation ? undefined : Promise.reject(err);\n })\n )\n )\n .then((participants) => {\n participants.unshift(this.webex.internal.device.userId);\n participants = uniq(participants);\n\n const validParticipants = participants.filter((participant) => participant);\n\n params.participants = validParticipants;\n\n // check if original participants list was to create a 1:1\n if (participants.length === 2 && !(options && options.forceGrouped)) {\n if (!params.participants[1]) {\n return Promise.reject(new InvalidUserCreation());\n }\n\n if (options.skipOneOnOneFetch) {\n return this._createOneOnOne(params);\n }\n\n return this._maybeCreateOneOnOneThenPost(params, options);\n }\n\n return this._createGrouped(params, options);\n })\n .then((c) => {\n idToUrl.set(c.id, c.url);\n\n if (!params.files) {\n return c;\n }\n\n return this.webex.internal.conversation.share(c, params.files).then((a) => {\n c.activities.items.push(a);\n\n return c;\n });\n });\n },\n\n /**\n * @private\n * generate a deterministic HMAC for a reaction\n * @param {Object} displayName displayName of reaction we are sending\n * @param {Object} parent parent activity of reaction\n * @returns {Promise}\n */\n createReactionHmac(displayName, parent) {\n // not using webex.internal.encryption.getKey() because the JWK it returns does not have a 'k'\n // property. we need jwk.k to correctly generate the HMAC\n\n return this.webex.internal.encryption.unboundedStorage\n .get(parent.encryptionKeyUrl)\n .then((keyString) => {\n const key = JSON.parse(keyString);\n // when we stringify this object, keys must be in this order to generate same HMAC as\n // desktop clients\n const formatjwk = {k: key.jwk.k, kid: key.jwk.kid, kty: key.jwk.kty};\n\n const source = `${JSON.stringify(formatjwk)}${parent.id}${displayName}`;\n\n const hmac = hex.stringify(hmacSHA256(source, parent.id));\n\n return Promise.resolve(hmac);\n });\n },\n\n /**\n * @typedef {Object} ReactionPayload\n * @property {Object} actor\n * @property {string} actor.objectType\n * @property {string} actor.id\n * @property {string} objectType\n * @property {string} verb will be either add' or 'delete'\n * @property {Object} target\n * @property {string} target.id\n * @property {string} target.objectType\n * @property {Object} object this will change on delete vs. add\n * @property {string} object.id present in delete case\n * @property {string} object.objectType 'activity' in delete case, 'reaction2' in add case\n * @property {string} object.displayName must be 'celebrate', 'heart', 'thumbsup', 'smiley', 'haha', 'confused', 'sad'\n * @property {string} object.hmac\n */\n\n /**\n * @private\n * send add or delete reaction to convo service\n * @param {Object} conversation\n * The payload to send a reaction\n * @param {ReactionPayload} reactionPayload\n * @returns {Promise}\n */\n sendReaction(conversation, reactionPayload) {\n const url = this.getConvoUrl(conversation);\n const convoWithUrl = {...conversation, url};\n\n if (!isObject(reactionPayload)) {\n return Promise.reject(new Error('`object` must be an object'));\n }\n\n return this.prepare(reactionPayload, {\n target: this.prepareConversation(convoWithUrl),\n object: pick(reactionPayload, 'id', 'url', 'objectType'),\n }).then((act) => this.submit(act));\n },\n\n /**\n * delete a reaction\n * @param {Object} conversation\n * @param {Object} reactionId,\n * @param {String} recipientId,\n * @returns {Promise}\n */\n deleteReaction(conversation, reactionId, recipientId) {\n const deleteReactionPayload = {\n actor: {objectType: 'person', id: this.webex.internal.device.userId},\n object: {\n id: reactionId,\n objectType: 'activity',\n },\n objectType: 'activity',\n target: {\n id: conversation.id,\n objectType: 'conversation',\n },\n verb: 'delete',\n };\n\n // Is not required for the request to be accepted, but follows specification.\n if (recipientId) {\n deleteReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};\n }\n\n return this.sendReaction(conversation, deleteReactionPayload);\n },\n\n /**\n * create a reaction\n * @param {Object} conversation\n * @param {Object} displayName must be 'celebrate', 'heart', 'thumbsup', 'smiley', 'haha', 'confused', 'sad'\n * @param {Object} activity activity object from convo we are reacting to\n * @param {String} recipientId,\n * @returns {Promise}\n */\n addReaction(conversation, displayName, activity, recipientId) {\n return this.createReactionHmac(displayName, activity).then((hmac) => {\n const addReactionPayload = {\n actor: {objectType: 'person', id: this.webex.internal.device.userId},\n target: {\n id: conversation.id,\n objectType: 'conversation',\n },\n verb: 'add',\n objectType: 'activity',\n parent: {\n type: 'reaction',\n id: activity.id,\n },\n object: {\n objectType: 'reaction2',\n displayName,\n hmac,\n },\n };\n\n if (recipientId) {\n addReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};\n }\n\n return this.sendReaction(conversation, addReactionPayload);\n });\n },\n\n /**\n * delete content\n * @param {Object} conversation\n * @param {Object} object\n * @param {Object} activity\n * @returns {Promise}\n */\n delete(conversation, object, activity) {\n const url = this.getConvoUrl(conversation);\n const convoWithUrl = {...conversation, url};\n\n if (!isObject(object)) {\n return Promise.reject(new Error('`object` must be an object'));\n }\n\n const request = {\n verb: 'delete',\n target: this.prepareConversation(convoWithUrl),\n object: pick(object, 'id', 'url', 'objectType'),\n };\n\n // Deleting meeting container requires KMS message\n if (object.object.objectType === 'meetingContainer') {\n // It's building a string uri + \"/authorizations?authId=\" + id, where uri is the meeting container's KRO URL, and id is the conversation's KRO URL.\n request.target.kmsResourceObjectUrl = object.object.kmsResourceObjectUrl;\n request.kmsMessage = {\n method: 'delete',\n uri: `/authorizations?${querystring.stringify({\n authId: convoWithUrl.kmsResourceObjectUrl,\n })}`,\n };\n }\n\n return this.prepare(activity, request).then((a) => this.submit(a));\n },\n\n /**\n * Downloads the file specified in item.scr or item.url\n * @param {Object} item\n * @param {Object} item.scr\n * @param {string} item.url\n * @param {Object} options\n * @param {Object} options.headers\n * @param {boolean} options.shouldNotAddExifData\n * @returns {Promise}\n */\n download(item, options = {}) {\n const isEncrypted = Boolean(item.scr && item.scr.key);\n const shunt = new EventEmitter();\n let promise;\n\n if (isEncrypted) {\n promise = this.webex.internal.encryption.download(item.url, item.scr, item.options);\n } else {\n promise = this._downloadUnencryptedFile(item.url, options);\n }\n\n promise = promise\n .on('progress', (...args) => shunt.emit('progress', ...args))\n .then((res) => {\n if (options.shouldNotAddExifData) {\n return res;\n }\n\n return readExifData(item, res);\n })\n .then((file) => {\n this.logger.info('conversation: file downloaded');\n\n if (item.displayName && !file.name) {\n file.name = item.displayName;\n }\n\n if (!file.type && item.mimeType) {\n file.type = item.mimeType;\n }\n\n return file;\n });\n\n proxyEvents(shunt, promise);\n\n return promise;\n },\n\n /**\n * Downloads an unencrypted file\n * @param {string} uri\n * @param {Object} options\n * @param {Object} options.headers\n * @returns {Promise}\n */\n _downloadUnencryptedFile(uri, options = {}) {\n Object.assign(options, {\n uri,\n responseType: 'buffer',\n });\n\n const promise = this.request(options).then((res) => res.body);\n\n proxyEvents(options.download, promise);\n\n return promise;\n },\n\n /**\n * Helper method that expands a set of parameters into an activty object\n * @param {string} verb\n * @param {Object} object\n * @param {Object} target\n * @param {Object|string} actor\n * @returns {Object}\n */\n expand(verb, object, target, actor) {\n const activity = {\n actor,\n objectType: 'activity',\n verb,\n };\n\n if (!actor) {\n actor = this.webex.internal.device.userId;\n }\n\n if (isString(actor)) {\n activity.actor = {\n objectType: 'person',\n id: actor,\n };\n }\n\n if (object) {\n activity.object = object;\n }\n\n if (target) {\n activity.target = target;\n }\n\n return activity;\n },\n\n /**\n * Gets an array of activities with an array of activity URLS\n * @param {Array} activityUrls\n * @param {Object} options\n * @param {String} options.cluster cluster where the activities are located\n * @param {String} options.url base convo url where the activities are located\n * @returns {Promise} Resolves with the activities\n */\n bulkActivitiesFetch(activityUrls, options = {}) {\n let cluster;\n let url;\n\n if (typeof options === 'string') {\n cluster = options;\n } else {\n ({cluster, url} = options);\n }\n\n const resource = 'bulk_activities_fetch';\n const params = {\n method: 'POST',\n body: {\n activityUrls,\n },\n };\n\n if (url) {\n const uri = `${url}/${resource}`;\n\n Object.assign(params, {\n uri,\n });\n } else if (cluster) {\n const uri = `${this.getUrlFromClusterId({cluster})}/${resource}`;\n\n Object.assign(params, {\n uri,\n });\n } else {\n Object.assign(params, {\n api: 'conversation',\n resource,\n });\n }\n\n return this.webex.request(params).then((res) => {\n const activitiesArr = [];\n\n if (res.body.multistatus) {\n res.body.multistatus.forEach((statusData) => {\n if (statusData.status === '200' && statusData.data && statusData.data.activity) {\n activitiesArr.push(statusData.data.activity);\n }\n });\n }\n\n return activitiesArr;\n });\n },\n\n /**\n * Fetches a single conversation\n * @param {Object} conversation\n * @param {String} [conversation.url] The URL where the conversation is located.\n * @param {String|UUID} [conversation.user] The user to look up in the conversation service\n * If specified, the user lookup will take precedence over the url lookup\n * @param {Object} options\n * @returns {Promise}\n */\n get(conversation, options = {}) {\n const {user} = conversation;\n let uri;\n\n try {\n uri = !user ? this.getConvoUrl(conversation) : '';\n } catch (err) {\n return Promise.reject(Error(err));\n }\n\n const params = {\n qs: {\n uuidEntryFormat: true,\n personRefresh: true,\n activitiesLimit: 0,\n includeConvWithDeletedUserUUID: false,\n includeParticipants: false,\n ...omit(options, 'id', 'user', 'url'),\n },\n disableTransform: options.disableTransform,\n };\n\n // Default behavior is to set includeParticipants=false,\n // which makes the payload lighter by removing participant info.\n // If the caller explicitly sets the participantAckFilter or\n // participantsLimit, we don't want that default setting.\n if ('participantAckFilter' in options || 'participantsLimit' in options) {\n delete params.qs.includeParticipants;\n }\n\n return Promise.resolve(user ? this.webex.internal.user.asUUID(user) : null)\n .then((userId) => {\n if (userId) {\n Object.assign(params, {\n service: 'conversation',\n resource: `conversations/user/${userId}`,\n });\n } else {\n params.uri = uri;\n }\n\n return this.request(params);\n })\n .then(\n tap(({body}) => {\n const {id, url} = body;\n\n this._recordUUIDs(body);\n idToUrl.set(id, url);\n })\n )\n .then((res) => res.body);\n },\n\n /**\n * Leaves the conversation or removes the specified user from the specified\n * conversation\n * @param {Object} conversation\n * @param {Object|string} participant If not specified, defaults to current\n * user\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise}\n */\n leave(conversation, participant, activity) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return Promise.resolve()\n .then(() => {\n if (!participant) {\n participant = this.webex.internal.device.userId;\n }\n\n return this.webex.internal.user.asUUID(participant).then((id) =>\n this.prepare(activity, {\n verb: 'leave',\n target: this.prepareConversation(convoWithUrl),\n object: {\n id,\n objectType: 'person',\n },\n kmsMessage: {\n method: 'delete',\n uri: `/authorizations?${querystring.stringify({authId: id})}`,\n },\n })\n );\n })\n .then((a) => this.submit(a));\n },\n\n /**\n * Lists a set of conversations. By default does not fetch activities or\n * participants\n * @param {Object} options\n * @param {boolean} options.summary - when true, use conversationSummary resource\n * @param {Number} options.conversationsLimit - limit the number of conversations fetched\n * @param {boolean} options.deferDecrypt - when true, deferDecrypt tells the\n * payload transformer to normalize (but not decrypt) each received\n * conversation. Instead, the received conversations will each have a bound\n * decrypt method that can be executed at the consumer's leisure\n * @returns {Promise>}\n */\n list(options = {}) {\n return this._list({\n service: 'conversation',\n resource: options.summary ? 'conversationsSummary' : 'conversations',\n qs: omit(options, ['deferDecrypt', 'summary']),\n deferDecrypt: options.deferDecrypt,\n limit: getConvoLimit(options),\n }).then((results) => {\n for (const convo of results) {\n idToUrl.set(convo.id, convo.url);\n }\n\n return results;\n });\n },\n\n /**\n * Paginates through a set of conversations. By default does not fetch activities or\n * participants\n * @param {Object} options\n * @param {boolean} options.deferDecrypt - when true, deferDecrypt tells the\n * payload transformer to normalize (but not decrypt) each received\n * conversation. Instead, the received conversations will each have a bound\n * decrypt method that can be executed at the consumer's leisure\n * @param {Page} options.page - After the first result has been returned to a consumer,\n * you can pass the Page back to the sdk to get the next list of results.\n * @returns {Promise>}\n */\n async paginate(options = {}) {\n if (options.page) {\n // We were passed a page but we are out of results\n if (!options.page.links || !options.page.links.next) {\n throw new Error('No link to follow for the provided page');\n }\n\n // Go get the next page of results\n return this.request({\n url: options.page.links.next,\n }).then((res) => ({page: new Page(res, this.webex)}));\n }\n\n // No page - so this is the first request to kick off the pagination process\n const queryOptions = {\n personRefresh: true,\n uuidEntryFormat: true,\n activitiesLimit: 0,\n participantsLimit: 0,\n paginate: true,\n ...omit(options, ['deferDecrypt', 'url']),\n };\n\n const reqOptions = {\n qs: queryOptions,\n deferDecrypt: options.deferDecrypt,\n limit: getConvoLimit(options),\n };\n\n // if options.url is present we likely received one or more additional urls due to federation. In this case\n // we need to initialize pagination against that url instead of the default home cluster\n if (options.url) {\n reqOptions.uri = `${options.url}/conversations`;\n } else {\n reqOptions.service = 'conversation';\n reqOptions.resource = 'conversations';\n }\n\n return this.request(reqOptions).then((res) => {\n const response = {\n page: new Page(res, this.webex),\n };\n\n if (res.body && res.body.additionalUrls) {\n response.additionalUrls = res.body.additionalUrls;\n }\n\n return response;\n });\n },\n\n /**\n * Lists the conversations the current user has left. By default does not\n * fetch activities or participants\n * @param {Object} options\n * @returns {Promise>}\n */\n listLeft(options) {\n return this._list({\n service: 'conversation',\n resource: 'conversations/left',\n qs: options,\n limit: getConvoLimit(options),\n }).then((results) => {\n for (const convo of results) {\n idToUrl.set(convo.id, convo.url);\n }\n\n return results;\n });\n },\n\n /**\n * List activities for the specified conversation\n * @param {Object} options\n * @param {String} options.conversationUrl URL to the conversation\n * @returns {Promise>}\n */\n listActivities(options) {\n return this._listActivities(Object.assign(options, {resource: 'activities'}));\n },\n\n /**\n * @typedef QueryOptions\n * @param {number} [limit] The limit of child activities that can be returned per request\n * @param {boolean} [latestActivityFirst] Sort order for the child activities\n * @param {boolean} [includeParentActivity] Enables the parent activity to be returned in the activity list\n * @param {string} [sinceDate] Get all child activities after this date\n * @param {string} [maxDate] Get all child activities before this date\n * @param {boolean} [latestActivityFirst] Sort order for the child activities\n * @param {string} [activityType] The type of children to return the parents of, a null value here returns parents of all types of children.\n * The value is one of 'reply', 'edit', 'cardAction', 'reaction', 'reactionSummary', 'reactionSelfSummary'\n */\n\n /**\n * Get all parent ids for a conversation.\n * @param {string} conversationUrl conversation URL.\n * @param {QueryOptions} [query] object containing query string values to be appended to the url\n * @returns {Promise>}\n */\n async listParentActivityIds(conversationUrl, query) {\n const params = {\n method: 'GET',\n url: `${conversationUrl}/parents`,\n qs: query,\n };\n\n const response = await this.request(params);\n\n return response.body;\n },\n\n /**\n * Returns a list of _all_ child activities for a given parentId within a given conversation\n * @param {object} [options = {}]\n * @param {string} [options.conversationUrl] targeted conversation URL\n * @param {string} [options.activityParentId] parent id of edit activities or thread activities\n * @param {QueryOptions} [options.query] object containing query string values to be appended to the url\n * @returns {Promise}\n */\n async listAllChildActivitiesByParentId(options = {}) {\n const {conversationUrl, activityParentId, query} = options;\n const {activityType} = query;\n\n const initialResponse = await this.listChildActivitiesByParentId(\n conversationUrl,\n activityParentId,\n activityType,\n query\n );\n\n let page = new Page(initialResponse, this.webex);\n\n const items = [...page.items];\n\n while (page.hasNext()) {\n // eslint-disable-next-line no-await-in-loop\n page = await page.next();\n for (const activity of page) {\n items.push(activity);\n }\n }\n\n // reverse list if needed (see _list for precedent)\n if (items.length && last(items).published < items[0].published) {\n items.reverse();\n }\n\n return items;\n },\n\n /**\n * Return a list of child activities with a given conversation, parentId and other constraints.\n * @param {string} conversationUrl targeted conversation URL\n * @param {string} activityParentId parent id of edit activities or thread activities\n * @param {string} activityType type of child activity to return\n * The value is one of 'reply', 'edit', 'cardAction', 'reaction', 'reactionSummary', 'reactionSelfSummary'\n * @param {QueryOptions} [query = {}] object containing query string values to be appended to the url\n * @returns {Promise}\n */\n async listChildActivitiesByParentId(conversationUrl, activityParentId, activityType, query = {}) {\n const finalQuery = {\n ...query,\n activityType,\n };\n const params = {\n method: 'GET',\n url: `${conversationUrl}/parents/${activityParentId}`,\n qs: finalQuery,\n };\n\n return this.request(params);\n },\n\n /**\n * Return an array of reactionSummary and reactionSelfSummary objects\n * @param {string} conversationUrl targeted conversation URL\n * @param {string} activityParentId parent id of reaction activities\n * @param {QueryOptions} query object representing query parameters to pass to convo endpoint\n * @returns {Promise}\n */\n async getReactionSummaryByParentId(conversationUrl, activityParentId, query) {\n const {body} = await this.request({\n method: 'GET',\n url: `${conversationUrl}/activities/${activityParentId}`,\n qs: query,\n });\n\n const reactionObjects = body.children\n ? body.children.filter(\n (child) => child.type === 'reactionSelfSummary' || child.type === 'reactionSummary'\n )\n : [];\n\n return reactionObjects;\n },\n\n /**\n * Lists activities in which the current user was mentioned\n * @param {Object} options\n * @returns {Promise>}\n */\n listMentions(options) {\n return this._list({\n service: 'conversation',\n resource: 'mentions',\n qs: omit(options, 'mentions'),\n });\n },\n\n /**\n * Mutes the mentions of a conversation\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n muteMentions(conversation, activity) {\n return this.tag(\n conversation,\n {\n tags: ['MENTION_NOTIFICATIONS_OFF'],\n },\n activity\n );\n },\n\n /**\n * Mutes the messages of a conversation\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n muteMessages(conversation, activity) {\n return this.tag(\n conversation,\n {\n tags: ['MESSAGE_NOTIFICATIONS_OFF'],\n },\n activity\n );\n },\n\n /**\n * Starts ignoring conversation\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n ignore(conversation, activity) {\n return this.tag(\n conversation,\n {\n tags: ['IGNORED'],\n },\n activity\n );\n },\n\n /**\n * @param {Object} conversation\n * @param {Object} inputs\n * @param {Object} parentActivity\n * @param {Object} activity\n * @returns {Promise}\n */\n cardAction(conversation, inputs, parentActivity, activity = {}) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n activity.parent = {\n id: parentActivity.id,\n type: 'cardAction',\n };\n\n return this.prepare(activity, {\n verb: 'cardAction',\n target: this.prepareConversation(convoWithUrl),\n object: {objectType: 'submit', ...inputs},\n }).then((a) => this.submit(a));\n },\n\n /**\n * Posts a message to a conversation\n * @param {Object} conversation\n * @param {Object|string} message if string, treated as plaintext; if object,\n * assumed to be object property of `post` activity\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise}\n */\n post(conversation, message, activity) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n if (isString(message)) {\n message = {\n displayName: message,\n };\n }\n\n return this.prepare(activity, {\n verb: 'post',\n target: this.prepareConversation(convoWithUrl),\n object: {objectType: 'comment', ...message},\n }).then((a) => this.submit(a));\n },\n\n prepareConversation(conversation) {\n return defaults(\n pick(\n conversation,\n 'id',\n 'url',\n 'objectType',\n 'defaultActivityEncryptionKeyUrl',\n 'kmsResourceObjectUrl'\n ),\n {\n objectType: 'conversation',\n }\n );\n },\n\n prepare(activity, params) {\n params = params || {};\n activity = activity || {};\n\n return Promise.resolve(activity.prepare ? activity.prepare(params) : activity).then((act) => {\n defaults(act, {\n verb: params.verb,\n kmsMessage: params.kmsMessage,\n objectType: 'activity',\n clientTempId: uuid.v4(),\n actor: this.webex.internal.device.userId,\n });\n\n // Workaround because parent is a reserved props in Ampersand\n if (\n (activity.parentActivityId && activity.activityType) ||\n (activity.parent && activity.parent.id && activity.parent.type)\n ) {\n act.parent = {\n id: activity.parentActivityId || activity.parent.id,\n type: activity.activityType || activity.parent.type,\n };\n }\n\n if (activity.recipients) {\n act.recipients = activity.recipients;\n }\n\n if (isString(act.actor)) {\n act.actor = {\n objectType: 'person',\n id: act.actor,\n };\n }\n\n ['actor', 'object'].forEach((key) => {\n if (params[key]) {\n act[key] = act[key] || {};\n defaults(act[key], params[key]);\n }\n });\n\n if (params.target) {\n merge(act, {\n target: pick(\n params.target,\n 'id',\n 'url',\n 'objectType',\n 'kmsResourceObjectUrl',\n 'defaultActivityEncryptionKeyUrl'\n ),\n });\n }\n\n ['object', 'target'].forEach((key) => {\n if (act[key] && act[key].url && !act[key].id) {\n act[key].id = act[key].url.split('/').pop();\n }\n });\n\n ['actor', 'object', 'target'].forEach((key) => {\n if (act[key] && !act[key].objectType) {\n // Reminder: throwing here because it's the only way to get out of\n // this loop in event of an error.\n throw new Error(`\\`act.${key}.objectType\\` must be defined`);\n }\n });\n\n if (act.object && act.object.content && !act.object.displayName) {\n return Promise.reject(\n new Error('Cannot submit activity object with `content` but no `displayName`')\n );\n }\n\n return act;\n });\n },\n\n /**\n * Get a subset of threads for a user.\n * @param {Object} options\n * @returns {Promise>}\n */\n async listThreads(options) {\n return this._list({\n service: 'conversation',\n resource: 'threads',\n qs: omit(options, 'showAllTypes'),\n });\n },\n\n /**\n * Handles incoming conversation.activity mercury messages\n * @param {Event} event\n * @returns {Promise}\n */\n processActivityEvent(event) {\n return this.webex.transform('inbound', event).then(() => event);\n },\n\n /**\n * Handles incoming conversation.inmeetingchat.activity mercury messages\n * @param {Event} event\n * @returns {Promise}\n */\n processInmeetingchatEvent(event) {\n return this.webex.transform('inbound', event).then(() => event);\n },\n\n /**\n * Removes all mute-related tags\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n removeAllMuteTags(conversation, activity) {\n return this.untag(\n conversation,\n {\n tags: [\n 'MENTION_NOTIFICATIONS_OFF',\n 'MENTION_NOTIFICATIONS_ON',\n 'MESSAGE_NOTIFICATIONS_OFF',\n 'MESSAGE_NOTIFICATIONS_ON',\n ],\n },\n activity\n );\n },\n\n /**\n * Creates a ShareActivty for the specified conversation\n * @param {Object} conversation\n * @param {Object} activity\n * @returns {ShareActivty}\n */\n makeShare(conversation, activity) {\n // if we pass activity as null then it does not take care of the\n // clientTempId created by the web-client while making the provisional\n // activity, hence we need to pass the activity which was created by the\n // web-client. This fixes the issue where the image activities do not come\n // back properly oriented from the server since the clientTempId is missing\n return ShareActivity.create(conversation, activity, this.webex);\n },\n\n /**\n * Assigns an avatar to a room\n * @param {Object} conversation\n * @param {File} avatar\n * @returns {Promise}\n */\n assign(conversation, avatar) {\n const uploadOptions = {role: 'spaceAvatar'};\n\n if ((avatar.size || avatar.length) > 1024 * 1024) {\n return Promise.reject(new Error('Room avatars must be less than 1MB'));\n }\n\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return Promise.resolve()\n .then(() => {\n const activity = ShareActivity.create(conversation, null, this.webex);\n\n activity.enableThumbnails = false;\n activity.add(avatar, uploadOptions);\n\n return this.prepare(activity, {\n target: this.prepareConversation(convoWithUrl),\n });\n })\n .then((a) => {\n // yes, this seems a little hacky; will likely be resolved as a result\n // of #213\n a.verb = 'assign';\n\n return this.submit(a);\n });\n },\n\n /**\n * Get url from convo object. If there isn't one, get it from the cache\n *\n * @param {String} url The location of the conversation\n * @param {UUID} id If there is no url, fall back to id to lookup in cache or with cluster\n * @param {String} cluster Used with id to lookup url\n * @param {UUID} generalConversationUuid If this is a team, the id of the general conversation\n * @param {Object} conversations If this is a team, the list of conversations in the team\n * @returns {String} url for the specific convo\n */\n getConvoUrl({id, url, cluster, conversations, generalConversationUuid}) {\n if (generalConversationUuid) {\n // This is a Team\n // Because Convo doesn't have an endpoint for the team URL\n // we have to use the general convo URL.\n const generalConvo = conversations.items.find(\n (convo) => convo.id === generalConversationUuid\n );\n\n return generalConvo.url;\n }\n\n if (url) {\n return url;\n }\n\n if (id) {\n if (cluster) {\n return this.getUrlFromClusterId({cluster, id});\n }\n this.logger.warn('You should be using the `url` instead of the `id` property');\n const relatedUrl = idToUrl.get(id);\n\n if (!relatedUrl) {\n throw Error('Could not find the `url` from the given `id`');\n }\n\n return relatedUrl;\n }\n\n throw Error('The space needs a `url` property');\n },\n\n /**\n * Sets the typing status of the current user in a conversation\n *\n * @param {Object} conversation\n * @param {Object} options\n * @param {boolean} options.typing\n * @returns {Promise}\n */\n updateTypingStatus(conversation, options) {\n if (!conversation.id) {\n if (conversation.url) {\n conversation.id = conversation.url.split('/').pop();\n } else {\n return Promise.reject(new Error('conversation: could not identify conversation'));\n }\n }\n\n let eventType;\n\n if (options.typing) {\n eventType = 'status.start_typing';\n } else {\n eventType = 'status.stop_typing';\n }\n\n const url = this.getConvoUrl(conversation);\n const resource = 'status/typing';\n const params = {\n method: 'POST',\n body: {\n conversationId: conversation.id,\n eventType,\n },\n url: `${url}/${resource}`,\n };\n\n return this.request(params);\n },\n\n /**\n * Shares files to the specified conversation\n * @param {Object} conversation\n * @param {ShareActivity|Array} activity\n * @returns {Promise}\n */\n share(conversation, activity) {\n if (isArray(activity)) {\n activity = {\n object: {\n files: activity,\n },\n };\n }\n\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n if (!(activity instanceof ShareActivity)) {\n activity = ShareActivity.create(convoWithUrl, activity, this.webex);\n }\n\n return this.prepare(activity, {\n target: this.prepareConversation(convoWithUrl),\n }).then((a) => this.submit(a));\n },\n\n /**\n * Submits an activity to the conversation service\n * @param {Object} activity\n * @param {String} [endpoint] endpoint to submit activity. If empty, find in activity\n * @returns {Promise}\n */\n submit(activity, endpoint) {\n const url = endpoint || this.getConvoUrl(activity.target);\n const resource = activity.verb === 'share' ? 'content' : 'activities';\n const params = {\n method: 'POST',\n body: activity,\n qs: {\n personRefresh: true,\n },\n url: `${url}/${resource}`,\n };\n\n if (activity.verb === 'share') {\n Object.assign(params.qs, {\n transcode: true,\n async: false,\n });\n }\n /**\n * helper to cloneDeepWith for copying instance function\n * @param {Object|String|Symbol|Array|Date} value (recursive value to clone from params)\n * @returns {Object|null}\n */\n // eslint-disable-next-line consistent-return\n const customActivityCopy = (value) => {\n const {files} = params.body.object;\n\n if (\n files &&\n value &&\n files.items.length > 0 &&\n value.constructor === files.items[0].scr.constructor\n ) {\n const copySrc = cloneDeep(value);\n\n copySrc.toJWE = value.toJWE;\n copySrc.toJSON = value.toJSON;\n\n return copySrc;\n }\n };\n const cloneActivity = cloneDeepWith(params, customActivityCopy);\n\n // triggers user-activity to reset logout timer\n this.webex.trigger('user-activity');\n\n return this.request(params)\n .then((res) => res.body)\n .catch((error) => {\n // handle when key need to rotate\n if (error.body && error.body.errorCode === KEY_ROTATION_REQUIRED) {\n cloneActivity.body.target.defaultActivityEncryptionKeyUrl = null;\n this.request(cloneActivity);\n } else if (\n error.body &&\n (error.body.errorCode === KEY_ALREADY_ROTATED ||\n error.body.errorCode === ENCRYPTION_KEY_URL_MISMATCH)\n ) {\n // handle when key need to update\n this.webex\n .request({\n method: 'GET',\n api: 'conversation',\n resource: `conversations/${params.body.target.id}`,\n })\n .then((res) => {\n cloneActivity.body.target.defaultActivityEncryptionKeyUrl =\n res.body.defaultActivityEncryptionkeyUrl;\n this.request(cloneActivity);\n });\n } else {\n throw error;\n }\n });\n },\n /**\n * Remove the avatar from a room\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise}\n */\n unassign(conversation, activity) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return this.prepare(activity, {\n verb: 'unassign',\n target: this.prepareConversation(convoWithUrl),\n object: {\n objectType: 'content',\n files: {\n items: [],\n },\n },\n }).then((a) => this.submit(a));\n },\n\n /**\n * Mutes the mentions of a conversation\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n unmuteMentions(conversation, activity) {\n return this.tag(\n conversation,\n {\n tags: ['MENTION_NOTIFICATIONS_ON'],\n },\n activity\n );\n },\n\n /**\n * Mutes the messages of a conversation\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n unmuteMessages(conversation, activity) {\n return this.tag(\n conversation,\n {\n tags: ['MESSAGE_NOTIFICATIONS_ON'],\n },\n activity\n );\n },\n\n /**\n * Stops ignoring conversation\n * @param {Conversation~ConversationObject} conversation\n * @param {Conversation~ActivityObject} activity\n * @returns {Promise} Resolves with the created activity\n */\n unignore(conversation, activity) {\n return this.untag(\n conversation,\n {\n tags: ['IGNORED'],\n },\n activity\n );\n },\n\n /**\n * Update an existing activity\n * @param {Object} conversation\n * @param {Object} object\n * @param {Object} activity\n * @returns {Promise}\n */\n update(conversation, object, activity) {\n if (!isObject(object)) {\n return Promise.reject(new Error('`object` must be an object'));\n }\n\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return this.prepare(activity, {\n verb: 'update',\n target: this.prepareConversation(convoWithUrl),\n object,\n }).then((a) => this.submit(a));\n },\n\n /**\n * Sets a new key for the conversation\n * @param {Object} conversation\n * @param {Key|string} key (optional)\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise}\n */\n updateKey(conversation, key, activity) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return this.get(convoWithUrl, {\n activitiesLimit: 0,\n includeParticipants: true,\n }).then((c) => this._updateKey(c, key, activity));\n },\n\n /**\n * Sets a new key for the conversation\n * @param {Object} conversation\n * @param {Key|string} key (optional)\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @private\n * @returns {Promise}\n */\n _updateKey(conversation, key, activity) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return Promise.resolve(\n key || this.webex.internal.encryption.kms.createUnboundKeys({count: 1})\n ).then((keys) => {\n const k = isArray(keys) ? keys[0] : keys;\n const params = {\n verb: 'updateKey',\n target: this.prepareConversation(convoWithUrl),\n object: {\n defaultActivityEncryptionKeyUrl: k.uri,\n objectType: 'conversation',\n },\n };\n\n // Reminder: the kmsResourceObjectUrl is only usable if there is\n // defaultActivityEncryptionKeyUrl.\n // Valid defaultActivityEncryptionKeyUrl start with 'kms:'\n if (\n convoWithUrl.kmsResourceObjectUrl &&\n convoWithUrl.kmsResourceObjectUrl.startsWith('kms:')\n ) {\n params.kmsMessage = {\n method: 'update',\n resourceUri: '',\n uri: k.uri,\n };\n } else {\n params.kmsMessage = {\n method: 'create',\n uri: '/resources',\n userIds: map(convoWithUrl.participants.items, 'id'),\n keyUris: [k.uri],\n };\n }\n\n return this.prepare(activity, params).then((a) => this.submit(a));\n });\n },\n\n /**\n * @param {Object} payload\n * @param {Object} options\n * @private\n * @returns {Promise}\n */\n _create(payload, options = {}) {\n return this.request({\n method: 'POST',\n service: 'conversation',\n resource: 'conversations',\n body: payload,\n qs: {\n forceCreate: options.allowPartialCreation,\n },\n }).then((res) => res.body);\n },\n\n /**\n * @param {Object} params\n * @param {Object} options\n * @private\n * @returns {Promise}\n */\n _createGrouped(params, options) {\n return this._create(this._prepareConversationForCreation(params), options);\n },\n\n /**\n * @param {Object} params\n * @param {Object} options\n * @private\n * @returns {Promise}\n */\n _createOneOnOne(params) {\n const payload = this._prepareConversationForCreation(params);\n\n payload.tags = ['ONE_ON_ONE'];\n\n return this._create(payload);\n },\n\n /**\n * Get the current conversation url.\n *\n * @returns {Promise} - conversation url\n */\n getConversationUrl() {\n this.logger.info('conversation: getting the conversation service url');\n\n const convoUrl = this.webex.internal.services.get('conversation');\n\n // Validate if the conversation url exists in the services plugin and\n // resolve with its value.\n if (convoUrl) {\n return Promise.resolve(convoUrl);\n }\n\n // Wait for the postauth catalog to update and then try to retrieve the\n // conversation service url again.\n return this.webex.internal\n .waitForCatalog('postauth')\n .then(() => this.webex.internal.services.get('conversation'))\n .catch((error) => {\n this.logger.warn('conversation: unable to get conversation url', error.message);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * @param {Object} conversation\n * @private\n * @returns {Promise}\n */\n _inferConversationUrl(conversation) {\n if (conversation.id) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n // recompute conversation URL each time as the host may have changed\n // since last usage\n return this.getConversationUrl().then((url) => {\n conversation.url = `${url}/conversations/${conversation.id}`;\n\n return conversation;\n });\n }\n if (!conversation.url) {\n return this.getConversationUrl().then((url) => {\n conversation.url = `${url}/conversations/${conversation.id}`;\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n this.logger.warn(\n 'conversation: inferred conversation url from conversation id; please pass whole conversation objects to Conversation methods'\n );\n }\n\n return conversation;\n });\n }\n\n return Promise.resolve(conversation);\n });\n }\n\n return Promise.resolve(conversation);\n },\n\n /**\n * @param {Object} options\n * @param {String} options.conversationUrl URL to the conversation\n * @param {String} options.resource The URL resource to hit for a list of objects\n * @private\n * @returns {Promise>}\n */\n _listActivities(options) {\n const id = options.conversationId;\n const url = this.getConvoUrl({url: options.conversationUrl, id});\n const {resource} = options;\n\n return this._list({\n qs: omit(options, 'resource'),\n url: `${url}/${resource}`,\n });\n },\n\n /**\n * common interface for facade of generator functions\n * @typedef {object} IGeneratorResponse\n * @param {boolean} done whether there is more to fetch\n * @param {any} value the value yielded or returned by generator\n */\n\n /**\n * @param {object} options\n * @param {string} options.conversationId\n * @param {string} options.conversationUrl,\n * @param {boolean} options.includeChildren, If set to true, parent activities will be enhanced with child objects\n * @param {number} options.minActivities how many activities to return in first batch\n * @param {?string} [options.queryType] one of older, newer, mid. defines which direction to fetch\n * @param {?object} [options.search] server activity to use as search middle date\n *\n * @returns {object}\n * returns three functions:\n *\n * getOlder - gets older activities than oldest fetched\n *\n * getNewer - gets newer activities than newest fetched\n *\n * jumpToActivity - gets searched-for activity and surrounding activities\n */\n listActivitiesThreadOrdered(options) {\n const {conversationUrl, conversationId} = options;\n\n if (!conversationUrl && !conversationId) {\n throw new Error('must provide a conversation URL or conversation ID');\n }\n\n const url = this.getConvoUrl({url: conversationUrl, id: conversationId});\n\n const baseOptions = {...omit(options, ['conversationUrl', 'conversationId']), url};\n\n const olderOptions = {...baseOptions, queryType: OLDER};\n\n let threadOrderer = this._listActivitiesThreadOrdered(baseOptions);\n\n /**\n * gets queried activity and surrounding activities\n * calling this function creates a new generator instance, losing the previous instance's internal state\n * this ensures that jumping to older and newer activities is relative to a single set of timestamps, not many\n * @param {object} searchObject activity object from convo\n * @returns {IGeneratorResponse}\n */\n const jumpToActivity = async (searchObject) => {\n if (!searchObject) {\n throw new Error('Search must be an activity object from conversation service');\n }\n const newUrl = searchObject.target && searchObject.target.url;\n\n if (!newUrl) {\n throw new Error('Search object must have a target url!');\n }\n\n const searchOptions = {\n ...baseOptions,\n url: newUrl,\n queryType: MID,\n search: searchObject,\n };\n\n threadOrderer = this._listActivitiesThreadOrdered(searchOptions);\n\n const {value: searchResults} = await threadOrderer.next(searchOptions);\n\n return {\n done: true,\n value: searchResults,\n };\n };\n\n /**\n * gets older activities than oldest fetched\n * @returns {IGeneratorResponse}\n */\n const getOlder = async () => {\n const {value = []} = await threadOrderer.next(olderOptions);\n\n const oldestInBatch = value[0] && value[0].activity;\n const moreActivitiesExist =\n oldestInBatch && getActivityType(oldestInBatch) !== ACTIVITY_TYPES.CREATE;\n\n return {\n done: !moreActivitiesExist,\n value,\n };\n };\n\n /**\n * gets newer activities than newest fetched\n * @returns {IGeneratorResponse}\n */\n const getNewer = async () => {\n const newerOptions = {...baseOptions, queryType: NEWER};\n\n const {value} = await threadOrderer.next(newerOptions);\n\n return {\n done: !value.length,\n value,\n };\n };\n\n return {\n jumpToActivity,\n getNewer,\n getOlder,\n };\n },\n\n /**\n * Represents reactions to messages\n * @typedef {object} Reaction\n * @property {object} activity reaction2summary server activity object\n */\n\n /**\n * Represents a root (parent, with or without children) activity, along with any replies and reactions\n * @typedef {object} Activity\n * @property {object} activity server activity object\n * @property {Reaction} reactions\n * @property {Reaction} reactionSelf\n */\n\n /**\n * @generator\n * @method\n * @async\n * @private\n * @param {object} options\n * @param {string} options.url\n * @param {boolean} options.includeChildren, If set to true, parent activities will be enhanced with child objects\n * @param {string} [options.minActivities] how many activities to return in first batch\n * @param {string} [options.queryType] one of older, newer, mid. defines which direction to fetch\n * @param {object} [options.search] server activity to use as search middle date\n *\n * @yields {Activity[]}\n *\n * @returns {void}\n */\n async *_listActivitiesThreadOrdered(options = {}) {\n // ***********************************************\n // INSTANCE STATE VARIABLES\n // variables that will be used for the life of the generator\n // ***********************************************\n\n let {minActivities = defaultMinDisplayableActivities, queryType = INITIAL} = options;\n\n // must fetch initially before getting newer activities!\n if (queryType === NEWER) {\n queryType = INITIAL;\n }\n\n const {url: convoUrl, search = {}, includeChildren} = options;\n\n // manage oldest, newest activities (ie bookends)\n const {setBookends, getNewestAct, getOldestAct} = bookendManager();\n\n // default batch should be equal to minActivities when fetching back in time, but halved when fetching newer due to subsequent child fetches filling up the minActivities count\n // reduces server RTs when fetching older activities\n const defaultBatchSize =\n queryType === INITIAL || queryType === OLDER\n ? minActivities\n : Math.max(minBatchSize, Math.ceil(minActivities / 2));\n let batchSize = defaultBatchSize;\n\n // exposes activity states and handlers with simple getters\n const {getActivityHandlerByKey, getActivityByTypeAndParentId} = activityManager();\n\n // set initial query\n let query = getQuery(queryType, {activityToSearch: search, batchSize});\n\n /* eslint-disable no-await-in-loop */\n /* eslint-disable no-loop-func */\n while (true) {\n // ***********************************************\n // EXECUTION STATE VARIABLES\n // variables that will be used for each \"batch\" of activities asked for\n // ***********************************************\n\n // stores all \"root\" activities (activities that are, or could be, thread parents)\n const {getRootActivityHash, addNewRoot} = rootActivityManager();\n\n // used to determine if we should continue to fetch older activities\n // must be set per iteration, as querying newer activities is still valid when all end of convo has been reached\n const {getNoMoreActs, checkAndSetNoMoreActs, checkAndSetNoOlderActs, checkAndSetNoNewerActs} =\n noMoreActivitiesManager();\n\n const getActivityHandlerByType = (type) =>\n ({\n [ACTIVITY_TYPES.ROOT]: addNewRoot,\n [ACTIVITY_TYPES.REPLY]: getActivityHandlerByKey(ACTIVITY_TYPES.REPLY),\n [ACTIVITY_TYPES.EDIT]: getActivityHandlerByKey(ACTIVITY_TYPES.EDIT),\n [ACTIVITY_TYPES.REACTION]: getActivityHandlerByKey(ACTIVITY_TYPES.REACTION),\n [ACTIVITY_TYPES.REACTION_SELF]: getActivityHandlerByKey(ACTIVITY_TYPES.REACTION_SELF),\n [ACTIVITY_TYPES.TOMBSTONE]: addNewRoot,\n [ACTIVITY_TYPES.CREATE]: addNewRoot,\n }[type]);\n\n const handleNewActivity = (activity) => {\n const actType = getActivityType(activity);\n\n // ignore deletes\n if (isDeleteActivity(activity)) {\n return;\n }\n\n const activityHandler = getActivityHandlerByType(actType);\n\n activityHandler(activity);\n };\n\n const handleNewActivities = (activities) => {\n activities.forEach((act) => {\n handleNewActivity(act);\n checkAndSetNoOlderActs(act);\n });\n };\n\n const handleOlderQuery = (activities) => {\n setBookends(activities, OLDER);\n handleNewActivities(activities);\n };\n const handleNewerQuery = (activities) => {\n checkAndSetNoNewerActs(activities);\n if (activities.length) {\n setBookends(activities, NEWER);\n handleNewActivities(activities);\n }\n };\n const handleSearch = (activities) => {\n setBookends(activities, MID);\n handleNewActivities(activities);\n };\n\n const getQueryResponseHandler = (type) =>\n ({\n [OLDER]: handleOlderQuery,\n [NEWER]: handleNewerQuery,\n [MID]: handleSearch,\n [INITIAL]: handleOlderQuery,\n }[type]);\n\n // ***********************************************\n // INNER LOOP\n // responsible for fetching and building our maps of activities\n // fetch until minActivities is reached, or no more acts to fetch, or we hit our max fetch count\n // ***********************************************\n\n const incrementLoopCounter = getLoopCounterFailsafe();\n\n while (!getNoMoreActs()) {\n // count loops and throw if we detect infinite loop\n incrementLoopCounter();\n\n // configure fetch request. Use a smaller limit when fetching newer or mids to account for potential children fetches\n const allBatchActivitiesConfig = {\n conversationUrl: convoUrl,\n limit: batchSize,\n includeChildren,\n ...query,\n };\n\n // request activities in batches\n const $allBatchActivitiesFetch = this.listActivities(allBatchActivitiesConfig);\n\n // contain fetches in array to parallelize fetching as needed\n const $fetchRequests = [$allBatchActivitiesFetch];\n\n // if query requires recursive fetches for children acts, add the additional fetch\n if (queryType === MID || queryType === NEWER) {\n const params = {activityType: null};\n\n if (query.sinceDate) {\n params.sinceDate = query.sinceDate;\n }\n\n const $parentsFetch = this.listParentActivityIds(convoUrl, params);\n\n $fetchRequests.push($parentsFetch);\n }\n\n // we dont always need to fetch for parents\n const [allBatchActivities, parents = {}] = await Promise.all($fetchRequests);\n\n // use query type to decide how to handle response\n const handler = getQueryResponseHandler(queryType);\n\n handler(allBatchActivities);\n\n /*\n next we must selectively fetch the children of each of the parents to ensure completeness\n do this by checking the hash for each of the above parent IDs\n fetch children when we have a parent whose ID is represented in the parent ID lists\n */\n const {reply: replyIds = [], edit: editIds = [], reaction: reactionIds = []} = parents;\n\n // if no parent IDs returned, do nothing\n if (replyIds.length || editIds.length || reactionIds.length) {\n const $reactionFetches = [];\n const $replyFetches = [];\n const $editFetches = [];\n\n for (const activity of allBatchActivities) {\n const actId = activity.id;\n\n const childFetchOptions = {\n conversationUrl: convoUrl,\n activityParentId: actId,\n };\n\n if (reactionIds.includes(actId)) {\n $reactionFetches.push(\n this.getReactionSummaryByParentId(convoUrl, actId, {\n activityType: 'reactionSummary',\n includeChildren: true,\n })\n );\n }\n if (replyIds.includes(actId)) {\n childFetchOptions.query = {activityType: 'reply'};\n $replyFetches.push(this.listAllChildActivitiesByParentId(childFetchOptions));\n }\n if (editIds.includes(actId)) {\n childFetchOptions.query = {activityType: 'edit'};\n $editFetches.push(this.listAllChildActivitiesByParentId(childFetchOptions));\n }\n }\n\n // parallelize fetch for speeedz\n const [reactions, replies, edits] = await Promise.all([\n Promise.all($reactionFetches),\n Promise.all($replyFetches),\n Promise.all($editFetches),\n ]);\n\n // new reactions may have come in that also need their reactions fetched\n const newReplyReactions = await Promise.all(\n replies\n .filter((reply) => replyIds.includes(reply.id))\n .map((reply) =>\n this.getReactionSummaryByParentId(convoUrl, reply.id, {\n activityType: 'reactionSummary',\n includeChildren: true,\n })\n )\n );\n\n const allReactions = [...reactions, ...newReplyReactions];\n\n // stick them into activity hashes\n replies.forEach((replyArr) => handleNewActivities(replyArr));\n edits.forEach((editArr) => handleNewActivities(editArr));\n allReactions.forEach((reactionArr) => handleNewActivities(reactionArr));\n }\n\n const rootActivityHash = getRootActivityHash();\n let visibleActivitiesCount = rootActivityHash.size;\n\n for (const rootActivity of rootActivityHash.values()) {\n const {id: rootId} = rootActivity;\n const repliesByRootId = getActivityByTypeAndParentId(ACTIVITY_TYPES.REPLY, rootId);\n\n if (repliesByRootId && repliesByRootId.size) {\n visibleActivitiesCount += repliesByRootId.size || 0;\n }\n }\n\n // stop fetching if we've reached desired count of visible activities\n if (visibleActivitiesCount >= minActivities) {\n break;\n }\n\n checkAndSetNoMoreActs(queryType, visibleActivitiesCount, batchSize);\n\n // batchSize should be equal to minimum activities when fetching older activities\n // covers \"best case\" when we reach minActivities on the first fetch\n if (queryType === OLDER) {\n batchSize = minActivities;\n }\n\n // since a MID query can bump the batchSize, we need to reset it _after_ a potential MID query\n // reset batchSize in case of MID queries bumping it up\n if (queryType === NEWER) {\n batchSize = defaultBatchSize;\n }\n\n const currentOldestPublishedDate = getPublishedDate(getOldestAct());\n const currentNewestPublishedDate = getPublishedDate(getNewestAct());\n\n // we're still building our activity list - derive new query from prior query and start loop again\n if (queryType === INITIAL) {\n query = getQuery(OLDER, {oldestPublishedDate: currentOldestPublishedDate, batchSize});\n } else {\n query = getQuery(queryType, {\n batchSize,\n activityToSearch: search,\n oldestPublishedDate: currentOldestPublishedDate,\n newestPublishedDate: currentNewestPublishedDate,\n });\n }\n\n // if we're still building out the midDate search, bump the search limit to include activities on both sides\n if (queryType === MID) {\n batchSize += batchSizeIncrementCount;\n }\n }\n\n const orderedActivities = [];\n\n const getRepliesByParentId = (replyParentId) => {\n const replies = [];\n\n const repliesByParentId = getActivityByTypeAndParentId(ACTIVITY_TYPES.REPLY, replyParentId);\n\n if (!repliesByParentId) {\n return replies;\n }\n\n const sortedReplies = sortActivitiesByPublishedDate(\n getActivityObjectsFromMap(repliesByParentId)\n );\n\n sortedReplies.forEach((replyActivity) => {\n const replyId = replyActivity.id;\n const edit = getActivityByTypeAndParentId(ACTIVITY_TYPES.EDIT, replyId);\n const reaction = getActivityByTypeAndParentId(ACTIVITY_TYPES.REACTION, replyId);\n const reactionSelf = getActivityByTypeAndParentId(ACTIVITY_TYPES.REACTION_SELF, replyId);\n\n const latestActivity = edit || replyActivity;\n // hash of root activities (in case of plain reply) and the reply activity (in case of edit)\n const allRelevantActivitiesArr = [\n ...getActivityObjectsFromMap(getRootActivityHash()),\n ...getActivityObjectsFromMap(repliesByParentId),\n ];\n const allRelevantActivities = allRelevantActivitiesArr.reduce((hashMap, act) => {\n hashMap[act.id] = act;\n\n return hashMap;\n }, {});\n\n const finalReply = this._createParsedServerActivity(\n latestActivity,\n allRelevantActivities\n );\n\n const fullReply = {\n id: replyId,\n activity: finalReply,\n reaction,\n reactionSelf,\n };\n\n const sanitizedFullReply = sanitizeActivity(fullReply);\n\n replies.push(sanitizedFullReply);\n });\n\n return replies;\n };\n\n const orderedRoots = sortActivitiesByPublishedDate(\n getActivityObjectsFromMap(getRootActivityHash())\n );\n\n orderedRoots.forEach((rootActivity) => {\n const rootId = rootActivity.id;\n const replies = getRepliesByParentId(rootId);\n const edit = getActivityByTypeAndParentId(ACTIVITY_TYPES.EDIT, rootId);\n const reaction = getActivityByTypeAndParentId(ACTIVITY_TYPES.REACTION, rootId);\n const reactionSelf = getActivityByTypeAndParentId(ACTIVITY_TYPES.REACTION_SELF, rootId);\n\n const latestActivity = edit || rootActivity;\n const finalActivity = this._createParsedServerActivity(latestActivity, {\n [rootId]: rootActivity,\n });\n\n const fullRoot = {\n id: rootId,\n activity: finalActivity,\n reaction,\n reactionSelf,\n };\n\n const sanitizedFullRoot = sanitizeActivity(fullRoot);\n\n orderedActivities.push(sanitizedFullRoot);\n replies.forEach((reply) => orderedActivities.push(reply));\n });\n\n const nextOptions = yield orderedActivities;\n\n if (nextOptions) {\n minActivities = nextOptions.minActivities || minActivities;\n\n const currentOldestPublishedDate = getPublishedDate(getOldestAct());\n const currentNewestPublishedDate = getPublishedDate(getNewestAct());\n\n queryType = nextOptions.queryType;\n query = getQuery(queryType, {\n activityToSearch: search,\n oldestPublishedDate: currentOldestPublishedDate,\n newestPublishedDate: currentNewestPublishedDate,\n batchSize,\n });\n } else {\n return;\n }\n }\n },\n\n /**\n * @typedef {object} EditActivity\n * @property {object} editParent\n *\n * @typedef {object} ReplyActivity\n * @property {object} replyParent\n *\n * @typedef {object} EditedReplyActivity\n * @property {object} replyParent\n * @property {object} editParent\n *\n * @typedef {EditActivity | ReplyActivity | EditedReplyActivity} ParsedServerActivity\n */\n\n /**\n * hashmap of server activities, keyed by id\n * @typedef {object} ActivityHash\n * @property {Object}\n */\n\n /**\n * extends a given server object with fields that point to their parent activities from the hashmap passed in\n * @param {object} activity server activity\n * @param {ActivityHash} allActivitiesHash hashmap of all server activities caller would like to pass in\n * @returns {ParsedServerActivity} server activity extended with edit and reply parent fields\n */\n _createParsedServerActivity(activity, allActivitiesHash = {}) {\n const isOrphan = getIsActivityOrphaned(activity, allActivitiesHash);\n\n if (isOrphan) {\n throw new Error(\n 'activity has a parent that cannot be found in allActivitiesHash! please handle this as necessary'\n );\n }\n\n const activityType = determineActivityType(activity, allActivitiesHash);\n\n switch (activityType) {\n case ACTIVITY_TYPES.ROOT: {\n return createRootActivity(activity);\n }\n case ACTIVITY_TYPES.EDIT: {\n // `activities` must also have the original activity\n return createEditActivity(activity, allActivitiesHash);\n }\n case ACTIVITY_TYPES.REPLY: {\n return createReplyActivity(activity);\n }\n case ACTIVITY_TYPES.REPLY_EDIT: {\n // `activities` must also have the reply activity\n return createReplyEditActivity(activity, allActivitiesHash);\n }\n default: {\n return activity;\n }\n }\n },\n\n /**\n * @param {Object} options\n * @private\n * @returns {Promise>}\n */\n async _list(options) {\n options.qs = {\n personRefresh: true,\n uuidEntryFormat: true,\n activitiesLimit: 0,\n participantsLimit: 0,\n ...options.qs,\n };\n\n const res = await this.request(options);\n\n let list;\n\n if (!res.body || !res.body.items || res.body.items.length === 0) {\n list = [];\n } else {\n list = res.body.items.slice(0);\n if (last(list).published < list[0].published) {\n list.reverse();\n }\n }\n\n // The user has more data in another cluster.\n // Follow the 'additionalUrls' for that data.\n if (res.body.additionalUrls) {\n let limit = 0;\n\n // If the user asked for a specific amount of data,\n // don't fetch more than what was asked.\n // Here we figure out how much is left from the original request.\n // Divide that by the number of additional URLS.\n // This won't get us the exact limit but it will retrieve something\n // from every cluster listed.\n if (options.limit) {\n limit = Math.floor((options.limit.value - list.length) / res.body.additionalUrls.length);\n }\n\n // If the limit is 0 for some reason,\n // don't bother requesting from other clusters\n if (!options.limit || limit !== 0) {\n const results = await Promise.all(\n res.body.additionalUrls.map((host) => {\n const url = `${host}/${options.resource}`;\n const newOptions = {...options, uri: url, url};\n\n if (options.limit) {\n newOptions.qs[newOptions.limit.name] = limit;\n }\n\n return this.request(newOptions);\n })\n );\n\n for (const result of results) {\n if (result.body && result.body.items && result.body.items.length) {\n const {items} = result.body;\n\n if (last(items).published < items[0].published) {\n items.reverse();\n }\n list = list.concat(items);\n }\n }\n }\n }\n\n await Promise.all(list.map((item) => this._recordUUIDs(item)));\n\n return list;\n },\n\n /**\n * @param {Object} params\n * @param {Object} options\n * @private\n * @returns {Promise}\n */\n _maybeCreateOneOnOneThenPost(params, options) {\n return this.get(\n defaults({\n // the use of uniq in Conversation#create guarantees participant[1] will\n // always be the other user\n user: params.participants[1],\n }),\n Object.assign(options, {includeConvWithDeletedUserUUID: true, includeParticipants: true})\n )\n .then((conversation) => {\n if (params.comment || params.html) {\n return this.post(conversation, {content: params.html, displayName: params.comment}).then(\n (activity) => {\n conversation.activities.items.push(activity);\n\n return conversation;\n }\n );\n }\n\n return conversation;\n })\n .catch((reason) => {\n if (reason.statusCode !== 404) {\n return Promise.reject(reason);\n }\n\n return this._createOneOnOne(params);\n });\n },\n\n /**\n * @param {Object} params\n * @private\n * @returns {Object}\n */\n _prepareConversationForCreation(params) {\n const payload = {\n activities: {\n items: [this.expand('create')],\n },\n objectType: 'conversation',\n kmsMessage: {\n method: 'create',\n uri: '/resources',\n userIds: cloneDeep(params.participants),\n keyUris: [],\n },\n };\n\n if (params.displayName) {\n payload.displayName = params.displayName;\n }\n\n if (params.tags) {\n payload.tags = params.tags;\n }\n\n params.participants.forEach((participant) => {\n payload.activities.items.push(\n this.expand('add', {\n objectType: 'person',\n id: participant,\n })\n );\n });\n\n if (params.comment) {\n payload.activities.items.push(\n this.expand('post', {\n objectType: 'comment',\n content: params.html,\n displayName: params.comment,\n })\n );\n }\n\n if (!params.isDefaultClassification && params.classificationId) {\n payload.activities.items.push(\n this.expand('update', {\n objectType: 'classification',\n classificationId: params.classificationId,\n effectiveDate: params.effectiveDate,\n })\n );\n }\n\n if (params.favorite) {\n payload.activities.items.push(\n this.expand('favorite', {\n objectType: 'conversation',\n })\n );\n }\n\n return payload;\n },\n\n /**\n * @param {Object} conversation\n * @private\n * @returns {Promise}\n */\n _recordUUIDs(conversation) {\n if (!conversation.participants || !conversation.participants.items) {\n return Promise.resolve(conversation);\n }\n\n return Promise.all(\n conversation.participants.items.map((participant) => {\n // ROOMs or LYRA_SPACEs do not have email addresses, so there's no point attempting to\n // record their UUIDs.\n if (participant.type === 'ROOM' || participant.type === 'LYRA_SPACE') {\n return Promise.resolve();\n }\n\n return this.webex.internal.user\n .recordUUID(participant)\n .catch((err) => this.logger.warn('Could not record uuid', err));\n })\n );\n },\n});\n\n['favorite', 'hide', 'lock', 'mute', 'unfavorite', 'unhide', 'unlock', 'unmute'].forEach((verb) => {\n Conversation.prototype[verb] = function submitSimpleActivity(conversation, activity) {\n const convoWithUrl = this.prepareConversation({\n ...conversation,\n url: this.getConvoUrl(conversation),\n });\n\n return this.prepare(activity, {\n verb,\n object: convoWithUrl,\n target: convoWithUrl,\n }).then((a) => this.submit(a));\n };\n});\n\n['assignModerator', 'unassignModerator'].forEach((verb) => {\n Conversation.prototype[verb] = function submitModerationChangeActivity(\n conversation,\n moderator,\n activity\n ) {\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return Promise.all([\n convoWithUrl,\n moderator ? this.webex.internal.user.asUUID(moderator) : this.webex.internal.device.userId,\n ])\n .then(([c, userId]) =>\n this.prepare(activity, {\n verb,\n target: this.prepareConversation(c),\n object: {\n id: userId,\n objectType: 'person',\n },\n })\n )\n .then((a) => this.submit(a));\n };\n});\n\n/**\n * Sets/unsets space property for convo\n * @param {Object} conversation\n * @param {string} tag\n * @param {Activity} activity\n * @returns {Promise}\n */\n['setSpaceProperty', 'unsetSpaceProperty'].forEach((fnName) => {\n const verb = fnName.startsWith('set') ? 'set' : 'unset';\n\n Conversation.prototype[fnName] = function submitSpacePropertyActivity(\n conversation,\n tag,\n activity\n ) {\n if (!isString(tag)) {\n return Promise.reject(new Error('`tag` must be a string'));\n }\n\n const convoWithUrl = {...conversation, url: this.getConvoUrl(conversation)};\n\n return this.prepare(activity, {\n verb,\n target: this.prepareConversation(convoWithUrl),\n object: {\n tags: [tag],\n objectType: 'spaceProperty',\n },\n }).then((a) => this.submit(a));\n };\n});\n\n['tag', 'untag'].forEach((verb) => {\n Conversation.prototype[verb] = function submitObjectActivity(conversation, object, activity) {\n if (!isObject(object)) {\n return Promise.reject(new Error('`object` must be an object'));\n }\n\n const c = this.prepareConversation({...conversation, url: this.getConvoUrl(conversation)});\n\n return this.prepare(activity, {\n verb,\n target: c,\n object: Object.assign(c, object),\n }).then((a) => this.submit(a));\n };\n});\n\nexport default Conversation;\n","export const KEY_ROTATION_REQUIRED = 1400087;\nexport const KEY_ALREADY_ROTATED = 1409004;\nexport const ENCRYPTION_KEY_URL_MISMATCH = 1400049;\n","import AsyncGenerator from \"./AsyncGenerator.js\";\nexport default function _wrapAsyncGenerator(fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n}","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {isFunction} from 'lodash';\n\n/**\n * Helper to convert objects into arrays of transforms. probably belongs in\n * webex-core\n * @param {string} direction \"inbound\"|\"outbound\"\n * @param {Object} obj\n * @private\n * @returns {Array}\n */\nexport default function toArray(direction, obj) {\n return Object.keys(obj).map((name) => {\n const entry = obj[name];\n\n if (isFunction(entry)) {\n return {\n name,\n direction,\n fn: entry,\n };\n }\n\n return {name, ...entry};\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {capitalize, curry, get, has, isArray} from 'lodash';\n\nimport toArray from './to-array';\n\nconst KEY = Symbol('KEY');\n\nconst encryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('encryptTextProp', name, key, object)\n);\n\nconst encryptJsonProp = curry((name, ctx, key, object) =>\n ctx.transform('encryptJsonProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('outbound', {\n encryptObject(ctx, key, object) {\n if (!object) {\n object = key;\n key = undefined;\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (key === false) {\n return Promise.resolve();\n }\n\n return ctx.transform(`encrypt${capitalize(object.objectType)}`, key, object);\n },\n\n encryptReaction2(ctx, key, reaction2) {\n return ctx.transform('encryptPropDisplayName', key, reaction2);\n },\n\n encryptConversation(ctx, key, conversation) {\n if (key === false) {\n return Promise.resolve();\n }\n\n return Promise.resolve(\n key || ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1})\n ).then((keys) => {\n const k = isArray(keys) ? keys[0] : keys;\n\n if (\n has(conversation, 'kmsMessage.keyUris') &&\n !conversation.kmsMessage.keyUris.includes(k.uri)\n ) {\n conversation.kmsMessage.keyUris.push(k.uri);\n }\n\n return Promise.all([\n // too many implicit returns on the same line is difficult to interpret\n // eslint-disable-next-line arrow-body-style\n has(conversation, 'activities.items') &&\n conversation.activities.items.reduce((p, activity) => {\n // eslint-disable-next-line max-nested-callbacks\n return p.then(() => ctx.transform('encryptObject', k, activity));\n }, Promise.resolve()),\n ctx.transform('encryptPropDisplayName', k, conversation),\n ]).then(() => {\n conversation.encryptionKeyUrl = k.uri || k;\n // we only want to set the defaultActivityEncryptionKeyUrl if we've\n // bound a new key\n if (!key) {\n conversation.defaultActivityEncryptionKeyUrl =\n conversation.defaultActivityEncryptionKeyUrl || k.uri || k;\n }\n });\n });\n },\n\n encryptActivity(ctx, key, activity) {\n // Meeting Container policy update requests do not need to be encrypted.\n if (\n activity?.target?.objectType === 'meetingContainer' &&\n activity?.object?.objectType === 'policies'\n ) {\n return Promise.resolve();\n }\n\n // Activity is already encrypted\n if (activity.encryptionKeyUrl || activity.object?.created === 'True') {\n return Promise.resolve();\n }\n\n return ctx.transform(`encrypt${capitalize(activity.verb)}Activity`, key, activity).then(() => {\n key = key || activity[KEY];\n\n return ctx.transform('prepareActivityKmsMessage', key, activity);\n });\n },\n\n encryptVerbActivity(ctx, key, activity) {\n return ctx\n .transform('maybeEncryptTarget', key, activity)\n .then(() => {\n key = key || activity[KEY];\n })\n .then(() => ctx.transform('encryptObject', key, activity.object));\n },\n\n maybeEncryptTarget(ctx, key, activity) {\n // This isn't quite right; if we just go by key, we have no guarantee that\n // we have a proper KRO available for add activities\n if (key) {\n return Promise.resolve();\n }\n\n if (\n has(activity, 'target.defaultActivityEncryptionKeyUrl') &&\n activity.target.defaultActivityEncryptionKeyUrl &&\n has(activity, 'target.kmsResourceObjectUrl')\n ) {\n activity[KEY] = key || activity.target.defaultActivityEncryptionKeyUrl;\n\n return Promise.resolve();\n }\n\n const conversationUrl = activity.target && activity.target.url;\n\n if (!conversationUrl) {\n return Promise.reject(\n new Error(\n \"Cannot determine encryption key for activity's conversation; no key url or conversation url provided\"\n )\n );\n }\n\n return ctx.webex.internal.conversation.get({url: conversationUrl}).then((conversation) => {\n if (!conversation.defaultActivityEncryptionKeyUrl) {\n return ctx.webex.internal.conversation.updateKey(conversation).then((updateKeyActivity) => {\n if (updateKeyActivity.kmsMessage.resource) {\n activity.target.kmsResourceObjectUrl = updateKeyActivity.kmsMessage.resource.uri;\n }\n activity[KEY] = activity.target.defaultActivityEncryptionKeyUrl =\n updateKeyActivity.object.defaultActivityEncryptionKeyUrl;\n });\n }\n\n if (!activity.target.defaultActivityEncryptionKeyUrl) {\n ctx.webex.logger.warn(\n 'plugin-conversation: downloaded conversation to determine its defaultActivityEncryptionKeyUrl; make sure to pass all encryption related properties when calling Webex.conversation methods.'\n );\n }\n\n if (!activity.target.kmsResourceObjectUrl) {\n ctx.webex.logger.warn(\n 'plugin-conversation: downloaded conversation to determine its kmsResourceObjectUrl; make sure to pass all encryption related properties when calling Webex.conversation methods.'\n );\n }\n\n activity[KEY] = activity.target.defaultActivityEncryptionKeyUrl =\n conversation.defaultActivityEncryptionKeyUrl;\n activity.target.kmsResourceObjectUrl = conversation.kmsResourceObjectUrl;\n\n return Promise.resolve();\n });\n },\n\n prepareActivityKmsMessage(ctx, key, activity) {\n if (activity.kmsMessage) {\n if (!key && activity.verb === 'delete') {\n key = get(activity, 'target.defaultActivityEncryptionKeyUrl');\n }\n\n if (\n !key &&\n activity.verb === 'updateKey' &&\n has(activity, 'object.defaultActivityEncryptionKeyUrl')\n ) {\n key = get(activity, 'object.defaultActivityEncryptionKeyUrl');\n }\n\n if (\n !key &&\n activity.verb === 'leave' &&\n has(activity, 'target.defaultActivityEncryptionKeyUrl')\n ) {\n key = get(activity, 'target.defaultActivityEncryptionKeyUrl');\n }\n\n if (key) {\n const kro = activity.target.kmsResourceObjectUrl;\n\n ['uri', 'resourceUri'].forEach((k) => {\n if (activity.kmsMessage[k] && !kro && activity.kmsMessage[k].includes('')) {\n throw new Error('encrypter: cannot determine kro');\n }\n\n if (activity.kmsMessage[k]) {\n activity.kmsMessage[k] = activity.kmsMessage[k].replace('', kro);\n // key may be a key or a key url\n activity.kmsMessage[k] = activity.kmsMessage[k].replace('', key.keyUrl || key);\n }\n });\n }\n // If we made it this far and still don't have an encryption key, assume\n // this is a conversation that is not encrypted and we're performing an\n // action that should not encrypt it (e.g. `leave`)\n else {\n Reflect.deleteProperty(activity, 'kmsMessage');\n }\n }\n },\n\n encryptVerbActivityWithKey: {\n direction: 'outbound',\n fn(ctx, key, activity) {\n return ctx.transform('encryptVerbActivity', key, activity).then(() => {\n key = key || activity[KEY];\n activity.encryptionKeyUrl = key.uri || key;\n });\n },\n },\n\n encryptAddActivity: {\n direction: 'outbound',\n fn(ctx, key, activity) {\n if (has(activity, 'object.objectType') && activity.object.objectType === 'reaction2') {\n return ctx.transform('encryptVerbActivityWithKey', key, activity);\n }\n\n return ctx.transform('encryptVerbActivity', key, activity);\n },\n },\n\n encryptAssignActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptCreateActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivity',\n },\n\n encryptPostActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptShareActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptCardactionActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptUpdateActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptUpdateKeyActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivity',\n },\n\n encryptComment(ctx, key, comment) {\n return Promise.all([\n ctx.transform('encryptPropDisplayName', key, comment),\n ctx.transform('encryptPropContent', key, comment),\n ]);\n },\n\n encryptContent(ctx, key, content) {\n const promises = content.files.items.map((item) => ctx.transform('encryptObject', key, item));\n\n promises.push(ctx.transform('encryptPropContent', key, content));\n promises.push(ctx.transform('encryptPropDisplayName', key, content));\n\n return Promise.all(promises);\n },\n\n encryptFile(ctx, key, file) {\n if (file.image && !file.image.scr) {\n return Promise.reject(new Error('`file.image` must have an `scr`'));\n }\n\n return Promise.all([\n ctx.transform('encryptPropScr', key, file),\n ctx.transform('encryptPropDisplayName', key, file),\n ctx.transform('encryptPropContent', key, file),\n file.image && ctx.transform('encryptPropScr', key, file.image),\n ]);\n },\n\n encryptSubmit(ctx, key, submit) {\n return ctx.transform('encryptPropInputs', key, submit);\n },\n\n // TODO is this used for anything other than the now-removed stickies service?\n encryptImageURI(ctx, key, imageURI) {\n return ctx.transform('encryptPropLocation', key, imageURI);\n },\n\n encryptPropContent: encryptTextProp('content'),\n\n encryptPropDisplayName: encryptTextProp('displayName'),\n\n encryptPropInputs: encryptJsonProp('inputs'),\n\n encryptPropLocation: encryptTextProp('location'),\n\n encryptPropScr(ctx, key, object) {\n if (!object.scr) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption.encryptScr(key, object.scr).then((scr) => {\n object.scr = scr;\n });\n },\n\n encryptJsonProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, JSON.stringify(object[name]))\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n },\n\n encryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, object[name])\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n },\n});\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {camelCase, capitalize, curry} from 'lodash';\n\nimport toArray from './to-array';\n\nconst decryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('decryptTextProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('inbound', {\n /**\n * This function is used recursively to decrypt various properties on conversations, activities, etc\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url\n * @param {Object} object Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} Returns a transform promise\n */\n decryptObject(ctx, key, object) {\n if (!object) {\n object = key; // eslint-disable-line no-param-reassign\n key = undefined; // eslint-disable-line no-param-reassign\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (!key && object.encryptionKeyUrl) {\n key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign\n }\n\n // Transcoded content was not showing up on the activities since the\n // decryptFile was not being called. Calling decryptFile for\n // transcodedContent fixes the issue.\n if (object.objectType === 'transcodedContent') {\n return Promise.all(object.files.items.map((item) => ctx.transform('decryptFile', key, item)));\n }\n\n return ctx.transform(`decrypt${capitalize(object.objectType)}`, key, object);\n },\n\n /**\n * Decrypt an individual submit object from a cardAction activity\n * (object.objectType === 'submit')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex submit object\n * these objects are returned when a user clicks on a Action.Submit button in a card\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptSubmit(ctx, key, object) {\n if (!object.inputs) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx\n .transform('decryptPropCardItem', 0, key, [object.inputs])\n .then((inputs) => {\n object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(\n `plugin-conversation: failed to decrypt attachmentAction.inputs: ${reason}`\n );\n object.inputs = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2Summary object\n * these objects are returned by various conversation APIs and over mercury\n * represents an aggregated summary of all reactions to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2summary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2SelfSummary object\n * these objects are returned by various conversation APIs and NOT over mercury\n * they are ONLY received by the self user\n * they represent ONLY the self user's reactions and are used for enforcing\n * limit of times they can react to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2selfsummary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2 activity (object.objectType === 'reaction2')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2 object\n * these objects are returned by various conversation APIs and over mercury\n * ONLY self users receive these objects\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2(ctx, key, object) {\n return ctx.transform('decryptPropDisplayName', key, object);\n },\n\n /**\n * Decrypt an individual threadObject\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {Object} threadObject An instance of a Webex threadObject (the objects returned by the /conversation/api/v1/threads api)\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptThread(ctx, threadObject) {\n let promises = [];\n\n if (threadObject.childActivities && Array.isArray(threadObject.childActivities)) {\n promises = threadObject.childActivities.map((child) =>\n ctx.transform('decryptObject', null, child)\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual meeting container activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {object} key KMS encryption key url\n * @param {Object} meetingContainerActivity An instance of a Webex meeting container activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptMeetingcontainer(ctx, key, meetingContainerActivity) {\n const promises = [];\n\n if (meetingContainerActivity.displayName) {\n const usableKey = meetingContainerActivity.encryptionKeyUrl || key;\n\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));\n }\n\n if (meetingContainerActivity.extensions) {\n const itemsToDecrypt = meetingContainerActivity.extensions.items.filter(\n (item) => item.data.objectType === 'recording'\n );\n\n itemsToDecrypt.forEach((itemToDecrypt) => {\n promises.push(\n ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data)\n );\n });\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a given conversation and it's activities by building an array of promises that call\n * decryptObject, which may then call other decrypt functions\n *\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} conversation A Webex conversation object\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptConversation(ctx, key, conversation) {\n const promises = [];\n\n if (conversation.activities.items) {\n promises.push(\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('decryptObject', null, item))\n )\n );\n }\n\n const usableKey = conversation.encryptionKeyUrl || key;\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n if (usableKey) {\n promises.push(\n ctx.transform('decryptPropDisplayName', usableKey, conversation).catch((error) => {\n ctx.webex.logger.warn(\n 'plugin-conversation: failed to decrypt display name of ',\n conversation.url,\n error\n );\n Promise.resolve(decryptionFailureMessage);\n })\n );\n promises.push(ctx.transform('decryptPropContent', usableKey, conversation));\n }\n if (conversation.avatarEncryptionKeyUrl) {\n promises.push(\n ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar)\n );\n }\n // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely\n // but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.\n if (conversation.previous) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));\n }\n if (conversation.previousValue) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} activity An instance of a Webex activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptActivity(ctx, key, activity) {\n if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {\n return Promise.resolve(activity);\n }\n\n const keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;\n\n let promises = [];\n\n // iterate and recursively decrypt over children objects\n\n if (activity.children && Array.isArray(activity.children)) {\n promises = activity.children.map((child) =>\n ctx.transform('decryptObject', keyUrl, child.activity)\n );\n }\n\n promises.push(ctx.transform('decryptObject', keyUrl, activity.object));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a microappInstance (recording) model\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} microappInstance A microappInstance which includes several properties of a recording\n * @param {String} microappInstance.model An encrypted string which decrypts to an object\n * @returns {Promise} Returns a context transform\n */\n decryptMicroappinstance(ctx, key, microappInstance) {\n return ctx.transform('decryptPropModel', key, microappInstance);\n },\n\n /**\n * Decrypts a comment...\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} comment A comment object with a displayName and content (encrypted)\n * @returns {Promise} Returns the results of Promise.all on two transforms\n */\n decryptComment(ctx, key, comment) {\n const promises = [\n ctx.transform('decryptPropDisplayName', key, comment),\n ctx.transform('decryptPropContent', key, comment),\n ];\n\n if (comment.cards && Array.isArray(comment.cards)) {\n comment.cards.map((item, index) =>\n promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContent(ctx, key, content) {\n if (content.contentCategory === 'links') {\n return ctx.transform('decryptContentLinks', key, content);\n }\n\n return ctx.transform('decryptContentFiles', key, content);\n },\n\n /**\n * Decrypts a content field which contains files and possibly links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.files An array of files to decrypt by calling decryptObject\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentFiles(ctx, key, content) {\n if (!content.files || !content.files.items || !Array.isArray(content.files.items)) {\n return Promise.resolve();\n }\n\n const promises = content.files.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n if (content.links && content.links.items && Array.isArray(content.links.items)) {\n content.links.items.forEach((item) =>\n promises.push(ctx.transform('decryptObject', key, item))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field which contains links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentLinks(ctx, key, content) {\n if (!content.links || !content.links.items || !Array.isArray(content.links.items)) {\n return Promise.resolve();\n }\n\n const promises = content.links.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts what may be a meeting event?\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} event An object with a display name and location to be decrypted\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptEvent(ctx, key, event) {\n const promises = [ctx.transform('decryptPropDisplayName', key, event)];\n\n if (event.location && event.location.split('.').length === 5) {\n promises.push(ctx.transform('decryptPropLocation', key, event));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} file A file object with file props an optional transcodedCollection to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptFile(ctx, key, file) {\n // using object encryption keyUrl for images instead of activity encryptionKeyUrl\n if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {\n key = file.encryptionKeyUrl;\n }\n\n return Promise.all([\n file.transcodedCollection &&\n Promise.all(\n file.transcodedCollection.items.map((item) => ctx.transform('decryptObject', key, item))\n ),\n ctx.transform('decryptPropScr', key, file),\n ctx.transform('decryptPropDisplayName', key, file),\n ctx.transform('decryptPropContent', key, file),\n file.image && ctx.transform('decryptPropScr', key, file.image),\n ]);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} link A link object with a URL to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptLink(ctx, key, link) {\n return Promise.all([\n ctx.transform('decryptPropSslr', key, link),\n ctx.transform('decryptPropDisplayName', key, link),\n ]);\n },\n\n /**\n * Decrypts transcoded file content. Calls decryptFile\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} transcodedContent Transcoded content with a files prop\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptTranscodedContent(ctx, key, transcodedContent) {\n return Promise.all(\n transcodedContent.files.items.map((item) => ctx.transform('decryptFile', key, item))\n );\n },\n\n /**\n * Decrypts an image uri\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {String} imageURI URI of the image to decrypt\n * @returns {Promise} Returns a promise.\n */\n decryptImageURI(ctx, key, imageURI) {\n return ctx.transform('decryptPropLocation', key, imageURI);\n },\n\n /**\n * The heart of most decryption logic ends here. Decrypting text.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} name Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Object} object A generic object with text props to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, object[name])\n .then((plaintext) => {\n if (ctx.webex.config.conversation.keepEncryptedProperties) {\n const encryptedPropName = camelCase(`encrypted_${name}`);\n\n object[encryptedPropName] = object[name]; // eslint-disable-line no-param-reassign\n }\n\n object[name] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt ${name} `, reason);\n object[name] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypting an element in an Array.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {Integer} index Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Array} array An array of Strings to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptPropCardItem(ctx, index, key, array) {\n if (\n !Number.isInteger(index) ||\n !array ||\n !Array.isArray(array) ||\n index < 0 ||\n index >= array.length ||\n !(array[index] instanceof String || typeof array[index] === 'string')\n ) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, array[index])\n .then((plaintext) => {\n array[index] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt card at ${index} `, reason);\n array[index] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n /**\n * Decrypts the src of an object (for images?)\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a scr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropScr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.scr).then((scr) => {\n object.scr = scr; // eslint-disable-line no-param-reassign\n });\n },\n\n /**\n * Decrypts the sslr object\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a sslr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropSslr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.sslr).then((sslr) => {\n object.sslr = sslr; // eslint-disable-line no-param-reassign\n });\n },\n\n decryptPropDisplayName: decryptTextProp('displayName'),\n\n decryptPropContent: decryptTextProp('content'),\n\n decryptPropModel: decryptTextProp('model'),\n\n decryptPropLocation: decryptTextProp('location'),\n\n decryptPropTopic: decryptTextProp('topic'),\n});\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-user';\n\nimport {patterns} from '@webex/common';\nimport {filter as htmlFilter, filterEscape as htmlFilterEscape} from '@webex/helper-html';\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {capitalize, get, has} from 'lodash';\n\nimport Conversation from './conversation';\nimport config from './config';\nimport {transforms as encryptionTransforms} from './encryption-transforms';\nimport {transforms as decryptionTransforms} from './decryption-transforms';\n\nregisterInternalPlugin('conversation', Conversation, {\n payloadTransformer: {\n predicates: [\n {\n name: 'transformObject',\n test(ctx, optionsOrResponse) {\n return Promise.resolve(has(optionsOrResponse, 'body.objectType'));\n },\n extract(optionsOrResponse) {\n return Promise.resolve(optionsOrResponse.body);\n },\n },\n {\n name: 'transformObject',\n direction: 'inbound',\n test(ctx, event) {\n return Promise.resolve(has(event, 'activity'));\n },\n extract(event) {\n return Promise.resolve(event.activity);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.multistatus'));\n },\n extract(response) {\n return Promise.resolve(\n response.body.multistatus.map((item) => item && item.data && item.data.activity)\n );\n },\n },\n {\n name: 'normalizeConversationListAndBindDecrypters',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].objectType')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].objectType')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n {\n name: 'transformThreadArray',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].childType') || !has(options, 'body.items[0].actorId')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeConversationListAndBindDecrypters',\n fn(ctx, array) {\n return Promise.all(\n array.map((item) =>\n ctx.transform('normalizeObject', item).then(() => {\n item.decrypt = function decrypt() {\n Reflect.deleteProperty(item, 'decrypt');\n\n return ctx.transform('decryptObject', item);\n };\n\n return item;\n })\n )\n );\n },\n },\n {\n name: 'transformObjectArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformObject', item)));\n },\n },\n {\n name: 'transformThreadArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformThread', item)));\n },\n },\n {\n name: 'transformObject',\n direction: 'outbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('normalizeObject', object)\n .then(() => ctx.transform('encryptObject', object))\n .then(() => ctx.transform('encryptKmsMessage', object));\n },\n },\n {\n name: 'transformObject',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('decryptObject', object)\n .then(() => ctx.transform('normalizeObject', object));\n },\n },\n {\n name: 'normalizeObject',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return Promise.all([\n ctx.transform(`normalize${capitalize(object.objectType)}`, object),\n ctx.transform('normalizePropContent', object),\n ]);\n },\n },\n {\n name: 'transformThread',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('decryptThread', object)\n .then(() => ctx.transform('normalizeThread', object));\n },\n },\n {\n name: 'normalizePropContent',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object.content) {\n return Promise.resolve();\n }\n const {inboundProcessFunc, allowedInboundTags, allowedInboundStyles} =\n ctx.webex.config.conversation;\n\n return htmlFilter(\n inboundProcessFunc,\n allowedInboundTags || {},\n allowedInboundStyles,\n object.content\n ).then((c) => {\n object.content = c;\n });\n },\n },\n {\n name: 'normalizePropContent',\n direction: 'outbound',\n fn(ctx, object) {\n if (!object.content) {\n return Promise.resolve();\n }\n\n const {outboundProcessFunc, allowedOutboundTags, allowedOutboundStyles} =\n ctx.webex.config.conversation;\n\n return htmlFilterEscape(\n outboundProcessFunc,\n allowedOutboundTags || {},\n allowedOutboundStyles,\n object.content\n ).then((c) => {\n object.content = c;\n });\n },\n },\n {\n name: 'normalizeConversation',\n fn(ctx, conversation) {\n conversation.activities = conversation.activities || {};\n conversation.activities.items = conversation.activities.items || [];\n conversation.participants = conversation.participants || {};\n conversation.participants.items = conversation.participants.items || [];\n\n return Promise.all([\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('normalizeObject', item))\n ),\n Promise.all(\n conversation.participants.items.map((item) => ctx.transform('normalizeObject', item))\n ),\n ]);\n },\n },\n {\n name: 'normalizeActivity',\n fn(ctx, activity) {\n return Promise.all([\n ctx.transform('normalizeObject', activity.actor),\n ctx.transform('normalizeObject', activity.object),\n ctx.transform('normalizeObject', activity.target),\n ]);\n },\n },\n {\n name: 'normalizeThread',\n fn(ctx, threadActivity) {\n // childActivities are of type Activity\n return Promise.all(\n threadActivity.childActivities.map((item) => ctx.transform('normalizeObject', item))\n );\n },\n },\n {\n name: 'normalizePerson',\n // eslint-disable-next-line complexity\n fn(ctx, person) {\n const email = person.entryEmail || person.emailAddress || person.id;\n const id = person.entryUUID || person.id;\n\n if (patterns.email.test(email)) {\n person.entryEmail = person.emailAddress = email.toLowerCase();\n } else {\n Reflect.deleteProperty(person, 'entryEmail');\n Reflect.deleteProperty(person, 'emailAddress');\n }\n\n if (person.roomProperties) {\n person.roomProperties.isModerator = Boolean(person.roomProperties.isModerator);\n }\n\n if (patterns.uuid.test(id)) {\n person.entryUUID = person.id = id.toLowerCase();\n\n return Promise.resolve(person);\n }\n\n if (!email) {\n return Promise.reject(\n new Error('cannot determine id without an `emailAddress` or `entryUUID` property')\n );\n }\n\n return ctx.webex.internal.user.asUUID(email).then((uuid) => {\n person.entryUUID = person.id = uuid;\n\n return person;\n });\n },\n },\n ]\n .concat(decryptionTransforms)\n .concat(encryptionTransforms),\n },\n config,\n});\n\nexport {default} from './conversation';\nexport {default as ShareActivity} from './share-activity';\nexport {ConversationError, InvalidUserCreation} from './convo-error';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n conversation: {\n allowedInboundTags: {\n 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],\n },\n allowedOutboundTags: {\n 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],\n },\n // eslint-disable-next-line no-empty-function\n inboundProcessFunc: () => {},\n // eslint-disable-next-line no-empty-function\n outboundProcessFunc: () => {},\n allowedInboundStyles: [],\n allowedOutboundStyles: [],\n /**\n * Max height for thumbnails generated when sharing an image\n * @type {number}\n */\n thumbnailMaxHeight: 960,\n /**\n * Max width for thumbnails generated when sharing an image\n * @type {number}\n */\n thumbnailMaxWidth: 640,\n /**\n * Primarily for testing. When true, decrypting an activity will create a\n * sister property with the original encrypted string\n * @type {Boolean}\n */\n keepEncryptedProperties: false,\n decryptionFailureMessage: 'This message cannot be decrypted',\n },\n};\n","// Metric to do with WDM registration\nexport default {\n JS_SDK_WDM_REGISTRATION_SUCCESSFUL: 'JS_SDK_WDM_REGISTRATION_SUCCESSFUL',\n JS_SDK_WDM_REGISTRATION_FAILED: 'JS_SDK_WDM_REGISTRATION_FAILED',\n};\n","// Feature constants.\nexport const FEATURE_COLLECTION_DEVELOPER = 'developer';\nexport const FEATURE_COLLECTION_ENTITLEMENT = 'entitlement';\nexport const FEATURE_COLLECTION_USER = 'user';\n\nexport const CISCO_DEVICE_URL = 'cisco-device-url';\n\nexport const FEATURE_COLLECTION_NAMES = [\n FEATURE_COLLECTION_DEVELOPER,\n FEATURE_COLLECTION_ENTITLEMENT,\n FEATURE_COLLECTION_USER,\n];\n\nexport const FEATURE_TYPES = {\n BOOLEAN: 'boolean',\n NUMBER: 'number',\n STRING: 'string',\n};\n\n// Device constants.\nexport const DEVICE_EVENT_REGISTRATION_SUCCESS = 'registration:success';\n\nexport const DEVICE_EVENTS = [DEVICE_EVENT_REGISTRATION_SUCCESS];\n","// External dependencies.\nimport AmpState from 'ampersand-state';\nimport {defaults, isObject} from 'lodash';\n\nimport {FEATURE_TYPES} from '../constants';\n\n/**\n * The model returned from the {@link FeatureModel#parse} method.\n *\n * @typedef {Object} ParsedFeatureModel\n * @property {boolean|number|string} ParsedFeatureModel.value - The parsed val.\n * @property {string} ParsedFeatureModel.type - The type of the parsed val.\n */\n\n/**\n * Feature model.\n *\n * @description\n * This model contains details on a single feature and is received from the\n * **WDM** service upon registration.\n */\nconst FeatureModel = AmpState.extend({\n idAttribute: 'key', // needed by Ampersand to determine unique item\n\n // Ampersand property members.\n\n props: {\n /**\n * Contains the unique identifier for this feature to be addressed by.\n *\n * @type {string}\n */\n key: 'string',\n\n /**\n * This property contains the date in which this feature was last modified.\n *\n * @type {date}\n */\n lastModified: 'date',\n\n /**\n * This property defines whether or not the feature is mutable.\n *\n * @type {boolean}\n */\n mutable: 'boolean',\n\n /**\n * This property contains the data type the string value should be\n * interpreted as.\n *\n * @type {FEATURE_TYPES}\n */\n type: 'string',\n\n /**\n * This property contains the string value of this feature.\n *\n * @type {string}\n */\n val: 'string',\n\n /**\n * This property contains the interpreted value of this feature.\n *\n * @type {any}\n */\n value: 'any',\n },\n\n /**\n * Class object constructor. This method safely initializes the class object\n * prior to it fully loading to allow data to be accessed and modified\n * immediately after construction instead of initialization.\n *\n * @override\n * @param {Object} attrs - An object to map against the feature's properties.\n * @param {Object} [options={}] - Ampersand options for `parse` and `parent`.\n */\n constructor(attrs, options = {}) {\n defaults(options, {parse: true});\n\n return Reflect.apply(AmpState.prototype.constructor, this, [attrs, options]);\n },\n\n // Ampsersand method members.\n\n /**\n * Parse {@link FeatureModel} properties recieved as strings from **WDM**\n * and cast them as their appropriate types.\n *\n * @private\n * @memberof FeatureModel\n * @param {Object} model - The model to parse.\n * @property {string} model.val - The value to be parsed.\n * @returns {ParsedFeatureModel} - The parsed model.\n */\n parse(model) {\n // Validate that a model was provided and that it is an object.\n if (!model || typeof model !== 'object') {\n // Return an empty object to satisfy the requirements of `Ampersand`.\n return {};\n }\n\n const parsedModel = {...model};\n const {val} = parsedModel;\n\n // Validate that the value is a number.\n if (!Number.isNaN(Number(val))) {\n parsedModel.type = FEATURE_TYPES.NUMBER;\n parsedModel.value = Number(val);\n }\n // Validate if the value should be a true boolean.\n else if (typeof val === 'string' && val.toLowerCase() === 'true') {\n parsedModel.type = FEATURE_TYPES.BOOLEAN;\n parsedModel.value = true;\n }\n // Validate if the value should be a false boolean.\n else if (typeof val === 'string' && val.toLowerCase() === 'false') {\n parsedModel.type = FEATURE_TYPES.BOOLEAN;\n parsedModel.value = false;\n }\n // In all other cases, the value is string, even if it is undefined.\n else {\n parsedModel.type = FEATURE_TYPES.STRING;\n parsedModel.value = val;\n }\n\n return parsedModel;\n },\n\n /**\n * Serialize the feature using the parent ampersand method with its date as an\n * ISO string. This converts the feature into a request-transportable object.\n *\n * @override\n * @param {Record} [args] - List of properties to serialize.\n * @returns {Object} - The request-ready transport object.\n */\n serialize(...args) {\n // Call the overloaded class member.\n const attrs = Reflect.apply(AmpState.prototype.serialize, this, args);\n\n // Validate that the overloaded class member returned an object with the\n // `lastModified` key-value pair and instance it as an ISO string.\n if (attrs.lastModified) {\n attrs.lastModified = new Date(attrs.lastModified).toISOString();\n }\n\n return attrs;\n },\n\n /**\n * Set a property of this object to a specific value. This method utilizes\n * code that exists within the `ampersand-state` dependency to handle\n * scenarios in which `key = {\"key\": \"value\"}` or\n * `key = \"key\", value = \"value\"`. Since the snippet is pulled directly from\n * `ampersand-state`, there is no need to test both scenarios.\n *\n * @override\n * @param {object | string} key - The key value, or object to be set.\n * @param {any} value - The key value or object to set the keyed pair to.\n * @param {any} options - The object to set the keyed pair to.\n * @returns {any} - The changed property.\n */\n set(key, value, options) {\n // Declare formatted output variables for properly setting the targetted\n // property for this method.\n let attrs;\n let optns;\n\n // Validate if the key is an instance of any object or not.\n if (isObject(key) || key === null) {\n attrs = key;\n optns = value;\n } else {\n attrs = {};\n attrs[key] = value;\n optns = options;\n }\n\n attrs = this.parse(attrs, optns);\n\n return Reflect.apply(AmpState.prototype.set, this, [attrs, optns]);\n },\n});\n\nexport default FeatureModel;\n","// External dependencies.\nimport AmpCollection from 'ampersand-collection';\n\n// Local Dependencies\nimport FeatureModel from './feature-model';\n\n/**\n * Feature collection model.\n *\n * @description\n * This model contains a collection of features under a specific collection\n * group.\n */\nconst FeatureCollection = AmpCollection.extend({\n /**\n * The unique identifier for the models in this collection.\n *\n * @type {string}\n */\n mainIndex: 'key',\n\n /**\n * The type of model this collection can contain.\n *\n * @type {Class}\n */\n model: FeatureModel,\n});\n\nexport default FeatureCollection;\n","// External dependencies.\nimport AmpState from 'ampersand-state';\n\n// Local Dependencies\nimport {FEATURE_COLLECTION_NAMES} from '../constants';\n\nimport FeatureCollection from './feature-collection';\n\n/**\n * Feature collection parent container.\n *\n * @description\n * This class contains all of the feature collection class objects to help\n * organize the data retrieved from the **wdm** service on device registration.\n */\nconst FeaturesModel = AmpState.extend({\n // Ampersand property members.\n\n collections: {\n /**\n * This collection contains the developer feature collection.\n *\n * @type {FeatureCollection}\n */\n developer: FeatureCollection,\n\n /**\n * This collection contains the entitlement feature collection.\n *\n * @type {FeatureCollection}\n */\n entitlement: FeatureCollection,\n\n /**\n * This collection contains the user feature collection.\n *\n * @type {FeatureCollection}\n */\n user: FeatureCollection,\n },\n\n // Helper method members.\n\n /**\n * Recursively clear attributes, children, and collections.\n *\n * @param {Object} options - Attribute options to unset.\n * @returns {this}\n */\n clear(options) {\n // Clear the ampersand attributes safely if there are any. This class should\n // never have any attributes.\n Object.keys(this.attributes).forEach((key) => {\n this.unset(key, options);\n });\n\n // Clear the ampersand children safely if there are any. This class should\n // never have any children.\n /* eslint-disable-next-line no-underscore-dangle */\n Object.keys(this._children).forEach((key) => {\n this[key].clear();\n });\n\n // Clear the ampersand collections safely.\n /* eslint-disable-next-line no-underscore-dangle */\n Object.keys(this._collections).forEach((key) => {\n this[key].reset();\n });\n\n return this;\n },\n\n // Ampersand method members.\n\n /**\n * Initializer method for FeatureModel class object.\n *\n * @override\n * @returns {void}\n */\n initialize() {\n // Declare the collection event names.\n const eventNames = ['change:value', 'add', 'remove'];\n\n // Initialize collection event listeners.\n eventNames.forEach((eventName) => {\n FEATURE_COLLECTION_NAMES.forEach((collectionName) => {\n this[collectionName].on(eventName, (model, options) => {\n this.trigger(`change:${collectionName}`, this, this[collectionName], options);\n });\n });\n });\n },\n});\n\nexport default FeaturesModel;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\n/**\n * @class\n */\nconst IpNetworkDetector = WebexPlugin.extend({\n idAttribute: 'IpNetworkDetectorId',\n\n namespace: 'Device',\n\n props: {\n firstIpV4: ['number', true, -1], // time [ms] it took to receive first IPv4 candidate\n firstIpV6: ['number', true, -1], // time [ms] it took to receive first IPv6 candidate\n firstMdns: ['number', true, -1], // time [ms] it took to receive first mDNS candidate\n totalTime: ['number', true, -1], // total time [ms] it took to do the last IP network detection\n },\n\n derived: {\n /**\n * True if we know we're on an IPv4 network,\n * False if we know that we are not on an IPv4 network,\n * undefined if we are not sure\n */\n supportsIpV4: {\n deps: ['firstIpV4', 'firstIpV6', 'firstMdns', 'totalTime'],\n /**\n * Function for calculating the value of supportsIpV4 prop\n * @returns {boolean | undefined}\n */\n fn() {\n if (this.firstIpV4 >= 0) {\n return true;\n }\n if (this.totalTime < 0) {\n // we haven't completed the detection, yet\n return undefined;\n }\n if (this.receivedOnlyMDnsCandidates()) {\n return undefined;\n }\n\n return false;\n },\n },\n /**\n * True if we know we're on an IPv6 network,\n * False if we know that we are not on an IPv6 network,\n * undefined if we are not sure\n */\n supportsIpV6: {\n deps: ['firstIpV4', 'firstIpV6', 'firstMdns', 'totalTime'],\n /**\n * Function for calculating the value of supportsIpV6 prop\n * @returns {boolean | undefined}\n */ fn() {\n if (this.firstIpV6 >= 0) {\n return true;\n }\n if (this.totalTime < 0) {\n // we haven't completed the detection, yet\n return undefined;\n }\n if (this.receivedOnlyMDnsCandidates()) {\n return undefined;\n }\n\n return false;\n },\n },\n },\n\n /**\n * Returns true if we have received only mDNS candidates - browsers usually do that if we don't have any user media permissions\n *\n * @private\n * @returns {boolean}\n */\n receivedOnlyMDnsCandidates() {\n return this.totalTime >= 0 && this.firstMdns >= 0 && this.firstIpV4 < 0 && this.firstIpV6 < 0;\n },\n\n /**\n *\n * @param {RTCPeerConnection} pc Peer connection to use\n * @private\n * @returns {Promise}\n */\n async gatherLocalCandidates(pc: RTCPeerConnection): Promise {\n return new Promise((resolve, reject) => {\n let done = false;\n\n this.firstIpV4 = -1;\n this.firstIpV6 = -1;\n this.firstMdns = -1;\n this.totalTime = -1;\n const startTime = performance.now();\n\n const doneGatheringIceCandidates = () => {\n if (done) {\n return;\n }\n done = true;\n\n this.totalTime = performance.now() - startTime;\n\n resolve();\n };\n\n pc.onicecandidate = (event) => {\n if (event.candidate?.address) {\n if (event.candidate.address.endsWith('.local')) {\n // if we don't have camera/mic permissions, browser just gives us mDNS candidates\n if (this.firstMdns === -1) {\n this.firstMdns = performance.now() - startTime;\n }\n } else if (event.candidate.address.includes(':')) {\n if (this.firstIpV6 === -1) {\n this.firstIpV6 = performance.now() - startTime;\n }\n } else if (this.firstIpV4 === -1) {\n this.firstIpV4 = performance.now() - startTime;\n }\n\n if (this.firstIpV4 >= 0 && this.firstIpV6 >= 0) {\n // if we've got both ipv4 and ipv6 candidates, there is no need to wait for any more candidates, we can resolve now\n resolve();\n }\n } else if (event.candidate === null) {\n doneGatheringIceCandidates();\n }\n };\n\n pc.onicegatheringstatechange = () => {\n if (pc.iceGatheringState === 'complete') {\n doneGatheringIceCandidates();\n }\n };\n\n pc.createDataChannel('data');\n\n pc.createOffer()\n .then((offer) => pc.setLocalDescription(offer))\n .catch((e) => {\n this.webex.logger.error('Failed to detect ip network version:', e);\n reject(e);\n });\n });\n },\n\n /**\n * Detects if we are on IPv4 and/or IPv6 network. Once it resolves, read the\n * supportsIpV4 and supportsIpV6 props to find out the result.\n *\n * @returns {Promise}\n */\n async detect() {\n let results;\n let pc;\n\n try {\n pc = new RTCPeerConnection();\n\n results = await this.gatherLocalCandidates(pc);\n } finally {\n pc.close();\n }\n\n return results;\n },\n});\n\nexport default IpNetworkDetector;\n","// Internal Dependencies\nimport {deprecated, oneFlight} from '@webex/common';\nimport {persist, waitForValue, WebexPlugin} from '@webex/webex-core';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nimport METRICS from './metrics';\nimport {FEATURE_COLLECTION_NAMES, DEVICE_EVENT_REGISTRATION_SUCCESS} from './constants';\nimport FeaturesModel from './features/features-model';\nimport IpNetworkDetector from './ipNetworkDetector';\n\n/**\n * Determine if the plugin should be initialized based on cached storage.\n *\n * @returns {boolean} - If the device is ephemeral.\n */\nfunction decider() {\n return !this.config.ephemeral;\n}\n\nconst Device = WebexPlugin.extend({\n // Ampersand property members.\n\n namespace: 'Device',\n\n // Allow for extra properties to prevent the plugin from failing due to\n // **WDM** service DTO changes.\n extraProperties: 'allow',\n\n idAttribute: 'url',\n\n children: {\n /**\n * The class object that contains all of the feature collections.\n *\n * @type {FeaturesModel}\n */\n features: FeaturesModel,\n /**\n * Helper class for detecting what IP network version (ipv4, ipv6) we're on.\n *\n * @type {IpNetworkDetector}\n */\n ipNetworkDetector: IpNetworkDetector,\n },\n\n /**\n * A collection of device properties mostly assigned by the retrieved DTO from\n * the **WDM** service that are mapped against the ampersand properties.\n *\n * @type {Object}\n */\n props: {\n /**\n * This property determines whether or not giphy support is enabled.\n *\n * @type {'ALLOW' | 'BLOCK'}\n */\n clientMessagingGiphy: 'string',\n\n /**\n * This property should store the company name.\n *\n * @type {string}\n */\n customerCompanyName: 'string',\n\n /**\n * This property should store the logo url.\n *\n * @type {string}\n */\n customerLogoUrl: 'string',\n\n /**\n * This property doesn't have any real values, but is sent during device\n * refresh to prevent the **wdm** service from falling back to an iOS device\n * type.\n *\n * @type {string}\n */\n deviceType: 'string',\n\n /**\n * This property should store the help url.\n *\n * @type {string}\n */\n helpUrl: 'string',\n\n /**\n * This property should store the intranet inactivity timer duration.\n *\n * @type {number}\n */\n intranetInactivityDuration: 'number',\n\n /**\n * This property stores the url required to validate if the device is able\n * to actively reach the intranet network.\n *\n * @type {string}\n */\n intranetInactivityCheckUrl: 'string',\n\n /**\n * This property stores the inactivity timer duration, and could possibly\n * deprecate the `intranetInactivityDuration` property.\n *\n * @type {number}\n */\n inNetworkInactivityDuration: 'number',\n\n /**\n * This property stores the ECM (external content management) enabled value\n * for the whole organization.\n *\n * @type {boolean}\n */\n ecmEnabledForAllUsers: ['boolean', false, false],\n\n /**\n * This property stores an array of ECM (external content management)\n * providers that are currently available.\n *\n * @returns {Array}\n */\n ecmSupportedStorageProviders: ['array', false, () => []],\n\n /**\n * This property stores the modification time value retrieved from the\n * **WDM** endpoint formatted as ISO 8601.\n *\n * @type {string}\n */\n modificationTime: 'string',\n\n /**\n * This property stores the navigation bar color.\n *\n * @type {string}\n */\n navigationBarColor: 'string',\n\n /**\n * This property stores the partner company's name when available.\n *\n * @type {string}\n */\n partnerCompanyName: 'string',\n\n /**\n * This property stores the partner company's logo when available.\n *\n * @type {string}\n */\n partnerLogoUrl: 'string',\n\n /**\n * This property stores the availability of people data from the **WDM**\n * service.\n *\n * @type {boolean}\n */\n peopleInsightsEnabled: 'boolean',\n\n /**\n * This property stores the reporting site's description when available.\n *\n * @type {string}\n */\n reportingSiteDesc: 'string',\n\n /**\n * This property stores the reporting site's access url when available.\n *\n * @type {string}\n */\n reportingSiteUrl: 'string',\n\n /**\n * This property stores the encryption key url when available.\n *\n * @type {string}\n */\n searchEncryptionKeyUrl: 'string',\n\n /**\n * This property stores the availability of support-provided text from the\n * **WDM** service.\n *\n * @type {boolean}\n */\n showSupportText: 'boolean',\n\n /**\n * This property stores the support provider's company name when available.\n *\n * @type {string}\n */\n supportProviderCompanyName: 'string',\n\n /**\n * This property stores the support provider's logo url when available.\n *\n * @type {string}\n */\n supportProviderLogoUrl: 'string',\n\n /**\n * This property stores the device's url retrieved from a registration\n * request. This property gets set via the initial registration process by a\n * `this.set()` method.\n *\n * @type {string}\n */\n url: 'string',\n\n /**\n * This property stores the device's userId uuid value, which can also be\n * derived from the device's registerd user's userId retrieved from\n * the **Hydra** service.\n *\n * @type {string}\n */\n userId: 'string',\n\n /**\n * This property stores whether or not file sharing is enabled\n *\n * @type {'BLOCK_BOTH' | 'BLOCK_UPLOAD'}\n */\n webFileShareControl: 'string',\n\n /**\n * This property stores the current web socket url used by the registered\n * device.\n *\n * @type {string}\n */\n webSocketUrl: 'string',\n\n /**\n * This property stores the value indicating whether or not white board file\n * sharing is enabled for the current device.\n *\n * @type {'ALLOW' | 'BLOCK'}\n */\n whiteboardFileShareControl: 'string',\n },\n\n /**\n * A list of derived properties that populate based when their parent data\n * available via the device's properties.\n *\n * @type {Object}\n */\n derived: {\n /**\n * This property determines if the current device is registered.\n *\n * @type {boolean}\n */\n registered: {\n deps: ['url'],\n\n /**\n * Checks if the device is registered by validating that the url exists.\n * Amperstand does not allow this to method to be written as an arrow\n * function.\n *\n * @returns {boolean}\n */\n fn() {\n return !!this.url;\n },\n },\n },\n\n /**\n * Stores timer data as well as other state details.\n *\n * @type {Object}\n */\n session: {\n /**\n * This property stores the logout timer object\n *\n * @type {any}\n */\n logoutTimer: 'any',\n\n /**\n * This property stores the date for the last activity the user made\n * with the current device.\n *\n * @type {number}\n */\n lastUserActivityDate: 'number',\n\n /**\n * This property stores whether or not the reachability check has been\n * performed to prevent the reachability check from performing its\n * operation more than once after a successful check.\n *\n * @returns {boolean}\n */\n isReachabilityChecked: ['boolean', false, false],\n\n /**\n * This property stores whether or not the current device is in a meeting\n * to prevent an unneeded timeout of a meeting due to inactivity.\n *\n * @type {boolean}\n */\n isInMeeting: 'boolean',\n\n /**\n * This property identifies if the device is currently in network to prevent\n * the `resetLogoutTimer()` method from being called repeatedly once its\n * known client is connected to the organization's internal network.\n *\n * @type {boolean}\n */\n isInNetwork: 'boolean',\n },\n\n // Event method members.\n\n /**\n * Trigger meeting started event for webex instance. Used by web-client team.\n *\n * @returns {void}\n */\n meetingStarted() {\n this.webex.trigger('meeting started');\n },\n\n /**\n * Trigger meeting ended event for webex instance. Used by web-client team.\n *\n * @returns {void}\n */\n meetingEnded() {\n this.webex.trigger('meeting ended');\n },\n\n // Registration method members\n\n /* eslint-disable require-jsdoc */\n /**\n * Refresh the current registered device if able.\n *\n * @returns {Promise}\n */\n @oneFlight\n @waitForValue('@')\n refresh() {\n this.logger.info('device: refreshing');\n\n // Validate that the device can be registered.\n return this.canRegister().then(() => {\n // Validate if the device is not registered and register instead.\n if (!this.registered) {\n this.logger.info('device: device not registered, registering');\n\n return this.register();\n }\n\n // Merge body configurations, overriding defaults.\n const body = {\n ...this.serialize(),\n ...(this.config.body ? this.config.body : {}),\n };\n\n // Remove unneeded properties from the body object.\n delete body.features;\n delete body.mediaCluster;\n delete body.etag;\n\n // Append a ttl value if the device is marked as ephemeral.\n if (this.config.ephemeral) {\n body.ttl = this.config.ephemeralDeviceTTL;\n }\n\n // Merge header configurations, overriding defaults.\n const headers = {\n ...(this.config.defaults.headers ? this.config.defaults.headers : {}),\n ...(this.config.headers ? this.config.headers : {}),\n // If etag is sent, WDM will not send developer feature toggles unless they have changed\n ...(this.etag ? {'If-None-Match': this.etag} : {}),\n };\n\n return this.request({\n method: 'PUT',\n uri: this.url,\n body,\n headers,\n })\n .then((response) => this.processRegistrationSuccess(response))\n .catch((reason) => {\n // Handle a 404 error, which indicates that the device is no longer\n // valid and needs to be registered as a new device.\n if (reason.statusCode === 404) {\n this.logger.info('device: refresh failed, device is not valid');\n this.logger.info('device: attempting to register a new device');\n\n this.clear();\n\n return this.register();\n }\n\n return Promise.reject(reason);\n });\n });\n },\n\n /**\n * Register or refresh a device depending on the current device state. Device\n * registration utilizes the services plugin to send the request to the\n * **WDM** service.\n *\n * @returns {Promise}\n */\n @oneFlight\n @waitForValue('@')\n register() {\n this.logger.info('device: registering');\n\n this.webex.internal.newMetrics.callDiagnosticMetrics.setDeviceInfo(this);\n\n // Validate that the device can be registered.\n return this.canRegister().then(() => {\n // Validate if the device is already registered and refresh instead.\n if (this.registered) {\n this.logger.info('device: device already registered, refreshing');\n\n return this.refresh();\n }\n\n // Merge body configurations, overriding defaults.\n const body = {\n ...(this.config.defaults.body ? this.config.defaults.body : {}),\n ...(this.config.body ? this.config.body : {}),\n };\n\n // Merge header configurations, overriding defaults.\n const headers = {\n ...(this.config.defaults.headers ? this.config.defaults.headers : {}),\n ...(this.config.headers ? this.config.headers : {}),\n };\n\n // Append a ttl value if the device is marked as ephemeral\n if (this.config.ephemeral) {\n body.ttl = this.config.ephemeralDeviceTTL;\n }\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.register.device.request',\n });\n\n // This will be replaced by a `create()` method.\n return this.request({\n method: 'POST',\n service: 'wdm',\n resource: 'devices',\n body,\n headers,\n })\n .catch((error) => {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.register.device.response',\n });\n\n throw error;\n })\n .then((response) => {\n // Do not add any processing of response above this as that will affect timestamp\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.register.device.response',\n });\n\n this.webex.internal.metrics.submitClientMetrics(\n METRICS.JS_SDK_WDM_REGISTRATION_SUCCESSFUL\n );\n\n return this.processRegistrationSuccess(response);\n })\n .catch((error) => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_WDM_REGISTRATION_FAILED, {\n fields: {error},\n });\n throw error;\n });\n });\n },\n\n /**\n * Unregister the current registered device if available. Unregistering a\n * device utilizes the services plugin to send the request to the **WDM**\n * service.\n *\n * @returns {Promise}\n */\n @oneFlight\n @waitForValue('@')\n unregister() {\n this.logger.info('device: unregistering');\n\n if (!this.registered) {\n this.logger.warn('device: not registered');\n\n return Promise.resolve();\n }\n\n return this.request({\n uri: this.url,\n method: 'DELETE',\n }).then(() => this.clear());\n },\n /* eslint-enable require-jsdoc */\n\n // Helper method members\n\n /**\n * Determine if registration methods can be performed. This method utilizes\n * the `services` plugin to confirm if the appropriate service urls are\n * available for device registration.\n *\n * @returns {Promise}\n */\n canRegister() {\n this.logger.info('device: validating if registration can occur');\n\n // Destructure the services plugin for ease of reference.\n const {services} = this.webex.internal;\n\n // Wait for the postauth catalog to populate.\n return services.waitForCatalog('postauth', this.config.canRegisterWaitDuration).then(() =>\n // Validate that the service exists after waiting for the catalog.\n services.get('wdm')\n ? Promise.resolve()\n : Promise.reject(\n new Error(\n [\n 'device: cannot register,',\n \"'wdm' service is not available from the postauth catalog\",\n ].join(' ')\n )\n )\n );\n },\n\n /**\n * Check if the device can currently reach the inactivity check url.\n *\n * @returns {Promise}\n */\n checkNetworkReachability() {\n this.logger.info('device: checking network reachability');\n\n // Validate if the device has been checked and reset the logout timer.\n if (this.isReachabilityChecked) {\n return Promise.resolve(this.resetLogoutTimer());\n }\n\n this.isReachabilityChecked = true;\n\n // Validate if the device has a intranet checking url.\n if (!this.intranetInactivityCheckUrl) {\n this.isInNetwork = false;\n\n return Promise.resolve(this.resetLogoutTimer());\n }\n\n // Clear unnecessary headers for reachability request.\n const headers = {\n 'cisco-no-http-redirect': null,\n 'spark-user-agent': null,\n trackingid: null,\n };\n\n // Send the network reachability request.\n return this.request({\n headers,\n method: 'GET',\n uri: this.intranetInactivityCheckUrl,\n })\n .then(() => {\n this.isInNetwork = true;\n\n return Promise.resolve(this.resetLogoutTimer());\n })\n .catch(() => {\n this.logger.info('device: did not reach ping endpoint');\n this.logger.info('device: triggering off-network timer');\n\n this.isInNetwork = false;\n\n return Promise.resolve(this.resetLogoutTimer());\n });\n },\n\n /**\n * Clears the registration ttl value if available.\n *\n * @param {Object} options - Values to be cleared.\n * @returns {void}\n */\n clear(...args) {\n this.logger.info('device: clearing registered device');\n\n // Prototype the extended class in order to preserve the parent member.\n Reflect.apply(WebexPlugin.prototype.clear, this, args);\n },\n\n /**\n * Get the current websocket url with the appropriate priority host.\n *\n * @param {boolean} [wait=false] - Willing to wait on a valid url.\n * @returns {Promise} - The priority-mapped web socket url.\n */\n getWebSocketUrl(wait = false) {\n this.logger.info('device: getting the current websocket url');\n\n // Destructure the services plugin for ease of reference.\n const {services} = this.webex.internal;\n\n // Validate if the method should wait for registration.\n if (wait) {\n return this.waitForRegistration()\n .then(() => services.convertUrlToPriorityHostUrl(this.webSocketUrl))\n .catch((error) => {\n this.logger.warn(error.message);\n\n return Promise.reject(new Error('device: failed to get the current websocket url'));\n });\n }\n\n // Validate if the device is registered.\n if (!this.registered) {\n return Promise.reject(\n new Error('device: cannot get websocket url, device is not registered')\n );\n }\n\n // Attempt to collect the priority-host-mapped web socket URL.\n const wsUrl = services.convertUrlToPriorityHostUrl(this.webSocketUrl);\n\n // Validate that the url was collected.\n if (wsUrl) {\n return Promise.resolve(wsUrl);\n }\n\n return Promise.reject(new Error('device: failed to get the current websocket url'));\n },\n\n /**\n * Process a successful device registration.\n *\n * @param {Object} response - response object from registration success.\n * @returns {void}\n */\n processRegistrationSuccess(response) {\n this.logger.info('device: received registration payload');\n\n // Clone the response body for service cleaning.\n const body = {...response.body};\n\n // Clean service data.\n delete body.services;\n delete body.serviceHostMap;\n\n const {etag} = response.headers || {};\n\n if (this.etag && etag && this.etag === etag) {\n // If current etag matches the previous one and we have sent\n // If-None-Match header the developer and entitlement feature\n // toggles will not be returned\n const {features} = body;\n\n delete body.features;\n // When using the etag feature cache, user and entitlement features are still returned\n this.features.user.reset(features.user);\n this.features.entitlement.reset(features.entitlement);\n }\n\n // Assign the recieved DTO from **WDM** to this device.\n this.set(body);\n\n // Assign the new etag to this device.\n this.set({etag});\n\n // Validate if device is ephemeral and setup refresh timer.\n if (this.config.ephemeral) {\n this.logger.info('device: enqueuing device refresh');\n\n const delay = (this.config.ephemeralDeviceTTL / 2 + 60) * 1000;\n\n this.refreshTimer = safeSetTimeout(() => this.refresh(), delay);\n }\n\n // Emit the registration:success event.\n this.trigger(DEVICE_EVENT_REGISTRATION_SUCCESS, this);\n },\n\n /**\n * Reset the current local logout timer for the registered device if\n * registered.\n *\n * @returns {void}\n */\n resetLogoutTimer() {\n this.logger.info('device: resetting logout timer');\n\n // Clear current logout timer.\n clearTimeout(this.logoutTimer);\n\n // Remove last activity date event listener.\n this.off('change:lastUserActivityDate');\n\n // Remove the logout timer.\n this.unset('logoutTimer');\n\n // Validate if the device is currently in a meeting and is configured to\n // required inactivity enforcement.\n if (\n !this.isInMeeting &&\n this.config.enableInactivityEnforcement &&\n this.isReachabilityChecked\n ) {\n if (this.isInNetwork) {\n this.setLogoutTimer(this.inNetworkInactivityDuration);\n } else {\n this.setLogoutTimer(this.intranetInactivityDuration);\n }\n }\n },\n\n /**\n * Set the value of the logout timer for the current registered device.\n *\n * @param {number} duration - Value in seconds of the new logout timer.\n * @returns {void}\n */\n setLogoutTimer(duration) {\n this.logger.info('device: setting logout timer');\n\n if (!duration || duration <= 0) {\n return;\n }\n\n // Setup user activity date event listener.\n this.on('change:lastUserActivityDate', () => {\n this.resetLogoutTimer();\n });\n\n // Initialize a new timer.\n this.logoutTimer = safeSetTimeout(() => {\n this.webex.logout();\n }, duration * 1000);\n },\n\n /**\n * Wait for the device to be registered.\n *\n * @param {number} [timeout=10] - The maximum duration to wait, in seconds.\n * @returns {Promise}\n */\n waitForRegistration(timeout = 10) {\n this.logger.info('device: waiting for registration');\n\n return new Promise((resolve, reject) => {\n if (this.registered) {\n resolve();\n }\n\n const timeoutTimer = safeSetTimeout(\n () => reject(new Error('device: timeout occured while waiting for registration')),\n timeout * 1000\n );\n\n this.once(DEVICE_EVENT_REGISTRATION_SUCCESS, () => {\n clearTimeout(timeoutTimer);\n resolve();\n });\n });\n },\n\n // Deprecated methods.\n\n /**\n * Mark a url as failed and get the next priority host url.\n *\n * @param {string} url - The url to mark as failed.\n * @returns {Promise} - The next priority url.\n */\n @deprecated('device#markUrlFailedAndGetNew(): Use services#markFailedUrl()')\n markUrlFailedAndGetNew(url) {\n return Promise.resolve(this.webex.internal.services.markFailedUrl(url));\n },\n\n // Ampersand method members\n\n /* eslint-disable require-jsdoc */\n /**\n * Initializer method for the device plugin.\n *\n * @override\n * @param {Array} args - An array of items to be mapped as properties.\n * @returns {void}\n */\n @persist('@', decider)\n initialize(...args) {\n // Prototype the extended class in order to preserve the parent member.\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n\n // Initialize feature events and listeners.\n FEATURE_COLLECTION_NAMES.forEach((collectionName) => {\n this.features.on(`change:${collectionName}`, (model, value, options) => {\n this.trigger('change', this, options);\n this.trigger('change:features', this, this.features, options);\n });\n });\n\n // Initialize network reachability checking event for url change.\n this.on('change:intranetInactivityCheckUrl', () => {\n this.checkNetworkReachability();\n });\n\n // Initialize network reachability checking event for duration change.\n this.on('change:intranetInactivityDuration', () => {\n this.checkNetworkReachability();\n });\n\n // Initialize network reachability checking event for duration change.\n this.on('change:inNetworkInactivityDuration', () => {\n this.checkNetworkReachability();\n });\n\n // Initialize listener for activity checking.\n this.listenTo(this.webex, 'user-activity', () => {\n this.lastUserActivityDate = Date.now();\n });\n\n // Initialize listener for meeting started event.\n this.listenTo(this.webex, 'meeting started', () => {\n this.isInMeeting = true;\n this.resetLogoutTimer();\n });\n\n // Initialize listener for meeting ended event.\n this.listenTo(this.webex, 'meeting ended', () => {\n this.isInMeeting = false;\n this.resetLogoutTimer();\n });\n },\n /* eslint-enable require-jsdoc */\n});\n\nexport default Device;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\nimport {set} from 'lodash';\n\nimport {CISCO_DEVICE_URL} from '../constants';\n\n/**\n * Adds 'cisco-device-url' header, as appropriate, to requests\n */\nexport default class DeviceUrlInterceptor extends Interceptor {\n /**\n * @returns {DeviceUrlInterceptor}\n */\n static create() {\n /* eslint no-invalid-this: [0] */\n return new DeviceUrlInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const {headers, service, uri} = options;\n const {device, services} = this.webex.internal;\n\n // Check if header is already set before moving forward\n if (!device.url || (headers && CISCO_DEVICE_URL in headers && !!headers[CISCO_DEVICE_URL])) {\n return Promise.resolve(options);\n }\n\n // Wait for catalog and service to be defined.\n return services\n .waitForService({service, url: uri})\n .then((url) => {\n // Grab the service name with the url returned from waitForService\n const {name: serviceName} = services.getServiceFromUrl(url) || {};\n const invalidServices = ['idbroker', 'oauth', 'saml'];\n\n // Check if service is not one of the invalid services\n // Assign the url to the device header\n if (serviceName && !invalidServices.includes(serviceName)) {\n set(options, `headers['${CISCO_DEVICE_URL}']`, device.url);\n }\n\n return options;\n })\n .catch((error) => {\n // Validate that the error came from getServiceFromUrl\n if (error.message.match(/was not found after waiting/)) {\n return options;\n }\n\n return Promise.reject(error);\n });\n }\n}\n","import {inBrowser, deviceType} from '@webex/common';\n\nexport default {\n device: {\n /**\n * The duration to wait for the catalog to populate in seconds.\n *\n * @type {number}\n */\n canRegisterWaitDuration: 10,\n\n /**\n * The default configuration group when sending registration requests.\n *\n * @type {Object}\n */\n defaults: {\n /**\n * The default body configuration of registration requests.\n *\n * @type {Object}\n */\n body: {\n name:\n (typeof process.title === 'string' ? process.title.trim() : undefined) ||\n (inBrowser && 'browser') ||\n 'javascript',\n deviceType: deviceType.WEB,\n model: 'web-js-sdk',\n localizedModel: 'webex-js-sdk',\n systemName: 'WEBEX_JS_SDK',\n systemVersion: '1.0.0',\n },\n },\n\n /**\n * When true, the **wdm** service will enforce an inactivity duration.\n *\n * @type {boolean}\n */\n enableInactivityEnforcement: false,\n\n /**\n * When true, the device registration will include a ttl value of\n * {@link config.device.ephemeralDeviceTTL} and refresh on an interval of\n * {@link config.device.ephemeralDeviceTTL} / 2 + 60 seconds.\n *\n * @type {boolean}\n */\n ephemeral: false,\n\n /**\n * The ttl value to include in device registration if\n * {@link config.device.ephemeral} is true. Measured in seconds.\n *\n * @type {boolean}\n */\n ephemeralDeviceTTL: 30 * 60,\n },\n\n /**\n * installationId is used exclusively as web client for fraud prevention,\n * and is aliased to as machineId by CA.\n *\n * @alias device.machineId\n * @type {string}\n */\n installationId: undefined,\n};\n","// Internal dependencies.\n// Need to import metrics plugin for the devices to send metrics on succes/failure registration\nimport '@webex/internal-plugin-metrics';\nimport {registerInternalPlugin} from '@webex/webex-core';\n\n// Plugin dependencies.\nimport Device from './device';\nimport {FeatureCollection, FeatureModel, FeaturesModel} from './features/index';\nimport DeviceUrlInterceptor from './interceptors/device-url';\nimport * as constants from './constants';\nimport config from './config';\n\nregisterInternalPlugin('device', Device, {\n config,\n interceptors: {\n DeviceUrlInterceptor: DeviceUrlInterceptor.create,\n },\n /**\n * Unregister the device in the case that the webex instance has logged out.\n *\n * @returns {Promise}\n */\n onBeforeLogout() {\n return this.unregister();\n },\n});\n\nexport {default} from './device';\nexport {config, constants, DeviceUrlInterceptor, FeatureCollection, FeatureModel, FeaturesModel};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env: browser */\n\n/**\n * Ensures the provider buffer is, indeed, an ArrayBuffer; converts File and\n * Blob objects to ArrayBuffers.\n * @param {mixed} buffer\n * @returns {Promise}\n */\nexport default function ensureBuffer(buffer) {\n if (buffer instanceof ArrayBuffer) {\n return Promise.resolve(buffer);\n }\n\n if (buffer.toArrayBuffer) {\n return Promise.resolve(buffer.toArrayBuffer());\n }\n\n if (buffer.buffer) {\n return Promise.resolve(buffer.buffer);\n }\n\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n\n fr.onload = function onload() {\n resolve(new Uint8Array(this.result));\n };\n\n fr.onerror = reject;\n\n fr.readAsArrayBuffer(buffer);\n });\n}\n","export const KMS_KEY_REVOKE_FAILURE = 'event:kms:key:revoke:encryption:failure';\nexport const KMS_KEY_REVOKE_ERROR_STATUS = 405;\nexport const KMS_KEY_REVOKE_ERROR_CODES = [405005, 405006];\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\nimport {WebexHttpError} from '@webex/webex-core';\n\nimport {\n KMS_KEY_REVOKE_ERROR_CODES,\n KMS_KEY_REVOKE_FAILURE,\n KMS_KEY_REVOKE_ERROR_STATUS,\n} from './constants';\n\n/**\n * Error class for KMS errors\n */\nexport class KmsError extends Exception {\n static defaultMessage =\n 'An unknown error occurred while communicating with the kms. This implies we received an error response without a body.';\n\n /**\n * @param {HttpResponse} body\n * @returns {string}\n */\n parse(body) {\n body = body.body || body;\n\n Object.defineProperties(this, {\n body: {\n enumerable: false,\n value: body,\n },\n reason: {\n enumerable: false,\n value: body.reason,\n },\n requestId: {\n enumerable: false,\n value: body.requestId,\n },\n status: {\n enumerable: false,\n value: body.status,\n },\n });\n\n let message = typeof body === 'string' ? body : body.reason;\n\n if (!message) {\n message = this.constructor.defaultMessage;\n }\n if (body.status) {\n message += `\\nKMS_RESPONSE_STATUS: ${body.status}`;\n }\n if (body.requestId) {\n message += `\\nKMS_REQUEST_ID: ${body.requestId}`;\n }\n\n if (body.statusCode) {\n message += `\\nKMS_STATUS_CODE: ${body.statusCode}`;\n }\n\n if (body.errorCode) {\n message += `\\nKMS_ErrorCode: ${body.errorCode}`;\n }\n\n return message;\n }\n}\n\n/**\n * Thrown when an expected KMSResponse is not received in a timely manner\n */\nexport class KmsTimeoutError extends KmsError {\n /**\n * @param {KmsRequest} options.request\n * @param {KmsRequest} options.timeout\n * @returns {string}\n */\n parse({request = {}, timeout} = {}) {\n let message = `The KMS did not respond within ${\n timeout ? `${timeout} milliseconds` : 'a timely fashion'\n }`;\n\n if (request) {\n if (request.method && request.uri) {\n message += `\\nKMS_REQUEST: ${request.method} ${request.uri}`;\n }\n\n if (request.requestId) {\n message += `\\nKMS_REQUEST_ID: ${request.requestId}`;\n }\n }\n\n return message;\n }\n}\n\n/**\n * Emitted when a REST request includes an encrypter error\n */\nexport class DryError extends WebexHttpError {\n static defaultMessage = 'An unknown error was received from a service that proxies to the KMS';\n\n /**\n * @param {WebexHttpError} reason\n * @returns {string}\n */\n parse(reason) {\n Reflect.apply(WebexHttpError.prototype.parse, this, [reason._res]);\n const body = reason._res.body.message;\n\n let message = body.reason || body;\n\n if (!message) {\n message = this.constructor.defaultMessage;\n }\n if (this.options.url) {\n message += `\\n${this.options.method} ${this.options.url}`;\n } else if (this.options.uri) {\n message += `\\n${this.options.method} ${this.options.uri}`;\n } else {\n message += `\\n${this.options.method} ${this.options.service.toUpperCase()}/${\n this.options.resource\n }`;\n }\n message += `\\nWEBEX_TRACKING_ID: ${this.options.headers.trackingid}`;\n\n if (body.status) {\n message += `\\nKMS_RESPONSE_STATUS: ${body.status}`;\n }\n if (body.requestId) {\n message += `\\nKMS_REQUEST_ID: ${body.requestId}`;\n }\n\n Object.defineProperties(this, {\n reason: {\n enumerable: false,\n value: body.reason,\n },\n requestId: {\n enumerable: false,\n value: body.requestId,\n },\n status: {\n enumerable: false,\n value: body.status,\n },\n });\n\n return message;\n }\n}\n\n/**\n * Function triggers an event when specific encryption failures are received.\n */\n\n// eslint-disable-next-line consistent-return\nexport const handleKmsKeyRevokedEncryptionFailure = (item, webex) => {\n if (\n item.status === KMS_KEY_REVOKE_ERROR_STATUS &&\n KMS_KEY_REVOKE_ERROR_CODES.includes(item.body.errorCode)\n ) {\n webex.internal.encryption.trigger(KMS_KEY_REVOKE_FAILURE);\n }\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {Batcher} from '@webex/webex-core';\n\nimport {KmsError, KmsTimeoutError, handleKmsKeyRevokedEncryptionFailure} from './kms-errors';\n\nexport const TIMEOUT_SYMBOL = Symbol('TIMEOUT_SYMBOL');\n\n/**\n * @class\n */\nconst KmsBatcher = Batcher.extend({\n namespace: 'Encryption',\n\n /**\n * Accepts a kmsMessage event and passes its contents to acceptItem\n * @param {Object} event\n * @returns {Promise}\n */\n processKmsMessageEvent(event) {\n this.logger.info('kms-batcher: received kms message');\n\n return Promise.all(\n event.encryption.kmsMessages.map(\n (kmsMessage) =>\n new Promise((resolve) => {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n this.logger.info('kms-batcher:', kmsMessage.body);\n }\n\n resolve(this.acceptItem(kmsMessage));\n })\n )\n );\n },\n\n /**\n * Attaches a timeout to the given KMS message\n * @param {Object} item\n * @returns {Promise}\n */\n prepareItem(item) {\n return this.getDeferredForRequest(item).then((defer) => {\n const timeout = item[TIMEOUT_SYMBOL];\n\n /* istanbul ignore if */\n if (!timeout) {\n throw new Error('timeout is required');\n }\n\n const timer = safeSetTimeout(() => {\n this.logger.warn(\n `kms: request timed out; request id: ${item.requestId}; timeout: ${timeout}`\n );\n this.handleItemFailure(\n item,\n new KmsTimeoutError({\n timeout,\n request: item,\n })\n );\n }, timeout);\n\n // Reminder: reassign `promise` is not a viable means of inserting into\n // the Promise chain\n defer.promise.then(() => clearTimeout(timer));\n defer.promise.catch(() => clearTimeout(timer));\n\n return item;\n });\n },\n\n /**\n * Attaches the final bits of cluster info to the payload\n * @param {Array} queue\n * @returns {Promise}\n */\n prepareRequest(queue) {\n return this.webex.internal.encryption.kms._getKMSCluster().then((cluster) => ({\n destination: cluster,\n kmsMessages: queue.map((req) => req.wrapped),\n }));\n },\n\n /**\n * @param {Object} payload\n * @returns {Promise}\n */\n submitHttpRequest(payload) {\n this.logger.info('kms: batched-request-length', payload.kmsMessages.length);\n\n return this.webex.request({\n method: 'POST',\n service: 'encryption',\n resource: '/kms/messages',\n body: payload,\n });\n },\n\n /**\n * Does nothing; the http response doesn't carry our response data\n * @returns {Promise}\n */\n handleHttpSuccess() {\n return Promise.resolve();\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n didItemFail(item) {\n return Promise.resolve(item.status >= 400);\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item.body);\n });\n },\n\n /**\n * @param {Object} item\n * @param {KmsError} [reason]\n * @returns {Promise}\n */\n handleItemFailure(item, reason) {\n handleKmsKeyRevokedEncryptionFailure(item, this.webex);\n\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(reason || new KmsError(item.body));\n });\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintRequest(item) {\n return Promise.resolve(item.requestId);\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item.requestId);\n },\n});\n\nexport default KmsBatcher;\n","/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nfunction getUTCDate(date) {\r\n return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\r\n}\r\nfunction getParametersValue(parameters, name, defaultValue) {\r\n var _a;\r\n if ((parameters instanceof Object) === false) {\r\n return defaultValue;\r\n }\r\n return (_a = parameters[name]) !== null && _a !== void 0 ? _a : defaultValue;\r\n}\r\nfunction bufferToHexCodes(inputBuffer, inputOffset = 0, inputLength = (inputBuffer.byteLength - inputOffset), insertSpace = false) {\r\n let result = \"\";\r\n for (const item of (new Uint8Array(inputBuffer, inputOffset, inputLength))) {\r\n const str = item.toString(16).toUpperCase();\r\n if (str.length === 1) {\r\n result += \"0\";\r\n }\r\n result += str;\r\n if (insertSpace) {\r\n result += \" \";\r\n }\r\n }\r\n return result.trim();\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof ArrayBuffer)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be \\\"ArrayBuffer\\\"\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction utilFromBase(inputBuffer, inputBase) {\r\n let result = 0;\r\n if (inputBuffer.length === 1) {\r\n return inputBuffer[0];\r\n }\r\n for (let i = (inputBuffer.length - 1); i >= 0; i--) {\r\n result += inputBuffer[(inputBuffer.length - 1) - i] * Math.pow(2, inputBase * i);\r\n }\r\n return result;\r\n}\r\nfunction utilToBase(value, base, reserved = (-1)) {\r\n const internalReserved = reserved;\r\n let internalValue = value;\r\n let result = 0;\r\n let biggest = Math.pow(2, base);\r\n for (let i = 1; i < 8; i++) {\r\n if (value < biggest) {\r\n let retBuf;\r\n if (internalReserved < 0) {\r\n retBuf = new ArrayBuffer(i);\r\n result = i;\r\n }\r\n else {\r\n if (internalReserved < i) {\r\n return (new ArrayBuffer(0));\r\n }\r\n retBuf = new ArrayBuffer(internalReserved);\r\n result = internalReserved;\r\n }\r\n const retView = new Uint8Array(retBuf);\r\n for (let j = (i - 1); j >= 0; j--) {\r\n const basis = Math.pow(2, j * base);\r\n retView[result - j - 1] = Math.floor(internalValue / basis);\r\n internalValue -= (retView[result - j - 1]) * basis;\r\n }\r\n return retBuf;\r\n }\r\n biggest *= Math.pow(2, base);\r\n }\r\n return new ArrayBuffer(0);\r\n}\r\nfunction utilConcatBuf(...buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const buffer of buffers) {\r\n outputLength += buffer.byteLength;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const buffer of buffers) {\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retBuf;\r\n}\r\nfunction utilConcatView(...views) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const view of views) {\r\n outputLength += view.length;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const view of views) {\r\n retView.set(view, prevLength);\r\n prevLength += view.length;\r\n }\r\n return retView;\r\n}\r\nfunction utilDecodeTC() {\r\n const buf = new Uint8Array(this.valueHex);\r\n if (this.valueHex.byteLength >= 2) {\r\n const condition1 = (buf[0] === 0xFF) && (buf[1] & 0x80);\r\n const condition2 = (buf[0] === 0x00) && ((buf[1] & 0x80) === 0x00);\r\n if (condition1 || condition2) {\r\n this.warnings.push(\"Needlessly long format\");\r\n }\r\n }\r\n const bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const bigIntView = new Uint8Array(bigIntBuffer);\r\n for (let i = 0; i < this.valueHex.byteLength; i++) {\r\n bigIntView[i] = 0;\r\n }\r\n bigIntView[0] = (buf[0] & 0x80);\r\n const bigInt = utilFromBase(bigIntView, 8);\r\n const smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const smallIntView = new Uint8Array(smallIntBuffer);\r\n for (let j = 0; j < this.valueHex.byteLength; j++) {\r\n smallIntView[j] = buf[j];\r\n }\r\n smallIntView[0] &= 0x7F;\r\n const smallInt = utilFromBase(smallIntView, 8);\r\n return (smallInt - bigInt);\r\n}\r\nfunction utilEncodeTC(value) {\r\n const modValue = (value < 0) ? (value * (-1)) : value;\r\n let bigInt = 128;\r\n for (let i = 1; i < 8; i++) {\r\n if (modValue <= bigInt) {\r\n if (value < 0) {\r\n const smallInt = bigInt - modValue;\r\n const retBuf = utilToBase(smallInt, 8, i);\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] |= 0x80;\r\n return retBuf;\r\n }\r\n let retBuf = utilToBase(modValue, 8, i);\r\n let retView = new Uint8Array(retBuf);\r\n if (retView[0] & 0x80) {\r\n const tempBuf = retBuf.slice(0);\r\n const tempView = new Uint8Array(tempBuf);\r\n retBuf = new ArrayBuffer(retBuf.byteLength + 1);\r\n retView = new Uint8Array(retBuf);\r\n for (let k = 0; k < tempBuf.byteLength; k++) {\r\n retView[k + 1] = tempView[k];\r\n }\r\n retView[0] = 0x00;\r\n }\r\n return retBuf;\r\n }\r\n bigInt *= Math.pow(2, 8);\r\n }\r\n return (new ArrayBuffer(0));\r\n}\r\nfunction isEqualBuffer(inputBuffer1, inputBuffer2) {\r\n if (inputBuffer1.byteLength !== inputBuffer2.byteLength) {\r\n return false;\r\n }\r\n const view1 = new Uint8Array(inputBuffer1);\r\n const view2 = new Uint8Array(inputBuffer2);\r\n for (let i = 0; i < view1.length; i++) {\r\n if (view1[i] !== view2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction padNumber(inputNumber, fullLength) {\r\n const str = inputNumber.toString(10);\r\n if (fullLength < str.length) {\r\n return \"\";\r\n }\r\n const dif = fullLength - str.length;\r\n const padding = new Array(dif);\r\n for (let i = 0; i < dif; i++) {\r\n padding[i] = \"0\";\r\n }\r\n const paddingString = padding.join(\"\");\r\n return paddingString.concat(str);\r\n}\r\nconst base64Template = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\nconst base64UrlTemplate = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\r\nfunction toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) {\r\n let i = 0;\r\n let flag1 = 0;\r\n let flag2 = 0;\r\n let output = \"\";\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n if (skipLeadingZeros) {\r\n let nonZeroPosition = 0;\r\n for (let i = 0; i < input.length; i++) {\r\n if (input.charCodeAt(i) !== 0) {\r\n nonZeroPosition = i;\r\n break;\r\n }\r\n }\r\n input = input.slice(nonZeroPosition);\r\n }\r\n while (i < input.length) {\r\n const chr1 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag1 = 1;\r\n }\r\n const chr2 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag2 = 1;\r\n }\r\n const chr3 = input.charCodeAt(i++);\r\n const enc1 = chr1 >> 2;\r\n const enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);\r\n let enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);\r\n let enc4 = chr3 & 0x3F;\r\n if (flag1 === 1) {\r\n enc3 = enc4 = 64;\r\n }\r\n else {\r\n if (flag2 === 1) {\r\n enc4 = 64;\r\n }\r\n }\r\n if (skipPadding) {\r\n if (enc3 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}`;\r\n }\r\n else {\r\n if (enc4 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}`;\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n return output;\r\n}\r\nfunction fromBase64(input, useUrlTemplate = false, cutTailZeros = false) {\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n function indexOf(toSearch) {\r\n for (let i = 0; i < 64; i++) {\r\n if (template.charAt(i) === toSearch)\r\n return i;\r\n }\r\n return 64;\r\n }\r\n function test(incoming) {\r\n return ((incoming === 64) ? 0x00 : incoming);\r\n }\r\n let i = 0;\r\n let output = \"\";\r\n while (i < input.length) {\r\n const enc1 = indexOf(input.charAt(i++));\r\n const enc2 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc3 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc4 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const chr1 = (test(enc1) << 2) | (test(enc2) >> 4);\r\n const chr2 = ((test(enc2) & 0x0F) << 4) | (test(enc3) >> 2);\r\n const chr3 = ((test(enc3) & 0x03) << 6) | test(enc4);\r\n output += String.fromCharCode(chr1);\r\n if (enc3 !== 64) {\r\n output += String.fromCharCode(chr2);\r\n }\r\n if (enc4 !== 64) {\r\n output += String.fromCharCode(chr3);\r\n }\r\n }\r\n if (cutTailZeros) {\r\n const outputLength = output.length;\r\n let nonZeroStart = (-1);\r\n for (let i = (outputLength - 1); i >= 0; i--) {\r\n if (output.charCodeAt(i) !== 0) {\r\n nonZeroStart = i;\r\n break;\r\n }\r\n }\r\n if (nonZeroStart !== (-1)) {\r\n output = output.slice(0, nonZeroStart + 1);\r\n }\r\n else {\r\n output = \"\";\r\n }\r\n }\r\n return output;\r\n}\r\nfunction arrayBufferToString(buffer) {\r\n let resultString = \"\";\r\n const view = new Uint8Array(buffer);\r\n for (const element of view) {\r\n resultString += String.fromCharCode(element);\r\n }\r\n return resultString;\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n const stringLength = str.length;\r\n const resultBuffer = new ArrayBuffer(stringLength);\r\n const resultView = new Uint8Array(resultBuffer);\r\n for (let i = 0; i < stringLength; i++) {\r\n resultView[i] = str.charCodeAt(i);\r\n }\r\n return resultBuffer;\r\n}\r\nconst log2 = Math.log(2);\r\nfunction nearestPowerOf2(length) {\r\n const base = (Math.log(length) / log2);\r\n const floor = Math.floor(base);\r\n const round = Math.round(base);\r\n return ((floor === round) ? floor : round);\r\n}\r\nfunction clearProps(object, propsArray) {\r\n for (const prop of propsArray) {\r\n delete object[prop];\r\n }\r\n}\n\nexport { arrayBufferToString, bufferToHexCodes, checkBufferParams, clearProps, fromBase64, getParametersValue, getUTCDate, isEqualBuffer, nearestPowerOf2, padNumber, stringToArrayBuffer, toBase64, utilConcatBuf, utilConcatView, utilDecodeTC, utilEncodeTC, utilFromBase, utilToBase };\n","/* eslint-disable indent */\n/*\n * Copyright (c) 2016-2018, Peculiar Ventures\n * All rights reserved.\n *\n * Author 2016-2018, Yury Strozhevsky .\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n */\n//**************************************************************************************\nimport { getParametersValue, padNumber, isEqualBuffer, bufferToHexCodes, checkBufferParams, utilToBase, utilFromBase, utilEncodeTC, utilDecodeTC, utilConcatView } from \"pvutils\";\n//**************************************************************************************\n//#region Other utility functions\n//**************************************************************************************\nfunction assertBigInt()\n{\n\tif(typeof BigInt === \"undefined\")\n\t{\n\t\tthrow new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\n\t}\n}\n\n/**\n * Recursive function which checks and enables isIndefiniteForm flag for constructed blocks if any child has that flag enabled\n * @param {BaseBlock} baseBlock Base ASN.1 block\n * @returns Returns `true` if incoming block is `indefinite form`\n */\nfunction prepareIndefiniteForm(baseBlock)\n{\n\tif(baseBlock.idBlock.isConstructed)\n\t{\n\t\tfor(let i = 0; i < baseBlock.valueBlock.value.length; i++)\n\t\t{\n\t\t\tif(prepareIndefiniteForm(baseBlock.valueBlock.value[i]))\n\t\t\t{\n\t\t\t\tbaseBlock.lenBlock.isIndefiniteForm = true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn !!baseBlock.lenBlock.isIndefiniteForm;\n}\n\n/**\n * Concatenates buffers from the list\n * @param {Array.} buffers List of buffers\n * @returns Concatenated buffer\n */\nfunction concat(buffers) \n{\n\t//#region Initial variables\n\tlet outputLength = 0;\n\tlet prevLength = 0;\n\t//#endregion\n\n\t//#region Calculate output length\n\tfor(let i = 0; i < buffers.length; i++)\n\t{\n\t\tconst buffer = buffers[i];\n\t\toutputLength += buffer.byteLength;\n\t}\n\t//#endregion\n\n\tconst retBuf = new ArrayBuffer(outputLength);\n\tconst retView = new Uint8Array(retBuf);\n\n\tfor(let i = 0; i < buffers.length; i++)\n\t{\n\t\tconst buffer = buffers[i];\n\t\tretView.set(new Uint8Array(buffer), prevLength);\n\t\tprevLength += buffer.byteLength;\n\t}\n\n\treturn retBuf;\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of global variables\n//**************************************************************************************\nconst powers2 = [new Uint8Array([1])];\nconst digitsString = \"0123456789\";\nconst NAME = \"name\";\nconst VALUE_BEFORE_DECODE = \"valueBeforeDecode\";\nconst BLOCK_LENGTH = \"blockLength\";\nconst ERROR = \"error\";\nconst WARNINGS = \"warnings\";\nconst VALUE_HEX = \"valueHex\";\nconst IS_HEX_ONLY = \"isHexOnly\";\nconst ID_BLOCK = \"idBlock\";\nconst TAG_CLASS = \"tagClass\";\nconst TAG_NUMBER = \"tagNumber\";\nconst IS_CONSTRUCTED = \"isConstructed\";\nconst LEN_BLOCK = \"lenBlock\";\nconst IS_INDEFINITE_FORM = \"isIndefiniteForm\";\nconst LONG_FORM_USED = \"longFormUsed\";\nconst LENGTH = \"length\";\nconst OPTIONAL = \"optional\";\nconst PRIMITIVE_SCHEMA = \"primitiveSchema\";\nconst VALUE = \"value\";\nconst VALUE_DATE = \"valueDate\";\nconst FROM_BER = \"fromBER\";\nconst TO_BER = \"toBER\";\nconst LOCAL = \"local\";\nconst UNUSED_BITS = \"unusedBits\";\nconst VALUE_DEC = \"valueDec\";\nconst IS_FIRST_SID = \"isFirstSid\";\nconst DATA = \"data\";\nconst EMPTY_STRING = \"\";\nconst EMPTY_BUFFER = new ArrayBuffer(0);\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration for \"ViewWriter\"\n//**************************************************************************************\nclass ViewWriter\n{\n\tconstructor()\n\t{\n\t\t/**\n\t\t * @type {Array.}\n\t\t */\n\t\tthis.items = [];\n\t}\n\n\t/**\n\t * Writes buffer\n\t * @param {ArrayBuffer} buf \n\t */\n\twrite(buf)\n\t{\n\t\tthis.items.push(buf);\n\t}\n\n\t/**\n\t * Concatenates all buffers\n\t * @returns {ArrayBuffer}\n\t */\n\tfinal()\n\t{\n\t\treturn concat(this.items);\n\t}\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration for \"LocalBaseBlock\" class\n//**************************************************************************************\n/**\n * Class used as a base block for all remaining ASN.1 classes\n * @typedef LocalBaseBlock\n * @interface\n * @property {number} blockLength\n * @property {string} error\n * @property {Array.} warnings\n * @property {ArrayBuffer} valueBeforeDecode\n */\nclass LocalBaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalBaseBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueBeforeDecode]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {number} blockLength\n\t\t */\n\t\tthis.blockLength = getParametersValue(parameters, BLOCK_LENGTH, 0);\n\t\t/**\n\t\t * @type {string} error\n\t\t */\n\t\tthis.error = getParametersValue(parameters, ERROR, EMPTY_STRING);\n\t\t/**\n\t\t * @type {Array.} warnings\n\t\t */\n\t\tthis.warnings = getParametersValue(parameters, WARNINGS, []);\n\t\t//noinspection JSCheckFunctionSignatures\n\t\t/**\n\t\t * @type {ArrayBuffer} valueBeforeDecode\n\t\t */\n\t\tif(VALUE_BEFORE_DECODE in parameters)\n\t\t\tthis.valueBeforeDecode = parameters.valueBeforeDecode.slice(0);\n\t\telse\n\t\t\tthis.valueBeforeDecode = EMPTY_BUFFER;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"baseBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\tblockName: this.constructor.blockName(),\n\t\t\tblockLength: this.blockLength,\n\t\t\terror: this.error,\n\t\t\twarnings: this.warnings,\n\t\t\tvalueBeforeDecode: bufferToHexCodes(this.valueBeforeDecode, 0, this.valueBeforeDecode.byteLength)\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Description for \"HexBlock\" class\n//**************************************************************************************\n/**\n * Class used as a base block for all remaining ASN.1 classes\n * @extends LocalBaseBlock\n * @typedef HexBlock\n * @property {number} blockLength\n * @property {string} error\n * @property {Array.} warnings\n * @property {ArrayBuffer} valueBeforeDecode\n * @property {boolean} isHexOnly\n * @property {ArrayBuffer} valueHex\n */\n//noinspection JSUnusedLocalSymbols\nexport const HexBlock = BaseClass => class LocalHexBlockMixin extends BaseClass\n{\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Constructor for \"HexBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.isHexOnly = getParametersValue(parameters, IS_HEX_ONLY, false);\n\t\t/**\n\t\t * @type {ArrayBuffer}\n\t\t */\n\t\tif(VALUE_HEX in parameters)\n\t\t\tthis.valueHex = parameters.valueHex.slice(0);\n\t\telse\n\t\t\tthis.valueHex = EMPTY_BUFFER;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"hexBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\t//#region Getting Uint8Array from ArrayBuffer\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t\t//#endregion\n\n\t\t//#region Initial checks\n\t\tif(intBuffer.length === 0)\n\t\t{\n\t\t\tthis.warnings.push(\"Zero buffer length\");\n\t\t\treturn inputOffset;\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Copy input buffer to internal buffer\n\t\tthis.valueHex = inputBuffer.slice(inputOffset, inputOffset + inputLength);\n\t\t//#endregion\n\n\t\tthis.blockLength = inputLength;\n\n\t\treturn (inputOffset + inputLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\tif(this.isHexOnly !== true)\n\t\t{\n\t\t\tthis.error = \"Flag \\\"isHexOnly\\\" is not set, abort\";\n\t\t\treturn EMPTY_BUFFER;\n\t\t}\n\n\t\tif(sizeOnly === true)\n\t\t\treturn new ArrayBuffer(this.valueHex.byteLength);\n\n\t\t//noinspection JSCheckFunctionSignatures\n\t\treturn this.valueHex.slice(0);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.blockName = this.constructor.blockName();\n\t\tobject.isHexOnly = this.isHexOnly;\n\t\tobject.valueHex = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n};\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of identification block class\n//**************************************************************************************\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalBaseBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {Object} [idBlock]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper();\n\n\t\tif(ID_BLOCK in parameters)\n\t\t{\n\t\t\t//#region Properties from hexBlock class\n\t\t\tthis.isHexOnly = getParametersValue(parameters.idBlock, IS_HEX_ONLY, false);\n\t\t\tthis.valueHex = getParametersValue(parameters.idBlock, VALUE_HEX, EMPTY_BUFFER);\n\t\t\t//#endregion\n\n\t\t\tthis.tagClass = getParametersValue(parameters.idBlock, TAG_CLASS, (-1));\n\t\t\tthis.tagNumber = getParametersValue(parameters.idBlock, TAG_NUMBER, (-1));\n\t\t\tthis.isConstructed = getParametersValue(parameters.idBlock, IS_CONSTRUCTED, false);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.tagClass = (-1);\n\t\t\tthis.tagNumber = (-1);\n\t\t\tthis.isConstructed = false;\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"identificationBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\t//#region Initial variables\n\t\tlet firstOctet = 0;\n\t\tlet retBuf;\n\t\tlet retView;\n\t\t//#endregion\n\n\t\tswitch(this.tagClass)\n\t\t{\n\t\t\tcase 1:\n\t\t\t\tfirstOctet |= 0x00; // UNIVERSAL\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tfirstOctet |= 0x40; // APPLICATION\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tfirstOctet |= 0x80; // CONTEXT-SPECIFIC\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tfirstOctet |= 0xC0; // PRIVATE\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.error = \"Unknown tag class\";\n\t\t\t\treturn (EMPTY_BUFFER);\n\t\t}\n\n\t\tif(this.isConstructed)\n\t\t\tfirstOctet |= 0x20;\n\n\t\tif((this.tagNumber < 31) && (!this.isHexOnly))\n\t\t{\n\t\t\tretBuf = new ArrayBuffer(1);\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tif(!sizeOnly)\n\t\t\t{\n\t\t\t\tlet number = this.tagNumber;\n\t\t\t\tnumber &= 0x1F;\n\t\t\t\tfirstOctet |= number;\n\n\t\t\t\tretView[0] = firstOctet;\n\t\t\t}\n\n\t\t\treturn retBuf;\n\t\t}\n\n\t\tif(this.isHexOnly === false)\n\t\t{\n\t\t\tconst encodedBuf = utilToBase(this.tagNumber, 7);\n\t\t\tconst encodedView = new Uint8Array(encodedBuf);\n\t\t\tconst size = encodedBuf.byteLength;\n\n\t\t\tretBuf = new ArrayBuffer(size + 1);\n\t\t\tretView = new Uint8Array(retBuf);\n\t\t\tretView[0] = (firstOctet | 0x1F);\n\n\t\t\tif(!sizeOnly)\n\t\t\t{\n\t\t\t\tfor(let i = 0; i < (size - 1); i++)\n\t\t\t\t\tretView[i + 1] = encodedView[i] | 0x80;\n\n\t\t\t\tretView[size] = encodedView[size - 1];\n\t\t\t}\n\n\t\t\treturn retBuf;\n\t\t}\n\n\t\tretBuf = new ArrayBuffer(this.valueHex.byteLength + 1);\n\t\tretView = new Uint8Array(retBuf);\n\n\t\tretView[0] = (firstOctet | 0x1F);\n\n\t\tif(sizeOnly === false)\n\t\t{\n\t\t\tconst curView = new Uint8Array(this.valueHex);\n\n\t\t\tfor(let i = 0; i < (curView.length - 1); i++)\n\t\t\t\tretView[i + 1] = curView[i] | 0x80;\n\n\t\t\tretView[this.valueHex.byteLength] = curView[curView.length - 1];\n\t\t}\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\t//#region Getting Uint8Array from ArrayBuffer\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t\t//#endregion\n\n\t\t//#region Initial checks\n\t\tif(intBuffer.length === 0)\n\t\t{\n\t\t\tthis.error = \"Zero buffer length\";\n\t\t\treturn (-1);\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Find tag class\n\t\tconst tagClassMask = intBuffer[0] & 0xC0;\n\n\t\tswitch(tagClassMask)\n\t\t{\n\t\t\tcase 0x00:\n\t\t\t\tthis.tagClass = (1); // UNIVERSAL\n\t\t\t\tbreak;\n\t\t\tcase 0x40:\n\t\t\t\tthis.tagClass = (2); // APPLICATION\n\t\t\t\tbreak;\n\t\t\tcase 0x80:\n\t\t\t\tthis.tagClass = (3); // CONTEXT-SPECIFIC\n\t\t\t\tbreak;\n\t\t\tcase 0xC0:\n\t\t\t\tthis.tagClass = (4); // PRIVATE\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.error = \"Unknown tag class\";\n\t\t\t\treturn (-1);\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Find it's constructed or not\n\t\tthis.isConstructed = (intBuffer[0] & 0x20) === 0x20;\n\t\t//#endregion\n\n\t\t//#region Find tag number\n\t\tthis.isHexOnly = false;\n\n\t\tconst tagNumberMask = intBuffer[0] & 0x1F;\n\n\t\t//#region Simple case (tag number < 31)\n\t\tif(tagNumberMask !== 0x1F)\n\t\t{\n\t\t\tthis.tagNumber = (tagNumberMask);\n\t\t\tthis.blockLength = 1;\n\t\t}\n\t\t//#endregion\n\t\t//#region Tag number bigger or equal to 31\n\t\telse\n\t\t{\n\t\t\tlet count = 1;\n\n\t\t\tthis.valueHex = new ArrayBuffer(255);\n\t\t\tlet tagNumberBufferMaxLength = 255;\n\t\t\tlet intTagNumberBuffer = new Uint8Array(this.valueHex);\n\n\t\t\t//noinspection JSBitwiseOperatorUsage\n\t\t\twhile(intBuffer[count] & 0x80)\n\t\t\t{\n\t\t\t\tintTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\n\t\t\t\tcount++;\n\n\t\t\t\tif(count >= intBuffer.length)\n\t\t\t\t{\n\t\t\t\t\tthis.error = \"End of input reached before message was fully decoded\";\n\t\t\t\t\treturn (-1);\n\t\t\t\t}\n\n\t\t\t\t//#region In case if tag number length is greater than 255 bytes (rare but possible case)\n\t\t\t\tif(count === tagNumberBufferMaxLength)\n\t\t\t\t{\n\t\t\t\t\ttagNumberBufferMaxLength += 255;\n\n\t\t\t\t\tconst tempBuffer = new ArrayBuffer(tagNumberBufferMaxLength);\n\t\t\t\t\tconst tempBufferView = new Uint8Array(tempBuffer);\n\n\t\t\t\t\tfor(let i = 0; i < intTagNumberBuffer.length; i++)\n\t\t\t\t\t\ttempBufferView[i] = intTagNumberBuffer[i];\n\n\t\t\t\t\tthis.valueHex = new ArrayBuffer(tagNumberBufferMaxLength);\n\t\t\t\t\tintTagNumberBuffer = new Uint8Array(this.valueHex);\n\t\t\t\t}\n\t\t\t\t//#endregion\n\t\t\t}\n\n\t\t\tthis.blockLength = (count + 1);\n\t\t\tintTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F; // Write last byte to buffer\n\n\t\t\t//#region Cut buffer\n\t\t\tconst tempBuffer = new ArrayBuffer(count);\n\t\t\tconst tempBufferView = new Uint8Array(tempBuffer);\n\n\t\t\tfor(let i = 0; i < count; i++)\n\t\t\t\ttempBufferView[i] = intTagNumberBuffer[i];\n\n\t\t\tthis.valueHex = new ArrayBuffer(count);\n\t\t\tintTagNumberBuffer = new Uint8Array(this.valueHex);\n\t\t\tintTagNumberBuffer.set(tempBufferView);\n\t\t\t//#endregion\n\n\t\t\t//#region Try to convert long tag number to short form\n\t\t\tif(this.blockLength <= 9)\n\t\t\t\tthis.tagNumber = utilFromBase(intTagNumberBuffer, 7);\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.isHexOnly = true;\n\t\t\t\tthis.warnings.push(\"Tag too long, represented as hex-coded\");\n\t\t\t}\n\t\t\t//#endregion\n\t\t}\n\t\t//#endregion\n\t\t//#endregion\n\n\t\t//#region Check if constructed encoding was using for primitive type\n\t\tif(((this.tagClass === 1)) &&\n\t\t\t(this.isConstructed))\n\t\t{\n\t\t\tswitch(this.tagNumber)\n\t\t\t{\n\t\t\t\tcase 1: // Boolean\n\t\t\t\tcase 2: // REAL\n\t\t\t\tcase 5: // Null\n\t\t\t\tcase 6: // OBJECT IDENTIFIER\n\t\t\t\tcase 9: // REAL\n\t\t\t\tcase 13: // RELATIVE OBJECT IDENTIFIER\n\t\t\t\tcase 14: // Time\n\t\t\t\tcase 23:\n\t\t\t\tcase 24:\n\t\t\t\tcase 31:\n\t\t\t\tcase 32:\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.error = \"Constructed encoding used for primitive type\";\n\t\t\t\t\treturn (-1);\n\t\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\t//#endregion\n\n\t\treturn (inputOffset + this.blockLength); // Return current offset in input buffer\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName: string,\n\t * tagClass: number,\n\t * tagNumber: number,\n\t * isConstructed: boolean,\n\t * isHexOnly: boolean,\n\t * valueHex: ArrayBuffer,\n\t * blockLength: number,\n\t * error: string, warnings: Array.,\n\t * valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.blockName = this.constructor.blockName();\n\t\tobject.tagClass = this.tagClass;\n\t\tobject.tagNumber = this.tagNumber;\n\t\tobject.isConstructed = this.isConstructed;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of length block class\n//**************************************************************************************\nclass LocalLengthBlock extends LocalBaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalLengthBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {Object} [lenBlock]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper();\n\n\t\tif(LEN_BLOCK in parameters)\n\t\t{\n\t\t\tthis.isIndefiniteForm = getParametersValue(parameters.lenBlock, IS_INDEFINITE_FORM, false);\n\t\t\tthis.longFormUsed = getParametersValue(parameters.lenBlock, LONG_FORM_USED, false);\n\t\t\tthis.length = getParametersValue(parameters.lenBlock, LENGTH, 0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.isIndefiniteForm = false;\n\t\t\tthis.longFormUsed = false;\n\t\t\tthis.length = 0;\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"lengthBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\t//#region Getting Uint8Array from ArrayBuffer\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t\t//#endregion\n\n\t\t//#region Initial checks\n\t\tif(intBuffer.length === 0)\n\t\t{\n\t\t\tthis.error = \"Zero buffer length\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\tif(intBuffer[0] === 0xFF)\n\t\t{\n\t\t\tthis.error = \"Length block 0xFF is reserved by standard\";\n\t\t\treturn (-1);\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Check for length form type\n\t\tthis.isIndefiniteForm = intBuffer[0] === 0x80;\n\t\t//#endregion\n\n\t\t//#region Stop working in case of indefinite length form\n\t\tif(this.isIndefiniteForm === true)\n\t\t{\n\t\t\tthis.blockLength = 1;\n\t\t\treturn (inputOffset + this.blockLength);\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Check is long form of length encoding using\n\t\tthis.longFormUsed = !!(intBuffer[0] & 0x80);\n\t\t//#endregion\n\n\t\t//#region Stop working in case of short form of length value\n\t\tif(this.longFormUsed === false)\n\t\t{\n\t\t\tthis.length = (intBuffer[0]);\n\t\t\tthis.blockLength = 1;\n\t\t\treturn (inputOffset + this.blockLength);\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Calculate length value in case of long form\n\t\tconst count = intBuffer[0] & 0x7F;\n\n\t\tif(count > 8) // Too big length value\n\t\t{\n\t\t\tthis.error = \"Too big integer\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\tif((count + 1) > intBuffer.length)\n\t\t{\n\t\t\tthis.error = \"End of input reached before message was fully decoded\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\tconst lengthBufferView = new Uint8Array(count);\n\n\t\tfor(let i = 0; i < count; i++)\n\t\t\tlengthBufferView[i] = intBuffer[i + 1];\n\n\t\tif(lengthBufferView[count - 1] === 0x00)\n\t\t\tthis.warnings.push(\"Needlessly long encoded length\");\n\n\t\tthis.length = utilFromBase(lengthBufferView, 8);\n\n\t\tif(this.longFormUsed && (this.length <= 127))\n\t\t\tthis.warnings.push(\"Unnecessary usage of long length form\");\n\n\t\tthis.blockLength = count + 1;\n\t\t//#endregion\n\n\t\treturn (inputOffset + this.blockLength); // Return current offset in input buffer\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\t//#region Initial variables\n\t\tlet retBuf;\n\t\tlet retView;\n\t\t//#endregion\n\n\t\tif(this.length > 127)\n\t\t\tthis.longFormUsed = true;\n\n\t\tif(this.isIndefiniteForm)\n\t\t{\n\t\t\tretBuf = new ArrayBuffer(1);\n\n\t\t\tif(sizeOnly === false)\n\t\t\t{\n\t\t\t\tretView = new Uint8Array(retBuf);\n\t\t\t\tretView[0] = 0x80;\n\t\t\t}\n\n\t\t\treturn retBuf;\n\t\t}\n\n\t\tif(this.longFormUsed === true)\n\t\t{\n\t\t\tconst encodedBuf = utilToBase(this.length, 8);\n\n\t\t\tif(encodedBuf.byteLength > 127)\n\t\t\t{\n\t\t\t\tthis.error = \"Too big length\";\n\t\t\t\treturn (EMPTY_BUFFER);\n\t\t\t}\n\n\t\t\tretBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\n\n\t\t\tif(sizeOnly === true)\n\t\t\t\treturn retBuf;\n\n\t\t\tconst encodedView = new Uint8Array(encodedBuf);\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tretView[0] = encodedBuf.byteLength | 0x80;\n\n\t\t\tfor(let i = 0; i < encodedBuf.byteLength; i++)\n\t\t\t\tretView[i + 1] = encodedView[i];\n\n\t\t\treturn retBuf;\n\t\t}\n\n\t\tretBuf = new ArrayBuffer(1);\n\n\t\tif(sizeOnly === false)\n\t\t{\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tretView[0] = this.length;\n\t\t}\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName, blockLength, error, warnings, valueBeforeDecode}|{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.blockName = this.constructor.blockName();\n\t\tobject.isIndefiniteForm = this.isIndefiniteForm;\n\t\tobject.longFormUsed = this.longFormUsed;\n\t\tobject.length = this.length;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of value block class\n//**************************************************************************************\nexport class ValueBlock extends LocalBaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"ValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"valueBlock\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols,JSUnusedLocalSymbols,JSUnusedLocalSymbols\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Throw an exception for a function which needs to be specified in extended classes\n\t\tthrow TypeError(\"User need to make a specific function in a class which extends \\\"ValueBlock\\\"\");\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\t//#region Throw an exception for a function which needs to be specified in extended classes\n\t\tthrow TypeError(\"User need to make a specific function in a class which extends \\\"ValueBlock\\\"\");\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of basic ASN.1 block class\n//**************************************************************************************\nexport class BaseBlock extends LocalBaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"BaseBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {Object} [primitiveSchema]\n\t * @property {string} [name]\n\t * @property {boolean} [optional]\n\t * @param valueBlockType Type of value block\n\t */\n\tconstructor(parameters = {}, valueBlockType = ValueBlock)\n\t{\n\t\tsuper(parameters);\n\n\t\tif(NAME in parameters)\n\t\t\tthis.name = parameters.name;\n\t\tif(OPTIONAL in parameters)\n\t\t\tthis.optional = parameters.optional;\n\t\tif(PRIMITIVE_SCHEMA in parameters)\n\t\t\tthis.primitiveSchema = parameters.primitiveSchema;\n\n\t\tthis.idBlock = new LocalIdentificationBlock(parameters);\n\t\tthis.lenBlock = new LocalLengthBlock(parameters);\n\t\tthis.valueBlock = new valueBlockType(parameters);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BaseBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false, writer)\n\t{\n\t\tconst _writer = writer || new ViewWriter();\n\n\t\tif(!writer)\n\t\t{\n\t\t\tprepareIndefiniteForm(this);\n\t\t}\n\n\t\tconst idBlockBuf = this.idBlock.toBER(sizeOnly);\n\n\t\t_writer.write(idBlockBuf);\n\n\t\tif(this.lenBlock.isIndefiniteForm)\n\t\t{\n\t\t\t_writer.write(new Uint8Array([0x80]).buffer);\n\n\t\t\tthis.valueBlock.toBER(sizeOnly, _writer);\n\n\t\t\t_writer.write(new ArrayBuffer(2));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst valueBlockSizeBuf = this.valueBlock.toBER(true);\n\t\t\tthis.lenBlock.length = valueBlockSizeBuf.byteLength;\n\t\t\tconst lenBlockBuf = this.lenBlock.toBER(sizeOnly);\n\n\t\t\t_writer.write(lenBlockBuf);\n\n\t\t\tconst valueBlockBuf = sizeOnly\n\t\t\t\t? new ArrayBuffer(this.lenBlock.length)\n\t\t\t\t: this.valueBlock.toBER(sizeOnly);\n\n\t\t\t_writer.write(valueBlockBuf, _writer);\n\t\t}\n\n\t\tif(!writer)\n\t\t{\n\t\t\treturn _writer.final();\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName, blockLength, error, warnings, valueBeforeDecode}|{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.idBlock = this.idBlock.toJSON();\n\t\tobject.lenBlock = this.lenBlock.toJSON();\n\t\tobject.valueBlock = this.valueBlock.toJSON();\n\n\t\tif(NAME in this)\n\t\t\tobject.name = this.name;\n\t\tif(OPTIONAL in this)\n\t\t\tobject.optional = this.optional;\n\t\tif(PRIMITIVE_SCHEMA in this)\n\t\t\tobject.primitiveSchema = this.primitiveSchema.toJSON();\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${bufferToHexCodes(this.valueBlock.valueHex)}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of basic block for all PRIMITIVE types\n//**************************************************************************************\nclass LocalPrimitiveValueBlock extends ValueBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalPrimitiveValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueBeforeDecode]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\t//#region Variables from \"hexBlock\" class\n\t\tif(VALUE_HEX in parameters)\n\t\t\tthis.valueHex = parameters.valueHex.slice(0);\n\t\telse\n\t\t\tthis.valueHex = EMPTY_BUFFER;\n\n\t\tthis.isHexOnly = getParametersValue(parameters, IS_HEX_ONLY, true);\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\t//#region Getting Uint8Array from ArrayBuffer\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t\t//#endregion\n\n\t\t//#region Initial checks\n\t\tif(intBuffer.length === 0)\n\t\t{\n\t\t\tthis.warnings.push(\"Zero buffer length\");\n\t\t\treturn inputOffset;\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Copy input buffer into internal buffer\n\t\tthis.valueHex = new ArrayBuffer(intBuffer.length);\n\t\tconst valueHexView = new Uint8Array(this.valueHex);\n\n\t\tfor(let i = 0; i < intBuffer.length; i++)\n\t\t\tvalueHexView[i] = intBuffer[i];\n\t\t//#endregion\n\n\t\tthis.blockLength = inputLength;\n\n\t\treturn (inputOffset + inputLength);\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\treturn this.valueHex.slice(0);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"PrimitiveValueBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName, blockLength, error, warnings, valueBeforeDecode}|{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.valueHex = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\t\tobject.isHexOnly = this.isHexOnly;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class Primitive extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Primitive\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalPrimitiveValueBlock);\n\n\t\tthis.idBlock.isConstructed = false;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"PRIMITIVE\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of basic block for all CONSTRUCTED types\n//**************************************************************************************\nclass LocalConstructedValueBlock extends ValueBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalConstructedValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.value = getParametersValue(parameters, VALUE, []);\n\t\tthis.isIndefiniteForm = getParametersValue(parameters, IS_INDEFINITE_FORM, false);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Store initial offset and length\n\t\tconst initialOffset = inputOffset;\n\t\tconst initialLength = inputLength;\n\t\t//#endregion\n\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\t//#region Getting Uint8Array from ArrayBuffer\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t\t//#endregion\n\n\t\t//#region Initial checks\n\t\tif(intBuffer.length === 0)\n\t\t{\n\t\t\tthis.warnings.push(\"Zero buffer length\");\n\t\t\treturn inputOffset;\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Aux function\n\t\tfunction checkLen(indefiniteLength, length)\n\t\t{\n\t\t\tif(indefiniteLength === true)\n\t\t\t\treturn 1;\n\n\t\t\treturn length;\n\t\t}\n\t\t//#endregion\n\n\t\tlet currentOffset = inputOffset;\n\n\t\twhile(checkLen(this.isIndefiniteForm, inputLength) > 0)\n\t\t{\n\t\t\tconst returnObject = LocalFromBER(inputBuffer, currentOffset, inputLength);\n\t\t\tif(returnObject.offset === (-1))\n\t\t\t{\n\t\t\t\tthis.error = returnObject.result.error;\n\t\t\t\tthis.warnings.concat(returnObject.result.warnings);\n\t\t\t\treturn (-1);\n\t\t\t}\n\n\t\t\tcurrentOffset = returnObject.offset;\n\n\t\t\tthis.blockLength += returnObject.result.blockLength;\n\t\t\tinputLength -= returnObject.result.blockLength;\n\n\t\t\tthis.value.push(returnObject.result);\n\n\t\t\tif((this.isIndefiniteForm === true) && (returnObject.result.constructor.blockName() === EndOfContent.blockName()))\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.isIndefiniteForm === true)\n\t\t{\n\t\t\tif(this.value[this.value.length - 1].constructor.blockName() === EndOfContent.blockName())\n\t\t\t\tthis.value.pop();\n\t\t\telse\n\t\t\t\tthis.warnings.push(\"No EndOfContent block encoded\");\n\t\t}\n\n\t\t//#region Copy \"inputBuffer\" to VALUE_BEFORE_DECODE\n\t\tthis.valueBeforeDecode = inputBuffer.slice(initialOffset, initialOffset + initialLength);\n\t\t//#endregion\n\n\t\treturn currentOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false, writer)\n\t{\n\t\tconst _writer = writer || new ViewWriter();\n\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t{\n\t\t\tthis.value[i].toBER(sizeOnly, _writer);\n\t\t}\n\n\t\tif(!writer)\n\t\t{\n\t\t\treturn _writer.final();\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"ConstructedValueBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName, blockLength, error, warnings, valueBeforeDecode}|{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.isIndefiniteForm = this.isIndefiniteForm;\n\t\tobject.value = [];\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t\tobject.value.push(this.value[i].toJSON());\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class Constructed extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Constructed\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalConstructedValueBlock);\n\n\t\tthis.idBlock.isConstructed = true;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"CONSTRUCTED\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tthis.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\tconst values = [];\n\t\tfor(const value of this.valueBlock.value)\n\t\t{\n\t\t\tvalues.push(value.toString().split(\"\\n\").map(o => ` ${o}`).join(\"\\n\"));\n\t\t}\n\t\tconst blockName = this.idBlock.tagClass === 3\n\t\t\t? `[${this.idBlock.tagNumber}]`\n\t\t\t: this.constructor.blockName();\n\t\treturn values.length\n\t\t\t? `${blockName} :\\n${values.join(\"\\n\")}` // items\n\t\t\t: `${blockName} :`; // empty\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 EndOfContent type class\n//**************************************************************************************\nclass LocalEndOfContentValueBlock extends ValueBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalEndOfContentValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols,JSUnusedLocalSymbols\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number}\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region There is no \"value block\" for EndOfContent type and we need to return the same offset\n\t\treturn inputOffset;\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\treturn EMPTY_BUFFER;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"EndOfContentValueBlock\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class EndOfContent extends BaseBlock\n{\n\t//**********************************************************************************\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalEndOfContentValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 0; // EndOfContent\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"EndOfContent\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 Boolean type class\n//**************************************************************************************\nclass LocalBooleanValueBlock extends ValueBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalBooleanValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.value = getParametersValue(parameters, VALUE, false);\n\t\tthis.isHexOnly = getParametersValue(parameters, IS_HEX_ONLY, false);\n\n\t\tif(VALUE_HEX in parameters)\n\t\t\tthis.valueHex = parameters.valueHex.slice(0);\n\t\telse\n\t\t{\n\t\t\tthis.valueHex = new ArrayBuffer(1);\n\t\t\tif(this.value === true)\n\t\t\t{\n\t\t\t\tconst view = new Uint8Array(this.valueHex);\n\t\t\t\tview[0] = 0xFF;\n\t\t\t}\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\t//#region Getting Uint8Array from ArrayBuffer\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t\t//#endregion\n\n\t\tif(inputLength > 1)\n\t\t\tthis.warnings.push(\"Boolean value encoded in more then 1 octet\");\n\n\t\tthis.isHexOnly = true;\n\n\t\t//#region Copy input buffer to internal array\n\t\tthis.valueHex = new ArrayBuffer(intBuffer.length);\n\t\tconst view = new Uint8Array(this.valueHex);\n\n\t\tfor(let i = 0; i < intBuffer.length; i++)\n\t\t\tview[i] = intBuffer[i];\n\t\t//#endregion\n\n\t\tif(utilDecodeTC.call(this) !== 0)\n\t\t\tthis.value = true;\n\t\telse\n\t\t\tthis.value = false;\n\n\t\tthis.blockLength = inputLength;\n\n\t\treturn (inputOffset + inputLength);\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\treturn this.valueHex;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BooleanValueBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName, blockLength, error, warnings, valueBeforeDecode}|{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.value;\n\t\tobject.isHexOnly = this.isHexOnly;\n\t\tobject.valueHex = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class Boolean extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Boolean\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalBooleanValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 1; // Boolean\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BOOLEAN\";\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${this.valueBlock.value}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 Sequence and Set type classes\n//**************************************************************************************\nexport class Sequence extends Constructed\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Sequence\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 16; // Sequence\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"SEQUENCE\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class Set extends Constructed\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Set\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 17; // Set\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"SET\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 Null type class\n//**************************************************************************************\nexport class Null extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Null\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalBaseBlock); // We will not have a call to \"Null value block\" because of specified FROM_BER and TO_BER functions\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 5; // Null\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"NULL\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedLocalSymbols\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tif(this.lenBlock.length > 0)\n\t\t\tthis.warnings.push(\"Non-zero length of value block for Null type\");\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tthis.blockLength += inputLength;\n\n\t\tif((inputOffset + inputLength) > inputBuffer.byteLength)\n\t\t{\n\t\t\tthis.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\treturn (inputOffset + inputLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false, writer)\n\t{\n\t\tconst retBuf = new ArrayBuffer(2);\n\n\t\tif(!sizeOnly)\n\t\t{\n\t\t\tconst retView = new Uint8Array(retBuf);\n\t\t\tretView[0] = 0x05;\n\t\t\tretView[1] = 0x00;\n\t\t}\n\n\t\tif(writer)\n\t\t{\n\t\t\twriter.write(retBuf);\n\t\t}\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 OctetString type class\n//**************************************************************************************\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalOctetStringValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.isConstructed = getParametersValue(parameters, IS_CONSTRUCTED, false);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tlet resultOffset = 0;\n\n\t\tif(this.isConstructed === true)\n\t\t{\n\t\t\tthis.isHexOnly = false;\n\n\t\t\tresultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\n\t\t\tif(resultOffset === (-1))\n\t\t\t\treturn resultOffset;\n\n\t\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t\t{\n\t\t\t\tconst currentBlockName = this.value[i].constructor.blockName();\n\n\t\t\t\tif(currentBlockName === EndOfContent.blockName())\n\t\t\t\t{\n\t\t\t\t\tif(this.isIndefiniteForm === true)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\n\t\t\t\t\t\treturn (-1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(currentBlockName !== OctetString.blockName())\n\t\t\t\t{\n\t\t\t\t\tthis.error = \"OCTET STRING may consists of OCTET STRINGs only\";\n\t\t\t\t\treturn (-1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.isHexOnly = true;\n\n\t\t\tresultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\n\t\t\tthis.blockLength = inputLength;\n\t\t}\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false, writer)\n\t{\n\t\tif(this.isConstructed === true)\n\t\t\treturn LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\n\n\t\tlet retBuf = new ArrayBuffer(this.valueHex.byteLength);\n\n\t\tif(sizeOnly === true)\n\t\t\treturn retBuf;\n\n\t\tif(this.valueHex.byteLength === 0)\n\t\t\treturn retBuf;\n\n\t\tretBuf = this.valueHex.slice(0);\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"OctetStringValueBlock\";\n\t}\n\t//**********************************************************************************\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.isConstructed = this.isConstructed;\n\t\tobject.isHexOnly = this.isHexOnly;\n\t\tobject.valueHex = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class OctetString extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"OctetString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalOctetStringValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 4; // OctetString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tthis.valueBlock.isConstructed = this.idBlock.isConstructed;\n\t\tthis.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n\n\t\t//#region Ability to encode empty OCTET STRING\n\t\tif(inputLength === 0)\n\t\t{\n\t\t\tif(this.idBlock.error.length === 0)\n\t\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\t\tif(this.lenBlock.error.length === 0)\n\t\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\t\treturn inputOffset;\n\t\t}\n\t\t//#endregion\n\n\t\tif(!this.valueBlock.isConstructed)\n\t\t{\n\t\t\tconst buf = inputBuffer.slice(inputOffset, inputOffset + inputLength);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tconst asn = fromBER(buf);\n\t\t\t\tif(asn.offset !== -1 && asn.offset === inputLength)\n\t\t\t\t{\n\t\t\t\t\tthis.valueBlock.value = [asn.result];\n\t\t\t\t}\n\t\t\t} catch(e)\n\t\t\t{\n\t\t\t\t// nothing\n\t\t\t}\n\t\t}\n\n\t\treturn super.fromBER(inputBuffer, inputOffset, inputLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"OCTET STRING\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Checking that two OCTETSTRINGs are equal\n\t * @param {OctetString} octetString\n\t */\n\tisEqual(octetString)\n\t{\n\t\t//#region Check input type\n\t\tif((octetString instanceof OctetString) === false)\n\t\t\treturn false;\n\t\t//#endregion\n\n\t\t//#region Compare two JSON strings\n\t\tif(JSON.stringify(this) !== JSON.stringify(octetString))\n\t\t\treturn false;\n\t\t//#endregion\n\n\t\treturn true;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\tif(this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length))\n\t\t{\n\t\t\treturn Constructed.prototype.toString.call(this);\n\t\t} else\n\t\t{\n\t\t\treturn `${this.constructor.blockName()} : ${bufferToHexCodes(this.valueBlock.valueHex)}`;\n\t\t}\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 BitString type class\n//**************************************************************************************\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalBitStringValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.unusedBits = getParametersValue(parameters, UNUSED_BITS, 0);\n\t\tthis.isConstructed = getParametersValue(parameters, IS_CONSTRUCTED, false);\n\t\tthis.blockLength = this.valueHex.byteLength;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Ability to decode zero-length BitString value\n\t\tif(inputLength === 0)\n\t\t\treturn inputOffset;\n\t\t//#endregion\n\n\t\tlet resultOffset = (-1);\n\n\t\t//#region If the BISTRING supposed to be a constructed value\n\t\tif(this.isConstructed === true)\n\t\t{\n\t\t\tresultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\n\t\t\tif(resultOffset === (-1))\n\t\t\t\treturn resultOffset;\n\n\t\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t\t{\n\t\t\t\tconst currentBlockName = this.value[i].constructor.blockName();\n\n\t\t\t\tif(currentBlockName === EndOfContent.blockName())\n\t\t\t\t{\n\t\t\t\t\tif(this.isIndefiniteForm === true)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\n\t\t\t\t\t\treturn (-1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(currentBlockName !== BitString.blockName())\n\t\t\t\t{\n\t\t\t\t\tthis.error = \"BIT STRING may consists of BIT STRINGs only\";\n\t\t\t\t\treturn (-1);\n\t\t\t\t}\n\n\t\t\t\tif((this.unusedBits > 0) && (this.value[i].valueBlock.unusedBits > 0))\n\t\t\t\t{\n\t\t\t\t\tthis.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\n\t\t\t\t\treturn (-1);\n\t\t\t\t}\n\n\t\t\t\tthis.unusedBits = this.value[i].valueBlock.unusedBits;\n\t\t\t\tif(this.unusedBits > 7)\n\t\t\t\t{\n\t\t\t\t\tthis.error = \"Unused bits for BitString must be in range 0-7\";\n\t\t\t\t\treturn (-1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn resultOffset;\n\t\t}\n\t\t//#endregion\n\t\t//#region If the BitString supposed to be a primitive value\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\n\t\tthis.unusedBits = intBuffer[0];\n\n\t\tif(this.unusedBits > 7)\n\t\t{\n\t\t\tthis.error = \"Unused bits for BitString must be in range 0-7\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\tif(!this.unusedBits)\n\t\t{\n\t\t\tconst buf = inputBuffer.slice(inputOffset + 1, inputOffset + inputLength);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tconst asn = fromBER(buf);\n\t\t\t\tif(asn.offset !== -1 && asn.offset === (inputLength - 1))\n\t\t\t\t{\n\t\t\t\t\tthis.value = [asn.result];\n\t\t\t\t}\n\t\t\t} catch(e)\n\t\t\t{\n\t\t\t\t// nothing\n\t\t\t}\n\t\t}\n\n\t\t//#region Copy input buffer to internal buffer\n\t\tthis.valueHex = new ArrayBuffer(intBuffer.length - 1);\n\t\tconst view = new Uint8Array(this.valueHex);\n\t\tfor(let i = 0; i < (inputLength - 1); i++)\n\t\t\tview[i] = intBuffer[i + 1];\n\t\t//#endregion\n\n\t\tthis.blockLength = intBuffer.length;\n\n\t\treturn (inputOffset + inputLength);\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false, writer)\n\t{\n\t\tif(this.isConstructed === true)\n\t\t\treturn LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\n\n\t\tif(sizeOnly === true)\n\t\t\treturn (new ArrayBuffer(this.valueHex.byteLength + 1));\n\n\t\tif(this.valueHex.byteLength === 0)\n\t\t\treturn (EMPTY_BUFFER);\n\n\t\tconst curView = new Uint8Array(this.valueHex);\n\n\t\tconst retBuf = new ArrayBuffer(this.valueHex.byteLength + 1);\n\t\tconst retView = new Uint8Array(retBuf);\n\n\t\tretView[0] = this.unusedBits;\n\n\t\tfor(let i = 0; i < this.valueHex.byteLength; i++)\n\t\t\tretView[i + 1] = curView[i];\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BitStringValueBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {{blockName, blockLength, error, warnings, valueBeforeDecode}|{blockName: string, blockLength: number, error: string, warnings: Array., valueBeforeDecode: string}}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.unusedBits = this.unusedBits;\n\t\tobject.isConstructed = this.isConstructed;\n\t\tobject.isHexOnly = this.isHexOnly;\n\t\tobject.valueHex = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class BitString extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"BitString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalBitStringValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 3; // BitString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BIT STRING\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\t//#region Ability to encode empty BitString\n\t\tif(inputLength === 0)\n\t\t\treturn inputOffset;\n\t\t//#endregion\n\n\t\tthis.valueBlock.isConstructed = this.idBlock.isConstructed;\n\t\tthis.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\n\n\t\treturn super.fromBER(inputBuffer, inputOffset, inputLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Checking that two BITSTRINGs are equal\n\t * @param {BitString} bitString\n\t */\n\tisEqual(bitString)\n\t{\n\t\t//#region Check input type\n\t\tif((bitString instanceof BitString) === false)\n\t\t\treturn false;\n\t\t//#endregion\n\n\t\t//#region Compare two JSON strings\n\t\tif(JSON.stringify(this) !== JSON.stringify(bitString))\n\t\t\treturn false;\n\t\t//#endregion\n\n\t\treturn true;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\tif(this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length))\n\t\t{\n\t\t\treturn Constructed.prototype.toString.call(this);\n\t\t} else\n\t\t{\n\t\t\t// convert bytes to bits\n\t\t\tconst bits = [];\n\t\t\tconst valueHex = new Uint8Array(this.valueBlock.valueHex);\n\t\t\tfor(const byte of valueHex)\n\t\t\t{\n\t\t\t\tbits.push(byte.toString(2).padStart(8, \"0\"));\n\t\t\t}\n\t\t\treturn `${this.constructor.blockName()} : ${bits.join(\"\")}`;\n\t\t}\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 Integer type class\n//**************************************************************************************\n/**\n * @extends ValueBlock\n */\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalIntegerValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tif(VALUE in parameters)\n\t\t\tthis.valueDec = parameters.value;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Setter for VALUE_HEX\n\t * @param {ArrayBuffer} _value\n\t */\n\tset valueHex(_value)\n\t{\n\t\tthis._valueHex = _value.slice(0);\n\n\t\tif(_value.byteLength >= 4)\n\t\t{\n\t\t\tthis.warnings.push(\"Too big Integer for decoding, hex only\");\n\t\t\tthis.isHexOnly = true;\n\t\t\tthis._valueDec = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.isHexOnly = false;\n\n\t\t\tif(_value.byteLength > 0)\n\t\t\t\tthis._valueDec = utilDecodeTC.call(this);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Getter for VALUE_HEX\n\t * @returns {ArrayBuffer}\n\t */\n\tget valueHex()\n\t{\n\t\treturn this._valueHex;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Getter for VALUE_DEC\n\t * @param {number} _value\n\t */\n\tset valueDec(_value)\n\t{\n\t\tthis._valueDec = _value;\n\n\t\tthis.isHexOnly = false;\n\t\tthis._valueHex = utilEncodeTC(_value);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Getter for VALUE_DEC\n\t * @returns {number}\n\t */\n\tget valueDec()\n\t{\n\t\treturn this._valueDec;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from DER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 DER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 DER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @param {number} [expectedLength=0] Expected length of converted VALUE_HEX buffer\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0)\n\t{\n\t\tconst offset = this.fromBER(inputBuffer, inputOffset, inputLength);\n\t\tif(offset === (-1))\n\t\t\treturn offset;\n\n\t\tconst view = new Uint8Array(this._valueHex);\n\n\t\tif((view[0] === 0x00) && ((view[1] & 0x80) !== 0))\n\t\t{\n\t\t\tconst updatedValueHex = new ArrayBuffer(this._valueHex.byteLength - 1);\n\t\t\tconst updatedView = new Uint8Array(updatedValueHex);\n\n\t\t\tupdatedView.set(new Uint8Array(this._valueHex, 1, this._valueHex.byteLength - 1));\n\n\t\t\tthis._valueHex = updatedValueHex.slice(0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(expectedLength !== 0)\n\t\t\t{\n\t\t\t\tif(this._valueHex.byteLength < expectedLength)\n\t\t\t\t{\n\t\t\t\t\tif((expectedLength - this._valueHex.byteLength) > 1)\n\t\t\t\t\t\texpectedLength = this._valueHex.byteLength + 1;\n\n\t\t\t\t\tconst updatedValueHex = new ArrayBuffer(expectedLength);\n\t\t\t\t\tconst updatedView = new Uint8Array(updatedValueHex);\n\n\t\t\t\t\tupdatedView.set(view, expectedLength - this._valueHex.byteLength);\n\n\t\t\t\t\tthis._valueHex = updatedValueHex.slice(0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (DER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoDER(sizeOnly = false)\n\t{\n\t\tconst view = new Uint8Array(this._valueHex);\n\n\t\tswitch(true)\n\t\t{\n\t\t\tcase ((view[0] & 0x80) !== 0):\n\t\t\t\t{\n\t\t\t\t\tconst updatedValueHex = new ArrayBuffer(this._valueHex.byteLength + 1);\n\t\t\t\t\tconst updatedView = new Uint8Array(updatedValueHex);\n\n\t\t\t\t\tupdatedView[0] = 0x00;\n\t\t\t\t\tupdatedView.set(view, 1);\n\n\t\t\t\t\tthis._valueHex = updatedValueHex.slice(0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\n\t\t\t\t{\n\t\t\t\t\tconst updatedValueHex = new ArrayBuffer(this._valueHex.byteLength - 1);\n\t\t\t\t\tconst updatedView = new Uint8Array(updatedValueHex);\n\n\t\t\t\t\tupdatedView.set(new Uint8Array(this._valueHex, 1, this._valueHex.byteLength - 1));\n\n\t\t\t\t\tthis._valueHex = updatedValueHex.slice(0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\n\t\treturn this.toBER(sizeOnly);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\n\t\tif(resultOffset === (-1))\n\t\t\treturn resultOffset;\n\n\t\tthis.blockLength = inputLength;\n\n\t\treturn (inputOffset + inputLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\t//noinspection JSCheckFunctionSignatures\n\t\treturn this.valueHex.slice(0);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"IntegerValueBlock\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.valueDec = this.valueDec;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current value to decimal string representation\n\t */\n\ttoString()\n\t{\n\t\t//#region Aux functions\n\t\tfunction viewAdd(first, second)\n\t\t{\n\t\t\t//#region Initial variables\n\t\t\tconst c = new Uint8Array([0]);\n\n\t\t\tlet firstView = new Uint8Array(first);\n\t\t\tlet secondView = new Uint8Array(second);\n\n\t\t\tlet firstViewCopy = firstView.slice(0);\n\t\t\tconst firstViewCopyLength = firstViewCopy.length - 1;\n\t\t\tlet secondViewCopy = secondView.slice(0);\n\t\t\tconst secondViewCopyLength = secondViewCopy.length - 1;\n\n\t\t\tlet value = 0;\n\n\t\t\tconst max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\n\n\t\t\tlet counter = 0;\n\t\t\t//#endregion\n\n\t\t\tfor(let i = max; i >= 0; i--, counter++)\n\t\t\t{\n\t\t\t\tswitch(true)\n\t\t\t\t{\n\t\t\t\t\tcase (counter < secondViewCopy.length):\n\t\t\t\t\t\tvalue = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = firstViewCopy[firstViewCopyLength - counter] + c[0];\n\t\t\t\t}\n\n\t\t\t\tc[0] = value / 10;\n\n\t\t\t\tswitch(true)\n\t\t\t\t{\n\t\t\t\t\tcase (counter >= firstViewCopy.length):\n\t\t\t\t\t\tfirstViewCopy = utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfirstViewCopy[firstViewCopyLength - counter] = value % 10;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(c[0] > 0)\n\t\t\t\tfirstViewCopy = utilConcatView(c, firstViewCopy);\n\n\t\t\treturn firstViewCopy.slice(0);\n\t\t}\n\n\t\tfunction power2(n)\n\t\t{\n\t\t\tif(n >= powers2.length)\n\t\t\t{\n\t\t\t\tfor(let p = powers2.length; p <= n; p++)\n\t\t\t\t{\n\t\t\t\t\tconst c = new Uint8Array([0]);\n\t\t\t\t\tlet digits = (powers2[p - 1]).slice(0);\n\n\t\t\t\t\tfor(let i = (digits.length - 1); i >= 0; i--)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\n\t\t\t\t\t\tc[0] = newValue[0] / 10;\n\t\t\t\t\t\tdigits[i] = newValue[0] % 10;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(c[0] > 0)\n\t\t\t\t\t\tdigits = utilConcatView(c, digits);\n\n\t\t\t\t\tpowers2.push(digits);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn powers2[n];\n\t\t}\n\n\t\tfunction viewSub(first, second)\n\t\t{\n\t\t\t//#region Initial variables\n\t\t\tlet b = 0;\n\n\t\t\tlet firstView = new Uint8Array(first);\n\t\t\tlet secondView = new Uint8Array(second);\n\n\t\t\tlet firstViewCopy = firstView.slice(0);\n\t\t\tconst firstViewCopyLength = firstViewCopy.length - 1;\n\t\t\tlet secondViewCopy = secondView.slice(0);\n\t\t\tconst secondViewCopyLength = secondViewCopy.length - 1;\n\n\t\t\tlet value;\n\n\t\t\tlet counter = 0;\n\t\t\t//#endregion\n\n\t\t\tfor(let i = secondViewCopyLength; i >= 0; i--, counter++)\n\t\t\t{\n\t\t\t\tvalue = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\n\n\t\t\t\tswitch(true)\n\t\t\t\t{\n\t\t\t\t\tcase (value < 0):\n\t\t\t\t\t\tb = 1;\n\t\t\t\t\t\tfirstViewCopy[firstViewCopyLength - counter] = value + 10;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tb = 0;\n\t\t\t\t\t\tfirstViewCopy[firstViewCopyLength - counter] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(b > 0)\n\t\t\t{\n\t\t\t\tfor(let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++)\n\t\t\t\t{\n\t\t\t\t\tvalue = firstViewCopy[firstViewCopyLength - counter] - b;\n\n\t\t\t\t\tif(value < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tb = 1;\n\t\t\t\t\t\tfirstViewCopy[firstViewCopyLength - counter] = value + 10;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tb = 0;\n\t\t\t\t\t\tfirstViewCopy[firstViewCopyLength - counter] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn firstViewCopy.slice();\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Initial variables\n\t\tconst firstBit = (this._valueHex.byteLength * 8) - 1;\n\n\t\tlet digits = new Uint8Array((this._valueHex.byteLength * 8) / 3);\n\t\tlet bitNumber = 0;\n\t\tlet currentByte;\n\n\t\tconst asn1View = new Uint8Array(this._valueHex);\n\n\t\tlet result = \"\";\n\n\t\tlet flag = false;\n\t\t//#endregion\n\n\t\t//#region Calculate number\n\t\tfor(let byteNumber = (this._valueHex.byteLength - 1); byteNumber >= 0; byteNumber--)\n\t\t{\n\t\t\tcurrentByte = asn1View[byteNumber];\n\n\t\t\tfor(let i = 0; i < 8; i++)\n\t\t\t{\n\t\t\t\tif((currentByte & 1) === 1)\n\t\t\t\t{\n\t\t\t\t\tswitch(bitNumber)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase firstBit:\n\t\t\t\t\t\t\tdigits = viewSub(power2(bitNumber), digits);\n\t\t\t\t\t\t\tresult = \"-\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tdigits = viewAdd(digits, power2(bitNumber));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbitNumber++;\n\t\t\t\tcurrentByte >>= 1;\n\t\t\t}\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Print number\n\t\tfor(let i = 0; i < digits.length; i++)\n\t\t{\n\t\t\tif(digits[i])\n\t\t\t\tflag = true;\n\n\t\t\tif(flag)\n\t\t\t\tresult += digitsString.charAt(digits[i]);\n\t\t}\n\n\t\tif(flag === false)\n\t\t\tresult += digitsString.charAt(0);\n\t\t//#endregion\n\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nexport class Integer extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Integer\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalIntegerValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 2; // Integer\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"INTEGER\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Compare two Integer object, or Integer and ArrayBuffer objects\n\t * @param {!Integer|ArrayBuffer} otherValue\n\t * @returns {boolean}\n\t */\n\tisEqual(otherValue)\n\t{\n\t\tif(otherValue instanceof Integer)\n\t\t{\n\t\t\tif(this.valueBlock.isHexOnly && otherValue.valueBlock.isHexOnly) // Compare two ArrayBuffers\n\t\t\t\treturn isEqualBuffer(this.valueBlock.valueHex, otherValue.valueBlock.valueHex);\n\n\t\t\tif(this.valueBlock.isHexOnly === otherValue.valueBlock.isHexOnly)\n\t\t\t\treturn (this.valueBlock.valueDec === otherValue.valueBlock.valueDec);\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif(otherValue instanceof ArrayBuffer)\n\t\t\treturn isEqualBuffer(this.valueBlock.valueHex, otherValue);\n\n\t\treturn false;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current Integer value from BER into DER format\n\t * @returns {Integer}\n\t */\n\tconvertToDER()\n\t{\n\t\tconst integer = new Integer({ valueHex: this.valueBlock.valueHex });\n\t\tinteger.valueBlock.toDER();\n\n\t\treturn integer;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current Integer value from DER to BER format\n\t * @returns {Integer}\n\t */\n\tconvertFromDER()\n\t{\n\t\tconst expectedLength = (this.valueBlock.valueHex.byteLength % 2) ? (this.valueBlock.valueHex.byteLength + 1) : this.valueBlock.valueHex.byteLength;\n\t\tconst integer = new Integer({ valueHex: this.valueBlock.valueHex });\n\t\tinteger.valueBlock.fromDER(integer.valueBlock.valueHex, 0, integer.valueBlock.valueHex.byteLength, expectedLength);\n\n\t\treturn integer;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\tassertBigInt();\n\t\tconst hex = bufferToHexCodes(this.valueBlock.valueHex);\n\t\tconst bigInt = BigInt(`0x${hex}`);\n\t\treturn `${this.constructor.blockName()} : ${bigInt.toString()}`;\n\t}\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 Enumerated type class\n//**************************************************************************************\nexport class Enumerated extends Integer\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Enumerated\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 10; // Enumerated\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"ENUMERATED\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of ASN.1 ObjectIdentifier type class\n//**************************************************************************************\nclass LocalSidValueBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalSidValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {number} [valueDec]\n\t * @property {boolean} [isFirstSid]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.valueDec = getParametersValue(parameters, VALUE_DEC, -1);\n\t\tthis.isFirstSid = getParametersValue(parameters, IS_FIRST_SID, false);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"sidBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tif(inputLength === 0)\n\t\t\treturn inputOffset;\n\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\n\t\tthis.valueHex = new ArrayBuffer(inputLength);\n\t\tlet view = new Uint8Array(this.valueHex);\n\n\t\tfor(let i = 0; i < inputLength; i++)\n\t\t{\n\t\t\tview[i] = intBuffer[i] & 0x7F;\n\n\t\t\tthis.blockLength++;\n\n\t\t\tif((intBuffer[i] & 0x80) === 0x00)\n\t\t\t\tbreak;\n\t\t}\n\n\t\t//#region Adjust size of valueHex buffer\n\t\tconst tempValueHex = new ArrayBuffer(this.blockLength);\n\t\tconst tempView = new Uint8Array(tempValueHex);\n\n\t\tfor(let i = 0; i < this.blockLength; i++)\n\t\t\ttempView[i] = view[i];\n\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tthis.valueHex = tempValueHex.slice(0);\n\t\tview = new Uint8Array(this.valueHex);\n\t\t//#endregion\n\n\t\tif((intBuffer[this.blockLength - 1] & 0x80) !== 0x00)\n\t\t{\n\t\t\tthis.error = \"End of input reached before message was fully decoded\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\tif(view[0] === 0x00)\n\t\t\tthis.warnings.push(\"Needlessly long format of SID encoding\");\n\n\t\tif(this.blockLength <= 8)\n\t\t\tthis.valueDec = utilFromBase(view, 7);\n\t\telse\n\t\t{\n\t\t\tthis.isHexOnly = true;\n\t\t\tthis.warnings.push(\"Too big SID for decoding, hex only\");\n\t\t}\n\n\t\treturn (inputOffset + this.blockLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Save a BigInt value immediately as an array of octects.\n\t */\n\tset valueBigInt(value)\n\t{\n\n\t\tassertBigInt();\n\n\t\tlet bits = BigInt(value).toString(2);\n\t\twhile(bits.length % 7)\n\t\t{\n\t\t\tbits = \"0\" + bits;\n\t\t}\n\t\tconst bytes = new Uint8Array(bits.length / 7);\n\t\tfor(let i = 0; i < bytes.length; i++)\n\t\t{\n\t\t\tbytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\n\t\t}\n\t\tthis.fromBER(bytes.buffer, 0, bytes.length);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\t//#region Initial variables\n\t\tlet retBuf;\n\t\tlet retView;\n\t\t//#endregion\n\n\t\tif(this.isHexOnly)\n\t\t{\n\t\t\tif(sizeOnly === true)\n\t\t\t\treturn (new ArrayBuffer(this.valueHex.byteLength));\n\n\t\t\tconst curView = new Uint8Array(this.valueHex);\n\n\t\t\tretBuf = new ArrayBuffer(this.blockLength);\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tfor(let i = 0; i < (this.blockLength - 1); i++)\n\t\t\t\tretView[i] = curView[i] | 0x80;\n\n\t\t\tretView[this.blockLength - 1] = curView[this.blockLength - 1];\n\n\t\t\treturn retBuf;\n\t\t}\n\n\t\tconst encodedBuf = utilToBase(this.valueDec, 7);\n\t\tif(encodedBuf.byteLength === 0)\n\t\t{\n\t\t\tthis.error = \"Error during encoding SID value\";\n\t\t\treturn (EMPTY_BUFFER);\n\t\t}\n\n\t\tretBuf = new ArrayBuffer(encodedBuf.byteLength);\n\n\t\tif(sizeOnly === false)\n\t\t{\n\t\t\tconst encodedView = new Uint8Array(encodedBuf);\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tfor(let i = 0; i < (encodedBuf.byteLength - 1); i++)\n\t\t\t\tretView[i] = encodedView[i] | 0x80;\n\n\t\t\tretView[encodedBuf.byteLength - 1] = encodedView[encodedBuf.byteLength - 1];\n\t\t}\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Create string representation of current SID block\n\t * @returns {string}\n\t */\n\ttoString()\n\t{\n\t\tlet result = \"\";\n\n\t\tif(this.isHexOnly === true)\n\t\t\tresult = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\t\telse\n\t\t{\n\t\t\tif(this.isFirstSid)\n\t\t\t{\n\t\t\t\tlet sidValue = this.valueDec;\n\n\t\t\t\tif(this.valueDec <= 39)\n\t\t\t\t\tresult = \"0.\";\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(this.valueDec <= 79)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = \"1.\";\n\t\t\t\t\t\tsidValue -= 40;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = \"2.\";\n\t\t\t\t\t\tsidValue -= 80;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresult += sidValue.toString();\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult = this.valueDec.toString();\n\t\t}\n\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.valueDec = this.valueDec;\n\t\tobject.isFirstSid = this.isFirstSid;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nclass LocalObjectIdentifierValueBlock extends ValueBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalObjectIdentifierValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.fromString(getParametersValue(parameters, VALUE, EMPTY_STRING));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tlet resultOffset = inputOffset;\n\n\t\twhile(inputLength > 0)\n\t\t{\n\t\t\tconst sidBlock = new LocalSidValueBlock();\n\t\t\tresultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\n\t\t\tif(resultOffset === (-1))\n\t\t\t{\n\t\t\t\tthis.blockLength = 0;\n\t\t\t\tthis.error = sidBlock.error;\n\t\t\t\treturn resultOffset;\n\t\t\t}\n\n\t\t\tif(this.value.length === 0)\n\t\t\t\tsidBlock.isFirstSid = true;\n\n\t\t\tthis.blockLength += sidBlock.blockLength;\n\t\t\tinputLength -= sidBlock.blockLength;\n\n\t\t\tthis.value.push(sidBlock);\n\t\t}\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\tconst retBufs = [];\n\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t{\n\t\t\tconst valueBuf = this.value[i].toBER(sizeOnly);\n\t\t\tif(valueBuf.byteLength === 0)\n\t\t\t{\n\t\t\t\tthis.error = this.value[i].error;\n\t\t\t\treturn (EMPTY_BUFFER);\n\t\t\t}\n\n\t\t\tretBufs.push(valueBuf);\n\t\t}\n\n\t\treturn concat(retBufs);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Create \"LocalObjectIdentifierValueBlock\" class from string\n\t * @param {string} string Input string to convert from\n\t * @returns {boolean}\n\t */\n\tfromString(string)\n\t{\n\t\tthis.value = []; // Clear existing SID values\n\n\t\tlet pos1 = 0;\n\t\tlet pos2 = 0;\n\n\t\tlet sid = \"\";\n\n\t\tlet flag = false;\n\n\t\tdo\n\t\t{\n\t\t\tpos2 = string.indexOf(\".\", pos1);\n\t\t\tif(pos2 === (-1))\n\t\t\t\tsid = string.substr(pos1);\n\t\t\telse\n\t\t\t\tsid = string.substr(pos1, pos2 - pos1);\n\n\t\t\tpos1 = pos2 + 1;\n\n\t\t\tif(flag)\n\t\t\t{\n\t\t\t\tconst sidBlock = this.value[0];\n\n\t\t\t\tlet plus = 0;\n\n\t\t\t\tswitch(sidBlock.valueDec)\n\t\t\t\t{\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tplus = 40;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tplus = 80;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.value = []; // clear SID array\n\t\t\t\t\t\treturn false; // ???\n\t\t\t\t}\n\n\t\t\t\tconst parsedSID = parseInt(sid, 10);\n\t\t\t\tif(isNaN(parsedSID))\n\t\t\t\t\treturn true;\n\n\t\t\t\tsidBlock.valueDec = parsedSID + plus;\n\n\t\t\t\tflag = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst sidBlock = new LocalSidValueBlock();\n\t\t\t\tif(sid > Number.MAX_SAFE_INTEGER)\n\t\t\t\t{\n\t\t\t\t\tassertBigInt();\n\t\t\t\t\tconst sidValue = BigInt(sid);\n\t\t\t\t\tsidBlock.valueBigInt = sidValue;\n\t\t\t\t} else\n\t\t\t\t{\n\t\t\t\t\tsidBlock.valueDec = parseInt(sid, 10);\n\t\t\t\t\tif(isNaN(sidBlock.valueDec)) return true;\n\t\t\t\t}\n\n\t\t\t\tif(this.value.length === 0)\n\t\t\t\t{\n\t\t\t\t\tsidBlock.isFirstSid = true;\n\t\t\t\t\tflag = true;\n\t\t\t\t}\n\n\t\t\t\tthis.value.push(sidBlock);\n\t\t\t}\n\t\t} while(pos2 !== (-1));\n\n\t\treturn true;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Converts \"LocalObjectIdentifierValueBlock\" class to string\n\t * @returns {string}\n\t */\n\ttoString()\n\t{\n\t\tlet result = \"\";\n\t\tlet isHexOnly = false;\n\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t{\n\t\t\tisHexOnly = this.value[i].isHexOnly;\n\n\t\t\tlet sidStr = this.value[i].toString();\n\n\t\t\tif(i !== 0)\n\t\t\t\tresult = `${result}.`;\n\n\t\t\tif(isHexOnly)\n\t\t\t{\n\t\t\t\tsidStr = `{${sidStr}}`;\n\n\t\t\t\tif(this.value[i].isFirstSid)\n\t\t\t\t\tresult = `2.{${sidStr} - 80}`;\n\t\t\t\telse\n\t\t\t\t\tresult += sidStr;\n\t\t\t}\n\t\t\telse\n\t\t\t\tresult += sidStr;\n\t\t}\n\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"ObjectIdentifierValueBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.toString();\n\t\tobject.sidArray = [];\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t\tobject.sidArray.push(this.value[i].toJSON());\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends BaseBlock\n */\nexport class ObjectIdentifier extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"ObjectIdentifier\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalObjectIdentifierValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 6; // OBJECT IDENTIFIER\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"OBJECT IDENTIFIER\";\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${this.valueBlock.toString()}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of all string's classes\n//**************************************************************************************\nclass LocalUtf8StringValueBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Constructor for \"LocalUtf8StringValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.isHexOnly = true;\n\t\tthis.value = \"\"; // String representation of decoded ArrayBuffer\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"Utf8StringValueBlock\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.value;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends BaseBlock\n */\nexport class Utf8String extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Utf8String\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalUtf8StringValueBlock);\n\n\t\tif(VALUE in parameters)\n\t\t\tthis.fromString(parameters.value);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 12; // Utf8String\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"UTF8String\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tthis.fromBuffer(this.valueBlock.valueHex);\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ArrayBuffer into ASN.1 internal string\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t */\n\tfromBuffer(inputBuffer)\n\t{\n\t\tthis.valueBlock.value = String.fromCharCode.apply(null, new Uint8Array(inputBuffer));\n\n\t\ttry\n\t\t{\n\t\t\t//noinspection JSDeprecatedSymbols\n\t\t\tthis.valueBlock.value = decodeURIComponent(escape(this.valueBlock.value));\n\t\t}\n\t\tcatch(ex)\n\t\t{\n\t\t\tthis.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting JavaScript string into ASN.1 internal class\n\t * @param {!string} inputString ASN.1 BER encoded array\n\t */\n\tfromString(inputString)\n\t{\n\t\t//noinspection JSDeprecatedSymbols\n\t\tconst str = unescape(encodeURIComponent(inputString));\n\t\tconst strLen = str.length;\n\n\t\tthis.valueBlock.valueHex = new ArrayBuffer(strLen);\n\t\tconst view = new Uint8Array(this.valueBlock.valueHex);\n\n\t\tfor(let i = 0; i < strLen; i++)\n\t\t\tview[i] = str.charCodeAt(i);\n\n\t\tthis.valueBlock.value = inputString;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${this.valueBlock.value}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#region Declaration of ASN.1 RelativeObjectIdentifier type class\n//**************************************************************************************\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalRelativeSidValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {number} [valueDec]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.valueDec = getParametersValue(parameters, VALUE_DEC, -1);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"relativeSidBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tif(inputLength === 0)\n\t\t\treturn inputOffset;\n\n\t\t//#region Basic check for parameters\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tif(checkBufferParams(this, inputBuffer, inputOffset, inputLength) === false)\n\t\t\treturn (-1);\n\t\t//#endregion\n\n\t\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\n\t\tthis.valueHex = new ArrayBuffer(inputLength);\n\t\tlet view = new Uint8Array(this.valueHex);\n\n\t\tfor(let i = 0; i < inputLength; i++)\n\t\t{\n\t\t\tview[i] = intBuffer[i] & 0x7F;\n\n\t\t\tthis.blockLength++;\n\n\t\t\tif((intBuffer[i] & 0x80) === 0x00)\n\t\t\t\tbreak;\n\t\t}\n\n\t\t//#region Adjust size of valueHex buffer\n\t\tconst tempValueHex = new ArrayBuffer(this.blockLength);\n\t\tconst tempView = new Uint8Array(tempValueHex);\n\n\t\tfor(let i = 0; i < this.blockLength; i++)\n\t\t\ttempView[i] = view[i];\n\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tthis.valueHex = tempValueHex.slice(0);\n\t\tview = new Uint8Array(this.valueHex);\n\t\t//#endregion\n\n\t\tif((intBuffer[this.blockLength - 1] & 0x80) !== 0x00)\n\t\t{\n\t\t\tthis.error = \"End of input reached before message was fully decoded\";\n\t\t\treturn (-1);\n\t\t}\n\n\t\tif(view[0] === 0x00)\n\t\t\tthis.warnings.push(\"Needlessly long format of SID encoding\");\n\n\t\tif(this.blockLength <= 8)\n\t\t\tthis.valueDec = utilFromBase(view, 7);\n\t\telse\n\t\t{\n\t\t\tthis.isHexOnly = true;\n\t\t\tthis.warnings.push(\"Too big SID for decoding, hex only\");\n\t\t}\n\n\t\treturn (inputOffset + this.blockLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\t//#region Initial variables\n\t\tlet retBuf;\n\t\tlet retView;\n\t\t//#endregion\n\n\t\tif(this.isHexOnly)\n\t\t{\n\t\t\tif(sizeOnly === true)\n\t\t\t\treturn (new ArrayBuffer(this.valueHex.byteLength));\n\n\t\t\tconst curView = new Uint8Array(this.valueHex);\n\n\t\t\tretBuf = new ArrayBuffer(this.blockLength);\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tfor(let i = 0; i < (this.blockLength - 1); i++)\n\t\t\t\tretView[i] = curView[i] | 0x80;\n\n\t\t\tretView[this.blockLength - 1] = curView[this.blockLength - 1];\n\n\t\t\treturn retBuf;\n\t\t}\n\n\t\tconst encodedBuf = utilToBase(this.valueDec, 7);\n\t\tif(encodedBuf.byteLength === 0)\n\t\t{\n\t\t\tthis.error = \"Error during encoding SID value\";\n\t\t\treturn (EMPTY_BUFFER);\n\t\t}\n\n\t\tretBuf = new ArrayBuffer(encodedBuf.byteLength);\n\n\t\tif(sizeOnly === false)\n\t\t{\n\t\t\tconst encodedView = new Uint8Array(encodedBuf);\n\t\t\tretView = new Uint8Array(retBuf);\n\n\t\t\tfor(let i = 0; i < (encodedBuf.byteLength - 1); i++)\n\t\t\t\tretView[i] = encodedView[i] | 0x80;\n\n\t\t\tretView[encodedBuf.byteLength - 1] = encodedView[encodedBuf.byteLength - 1];\n\t\t}\n\n\t\treturn retBuf;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Create string representation of current SID block\n\t * @returns {string}\n\t */\n\ttoString()\n\t{\n\t\tlet result = \"\";\n\n\t\tif(this.isHexOnly === true)\n\t\t\tresult = bufferToHexCodes(this.valueHex, 0, this.valueHex.byteLength);\n\t\telse\n\t\t{\n\t\t\tresult = this.valueDec.toString();\n\t\t}\n\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t} catch(ex) { }\n\t\t//#endregion\n\n\t\tobject.valueDec = this.valueDec;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalRelativeObjectIdentifierValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.fromString(getParametersValue(parameters, VALUE, EMPTY_STRING));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tlet resultOffset = inputOffset;\n\n\t\twhile(inputLength > 0)\n\t\t{\n\t\t\tconst sidBlock = new LocalRelativeSidValueBlock();\n\t\t\tresultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\n\t\t\tif(resultOffset === (-1))\n\t\t\t{\n\t\t\t\tthis.blockLength = 0;\n\t\t\t\tthis.error = sidBlock.error;\n\t\t\t\treturn resultOffset;\n\t\t\t}\n\n\t\t\tthis.blockLength += sidBlock.blockLength;\n\t\t\tinputLength -= sidBlock.blockLength;\n\n\t\t\tthis.value.push(sidBlock);\n\t\t}\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\tlet retBufs = [];\n\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t{\n\t\t\tconst valueBuf = this.value[i].toBER(sizeOnly);\n\t\t\tif(valueBuf.byteLength === 0)\n\t\t\t{\n\t\t\t\tthis.error = this.value[i].error;\n\t\t\t\treturn (EMPTY_BUFFER);\n\t\t\t}\n\n\t\t\tretBufs.push(valueBuf);\n\t\t}\n\n\t\treturn concat(retBufs);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Create \"LocalRelativeObjectIdentifierValueBlock\" class from string\n\t * @param {string} string Input string to convert from\n\t * @returns {boolean}\n\t */\n\tfromString(string)\n\t{\n\t\tthis.value = []; // Clear existing SID values\n\n\t\tlet pos1 = 0;\n\t\tlet pos2 = 0;\n\n\t\tlet sid = \"\";\n\n\t\tdo\n\t\t{\n\t\t\tpos2 = string.indexOf(\".\", pos1);\n\t\t\tif(pos2 === (-1))\n\t\t\t\tsid = string.substr(pos1);\n\t\t\telse\n\t\t\t\tsid = string.substr(pos1, pos2 - pos1);\n\n\t\t\tpos1 = pos2 + 1;\n\n\t\t\tconst sidBlock = new LocalRelativeSidValueBlock();\n\t\t\tsidBlock.valueDec = parseInt(sid, 10);\n\t\t\tif(isNaN(sidBlock.valueDec))\n\t\t\t\treturn true;\n\n\t\t\tthis.value.push(sidBlock);\n\n\t\t} while(pos2 !== (-1));\n\n\t\treturn true;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Converts \"LocalRelativeObjectIdentifierValueBlock\" class to string\n\t * @returns {string}\n\t */\n\ttoString()\n\t{\n\t\tlet result = \"\";\n\t\tlet isHexOnly = false;\n\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t{\n\t\t\tisHexOnly = this.value[i].isHexOnly;\n\n\t\t\tlet sidStr = this.value[i].toString();\n\n\t\t\tif(i !== 0)\n\t\t\t\tresult = `${result}.`;\n\n\t\t\tif(isHexOnly)\n\t\t\t{\n\t\t\t\tsidStr = `{${sidStr}}`;\n\t\t\t\tresult += sidStr;\n\t\t\t} else\n\t\t\t\tresult += sidStr;\n\t\t}\n\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"RelativeObjectIdentifierValueBlock\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t} catch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.toString();\n\t\tobject.sidArray = [];\n\t\tfor(let i = 0; i < this.value.length; i++)\n\t\t\tobject.sidArray.push(this.value[i].toJSON());\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends BaseBlock\n */\nexport class RelativeObjectIdentifier extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"RelativeObjectIdentifier\" class\n\t * @param {Object} [parameters={}]\n\t * @property {ArrayBuffer} [valueHex]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalRelativeObjectIdentifierValueBlock);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 13; // RELATIVE OBJECT IDENTIFIER\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"RelativeObjectIdentifier\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n/**\n * @extends LocalBaseBlock\n * @extends HexBlock\n */\nclass LocalBmpStringValueBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalBmpStringValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.isHexOnly = true;\n\t\tthis.value = \"\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BmpStringValueBlock\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.value;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends BaseBlock\n */\nexport class BmpString extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"BmpString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalBmpStringValueBlock);\n\n\t\tif(VALUE in parameters)\n\t\t\tthis.fromString(parameters.value);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 30; // BmpString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"BMPString\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tthis.fromBuffer(this.valueBlock.valueHex);\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ArrayBuffer into ASN.1 internal string\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t */\n\tfromBuffer(inputBuffer)\n\t{\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tconst copyBuffer = inputBuffer.slice(0);\n\t\tconst valueView = new Uint8Array(copyBuffer);\n\n\t\tfor(let i = 0; i < valueView.length; i += 2)\n\t\t{\n\t\t\tconst temp = valueView[i];\n\n\t\t\tvalueView[i] = valueView[i + 1];\n\t\t\tvalueView[i + 1] = temp;\n\t\t}\n\n\t\tthis.valueBlock.value = String.fromCharCode.apply(null, new Uint16Array(copyBuffer));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting JavaScript string into ASN.1 internal class\n\t * @param {!string} inputString ASN.1 BER encoded array\n\t */\n\tfromString(inputString)\n\t{\n\t\tconst strLength = inputString.length;\n\n\t\tthis.valueBlock.valueHex = new ArrayBuffer(strLength * 2);\n\t\tconst valueHexView = new Uint8Array(this.valueBlock.valueHex);\n\n\t\tfor(let i = 0; i < strLength; i++)\n\t\t{\n\t\t\tconst codeBuf = utilToBase(inputString.charCodeAt(i), 8);\n\t\t\tconst codeView = new Uint8Array(codeBuf);\n\t\t\tif(codeView.length > 2)\n\t\t\t\tcontinue;\n\n\t\t\tconst dif = 2 - codeView.length;\n\n\t\t\tfor(let j = (codeView.length - 1); j >= 0; j--)\n\t\t\t\tvalueHexView[i * 2 + j + dif] = codeView[j];\n\t\t}\n\n\t\tthis.valueBlock.value = inputString;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${this.valueBlock.value}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nclass LocalUniversalStringValueBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalUniversalStringValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.isHexOnly = true;\n\t\tthis.value = \"\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"UniversalStringValueBlock\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.value;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends BaseBlock\n */\nexport class UniversalString extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"UniversalString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalUniversalStringValueBlock);\n\n\t\tif(VALUE in parameters)\n\t\t\tthis.fromString(parameters.value);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 28; // UniversalString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"UniversalString\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tthis.fromBuffer(this.valueBlock.valueHex);\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ArrayBuffer into ASN.1 internal string\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t */\n\tfromBuffer(inputBuffer)\n\t{\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tconst copyBuffer = inputBuffer.slice(0);\n\t\tconst valueView = new Uint8Array(copyBuffer);\n\n\t\tfor(let i = 0; i < valueView.length; i += 4)\n\t\t{\n\t\t\tvalueView[i] = valueView[i + 3];\n\t\t\tvalueView[i + 1] = valueView[i + 2];\n\t\t\tvalueView[i + 2] = 0x00;\n\t\t\tvalueView[i + 3] = 0x00;\n\t\t}\n\n\t\tthis.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting JavaScript string into ASN.1 internal class\n\t * @param {!string} inputString ASN.1 BER encoded array\n\t */\n\tfromString(inputString)\n\t{\n\t\tconst strLength = inputString.length;\n\n\t\tthis.valueBlock.valueHex = new ArrayBuffer(strLength * 4);\n\t\tconst valueHexView = new Uint8Array(this.valueBlock.valueHex);\n\n\t\tfor(let i = 0; i < strLength; i++)\n\t\t{\n\t\t\tconst codeBuf = utilToBase(inputString.charCodeAt(i), 8);\n\t\t\tconst codeView = new Uint8Array(codeBuf);\n\t\t\tif(codeView.length > 4)\n\t\t\t\tcontinue;\n\n\t\t\tconst dif = 4 - codeView.length;\n\n\t\t\tfor(let j = (codeView.length - 1); j >= 0; j--)\n\t\t\t\tvalueHexView[i * 4 + j + dif] = codeView[j];\n\t\t}\n\n\t\tthis.valueBlock.value = inputString;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${this.valueBlock.value}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\nclass LocalSimpleStringValueBlock extends HexBlock(LocalBaseBlock)\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalSimpleStringValueBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.value = \"\";\n\t\tthis.isHexOnly = true;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"SimpleStringValueBlock\";\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.value = this.value;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends BaseBlock\n */\nclass LocalSimpleStringBlock extends BaseBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"LocalSimpleStringBlock\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters, LocalSimpleStringValueBlock);\n\n\t\tif(VALUE in parameters)\n\t\t\tthis.fromString(parameters.value);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"SIMPLESTRING\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tthis.fromBuffer(this.valueBlock.valueHex);\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ArrayBuffer into ASN.1 internal string\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t */\n\tfromBuffer(inputBuffer)\n\t{\n\t\tthis.valueBlock.value = String.fromCharCode.apply(null, new Uint8Array(inputBuffer));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting JavaScript string into ASN.1 internal class\n\t * @param {!string} inputString ASN.1 BER encoded array\n\t */\n\tfromString(inputString)\n\t{\n\t\tconst strLen = inputString.length;\n\n\t\tthis.valueBlock.valueHex = new ArrayBuffer(strLen);\n\t\tconst view = new Uint8Array(this.valueBlock.valueHex);\n\n\t\tfor(let i = 0; i < strLen; i++)\n\t\t\tview[i] = inputString.charCodeAt(i);\n\n\t\tthis.valueBlock.value = inputString;\n\t}\n\t//**********************************************************************************\n\ttoString()\n\t{\n\t\treturn `${this.constructor.blockName()} : ${this.valueBlock.value}`;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class NumericString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"NumericString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 18; // NumericString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"NumericString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class PrintableString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"PrintableString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 19; // PrintableString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"PrintableString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class TeletexString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"TeletexString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 20; // TeletexString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"TeletexString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class VideotexString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"VideotexString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 21; // VideotexString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"VideotexString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class IA5String extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"IA5String\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 22; // IA5String\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"IA5String\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class GraphicString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"GraphicString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 25; // GraphicString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"GraphicString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class VisibleString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"VisibleString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 26; // VisibleString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"VisibleString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class GeneralString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"GeneralString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 27; // GeneralString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"GeneralString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends LocalSimpleStringBlock\n */\nexport class CharacterString extends LocalSimpleStringBlock\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"CharacterString\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 29; // CharacterString\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"CharacterString\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of all date and time classes\n//**************************************************************************************\n/**\n * @extends VisibleString\n */\nexport class UTCTime extends VisibleString\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"UTCTime\" class\n\t * @param {Object} [parameters={}]\n\t * @property {string} [value] String representatio of the date\n\t * @property {Date} [valueDate] JavaScript \"Date\" object\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.year = 0;\n\t\tthis.month = 0;\n\t\tthis.day = 0;\n\t\tthis.hour = 0;\n\t\tthis.minute = 0;\n\t\tthis.second = 0;\n\n\t\t//#region Create UTCTime from ASN.1 UTC string value\n\t\tif(VALUE in parameters)\n\t\t{\n\t\t\tthis.fromString(parameters.value);\n\n\t\t\tthis.valueBlock.valueHex = new ArrayBuffer(parameters.value.length);\n\t\t\tconst view = new Uint8Array(this.valueBlock.valueHex);\n\n\t\t\tfor(let i = 0; i < parameters.value.length; i++)\n\t\t\t\tview[i] = parameters.value.charCodeAt(i);\n\t\t}\n\t\t//#endregion\n\t\t//#region Create GeneralizedTime from JavaScript Date type\n\t\tif(VALUE_DATE in parameters)\n\t\t{\n\t\t\tthis.fromDate(parameters.valueDate);\n\t\t\tthis.valueBlock.valueHex = this.toBuffer();\n\t\t}\n\t\t//#endregion\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 23; // UTCTime\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tthis.fromBuffer(this.valueBlock.valueHex);\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ArrayBuffer into ASN.1 internal string\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t */\n\tfromBuffer(inputBuffer)\n\t{\n\t\tthis.fromString(String.fromCharCode.apply(null, new Uint8Array(inputBuffer)));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ASN.1 internal string into ArrayBuffer\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBuffer()\n\t{\n\t\tconst str = this.toString();\n\n\t\tconst buffer = new ArrayBuffer(str.length);\n\t\tconst view = new Uint8Array(buffer);\n\n\t\tfor(let i = 0; i < str.length; i++)\n\t\t\tview[i] = str.charCodeAt(i);\n\n\t\treturn buffer;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting \"Date\" object into ASN.1 internal string\n\t * @param {!Date} inputDate JavaScript \"Date\" object\n\t */\n\tfromDate(inputDate)\n\t{\n\t\tthis.year = inputDate.getUTCFullYear();\n\t\tthis.month = inputDate.getUTCMonth() + 1;\n\t\tthis.day = inputDate.getUTCDate();\n\t\tthis.hour = inputDate.getUTCHours();\n\t\tthis.minute = inputDate.getUTCMinutes();\n\t\tthis.second = inputDate.getUTCSeconds();\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Function converting ASN.1 internal string into \"Date\" object\n\t * @returns {Date}\n\t */\n\ttoDate()\n\t{\n\t\treturn (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting JavaScript string into ASN.1 internal class\n\t * @param {!string} inputString ASN.1 BER encoded array\n\t */\n\tfromString(inputString)\n\t{\n\t\t//#region Parse input string\n\t\tconst parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\n\t\tconst parserArray = parser.exec(inputString);\n\t\tif(parserArray === null)\n\t\t{\n\t\t\tthis.error = \"Wrong input string for conversion\";\n\t\t\treturn;\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Store parsed values\n\t\tconst year = parseInt(parserArray[1], 10);\n\t\tif(year >= 50)\n\t\t\tthis.year = 1900 + year;\n\t\telse\n\t\t\tthis.year = 2000 + year;\n\n\t\tthis.month = parseInt(parserArray[2], 10);\n\t\tthis.day = parseInt(parserArray[3], 10);\n\t\tthis.hour = parseInt(parserArray[4], 10);\n\t\tthis.minute = parseInt(parserArray[5], 10);\n\t\tthis.second = parseInt(parserArray[6], 10);\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ASN.1 internal class into JavaScript string\n\t * @returns {string}\n\t */\n\ttoString()\n\t{\n\t\tconst outputArray = new Array(7);\n\n\t\toutputArray[0] = padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\n\t\toutputArray[1] = padNumber(this.month, 2);\n\t\toutputArray[2] = padNumber(this.day, 2);\n\t\toutputArray[3] = padNumber(this.hour, 2);\n\t\toutputArray[4] = padNumber(this.minute, 2);\n\t\toutputArray[5] = padNumber(this.second, 2);\n\t\toutputArray[6] = \"Z\";\n\n\t\treturn outputArray.join(\"\");\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"UTCTime\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.year = this.year;\n\t\tobject.month = this.month;\n\t\tobject.day = this.day;\n\t\tobject.hour = this.hour;\n\t\tobject.minute = this.minute;\n\t\tobject.second = this.second;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends VisibleString\n */\nexport class GeneralizedTime extends VisibleString\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"GeneralizedTime\" class\n\t * @param {Object} [parameters={}]\n\t * @property {string} [value] String representatio of the date\n\t * @property {Date} [valueDate] JavaScript \"Date\" object\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.year = 0;\n\t\tthis.month = 0;\n\t\tthis.day = 0;\n\t\tthis.hour = 0;\n\t\tthis.minute = 0;\n\t\tthis.second = 0;\n\t\tthis.millisecond = 0;\n\n\t\t//#region Create UTCTime from ASN.1 UTC string value\n\t\tif(VALUE in parameters)\n\t\t{\n\t\t\tthis.fromString(parameters.value);\n\n\t\t\tthis.valueBlock.valueHex = new ArrayBuffer(parameters.value.length);\n\t\t\tconst view = new Uint8Array(this.valueBlock.valueHex);\n\n\t\t\tfor(let i = 0; i < parameters.value.length; i++)\n\t\t\t\tview[i] = parameters.value.charCodeAt(i);\n\t\t}\n\t\t//#endregion\n\t\t//#region Create GeneralizedTime from JavaScript Date type\n\t\tif(VALUE_DATE in parameters)\n\t\t{\n\t\t\tthis.fromDate(parameters.valueDate);\n\t\t\tthis.valueBlock.valueHex = this.toBuffer();\n\t\t}\n\t\t//#endregion\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 24; // GeneralizedTime\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tconst resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm === true) ? inputLength : this.lenBlock.length);\n\t\tif(resultOffset === (-1))\n\t\t{\n\t\t\tthis.error = this.valueBlock.error;\n\t\t\treturn resultOffset;\n\t\t}\n\n\t\tthis.fromBuffer(this.valueBlock.valueHex);\n\n\t\tif(this.idBlock.error.length === 0)\n\t\t\tthis.blockLength += this.idBlock.blockLength;\n\n\t\tif(this.lenBlock.error.length === 0)\n\t\t\tthis.blockLength += this.lenBlock.blockLength;\n\n\t\tif(this.valueBlock.error.length === 0)\n\t\t\tthis.blockLength += this.valueBlock.blockLength;\n\n\t\treturn resultOffset;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ArrayBuffer into ASN.1 internal string\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t */\n\tfromBuffer(inputBuffer)\n\t{\n\t\tthis.fromString(String.fromCharCode.apply(null, new Uint8Array(inputBuffer)));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ASN.1 internal string into ArrayBuffer\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBuffer()\n\t{\n\t\tconst str = this.toString();\n\n\t\tconst buffer = new ArrayBuffer(str.length);\n\t\tconst view = new Uint8Array(buffer);\n\n\t\tfor(let i = 0; i < str.length; i++)\n\t\t\tview[i] = str.charCodeAt(i);\n\n\t\treturn buffer;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting \"Date\" object into ASN.1 internal string\n\t * @param {!Date} inputDate JavaScript \"Date\" object\n\t */\n\tfromDate(inputDate)\n\t{\n\t\tthis.year = inputDate.getUTCFullYear();\n\t\tthis.month = inputDate.getUTCMonth() + 1;\n\t\tthis.day = inputDate.getUTCDate();\n\t\tthis.hour = inputDate.getUTCHours();\n\t\tthis.minute = inputDate.getUTCMinutes();\n\t\tthis.second = inputDate.getUTCSeconds();\n\t\tthis.millisecond = inputDate.getUTCMilliseconds();\n\t}\n\t//**********************************************************************************\n\t//noinspection JSUnusedGlobalSymbols\n\t/**\n\t * Function converting ASN.1 internal string into \"Date\" object\n\t * @returns {Date}\n\t */\n\ttoDate()\n\t{\n\t\treturn (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting JavaScript string into ASN.1 internal class\n\t * @param {!string} inputString ASN.1 BER encoded array\n\t */\n\tfromString(inputString)\n\t{\n\t\t//#region Initial variables\n\t\tlet isUTC = false;\n\n\t\tlet timeString = \"\";\n\t\tlet dateTimeString = \"\";\n\t\tlet fractionPart = 0;\n\n\t\tlet parser;\n\n\t\tlet hourDifference = 0;\n\t\tlet minuteDifference = 0;\n\t\t//#endregion\n\n\t\t//#region Convert as UTC time\n\t\tif(inputString[inputString.length - 1] === \"Z\")\n\t\t{\n\t\t\ttimeString = inputString.substr(0, inputString.length - 1);\n\n\t\t\tisUTC = true;\n\t\t}\n\t\t//#endregion\n\t\t//#region Convert as local time\n\t\telse\n\t\t{\n\t\t\t//noinspection JSPrimitiveTypeWrapperUsage\n\t\t\tconst number = new Number(inputString[inputString.length - 1]);\n\n\t\t\tif(isNaN(number.valueOf()))\n\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\t\ttimeString = inputString;\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Check that we do not have a \"+\" and \"-\" symbols inside UTC time\n\t\tif(isUTC)\n\t\t{\n\t\t\tif(timeString.indexOf(\"+\") !== (-1))\n\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\t\tif(timeString.indexOf(\"-\") !== (-1))\n\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\t\t}\n\t\t//#endregion\n\t\t//#region Get \"UTC time difference\" in case of local time\n\t\telse\n\t\t{\n\t\t\tlet multiplier = 1;\n\t\t\tlet differencePosition = timeString.indexOf(\"+\");\n\t\t\tlet differenceString = \"\";\n\n\t\t\tif(differencePosition === (-1))\n\t\t\t{\n\t\t\t\tdifferencePosition = timeString.indexOf(\"-\");\n\t\t\t\tmultiplier = (-1);\n\t\t\t}\n\n\t\t\tif(differencePosition !== (-1))\n\t\t\t{\n\t\t\t\tdifferenceString = timeString.substr(differencePosition + 1);\n\t\t\t\ttimeString = timeString.substr(0, differencePosition);\n\n\t\t\t\tif((differenceString.length !== 2) && (differenceString.length !== 4))\n\t\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\t\t\t//noinspection JSPrimitiveTypeWrapperUsage\n\t\t\t\tlet number = new Number(differenceString.substr(0, 2));\n\n\t\t\t\tif(isNaN(number.valueOf()))\n\t\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\t\t\thourDifference = multiplier * number;\n\n\t\t\t\tif(differenceString.length === 4)\n\t\t\t\t{\n\t\t\t\t\t//noinspection JSPrimitiveTypeWrapperUsage\n\t\t\t\t\tnumber = new Number(differenceString.substr(2, 2));\n\n\t\t\t\t\tif(isNaN(number.valueOf()))\n\t\t\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\t\t\t\tminuteDifference = multiplier * number;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Get position of fraction point\n\t\tlet fractionPointPosition = timeString.indexOf(\".\"); // Check for \"full stop\" symbol\n\t\tif(fractionPointPosition === (-1))\n\t\t\tfractionPointPosition = timeString.indexOf(\",\"); // Check for \"comma\" symbol\n\t\t//#endregion\n\n\t\t//#region Get fraction part\n\t\tif(fractionPointPosition !== (-1))\n\t\t{\n\t\t\t//noinspection JSPrimitiveTypeWrapperUsage\n\t\t\tconst fractionPartCheck = new Number(`0${timeString.substr(fractionPointPosition)}`);\n\n\t\t\tif(isNaN(fractionPartCheck.valueOf()))\n\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\t\tfractionPart = fractionPartCheck.valueOf();\n\n\t\t\tdateTimeString = timeString.substr(0, fractionPointPosition);\n\t\t}\n\t\telse\n\t\t\tdateTimeString = timeString;\n\t\t//#endregion\n\n\t\t//#region Parse internal date\n\t\tswitch(true)\n\t\t{\n\t\t\tcase (dateTimeString.length === 8): // \"YYYYMMDD\"\n\t\t\t\tparser = /(\\d{4})(\\d{2})(\\d{2})/ig;\n\t\t\t\tif(fractionPointPosition !== (-1))\n\t\t\t\t\tthrow new Error(\"Wrong input string for conversion\"); // Here we should not have a \"fraction point\"\n\t\t\t\tbreak;\n\t\t\tcase (dateTimeString.length === 10): // \"YYYYMMDDHH\"\n\t\t\t\tparser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\n\n\t\t\t\tif(fractionPointPosition !== (-1))\n\t\t\t\t{\n\t\t\t\t\tlet fractionResult = 60 * fractionPart;\n\t\t\t\t\tthis.minute = Math.floor(fractionResult);\n\n\t\t\t\t\tfractionResult = 60 * (fractionResult - this.minute);\n\t\t\t\t\tthis.second = Math.floor(fractionResult);\n\n\t\t\t\t\tfractionResult = 1000 * (fractionResult - this.second);\n\t\t\t\t\tthis.millisecond = Math.floor(fractionResult);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase (dateTimeString.length === 12): // \"YYYYMMDDHHMM\"\n\t\t\t\tparser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\n\n\t\t\t\tif(fractionPointPosition !== (-1))\n\t\t\t\t{\n\t\t\t\t\tlet fractionResult = 60 * fractionPart;\n\t\t\t\t\tthis.second = Math.floor(fractionResult);\n\n\t\t\t\t\tfractionResult = 1000 * (fractionResult - this.second);\n\t\t\t\t\tthis.millisecond = Math.floor(fractionResult);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase (dateTimeString.length === 14): // \"YYYYMMDDHHMMSS\"\n\t\t\t\tparser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\n\n\t\t\t\tif(fractionPointPosition !== (-1))\n\t\t\t\t{\n\t\t\t\t\tconst fractionResult = 1000 * fractionPart;\n\t\t\t\t\tthis.millisecond = Math.floor(fractionResult);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Put parsed values at right places\n\t\tconst parserArray = parser.exec(dateTimeString);\n\t\tif(parserArray === null)\n\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\n\t\tfor(let j = 1; j < parserArray.length; j++)\n\t\t{\n\t\t\tswitch(j)\n\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.year = parseInt(parserArray[j], 10);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.month = parseInt(parserArray[j], 10);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.day = parseInt(parserArray[j], 10);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.hour = parseInt(parserArray[j], 10) + hourDifference;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tthis.minute = parseInt(parserArray[j], 10) + minuteDifference;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\t\tthis.second = parseInt(parserArray[j], 10);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Wrong input string for conversion\");\n\t\t\t}\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Get final date\n\t\tif(isUTC === false)\n\t\t{\n\t\t\tconst tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n\n\t\t\tthis.year = tempDate.getUTCFullYear();\n\t\t\tthis.month = tempDate.getUTCMonth();\n\t\t\tthis.day = tempDate.getUTCDay();\n\t\t\tthis.hour = tempDate.getUTCHours();\n\t\t\tthis.minute = tempDate.getUTCMinutes();\n\t\t\tthis.second = tempDate.getUTCSeconds();\n\t\t\tthis.millisecond = tempDate.getUTCMilliseconds();\n\t\t}\n\t\t//#endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Function converting ASN.1 internal class into JavaScript string\n\t * @returns {string}\n\t */\n\ttoString()\n\t{\n\t\tconst outputArray = [];\n\n\t\toutputArray.push(padNumber(this.year, 4));\n\t\toutputArray.push(padNumber(this.month, 2));\n\t\toutputArray.push(padNumber(this.day, 2));\n\t\toutputArray.push(padNumber(this.hour, 2));\n\t\toutputArray.push(padNumber(this.minute, 2));\n\t\toutputArray.push(padNumber(this.second, 2));\n\t\tif(this.millisecond !== 0)\n\t\t{\n\t\t\toutputArray.push(\".\");\n\t\t\toutputArray.push(padNumber(this.millisecond, 3));\n\t\t}\n\t\toutputArray.push(\"Z\");\n\n\t\treturn outputArray.join(\"\");\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"GeneralizedTime\";\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Conversion for the block to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tlet object = {};\n\n\t\t//#region Seems at the moment (Sep 2016) there is no way how to check method is supported in \"super\" object\n\t\ttry\n\t\t{\n\t\t\tobject = super.toJSON();\n\t\t}\n\t\tcatch(ex) { }\n\t\t//#endregion\n\n\t\tobject.year = this.year;\n\t\tobject.month = this.month;\n\t\tobject.day = this.day;\n\t\tobject.hour = this.hour;\n\t\tobject.minute = this.minute;\n\t\tobject.second = this.second;\n\t\tobject.millisecond = this.millisecond;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends Utf8String\n */\nexport class DATE extends Utf8String\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"DATE\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 31; // DATE\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"DATE\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends Utf8String\n */\nexport class TimeOfDay extends Utf8String\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"TimeOfDay\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 32; // TimeOfDay\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"TimeOfDay\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends Utf8String\n */\nexport class DateTime extends Utf8String\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"DateTime\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 33; // DateTime\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"DateTime\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends Utf8String\n */\nexport class Duration extends Utf8String\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Duration\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 34; // Duration\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"Duration\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * @extends Utf8String\n */\nexport class TIME extends Utf8String\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Time\" class\n\t * @param {Object} [parameters={}]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tsuper(parameters);\n\n\t\tthis.idBlock.tagClass = 1; // UNIVERSAL\n\t\tthis.idBlock.tagNumber = 14; // Time\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Aux function, need to get a block name. Need to have it here for inheritance\n\t * @returns {string}\n\t */\n\tstatic blockName()\n\t{\n\t\treturn \"TIME\";\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of special ASN.1 schema type Choice\n//**************************************************************************************\nexport class Choice\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Choice\" class\n\t * @param {Object} [parameters={}]\n\t * @property {Array} [value] Array of ASN.1 types for make a choice from\n\t * @property {boolean} [optional]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tthis.value = getParametersValue(parameters, VALUE, []);\n\t\tthis.optional = getParametersValue(parameters, OPTIONAL, false);\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of special ASN.1 schema type Any\n//**************************************************************************************\nexport class Any\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Any\" class\n\t * @param {Object} [parameters={}]\n\t * @property {string} [name]\n\t * @property {boolean} [optional]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tthis.name = getParametersValue(parameters, NAME, EMPTY_STRING);\n\t\tthis.optional = getParametersValue(parameters, OPTIONAL, false);\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of special ASN.1 schema type Repeated\n//**************************************************************************************\nexport class Repeated\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Repeated\" class\n\t * @param {Object} [parameters={}]\n\t * @property {string} [name]\n\t * @property {boolean} [optional]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tthis.name = getParametersValue(parameters, NAME, EMPTY_STRING);\n\t\tthis.optional = getParametersValue(parameters, OPTIONAL, false);\n\t\tthis.value = getParametersValue(parameters, VALUE, new Any());\n\t\tthis.local = getParametersValue(parameters, LOCAL, false); // Could local or global array to store elements\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Declaration of special ASN.1 schema type RawData\n//**************************************************************************************\n/**\n * @description Special class providing ability to have \"toBER/fromBER\" for raw ArrayBuffer\n */\nexport class RawData\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for \"Repeated\" class\n\t * @param {Object} [parameters={}]\n\t * @property {string} [name]\n\t * @property {boolean} [optional]\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\tthis.data = getParametersValue(parameters, DATA, EMPTY_BUFFER);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Base function for converting block from BER encoded array of bytes\n\t * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n\t * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n\t * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n\t * @returns {number} Offset after least decoded byte\n\t */\n\tfromBER(inputBuffer, inputOffset, inputLength)\n\t{\n\t\tthis.data = inputBuffer.slice(inputOffset, inputLength);\n\t\treturn (inputOffset + inputLength);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Encoding of current ASN.1 block into ASN.1 encoded array (BER rules)\n\t * @param {boolean} [sizeOnly=false] Flag that we need only a size of encoding, not a real array of bytes\n\t * @returns {ArrayBuffer}\n\t */\n\ttoBER(sizeOnly = false)\n\t{\n\t\treturn this.data;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Major ASN.1 BER decoding function\n//**************************************************************************************\n/**\n * Internal library function for decoding ASN.1 BER\n * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array\n * @param {!number} inputOffset Offset in ASN.1 BER encoded array where decoding should be started\n * @param {!number} inputLength Maximum length of array of bytes which can be using in this function\n * @returns {{offset: number, result: Object}}\n */\nfunction LocalFromBER(inputBuffer, inputOffset, inputLength)\n{\n\tconst incomingOffset = inputOffset; // Need to store initial offset since \"inputOffset\" is changing in the function\n\n\t//#region Local function changing a type for ASN.1 classes\n\tfunction localChangeType(inputObject, newType)\n\t{\n\t\tif(inputObject instanceof newType)\n\t\t\treturn inputObject;\n\n\t\tconst newObject = new newType();\n\t\tnewObject.idBlock = inputObject.idBlock;\n\t\tnewObject.lenBlock = inputObject.lenBlock;\n\t\tnewObject.warnings = inputObject.warnings;\n\t\t//noinspection JSCheckFunctionSignatures\n\t\tnewObject.valueBeforeDecode = inputObject.valueBeforeDecode.slice(0);\n\n\t\treturn newObject;\n\t}\n\t//#endregion\n\n\t//#region Create a basic ASN.1 type since we need to return errors and warnings from the function\n\tlet returnObject = new BaseBlock({}, Object);\n\t//#endregion\n\n\t//#region Basic check for parameters\n\tconst baseBlock = new LocalBaseBlock();\n\tif(checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) === false)\n\t{\n\t\treturnObject.error = baseBlock.error;\n\t\treturn {\n\t\t\toffset: (-1),\n\t\t\tresult: returnObject\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Getting Uint8Array from ArrayBuffer\n\tconst intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength);\n\t//#endregion\n\n\t//#region Initial checks\n\tif(intBuffer.length === 0)\n\t{\n\t\treturnObject.error = \"Zero buffer length\";\n\t\treturn {\n\t\t\toffset: (-1),\n\t\t\tresult: returnObject\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Decode identification block of ASN.1 BER structure\n\tlet resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\n\treturnObject.warnings.concat(returnObject.idBlock.warnings);\n\tif(resultOffset === (-1))\n\t{\n\t\treturnObject.error = returnObject.idBlock.error;\n\t\treturn {\n\t\t\toffset: (-1),\n\t\t\tresult: returnObject\n\t\t};\n\t}\n\n\tinputOffset = resultOffset;\n\tinputLength -= returnObject.idBlock.blockLength;\n\t//#endregion\n\n\t//#region Decode length block of ASN.1 BER structure\n\tresultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\n\treturnObject.warnings.concat(returnObject.lenBlock.warnings);\n\tif(resultOffset === (-1))\n\t{\n\t\treturnObject.error = returnObject.lenBlock.error;\n\t\treturn {\n\t\t\toffset: (-1),\n\t\t\tresult: returnObject\n\t\t};\n\t}\n\n\tinputOffset = resultOffset;\n\tinputLength -= returnObject.lenBlock.blockLength;\n\t//#endregion\n\n\t//#region Check for using indefinite length form in encoding for primitive types\n\tif((returnObject.idBlock.isConstructed === false) &&\n\t\t(returnObject.lenBlock.isIndefiniteForm === true))\n\t{\n\t\treturnObject.error = \"Indefinite length form used for primitive encoding form\";\n\t\treturn {\n\t\t\toffset: (-1),\n\t\t\tresult: returnObject\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Switch ASN.1 block type\n\tlet newASN1Type = BaseBlock;\n\n\tswitch(returnObject.idBlock.tagClass)\n\t{\n\t\t//#region UNIVERSAL\n\t\tcase 1:\n\t\t\t//#region Check for reserved tag numbers\n\t\t\tif((returnObject.idBlock.tagNumber >= 37) &&\n\t\t\t\t(returnObject.idBlock.isHexOnly === false))\n\t\t\t{\n\t\t\t\treturnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\n\t\t\t\treturn {\n\t\t\t\t\toffset: (-1),\n\t\t\t\t\tresult: returnObject\n\t\t\t\t};\n\t\t\t}\n\t\t\t//#endregion\n\n\t\t\tswitch(returnObject.idBlock.tagNumber)\n\t\t\t{\n\t\t\t\t//#region EndOfContent type\n\t\t\t\tcase 0:\n\t\t\t\t\t//#region Check for EndOfContent type\n\t\t\t\t\tif((returnObject.idBlock.isConstructed === true) &&\n\t\t\t\t\t\t(returnObject.lenBlock.length > 0))\n\t\t\t\t\t{\n\t\t\t\t\t\treturnObject.error = \"Type [UNIVERSAL 0] is reserved\";\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\toffset: (-1),\n\t\t\t\t\t\t\tresult: returnObject\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t//#endregion\n\n\t\t\t\t\tnewASN1Type = EndOfContent;\n\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Boolean type\n\t\t\t\tcase 1:\n\t\t\t\t\tnewASN1Type = Boolean;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Integer type\n\t\t\t\tcase 2:\n\t\t\t\t\tnewASN1Type = Integer;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region BitString type\n\t\t\t\tcase 3:\n\t\t\t\t\tnewASN1Type = BitString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region OctetString type\n\t\t\t\tcase 4:\n\t\t\t\t\tnewASN1Type = OctetString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Null type\n\t\t\t\tcase 5:\n\t\t\t\t\tnewASN1Type = Null;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region OBJECT IDENTIFIER type\n\t\t\t\tcase 6:\n\t\t\t\t\tnewASN1Type = ObjectIdentifier;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Enumerated type\n\t\t\t\tcase 10:\n\t\t\t\t\tnewASN1Type = Enumerated;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Utf8String type\n\t\t\t\tcase 12:\n\t\t\t\t\tnewASN1Type = Utf8String;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Time type\n\t\t\t\t//#region RELATIVE OBJECT IDENTIFIER type\n\t\t\t\tcase 13:\n\t\t\t\t\tnewASN1Type = RelativeObjectIdentifier;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\tcase 14:\n\t\t\t\t\tnewASN1Type = TIME;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region ASN.1 reserved type\n\t\t\t\tcase 15:\n\t\t\t\t\treturnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\n\t\t\t\t\treturn {\n\t\t\t\t\t\toffset: (-1),\n\t\t\t\t\t\tresult: returnObject\n\t\t\t\t\t};\n\t\t\t\t//#endregion\n\t\t\t\t//#region Sequence type\n\t\t\t\tcase 16:\n\t\t\t\t\tnewASN1Type = Sequence;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Set type\n\t\t\t\tcase 17:\n\t\t\t\t\tnewASN1Type = Set;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region NumericString type\n\t\t\t\tcase 18:\n\t\t\t\t\tnewASN1Type = NumericString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region PrintableString type\n\t\t\t\tcase 19:\n\t\t\t\t\tnewASN1Type = PrintableString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region TeletexString type\n\t\t\t\tcase 20:\n\t\t\t\t\tnewASN1Type = TeletexString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region VideotexString type\n\t\t\t\tcase 21:\n\t\t\t\t\tnewASN1Type = VideotexString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region IA5String type\n\t\t\t\tcase 22:\n\t\t\t\t\tnewASN1Type = IA5String;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region UTCTime type\n\t\t\t\tcase 23:\n\t\t\t\t\tnewASN1Type = UTCTime;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region GeneralizedTime type\n\t\t\t\tcase 24:\n\t\t\t\t\tnewASN1Type = GeneralizedTime;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region GraphicString type\n\t\t\t\tcase 25:\n\t\t\t\t\tnewASN1Type = GraphicString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region VisibleString type\n\t\t\t\tcase 26:\n\t\t\t\t\tnewASN1Type = VisibleString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region GeneralString type\n\t\t\t\tcase 27:\n\t\t\t\t\tnewASN1Type = GeneralString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region UniversalString type\n\t\t\t\tcase 28:\n\t\t\t\t\tnewASN1Type = UniversalString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region CharacterString type\n\t\t\t\tcase 29:\n\t\t\t\t\tnewASN1Type = CharacterString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region BmpString type\n\t\t\t\tcase 30:\n\t\t\t\t\tnewASN1Type = BmpString;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region DATE type\n\t\t\t\tcase 31:\n\t\t\t\t\tnewASN1Type = DATE;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region TimeOfDay type\n\t\t\t\tcase 32:\n\t\t\t\t\tnewASN1Type = TimeOfDay;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Date-Time type\n\t\t\t\tcase 33:\n\t\t\t\t\tnewASN1Type = DateTime;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region Duration type\n\t\t\t\tcase 34:\n\t\t\t\t\tnewASN1Type = Duration;\n\t\t\t\t\tbreak;\n\t\t\t\t//#endregion\n\t\t\t\t//#region default\n\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tlet newObject;\n\n\t\t\t\t\t\tif(returnObject.idBlock.isConstructed === true)\n\t\t\t\t\t\t\tnewObject = new Constructed();\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tnewObject = new Primitive();\n\n\t\t\t\t\t\tnewObject.idBlock = returnObject.idBlock;\n\t\t\t\t\t\tnewObject.lenBlock = returnObject.lenBlock;\n\t\t\t\t\t\tnewObject.warnings = returnObject.warnings;\n\n\t\t\t\t\t\treturnObject = newObject;\n\t\t\t\t\t}\n\t\t\t\t//#endregion\n\t\t\t}\n\t\t\tbreak;\n\t\t//#endregion\n\t\t//#region All other tag classes\n\t\tcase 2: // APPLICATION\n\t\tcase 3: // CONTEXT-SPECIFIC\n\t\tcase 4: // PRIVATE\n\t\tdefault:\n\t\t\t{\n\t\t\t\tif(returnObject.idBlock.isConstructed === true)\n\t\t\t\t\tnewASN1Type = Constructed;\n\t\t\t\telse\n\t\t\t\t\tnewASN1Type = Primitive;\n\t\t\t}\n\t\t//#endregion\n\t}\n\t//#endregion\n\n\t//#region Change type and perform BER decoding\n\treturnObject = localChangeType(returnObject, newASN1Type);\n\tresultOffset = returnObject.fromBER(inputBuffer, inputOffset, (returnObject.lenBlock.isIndefiniteForm === true) ? inputLength : returnObject.lenBlock.length);\n\t//#endregion\n\n\t//#region Coping incoming buffer for entire ASN.1 block\n\treturnObject.valueBeforeDecode = inputBuffer.slice(incomingOffset, incomingOffset + returnObject.blockLength);\n\t//#endregion\n\n\treturn {\n\t\toffset: resultOffset,\n\t\tresult: returnObject\n\t};\n}\n//**************************************************************************************\n/**\n * Major function for decoding ASN.1 BER array into internal library structures\n * @param {!ArrayBuffer} inputBuffer ASN.1 BER encoded array of bytes\n */\nexport function fromBER(inputBuffer)\n{\n\tif(inputBuffer.byteLength === 0)\n\t{\n\t\tconst result = new BaseBlock({}, Object);\n\t\tresult.error = \"Input buffer has zero length\";\n\n\t\treturn {\n\t\t\toffset: (-1),\n\t\t\tresult\n\t\t};\n\t}\n\n\treturn LocalFromBER(inputBuffer, 0, inputBuffer.byteLength);\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Major scheme verification function\n//**************************************************************************************\n/**\n * Compare of two ASN.1 object trees\n * @param {!Object} root Root of input ASN.1 object tree\n * @param {!Object} inputData Input ASN.1 object tree\n * @param {!Object} inputSchema Input ASN.1 schema to compare with\n * @return {{verified: boolean}|{verified:boolean, result: Object}}\n */\nexport function compareSchema(root, inputData, inputSchema)\n{\n\t//#region Special case for Choice schema element type\n\tif(inputSchema instanceof Choice)\n\t{\n\t\tconst choiceResult = false;\n\n\t\tfor(let j = 0; j < inputSchema.value.length; j++)\n\t\t{\n\t\t\tconst result = compareSchema(root, inputData, inputSchema.value[j]);\n\t\t\tif(result.verified === true)\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tverified: true,\n\t\t\t\t\tresult: root\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif(choiceResult === false)\n\t\t{\n\t\t\tconst _result = {\n\t\t\t\tverified: false,\n\t\t\t\tresult: {\n\t\t\t\t\terror: \"Wrong values for Choice type\"\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t\t_result.name = inputSchema.name;\n\n\t\t\treturn _result;\n\t\t}\n\t}\n\t//#endregion\n\n\t//#region Special case for Any schema element type\n\tif(inputSchema instanceof Any)\n\t{\n\t\t//#region Add named component of ASN.1 schema\n\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\troot[inputSchema.name] = inputData;\n\t\t//#endregion\n\n\t\treturn {\n\t\t\tverified: true,\n\t\t\tresult: root\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Initial check\n\tif((root instanceof Object) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong root object\" }\n\t\t};\n\t}\n\n\tif((inputData instanceof Object) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 data\" }\n\t\t};\n\t}\n\n\tif((inputSchema instanceof Object) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tif((ID_BLOCK in inputSchema) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Comparing idBlock properties in ASN.1 data and ASN.1 schema\n\t//#region Encode and decode ASN.1 schema idBlock\n\t/// This encoding/decoding is necessary because could be an errors in schema definition\n\tif((FROM_BER in inputSchema.idBlock) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tif((TO_BER in inputSchema.idBlock) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tconst encodedId = inputSchema.idBlock.toBER(false);\n\tif(encodedId.byteLength === 0)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Error encoding idBlock for ASN.1 schema\" }\n\t\t};\n\t}\n\n\tconst decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\n\tif(decodedOffset === (-1))\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Error decoding idBlock for ASN.1 schema\" }\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region tagClass\n\tif(inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tif(inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: root\n\t\t};\n\t}\n\t//#endregion\n\t//#region tagNumber\n\tif(inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tif(inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: root\n\t\t};\n\t}\n\t//#endregion\n\t//#region isConstructed\n\tif(inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tif(inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: root\n\t\t};\n\t}\n\t//#endregion\n\t//#region isHexOnly\n\tif((IS_HEX_ONLY in inputSchema.idBlock) === false) // Since 'isHexOnly' is an inherited property\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t};\n\t}\n\n\tif(inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: root\n\t\t};\n\t}\n\t//#endregion\n\t//#region valueHex\n\tif(inputSchema.idBlock.isHexOnly === true)\n\t{\n\t\tif((VALUE_HEX in inputSchema.idBlock) === false) // Since 'valueHex' is an inherited property\n\t\t{\n\t\t\treturn {\n\t\t\t\tverified: false,\n\t\t\t\tresult: { error: \"Wrong ASN.1 schema\" }\n\t\t\t};\n\t\t}\n\n\t\tconst schemaView = new Uint8Array(inputSchema.idBlock.valueHex);\n\t\tconst asn1View = new Uint8Array(inputData.idBlock.valueHex);\n\n\t\tif(schemaView.length !== asn1View.length)\n\t\t{\n\t\t\treturn {\n\t\t\t\tverified: false,\n\t\t\t\tresult: root\n\t\t\t};\n\t\t}\n\n\t\tfor(let i = 0; i < schemaView.length; i++)\n\t\t{\n\t\t\tif(schemaView[i] !== asn1View[1])\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tverified: false,\n\t\t\t\t\tresult: root\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\t//#endregion\n\t//#endregion\n\n\t//#region Add named component of ASN.1 schema\n\tif(inputSchema.hasOwnProperty(NAME))\n\t{\n\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\tif(inputSchema.name !== \"\")\n\t\t\troot[inputSchema.name] = inputData;\n\t}\n\t//#endregion\n\n\t//#region Getting next ASN.1 block for comparison\n\tif(inputSchema.idBlock.isConstructed === true)\n\t{\n\t\tlet admission = 0;\n\t\tlet result = { verified: false };\n\n\t\tlet maxLength = inputSchema.valueBlock.value.length;\n\n\t\tif(maxLength > 0)\n\t\t{\n\t\t\tif(inputSchema.valueBlock.value[0] instanceof Repeated)\n\t\t\t\tmaxLength = inputData.valueBlock.value.length;\n\t\t}\n\n\t\t//#region Special case when constructive value has no elements\n\t\tif(maxLength === 0)\n\t\t{\n\t\t\treturn {\n\t\t\t\tverified: true,\n\t\t\t\tresult: root\n\t\t\t};\n\t\t}\n\t\t//#endregion\n\n\t\t//#region Special case when \"inputData\" has no values and \"inputSchema\" has all optional values\n\t\tif((inputData.valueBlock.value.length === 0) &&\n\t\t\t(inputSchema.valueBlock.value.length !== 0))\n\t\t{\n\t\t\tlet _optional = true;\n\n\t\t\tfor(let i = 0; i < inputSchema.valueBlock.value.length; i++)\n\t\t\t\t_optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\n\n\t\t\tif(_optional === true)\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tverified: true,\n\t\t\t\t\tresult: root\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//#region Delete early added name of block\n\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t{\n\t\t\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\t\t\tif(inputSchema.name !== \"\")\n\t\t\t\t\tdelete root[inputSchema.name];\n\t\t\t}\n\t\t\t//#endregion\n\n\t\t\troot.error = \"Inconsistent object length\";\n\n\t\t\treturn {\n\t\t\t\tverified: false,\n\t\t\t\tresult: root\n\t\t\t};\n\t\t}\n\t\t//#endregion\n\n\t\tfor(let i = 0; i < maxLength; i++)\n\t\t{\n\t\t\t//#region Special case when there is an OPTIONAL element of ASN.1 schema at the end\n\t\t\tif((i - admission) >= inputData.valueBlock.value.length)\n\t\t\t{\n\t\t\t\tif(inputSchema.valueBlock.value[i].optional === false)\n\t\t\t\t{\n\t\t\t\t\tconst _result = {\n\t\t\t\t\t\tverified: false,\n\t\t\t\t\t\tresult: root\n\t\t\t\t\t};\n\n\t\t\t\t\troot.error = \"Inconsistent length between ASN.1 data and schema\";\n\n\t\t\t\t\t//#region Delete early added name of block\n\t\t\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t\t\t{\n\t\t\t\t\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\t\t\t\t\tif(inputSchema.name !== \"\")\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdelete root[inputSchema.name];\n\t\t\t\t\t\t\t_result.name = inputSchema.name;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//#endregion\n\n\t\t\t\t\treturn _result;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//#endregion\n\t\t\telse\n\t\t\t{\n\t\t\t\t//#region Special case for Repeated type of ASN.1 schema element\n\t\t\t\tif(inputSchema.valueBlock.value[0] instanceof Repeated)\n\t\t\t\t{\n\t\t\t\t\tresult = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\n\t\t\t\t\tif(result.verified === false)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(inputSchema.valueBlock.value[0].optional === true)\n\t\t\t\t\t\t\tadmission++;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t//#region Delete early added name of block\n\t\t\t\t\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\t\t\t\t\t\t\tif(inputSchema.name !== \"\")\n\t\t\t\t\t\t\t\t\tdelete root[inputSchema.name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//#endregion\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0))\n\t\t\t\t\t{\n\t\t\t\t\t\tlet arrayRoot = {};\n\n\t\t\t\t\t\tif((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local === true))\n\t\t\t\t\t\t\tarrayRoot = inputData;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tarrayRoot = root;\n\n\t\t\t\t\t\tif(typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\n\t\t\t\t\t\t\tarrayRoot[inputSchema.valueBlock.value[0].name] = [];\n\n\t\t\t\t\t\tarrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//#endregion\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tresult = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\n\t\t\t\t\tif(result.verified === false)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(inputSchema.valueBlock.value[i].optional === true)\n\t\t\t\t\t\t\tadmission++;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t//#region Delete early added name of block\n\t\t\t\t\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\t\t\t\t\t\t\tif(inputSchema.name !== \"\")\n\t\t\t\t\t\t\t\t\tdelete root[inputSchema.name];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//#endregion\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(result.verified === false) // The situation may take place if last element is OPTIONAL and verification failed\n\t\t{\n\t\t\tconst _result = {\n\t\t\t\tverified: false,\n\t\t\t\tresult: root\n\t\t\t};\n\n\t\t\t//#region Delete early added name of block\n\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t{\n\t\t\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\t\t\tif(inputSchema.name !== \"\")\n\t\t\t\t{\n\t\t\t\t\tdelete root[inputSchema.name];\n\t\t\t\t\t_result.name = inputSchema.name;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//#endregion\n\n\t\t\treturn _result;\n\t\t}\n\n\t\treturn {\n\t\t\tverified: true,\n\t\t\tresult: root\n\t\t};\n\t}\n\t//#endregion\n\t//#region Ability to parse internal value for primitive-encoded value (value of OctetString, for example)\n\tif((PRIMITIVE_SCHEMA in inputSchema) &&\n\t\t(VALUE_HEX in inputData.valueBlock))\n\t{\n\t\t//#region Decoding of raw ASN.1 data\n\t\tconst asn1 = fromBER(inputData.valueBlock.valueHex);\n\t\tif(asn1.offset === (-1))\n\t\t{\n\t\t\tconst _result = {\n\t\t\t\tverified: false,\n\t\t\t\tresult: asn1.result\n\t\t\t};\n\n\t\t\t//#region Delete early added name of block\n\t\t\tif(inputSchema.hasOwnProperty(NAME))\n\t\t\t{\n\t\t\t\tinputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\n\t\t\t\tif(inputSchema.name !== \"\")\n\t\t\t\t{\n\t\t\t\t\tdelete root[inputSchema.name];\n\t\t\t\t\t_result.name = inputSchema.name;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//#endregion\n\n\t\t\treturn _result;\n\t\t}\n\t\t//#endregion\n\n\t\treturn compareSchema(root, asn1.result, inputSchema.primitiveSchema);\n\t}\n\n\treturn {\n\t\tverified: true,\n\t\tresult: root\n\t};\n\t//#endregion\n}\n//**************************************************************************************\n//noinspection JSUnusedGlobalSymbols\n/**\n * ASN.1 schema verification for ArrayBuffer data\n * @param {!ArrayBuffer} inputBuffer Input BER-encoded ASN.1 data\n * @param {!Object} inputSchema Input ASN.1 schema to verify against to\n * @return {{verified: boolean}|{verified:boolean, result: Object}}\n */\nexport function verifySchema(inputBuffer, inputSchema)\n{\n\t//#region Initial check\n\tif((inputSchema instanceof Object) === false)\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: { error: \"Wrong ASN.1 schema type\" }\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Decoding of raw ASN.1 data\n\tconst asn1 = fromBER(inputBuffer);\n\tif(asn1.offset === (-1))\n\t{\n\t\treturn {\n\t\t\tverified: false,\n\t\t\tresult: asn1.result\n\t\t};\n\t}\n\t//#endregion\n\n\t//#region Compare ASN.1 struct with input schema\n\treturn compareSchema(asn1.result, asn1.result, inputSchema);\n\t//#endregion\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n//#region Major function converting JSON to ASN.1 objects\n//**************************************************************************************\n//noinspection JSUnusedGlobalSymbols\n/**\n * Converting from JSON to ASN.1 objects\n * @param {string|Object} json JSON string or object to convert to ASN.1 objects\n */\nexport function fromJSON(json)\n{\n\t// TODO Implement\n}\n//**************************************************************************************\n//#endregion\n//**************************************************************************************\n","/*!\n * Copyright (c) 2014, GMO GlobalSign\n * Copyright (c) 2015-2022, Peculiar Ventures\n * All rights reserved.\n * \n * Author 2014-2019, Yury Strozhevsky\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * \n * * Redistributions in binary form must reproduce the above copyright notice, this\n * list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * \n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n */\n\nimport * as pvtsutils from 'pvtsutils';\nimport * as pvutils from 'pvutils';\n\nfunction assertBigInt() {\r\n if (typeof BigInt === \"undefined\") {\r\n throw new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\r\n }\r\n}\r\nfunction concat(buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (let i = 0; i < buffers.length; i++) {\r\n const buffer = buffers[i];\r\n outputLength += buffer.byteLength;\r\n }\r\n const retView = new Uint8Array(outputLength);\r\n for (let i = 0; i < buffers.length; i++) {\r\n const buffer = buffers[i];\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retView.buffer;\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof Uint8Array)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be 'Uint8Array'\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\n\nclass ViewWriter {\r\n constructor() {\r\n this.items = [];\r\n }\r\n write(buf) {\r\n this.items.push(buf);\r\n }\r\n final() {\r\n return concat(this.items);\r\n }\r\n}\n\nconst powers2 = [new Uint8Array([1])];\r\nconst digitsString = \"0123456789\";\r\nconst NAME = \"name\";\r\nconst VALUE_HEX_VIEW = \"valueHexView\";\r\nconst IS_HEX_ONLY = \"isHexOnly\";\r\nconst ID_BLOCK = \"idBlock\";\r\nconst TAG_CLASS = \"tagClass\";\r\nconst TAG_NUMBER = \"tagNumber\";\r\nconst IS_CONSTRUCTED = \"isConstructed\";\r\nconst FROM_BER = \"fromBER\";\r\nconst TO_BER = \"toBER\";\r\nconst LOCAL = \"local\";\r\nconst EMPTY_STRING = \"\";\r\nconst EMPTY_BUFFER = new ArrayBuffer(0);\r\nconst EMPTY_VIEW = new Uint8Array(0);\r\nconst END_OF_CONTENT_NAME = \"EndOfContent\";\r\nconst OCTET_STRING_NAME = \"OCTET STRING\";\r\nconst BIT_STRING_NAME = \"BIT STRING\";\n\nfunction HexBlock(BaseClass) {\r\n var _a;\r\n return _a = class Some extends BaseClass {\r\n constructor(...args) {\r\n var _a;\r\n super(...args);\r\n const params = args[0] || {};\r\n this.isHexOnly = (_a = params.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n this.valueHexView = params.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(params.valueHex) : EMPTY_VIEW;\r\n }\r\n get valueHex() {\r\n return this.valueHexView.slice().buffer;\r\n }\r\n set valueHex(value) {\r\n this.valueHexView = new Uint8Array(value);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const endLength = inputOffset + inputLength;\r\n this.valueHexView = view.subarray(inputOffset, endLength);\r\n if (!this.valueHexView.length) {\r\n this.warnings.push(\"Zero buffer length\");\r\n return inputOffset;\r\n }\r\n this.blockLength = inputLength;\r\n return endLength;\r\n }\r\n toBER(sizeOnly = false) {\r\n if (!this.isHexOnly) {\r\n this.error = \"Flag 'isHexOnly' is not set, abort\";\r\n return EMPTY_BUFFER;\r\n }\r\n if (sizeOnly) {\r\n return new ArrayBuffer(this.valueHexView.byteLength);\r\n }\r\n return (this.valueHexView.byteLength === this.valueHexView.buffer.byteLength)\r\n ? this.valueHexView.buffer\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isHexOnly: this.isHexOnly,\r\n valueHex: pvtsutils.Convert.ToHex(this.valueHexView),\r\n };\r\n }\r\n },\r\n _a.NAME = \"hexBlock\",\r\n _a;\r\n}\n\nclass LocalBaseBlock {\r\n constructor({ blockLength = 0, error = EMPTY_STRING, warnings = [], valueBeforeDecode = EMPTY_VIEW, } = {}) {\r\n this.blockLength = blockLength;\r\n this.error = error;\r\n this.warnings = warnings;\r\n this.valueBeforeDecodeView = pvtsutils.BufferSourceConverter.toUint8Array(valueBeforeDecode);\r\n }\r\n static blockName() {\r\n return this.NAME;\r\n }\r\n get valueBeforeDecode() {\r\n return this.valueBeforeDecodeView.slice().buffer;\r\n }\r\n set valueBeforeDecode(value) {\r\n this.valueBeforeDecodeView = new Uint8Array(value);\r\n }\r\n toJSON() {\r\n return {\r\n blockName: this.constructor.NAME,\r\n blockLength: this.blockLength,\r\n error: this.error,\r\n warnings: this.warnings,\r\n valueBeforeDecode: pvtsutils.Convert.ToHex(this.valueBeforeDecodeView),\r\n };\r\n }\r\n}\r\nLocalBaseBlock.NAME = \"baseBlock\";\n\nclass ValueBlock extends LocalBaseBlock {\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n }\r\n toBER(sizeOnly, writer) {\r\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n }\r\n}\r\nValueBlock.NAME = \"valueBlock\";\n\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock) {\r\n constructor({ idBlock = {}, } = {}) {\r\n var _a, _b, _c, _d;\r\n super();\r\n if (idBlock) {\r\n this.isHexOnly = (_a = idBlock.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n this.valueHexView = idBlock.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(idBlock.valueHex) : EMPTY_VIEW;\r\n this.tagClass = (_b = idBlock.tagClass) !== null && _b !== void 0 ? _b : -1;\r\n this.tagNumber = (_c = idBlock.tagNumber) !== null && _c !== void 0 ? _c : -1;\r\n this.isConstructed = (_d = idBlock.isConstructed) !== null && _d !== void 0 ? _d : false;\r\n }\r\n else {\r\n this.tagClass = -1;\r\n this.tagNumber = -1;\r\n this.isConstructed = false;\r\n }\r\n }\r\n toBER(sizeOnly = false) {\r\n let firstOctet = 0;\r\n switch (this.tagClass) {\r\n case 1:\r\n firstOctet |= 0x00;\r\n break;\r\n case 2:\r\n firstOctet |= 0x40;\r\n break;\r\n case 3:\r\n firstOctet |= 0x80;\r\n break;\r\n case 4:\r\n firstOctet |= 0xC0;\r\n break;\r\n default:\r\n this.error = \"Unknown tag class\";\r\n return EMPTY_BUFFER;\r\n }\r\n if (this.isConstructed)\r\n firstOctet |= 0x20;\r\n if (this.tagNumber < 31 && !this.isHexOnly) {\r\n const retView = new Uint8Array(1);\r\n if (!sizeOnly) {\r\n let number = this.tagNumber;\r\n number &= 0x1F;\r\n firstOctet |= number;\r\n retView[0] = firstOctet;\r\n }\r\n return retView.buffer;\r\n }\r\n if (!this.isHexOnly) {\r\n const encodedBuf = pvutils.utilToBase(this.tagNumber, 7);\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const size = encodedBuf.byteLength;\r\n const retView = new Uint8Array(size + 1);\r\n retView[0] = (firstOctet | 0x1F);\r\n if (!sizeOnly) {\r\n for (let i = 0; i < (size - 1); i++)\r\n retView[i + 1] = encodedView[i] | 0x80;\r\n retView[size] = encodedView[size - 1];\r\n }\r\n return retView.buffer;\r\n }\r\n const retView = new Uint8Array(this.valueHexView.byteLength + 1);\r\n retView[0] = (firstOctet | 0x1F);\r\n if (!sizeOnly) {\r\n const curView = this.valueHexView;\r\n for (let i = 0; i < (curView.length - 1); i++)\r\n retView[i + 1] = curView[i] | 0x80;\r\n retView[this.valueHexView.byteLength] = curView[curView.length - 1];\r\n }\r\n return retView.buffer;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n if (intBuffer.length === 0) {\r\n this.error = \"Zero buffer length\";\r\n return -1;\r\n }\r\n const tagClassMask = intBuffer[0] & 0xC0;\r\n switch (tagClassMask) {\r\n case 0x00:\r\n this.tagClass = (1);\r\n break;\r\n case 0x40:\r\n this.tagClass = (2);\r\n break;\r\n case 0x80:\r\n this.tagClass = (3);\r\n break;\r\n case 0xC0:\r\n this.tagClass = (4);\r\n break;\r\n default:\r\n this.error = \"Unknown tag class\";\r\n return -1;\r\n }\r\n this.isConstructed = (intBuffer[0] & 0x20) === 0x20;\r\n this.isHexOnly = false;\r\n const tagNumberMask = intBuffer[0] & 0x1F;\r\n if (tagNumberMask !== 0x1F) {\r\n this.tagNumber = (tagNumberMask);\r\n this.blockLength = 1;\r\n }\r\n else {\r\n let count = 1;\r\n let intTagNumberBuffer = this.valueHexView = new Uint8Array(255);\r\n let tagNumberBufferMaxLength = 255;\r\n while (intBuffer[count] & 0x80) {\r\n intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n count++;\r\n if (count >= intBuffer.length) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (count === tagNumberBufferMaxLength) {\r\n tagNumberBufferMaxLength += 255;\r\n const tempBufferView = new Uint8Array(tagNumberBufferMaxLength);\r\n for (let i = 0; i < intTagNumberBuffer.length; i++)\r\n tempBufferView[i] = intTagNumberBuffer[i];\r\n intTagNumberBuffer = this.valueHexView = new Uint8Array(tagNumberBufferMaxLength);\r\n }\r\n }\r\n this.blockLength = (count + 1);\r\n intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n const tempBufferView = new Uint8Array(count);\r\n for (let i = 0; i < count; i++)\r\n tempBufferView[i] = intTagNumberBuffer[i];\r\n intTagNumberBuffer = this.valueHexView = new Uint8Array(count);\r\n intTagNumberBuffer.set(tempBufferView);\r\n if (this.blockLength <= 9)\r\n this.tagNumber = pvutils.utilFromBase(intTagNumberBuffer, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Tag too long, represented as hex-coded\");\r\n }\r\n }\r\n if (((this.tagClass === 1)) &&\r\n (this.isConstructed)) {\r\n switch (this.tagNumber) {\r\n case 1:\r\n case 2:\r\n case 5:\r\n case 6:\r\n case 9:\r\n case 13:\r\n case 14:\r\n case 23:\r\n case 24:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n this.error = \"Constructed encoding used for primitive type\";\r\n return -1;\r\n }\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n tagClass: this.tagClass,\r\n tagNumber: this.tagNumber,\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalIdentificationBlock.NAME = \"identificationBlock\";\n\nclass LocalLengthBlock extends LocalBaseBlock {\r\n constructor({ lenBlock = {}, } = {}) {\r\n var _a, _b, _c;\r\n super();\r\n this.isIndefiniteForm = (_a = lenBlock.isIndefiniteForm) !== null && _a !== void 0 ? _a : false;\r\n this.longFormUsed = (_b = lenBlock.longFormUsed) !== null && _b !== void 0 ? _b : false;\r\n this.length = (_c = lenBlock.length) !== null && _c !== void 0 ? _c : 0;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = view.subarray(inputOffset, inputOffset + inputLength);\r\n if (intBuffer.length === 0) {\r\n this.error = \"Zero buffer length\";\r\n return -1;\r\n }\r\n if (intBuffer[0] === 0xFF) {\r\n this.error = \"Length block 0xFF is reserved by standard\";\r\n return -1;\r\n }\r\n this.isIndefiniteForm = intBuffer[0] === 0x80;\r\n if (this.isIndefiniteForm) {\r\n this.blockLength = 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n this.longFormUsed = !!(intBuffer[0] & 0x80);\r\n if (this.longFormUsed === false) {\r\n this.length = (intBuffer[0]);\r\n this.blockLength = 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n const count = intBuffer[0] & 0x7F;\r\n if (count > 8) {\r\n this.error = \"Too big integer\";\r\n return -1;\r\n }\r\n if ((count + 1) > intBuffer.length) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n const lenOffset = inputOffset + 1;\r\n const lengthBufferView = view.subarray(lenOffset, lenOffset + count);\r\n if (lengthBufferView[count - 1] === 0x00)\r\n this.warnings.push(\"Needlessly long encoded length\");\r\n this.length = pvutils.utilFromBase(lengthBufferView, 8);\r\n if (this.longFormUsed && (this.length <= 127))\r\n this.warnings.push(\"Unnecessary usage of long length form\");\r\n this.blockLength = count + 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n toBER(sizeOnly = false) {\r\n let retBuf;\r\n let retView;\r\n if (this.length > 127)\r\n this.longFormUsed = true;\r\n if (this.isIndefiniteForm) {\r\n retBuf = new ArrayBuffer(1);\r\n if (sizeOnly === false) {\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = 0x80;\r\n }\r\n return retBuf;\r\n }\r\n if (this.longFormUsed) {\r\n const encodedBuf = pvutils.utilToBase(this.length, 8);\r\n if (encodedBuf.byteLength > 127) {\r\n this.error = \"Too big length\";\r\n return (EMPTY_BUFFER);\r\n }\r\n retBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\r\n if (sizeOnly)\r\n return retBuf;\r\n const encodedView = new Uint8Array(encodedBuf);\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = encodedBuf.byteLength | 0x80;\r\n for (let i = 0; i < encodedBuf.byteLength; i++)\r\n retView[i + 1] = encodedView[i];\r\n return retBuf;\r\n }\r\n retBuf = new ArrayBuffer(1);\r\n if (sizeOnly === false) {\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = this.length;\r\n }\r\n return retBuf;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isIndefiniteForm: this.isIndefiniteForm,\r\n longFormUsed: this.longFormUsed,\r\n length: this.length,\r\n };\r\n }\r\n}\r\nLocalLengthBlock.NAME = \"lengthBlock\";\n\nconst typeStore = {};\n\nclass BaseBlock extends LocalBaseBlock {\r\n constructor({ name = EMPTY_STRING, optional = false, primitiveSchema, ...parameters } = {}, valueBlockType) {\r\n super(parameters);\r\n this.name = name;\r\n this.optional = optional;\r\n if (primitiveSchema) {\r\n this.primitiveSchema = primitiveSchema;\r\n }\r\n this.idBlock = new LocalIdentificationBlock(parameters);\r\n this.lenBlock = new LocalLengthBlock(parameters);\r\n this.valueBlock = valueBlockType ? new valueBlockType(parameters) : new ValueBlock(parameters);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const _writer = writer || new ViewWriter();\r\n if (!writer) {\r\n prepareIndefiniteForm(this);\r\n }\r\n const idBlockBuf = this.idBlock.toBER(sizeOnly);\r\n _writer.write(idBlockBuf);\r\n if (this.lenBlock.isIndefiniteForm) {\r\n _writer.write(new Uint8Array([0x80]).buffer);\r\n this.valueBlock.toBER(sizeOnly, _writer);\r\n _writer.write(new ArrayBuffer(2));\r\n }\r\n else {\r\n const valueBlockBuf = this.valueBlock.toBER(sizeOnly);\r\n this.lenBlock.length = valueBlockBuf.byteLength;\r\n const lenBlockBuf = this.lenBlock.toBER(sizeOnly);\r\n _writer.write(lenBlockBuf);\r\n _writer.write(valueBlockBuf);\r\n }\r\n if (!writer) {\r\n return _writer.final();\r\n }\r\n return EMPTY_BUFFER;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n idBlock: this.idBlock.toJSON(),\r\n lenBlock: this.lenBlock.toJSON(),\r\n valueBlock: this.valueBlock.toJSON(),\r\n name: this.name,\r\n optional: this.optional,\r\n };\r\n if (this.primitiveSchema)\r\n object.primitiveSchema = this.primitiveSchema.toJSON();\r\n return object;\r\n }\r\n toString(encoding = \"ascii\") {\r\n if (encoding === \"ascii\") {\r\n return this.onAsciiEncoding();\r\n }\r\n return pvtsutils.Convert.ToHex(this.toBER());\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${pvtsutils.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`;\r\n }\r\n isEqual(other) {\r\n if (this === other) {\r\n return true;\r\n }\r\n if (!(other instanceof this.constructor)) {\r\n return false;\r\n }\r\n const thisRaw = this.toBER();\r\n const otherRaw = other.toBER();\r\n return pvutils.isEqualBuffer(thisRaw, otherRaw);\r\n }\r\n}\r\nBaseBlock.NAME = \"BaseBlock\";\r\nfunction prepareIndefiniteForm(baseBlock) {\r\n if (baseBlock instanceof typeStore.Constructed) {\r\n for (const value of baseBlock.valueBlock.value) {\r\n if (prepareIndefiniteForm(value)) {\r\n baseBlock.lenBlock.isIndefiniteForm = true;\r\n }\r\n }\r\n }\r\n return !!baseBlock.lenBlock.isIndefiniteForm;\r\n}\n\nclass BaseStringBlock extends BaseBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}, stringValueBlockType) {\r\n super(parameters, stringValueBlockType);\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n getValue() {\r\n return this.valueBlock.value;\r\n }\r\n setValue(value) {\r\n this.valueBlock.value = value;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n this.fromBuffer(this.valueBlock.valueHexView);\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : '${this.valueBlock.value}'`;\r\n }\r\n}\r\nBaseStringBlock.NAME = \"BaseStringBlock\";\n\nclass LocalPrimitiveValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ isHexOnly = true, ...parameters } = {}) {\r\n super(parameters);\r\n this.isHexOnly = isHexOnly;\r\n }\r\n}\r\nLocalPrimitiveValueBlock.NAME = \"PrimitiveValueBlock\";\n\nvar _a$w;\r\nclass Primitive extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalPrimitiveValueBlock);\r\n this.idBlock.isConstructed = false;\r\n }\r\n}\r\n_a$w = Primitive;\r\n(() => {\r\n typeStore.Primitive = _a$w;\r\n})();\r\nPrimitive.NAME = \"PRIMITIVE\";\n\nfunction localChangeType(inputObject, newType) {\r\n if (inputObject instanceof newType) {\r\n return inputObject;\r\n }\r\n const newObject = new newType();\r\n newObject.idBlock = inputObject.idBlock;\r\n newObject.lenBlock = inputObject.lenBlock;\r\n newObject.warnings = inputObject.warnings;\r\n newObject.valueBeforeDecodeView = inputObject.valueBeforeDecodeView;\r\n return newObject;\r\n}\r\nfunction localFromBER(inputBuffer, inputOffset = 0, inputLength = inputBuffer.length) {\r\n const incomingOffset = inputOffset;\r\n let returnObject = new BaseBlock({}, ValueBlock);\r\n const baseBlock = new LocalBaseBlock();\r\n if (!checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength)) {\r\n returnObject.error = baseBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n const intBuffer = inputBuffer.subarray(inputOffset, inputOffset + inputLength);\r\n if (!intBuffer.length) {\r\n returnObject.error = \"Zero buffer length\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n let resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (returnObject.idBlock.warnings.length) {\r\n returnObject.warnings.concat(returnObject.idBlock.warnings);\r\n }\r\n if (resultOffset === -1) {\r\n returnObject.error = returnObject.idBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n inputOffset = resultOffset;\r\n inputLength -= returnObject.idBlock.blockLength;\r\n resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (returnObject.lenBlock.warnings.length) {\r\n returnObject.warnings.concat(returnObject.lenBlock.warnings);\r\n }\r\n if (resultOffset === -1) {\r\n returnObject.error = returnObject.lenBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n inputOffset = resultOffset;\r\n inputLength -= returnObject.lenBlock.blockLength;\r\n if (!returnObject.idBlock.isConstructed &&\r\n returnObject.lenBlock.isIndefiniteForm) {\r\n returnObject.error = \"Indefinite length form used for primitive encoding form\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n let newASN1Type = BaseBlock;\r\n switch (returnObject.idBlock.tagClass) {\r\n case 1:\r\n if ((returnObject.idBlock.tagNumber >= 37) &&\r\n (returnObject.idBlock.isHexOnly === false)) {\r\n returnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n switch (returnObject.idBlock.tagNumber) {\r\n case 0:\r\n if ((returnObject.idBlock.isConstructed) &&\r\n (returnObject.lenBlock.length > 0)) {\r\n returnObject.error = \"Type [UNIVERSAL 0] is reserved\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n newASN1Type = typeStore.EndOfContent;\r\n break;\r\n case 1:\r\n newASN1Type = typeStore.Boolean;\r\n break;\r\n case 2:\r\n newASN1Type = typeStore.Integer;\r\n break;\r\n case 3:\r\n newASN1Type = typeStore.BitString;\r\n break;\r\n case 4:\r\n newASN1Type = typeStore.OctetString;\r\n break;\r\n case 5:\r\n newASN1Type = typeStore.Null;\r\n break;\r\n case 6:\r\n newASN1Type = typeStore.ObjectIdentifier;\r\n break;\r\n case 10:\r\n newASN1Type = typeStore.Enumerated;\r\n break;\r\n case 12:\r\n newASN1Type = typeStore.Utf8String;\r\n break;\r\n case 13:\r\n newASN1Type = typeStore.RelativeObjectIdentifier;\r\n break;\r\n case 14:\r\n newASN1Type = typeStore.TIME;\r\n break;\r\n case 15:\r\n returnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n case 16:\r\n newASN1Type = typeStore.Sequence;\r\n break;\r\n case 17:\r\n newASN1Type = typeStore.Set;\r\n break;\r\n case 18:\r\n newASN1Type = typeStore.NumericString;\r\n break;\r\n case 19:\r\n newASN1Type = typeStore.PrintableString;\r\n break;\r\n case 20:\r\n newASN1Type = typeStore.TeletexString;\r\n break;\r\n case 21:\r\n newASN1Type = typeStore.VideotexString;\r\n break;\r\n case 22:\r\n newASN1Type = typeStore.IA5String;\r\n break;\r\n case 23:\r\n newASN1Type = typeStore.UTCTime;\r\n break;\r\n case 24:\r\n newASN1Type = typeStore.GeneralizedTime;\r\n break;\r\n case 25:\r\n newASN1Type = typeStore.GraphicString;\r\n break;\r\n case 26:\r\n newASN1Type = typeStore.VisibleString;\r\n break;\r\n case 27:\r\n newASN1Type = typeStore.GeneralString;\r\n break;\r\n case 28:\r\n newASN1Type = typeStore.UniversalString;\r\n break;\r\n case 29:\r\n newASN1Type = typeStore.CharacterString;\r\n break;\r\n case 30:\r\n newASN1Type = typeStore.BmpString;\r\n break;\r\n case 31:\r\n newASN1Type = typeStore.DATE;\r\n break;\r\n case 32:\r\n newASN1Type = typeStore.TimeOfDay;\r\n break;\r\n case 33:\r\n newASN1Type = typeStore.DateTime;\r\n break;\r\n case 34:\r\n newASN1Type = typeStore.Duration;\r\n break;\r\n default: {\r\n const newObject = returnObject.idBlock.isConstructed\r\n ? new typeStore.Constructed()\r\n : new typeStore.Primitive();\r\n newObject.idBlock = returnObject.idBlock;\r\n newObject.lenBlock = returnObject.lenBlock;\r\n newObject.warnings = returnObject.warnings;\r\n returnObject = newObject;\r\n }\r\n }\r\n break;\r\n case 2:\r\n case 3:\r\n case 4:\r\n default: {\r\n newASN1Type = returnObject.idBlock.isConstructed\r\n ? typeStore.Constructed\r\n : typeStore.Primitive;\r\n }\r\n }\r\n returnObject = localChangeType(returnObject, newASN1Type);\r\n resultOffset = returnObject.fromBER(inputBuffer, inputOffset, returnObject.lenBlock.isIndefiniteForm ? inputLength : returnObject.lenBlock.length);\r\n returnObject.valueBeforeDecodeView = inputBuffer.subarray(incomingOffset, incomingOffset + returnObject.blockLength);\r\n return {\r\n offset: resultOffset,\r\n result: returnObject\r\n };\r\n}\r\nfunction fromBER(inputBuffer) {\r\n if (!inputBuffer.byteLength) {\r\n const result = new BaseBlock({}, ValueBlock);\r\n result.error = \"Input buffer has zero length\";\r\n return {\r\n offset: -1,\r\n result\r\n };\r\n }\r\n return localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).slice(), 0, inputBuffer.byteLength);\r\n}\n\nfunction checkLen(indefiniteLength, length) {\r\n if (indefiniteLength) {\r\n return 1;\r\n }\r\n return length;\r\n}\r\nclass LocalConstructedValueBlock extends ValueBlock {\r\n constructor({ value = [], isIndefiniteForm = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n this.isIndefiniteForm = isIndefiniteForm;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n this.valueBeforeDecodeView = view.subarray(inputOffset, inputOffset + inputLength);\r\n if (this.valueBeforeDecodeView.length === 0) {\r\n this.warnings.push(\"Zero buffer length\");\r\n return inputOffset;\r\n }\r\n let currentOffset = inputOffset;\r\n while (checkLen(this.isIndefiniteForm, inputLength) > 0) {\r\n const returnObject = localFromBER(view, currentOffset, inputLength);\r\n if (returnObject.offset === -1) {\r\n this.error = returnObject.result.error;\r\n this.warnings.concat(returnObject.result.warnings);\r\n return -1;\r\n }\r\n currentOffset = returnObject.offset;\r\n this.blockLength += returnObject.result.blockLength;\r\n inputLength -= returnObject.result.blockLength;\r\n this.value.push(returnObject.result);\r\n if (this.isIndefiniteForm && returnObject.result.constructor.NAME === END_OF_CONTENT_NAME) {\r\n break;\r\n }\r\n }\r\n if (this.isIndefiniteForm) {\r\n if (this.value[this.value.length - 1].constructor.NAME === END_OF_CONTENT_NAME) {\r\n this.value.pop();\r\n }\r\n else {\r\n this.warnings.push(\"No EndOfContent block encoded\");\r\n }\r\n }\r\n return currentOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const _writer = writer || new ViewWriter();\r\n for (let i = 0; i < this.value.length; i++) {\r\n this.value[i].toBER(sizeOnly, _writer);\r\n }\r\n if (!writer) {\r\n return _writer.final();\r\n }\r\n return EMPTY_BUFFER;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n isIndefiniteForm: this.isIndefiniteForm,\r\n value: [],\r\n };\r\n for (const value of this.value) {\r\n object.value.push(value.toJSON());\r\n }\r\n return object;\r\n }\r\n}\r\nLocalConstructedValueBlock.NAME = \"ConstructedValueBlock\";\n\nvar _a$v;\r\nclass Constructed extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalConstructedValueBlock);\r\n this.idBlock.isConstructed = true;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n onAsciiEncoding() {\r\n const values = [];\r\n for (const value of this.valueBlock.value) {\r\n values.push(value.toString(\"ascii\").split(\"\\n\").map(o => ` ${o}`).join(\"\\n\"));\r\n }\r\n const blockName = this.idBlock.tagClass === 3\r\n ? `[${this.idBlock.tagNumber}]`\r\n : this.constructor.NAME;\r\n return values.length\r\n ? `${blockName} :\\n${values.join(\"\\n\")}`\r\n : `${blockName} :`;\r\n }\r\n}\r\n_a$v = Constructed;\r\n(() => {\r\n typeStore.Constructed = _a$v;\r\n})();\r\nConstructed.NAME = \"CONSTRUCTED\";\n\nclass LocalEndOfContentValueBlock extends ValueBlock {\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n return inputOffset;\r\n }\r\n toBER(sizeOnly) {\r\n return EMPTY_BUFFER;\r\n }\r\n}\r\nLocalEndOfContentValueBlock.override = \"EndOfContentValueBlock\";\n\nvar _a$u;\r\nclass EndOfContent extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalEndOfContentValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 0;\r\n }\r\n}\r\n_a$u = EndOfContent;\r\n(() => {\r\n typeStore.EndOfContent = _a$u;\r\n})();\r\nEndOfContent.NAME = END_OF_CONTENT_NAME;\n\nvar _a$t;\r\nclass Null extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, ValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 5;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (this.lenBlock.length > 0)\r\n this.warnings.push(\"Non-zero length of value block for Null type\");\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n this.blockLength += inputLength;\r\n if ((inputOffset + inputLength) > inputBuffer.byteLength) {\r\n this.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return -1;\r\n }\r\n return (inputOffset + inputLength);\r\n }\r\n toBER(sizeOnly, writer) {\r\n const retBuf = new ArrayBuffer(2);\r\n if (!sizeOnly) {\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] = 0x05;\r\n retView[1] = 0x00;\r\n }\r\n if (writer) {\r\n writer.write(retBuf);\r\n }\r\n return retBuf;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME}`;\r\n }\r\n}\r\n_a$t = Null;\r\n(() => {\r\n typeStore.Null = _a$t;\r\n})();\r\nNull.NAME = \"NULL\";\n\nclass LocalBooleanValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ value, ...parameters } = {}) {\r\n super(parameters);\r\n if (parameters.valueHex) {\r\n this.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(parameters.valueHex);\r\n }\r\n else {\r\n this.valueHexView = new Uint8Array(1);\r\n }\r\n if (value) {\r\n this.value = value;\r\n }\r\n }\r\n get value() {\r\n for (const octet of this.valueHexView) {\r\n if (octet > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n set value(value) {\r\n this.valueHexView[0] = value ? 0xFF : 0x00;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n this.valueHexView = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n if (inputLength > 1)\r\n this.warnings.push(\"Boolean value encoded in more then 1 octet\");\r\n this.isHexOnly = true;\r\n pvutils.utilDecodeTC.call(this);\r\n this.blockLength = inputLength;\r\n return (inputOffset + inputLength);\r\n }\r\n toBER() {\r\n return this.valueHexView.slice();\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.value,\r\n };\r\n }\r\n}\r\nLocalBooleanValueBlock.NAME = \"BooleanValueBlock\";\n\nvar _a$s;\r\nclass Boolean extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalBooleanValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 1;\r\n }\r\n getValue() {\r\n return this.valueBlock.value;\r\n }\r\n setValue(value) {\r\n this.valueBlock.value = value;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.getValue}`;\r\n }\r\n}\r\n_a$s = Boolean;\r\n(() => {\r\n typeStore.Boolean = _a$s;\r\n})();\r\nBoolean.NAME = \"BOOLEAN\";\n\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n constructor({ isConstructed = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.isConstructed = isConstructed;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = 0;\r\n if (this.isConstructed) {\r\n this.isHexOnly = false;\r\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1)\r\n return resultOffset;\r\n for (let i = 0; i < this.value.length; i++) {\r\n const currentBlockName = this.value[i].constructor.NAME;\r\n if (currentBlockName === END_OF_CONTENT_NAME) {\r\n if (this.isIndefiniteForm)\r\n break;\r\n else {\r\n this.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n if (currentBlockName !== OCTET_STRING_NAME) {\r\n this.error = \"OCTET STRING may consists of OCTET STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n }\r\n else {\r\n this.isHexOnly = true;\r\n resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n this.blockLength = inputLength;\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n if (this.isConstructed)\r\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n return sizeOnly\r\n ? new ArrayBuffer(this.valueHexView.byteLength)\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalOctetStringValueBlock.NAME = \"OctetStringValueBlock\";\n\nvar _a$r;\r\nclass OctetString extends BaseBlock {\r\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n var _b, _c;\r\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n super({\r\n idBlock: {\r\n isConstructed: parameters.isConstructed,\r\n ...idBlock,\r\n },\r\n lenBlock: {\r\n ...lenBlock,\r\n isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n },\r\n ...parameters,\r\n }, LocalOctetStringValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 4;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n if (inputLength === 0) {\r\n if (this.idBlock.error.length === 0)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (this.lenBlock.error.length === 0)\r\n this.blockLength += this.lenBlock.blockLength;\r\n return inputOffset;\r\n }\r\n if (!this.valueBlock.isConstructed) {\r\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n const buf = view.subarray(inputOffset, inputOffset + inputLength);\r\n try {\r\n if (buf.byteLength) {\r\n const asn = localFromBER(buf, 0, buf.byteLength);\r\n if (asn.offset !== -1 && asn.offset === inputLength) {\r\n this.valueBlock.value = [asn.result];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n }\r\n onAsciiEncoding() {\r\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n return Constructed.prototype.onAsciiEncoding.call(this);\r\n }\r\n return `${this.constructor.NAME} : ${pvtsutils.Convert.ToHex(this.valueBlock.valueHexView)}`;\r\n }\r\n getValue() {\r\n if (!this.idBlock.isConstructed) {\r\n return this.valueBlock.valueHexView.slice().buffer;\r\n }\r\n const array = [];\r\n for (const content of this.valueBlock.value) {\r\n if (content instanceof OctetString) {\r\n array.push(content.valueBlock.valueHexView);\r\n }\r\n }\r\n return pvtsutils.BufferSourceConverter.concat(array);\r\n }\r\n}\r\n_a$r = OctetString;\r\n(() => {\r\n typeStore.OctetString = _a$r;\r\n})();\r\nOctetString.NAME = OCTET_STRING_NAME;\n\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n constructor({ unusedBits = 0, isConstructed = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.unusedBits = unusedBits;\r\n this.isConstructed = isConstructed;\r\n this.blockLength = this.valueHexView.byteLength;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (!inputLength) {\r\n return inputOffset;\r\n }\r\n let resultOffset = -1;\r\n if (this.isConstructed) {\r\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1)\r\n return resultOffset;\r\n for (const value of this.value) {\r\n const currentBlockName = value.constructor.NAME;\r\n if (currentBlockName === END_OF_CONTENT_NAME) {\r\n if (this.isIndefiniteForm)\r\n break;\r\n else {\r\n this.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n if (currentBlockName !== BIT_STRING_NAME) {\r\n this.error = \"BIT STRING may consists of BIT STRINGs only\";\r\n return -1;\r\n }\r\n const valueBlock = value.valueBlock;\r\n if ((this.unusedBits > 0) && (valueBlock.unusedBits > 0)) {\r\n this.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\r\n return -1;\r\n }\r\n this.unusedBits = valueBlock.unusedBits;\r\n }\r\n return resultOffset;\r\n }\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.unusedBits = intBuffer[0];\r\n if (this.unusedBits > 7) {\r\n this.error = \"Unused bits for BitString must be in range 0-7\";\r\n return -1;\r\n }\r\n if (!this.unusedBits) {\r\n const buf = intBuffer.subarray(1);\r\n try {\r\n if (buf.byteLength) {\r\n const asn = localFromBER(buf, 0, buf.byteLength);\r\n if (asn.offset !== -1 && asn.offset === (inputLength - 1)) {\r\n this.value = [asn.result];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n this.valueHexView = intBuffer.subarray(1);\r\n this.blockLength = intBuffer.length;\r\n return (inputOffset + inputLength);\r\n }\r\n toBER(sizeOnly, writer) {\r\n if (this.isConstructed) {\r\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n }\r\n if (sizeOnly) {\r\n return new ArrayBuffer(this.valueHexView.byteLength + 1);\r\n }\r\n if (!this.valueHexView.byteLength) {\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(this.valueHexView.length + 1);\r\n retView[0] = this.unusedBits;\r\n retView.set(this.valueHexView, 1);\r\n return retView.buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n unusedBits: this.unusedBits,\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalBitStringValueBlock.NAME = \"BitStringValueBlock\";\n\nvar _a$q;\r\nclass BitString extends BaseBlock {\r\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n var _b, _c;\r\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n super({\r\n idBlock: {\r\n isConstructed: parameters.isConstructed,\r\n ...idBlock,\r\n },\r\n lenBlock: {\r\n ...lenBlock,\r\n isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n },\r\n ...parameters,\r\n }, LocalBitStringValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 3;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n }\r\n onAsciiEncoding() {\r\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n return Constructed.prototype.onAsciiEncoding.call(this);\r\n }\r\n else {\r\n const bits = [];\r\n const valueHex = this.valueBlock.valueHexView;\r\n for (const byte of valueHex) {\r\n bits.push(byte.toString(2).padStart(8, \"0\"));\r\n }\r\n const bitsStr = bits.join(\"\");\r\n return `${this.constructor.NAME} : ${bitsStr.substring(0, bitsStr.length - this.valueBlock.unusedBits)}`;\r\n }\r\n }\r\n}\r\n_a$q = BitString;\r\n(() => {\r\n typeStore.BitString = _a$q;\r\n})();\r\nBitString.NAME = BIT_STRING_NAME;\n\nvar _a$p;\r\nfunction viewAdd(first, second) {\r\n const c = new Uint8Array([0]);\r\n const firstView = new Uint8Array(first);\r\n const secondView = new Uint8Array(second);\r\n let firstViewCopy = firstView.slice(0);\r\n const firstViewCopyLength = firstViewCopy.length - 1;\r\n const secondViewCopy = secondView.slice(0);\r\n const secondViewCopyLength = secondViewCopy.length - 1;\r\n let value = 0;\r\n const max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\r\n let counter = 0;\r\n for (let i = max; i >= 0; i--, counter++) {\r\n switch (true) {\r\n case (counter < secondViewCopy.length):\r\n value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\r\n break;\r\n default:\r\n value = firstViewCopy[firstViewCopyLength - counter] + c[0];\r\n }\r\n c[0] = value / 10;\r\n switch (true) {\r\n case (counter >= firstViewCopy.length):\r\n firstViewCopy = pvutils.utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\r\n break;\r\n default:\r\n firstViewCopy[firstViewCopyLength - counter] = value % 10;\r\n }\r\n }\r\n if (c[0] > 0)\r\n firstViewCopy = pvutils.utilConcatView(c, firstViewCopy);\r\n return firstViewCopy;\r\n}\r\nfunction power2(n) {\r\n if (n >= powers2.length) {\r\n for (let p = powers2.length; p <= n; p++) {\r\n const c = new Uint8Array([0]);\r\n let digits = (powers2[p - 1]).slice(0);\r\n for (let i = (digits.length - 1); i >= 0; i--) {\r\n const newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\r\n c[0] = newValue[0] / 10;\r\n digits[i] = newValue[0] % 10;\r\n }\r\n if (c[0] > 0)\r\n digits = pvutils.utilConcatView(c, digits);\r\n powers2.push(digits);\r\n }\r\n }\r\n return powers2[n];\r\n}\r\nfunction viewSub(first, second) {\r\n let b = 0;\r\n const firstView = new Uint8Array(first);\r\n const secondView = new Uint8Array(second);\r\n const firstViewCopy = firstView.slice(0);\r\n const firstViewCopyLength = firstViewCopy.length - 1;\r\n const secondViewCopy = secondView.slice(0);\r\n const secondViewCopyLength = secondViewCopy.length - 1;\r\n let value;\r\n let counter = 0;\r\n for (let i = secondViewCopyLength; i >= 0; i--, counter++) {\r\n value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\r\n switch (true) {\r\n case (value < 0):\r\n b = 1;\r\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n break;\r\n default:\r\n b = 0;\r\n firstViewCopy[firstViewCopyLength - counter] = value;\r\n }\r\n }\r\n if (b > 0) {\r\n for (let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++) {\r\n value = firstViewCopy[firstViewCopyLength - counter] - b;\r\n if (value < 0) {\r\n b = 1;\r\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n }\r\n else {\r\n b = 0;\r\n firstViewCopy[firstViewCopyLength - counter] = value;\r\n break;\r\n }\r\n }\r\n }\r\n return firstViewCopy.slice();\r\n}\r\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ value, ...parameters } = {}) {\r\n super(parameters);\r\n this._valueDec = 0;\r\n if (parameters.valueHex) {\r\n this.setValueHex();\r\n }\r\n if (value !== undefined) {\r\n this.valueDec = value;\r\n }\r\n }\r\n setValueHex() {\r\n if (this.valueHexView.length >= 4) {\r\n this.warnings.push(\"Too big Integer for decoding, hex only\");\r\n this.isHexOnly = true;\r\n this._valueDec = 0;\r\n }\r\n else {\r\n this.isHexOnly = false;\r\n if (this.valueHexView.length > 0) {\r\n this._valueDec = pvutils.utilDecodeTC.call(this);\r\n }\r\n }\r\n }\r\n set valueDec(v) {\r\n this._valueDec = v;\r\n this.isHexOnly = false;\r\n this.valueHexView = new Uint8Array(pvutils.utilEncodeTC(v));\r\n }\r\n get valueDec() {\r\n return this._valueDec;\r\n }\r\n fromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0) {\r\n const offset = this.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (offset === -1)\r\n return offset;\r\n const view = this.valueHexView;\r\n if ((view[0] === 0x00) && ((view[1] & 0x80) !== 0)) {\r\n this.valueHexView = view.subarray(1);\r\n }\r\n else {\r\n if (expectedLength !== 0) {\r\n if (view.length < expectedLength) {\r\n if ((expectedLength - view.length) > 1)\r\n expectedLength = view.length + 1;\r\n this.valueHexView = view.subarray(expectedLength - view.length);\r\n }\r\n }\r\n }\r\n return offset;\r\n }\r\n toDER(sizeOnly = false) {\r\n const view = this.valueHexView;\r\n switch (true) {\r\n case ((view[0] & 0x80) !== 0):\r\n {\r\n const updatedView = new Uint8Array(this.valueHexView.length + 1);\r\n updatedView[0] = 0x00;\r\n updatedView.set(view, 1);\r\n this.valueHexView = updatedView;\r\n }\r\n break;\r\n case ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\r\n {\r\n this.valueHexView = this.valueHexView.subarray(1);\r\n }\r\n break;\r\n }\r\n return this.toBER(sizeOnly);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1) {\r\n return resultOffset;\r\n }\r\n this.setValueHex();\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly) {\r\n return sizeOnly\r\n ? new ArrayBuffer(this.valueHexView.length)\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n };\r\n }\r\n toString() {\r\n const firstBit = (this.valueHexView.length * 8) - 1;\r\n let digits = new Uint8Array((this.valueHexView.length * 8) / 3);\r\n let bitNumber = 0;\r\n let currentByte;\r\n const asn1View = this.valueHexView;\r\n let result = \"\";\r\n let flag = false;\r\n for (let byteNumber = (asn1View.byteLength - 1); byteNumber >= 0; byteNumber--) {\r\n currentByte = asn1View[byteNumber];\r\n for (let i = 0; i < 8; i++) {\r\n if ((currentByte & 1) === 1) {\r\n switch (bitNumber) {\r\n case firstBit:\r\n digits = viewSub(power2(bitNumber), digits);\r\n result = \"-\";\r\n break;\r\n default:\r\n digits = viewAdd(digits, power2(bitNumber));\r\n }\r\n }\r\n bitNumber++;\r\n currentByte >>= 1;\r\n }\r\n }\r\n for (let i = 0; i < digits.length; i++) {\r\n if (digits[i])\r\n flag = true;\r\n if (flag)\r\n result += digitsString.charAt(digits[i]);\r\n }\r\n if (flag === false)\r\n result += digitsString.charAt(0);\r\n return result;\r\n }\r\n}\r\n_a$p = LocalIntegerValueBlock;\r\nLocalIntegerValueBlock.NAME = \"IntegerValueBlock\";\r\n(() => {\r\n Object.defineProperty(_a$p.prototype, \"valueHex\", {\r\n set: function (v) {\r\n this.valueHexView = new Uint8Array(v);\r\n this.setValueHex();\r\n },\r\n get: function () {\r\n return this.valueHexView.slice().buffer;\r\n },\r\n });\r\n})();\n\nvar _a$o;\r\nclass Integer extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalIntegerValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 2;\r\n }\r\n toBigInt() {\r\n assertBigInt();\r\n return BigInt(this.valueBlock.toString());\r\n }\r\n static fromBigInt(value) {\r\n assertBigInt();\r\n const bigIntValue = BigInt(value);\r\n const writer = new ViewWriter();\r\n const hex = bigIntValue.toString(16).replace(/^-/, \"\");\r\n const view = new Uint8Array(pvtsutils.Convert.FromHex(hex));\r\n if (bigIntValue < 0) {\r\n const first = new Uint8Array(view.length + (view[0] & 0x80 ? 1 : 0));\r\n first[0] |= 0x80;\r\n const firstInt = BigInt(`0x${pvtsutils.Convert.ToHex(first)}`);\r\n const secondInt = firstInt + bigIntValue;\r\n const second = pvtsutils.BufferSourceConverter.toUint8Array(pvtsutils.Convert.FromHex(secondInt.toString(16)));\r\n second[0] |= 0x80;\r\n writer.write(second);\r\n }\r\n else {\r\n if (view[0] & 0x80) {\r\n writer.write(new Uint8Array([0]));\r\n }\r\n writer.write(view);\r\n }\r\n const res = new Integer({\r\n valueHex: writer.final(),\r\n });\r\n return res;\r\n }\r\n convertToDER() {\r\n const integer = new Integer({ valueHex: this.valueBlock.valueHexView });\r\n integer.valueBlock.toDER();\r\n return integer;\r\n }\r\n convertFromDER() {\r\n return new Integer({\r\n valueHex: this.valueBlock.valueHexView[0] === 0\r\n ? this.valueBlock.valueHexView.subarray(1)\r\n : this.valueBlock.valueHexView,\r\n });\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString()}`;\r\n }\r\n}\r\n_a$o = Integer;\r\n(() => {\r\n typeStore.Integer = _a$o;\r\n})();\r\nInteger.NAME = \"INTEGER\";\n\nvar _a$n;\r\nclass Enumerated extends Integer {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 10;\r\n }\r\n}\r\n_a$n = Enumerated;\r\n(() => {\r\n typeStore.Enumerated = _a$n;\r\n})();\r\nEnumerated.NAME = \"ENUMERATED\";\n\nclass LocalSidValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ valueDec = -1, isFirstSid = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.valueDec = valueDec;\r\n this.isFirstSid = isFirstSid;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (!inputLength) {\r\n return inputOffset;\r\n }\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.valueHexView = new Uint8Array(inputLength);\r\n for (let i = 0; i < inputLength; i++) {\r\n this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n this.blockLength++;\r\n if ((intBuffer[i] & 0x80) === 0x00)\r\n break;\r\n }\r\n const tempView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < this.blockLength; i++) {\r\n tempView[i] = this.valueHexView[i];\r\n }\r\n this.valueHexView = tempView;\r\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (this.valueHexView[0] === 0x00)\r\n this.warnings.push(\"Needlessly long format of SID encoding\");\r\n if (this.blockLength <= 8)\r\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Too big SID for decoding, hex only\");\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n set valueBigInt(value) {\r\n assertBigInt();\r\n let bits = BigInt(value).toString(2);\r\n while (bits.length % 7) {\r\n bits = \"0\" + bits;\r\n }\r\n const bytes = new Uint8Array(bits.length / 7);\r\n for (let i = 0; i < bytes.length; i++) {\r\n bytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\r\n }\r\n this.fromBER(bytes.buffer, 0, bytes.length);\r\n }\r\n toBER(sizeOnly) {\r\n if (this.isHexOnly) {\r\n if (sizeOnly)\r\n return (new ArrayBuffer(this.valueHexView.byteLength));\r\n const curView = this.valueHexView;\r\n const retView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < (this.blockLength - 1); i++)\r\n retView[i] = curView[i] | 0x80;\r\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n return retView.buffer;\r\n }\r\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\r\n if (encodedBuf.byteLength === 0) {\r\n this.error = \"Error during encoding SID value\";\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(encodedBuf.byteLength);\r\n if (!sizeOnly) {\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const len = encodedBuf.byteLength - 1;\r\n for (let i = 0; i < len; i++)\r\n retView[i] = encodedView[i] | 0x80;\r\n retView[len] = encodedView[len];\r\n }\r\n return retView;\r\n }\r\n toString() {\r\n let result = \"\";\r\n if (this.isHexOnly)\r\n result = pvtsutils.Convert.ToHex(this.valueHexView);\r\n else {\r\n if (this.isFirstSid) {\r\n let sidValue = this.valueDec;\r\n if (this.valueDec <= 39)\r\n result = \"0.\";\r\n else {\r\n if (this.valueDec <= 79) {\r\n result = \"1.\";\r\n sidValue -= 40;\r\n }\r\n else {\r\n result = \"2.\";\r\n sidValue -= 80;\r\n }\r\n }\r\n result += sidValue.toString();\r\n }\r\n else\r\n result = this.valueDec.toString();\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n isFirstSid: this.isFirstSid,\r\n };\r\n }\r\n}\r\nLocalSidValueBlock.NAME = \"sidBlock\";\n\nclass LocalObjectIdentifierValueBlock extends ValueBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = [];\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = inputOffset;\r\n while (inputLength > 0) {\r\n const sidBlock = new LocalSidValueBlock();\r\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n if (resultOffset === -1) {\r\n this.blockLength = 0;\r\n this.error = sidBlock.error;\r\n return resultOffset;\r\n }\r\n if (this.value.length === 0)\r\n sidBlock.isFirstSid = true;\r\n this.blockLength += sidBlock.blockLength;\r\n inputLength -= sidBlock.blockLength;\r\n this.value.push(sidBlock);\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly) {\r\n const retBuffers = [];\r\n for (let i = 0; i < this.value.length; i++) {\r\n const valueBuf = this.value[i].toBER(sizeOnly);\r\n if (valueBuf.byteLength === 0) {\r\n this.error = this.value[i].error;\r\n return EMPTY_BUFFER;\r\n }\r\n retBuffers.push(valueBuf);\r\n }\r\n return concat(retBuffers);\r\n }\r\n fromString(string) {\r\n this.value = [];\r\n let pos1 = 0;\r\n let pos2 = 0;\r\n let sid = \"\";\r\n let flag = false;\r\n do {\r\n pos2 = string.indexOf(\".\", pos1);\r\n if (pos2 === -1)\r\n sid = string.substring(pos1);\r\n else\r\n sid = string.substring(pos1, pos2);\r\n pos1 = pos2 + 1;\r\n if (flag) {\r\n const sidBlock = this.value[0];\r\n let plus = 0;\r\n switch (sidBlock.valueDec) {\r\n case 0:\r\n break;\r\n case 1:\r\n plus = 40;\r\n break;\r\n case 2:\r\n plus = 80;\r\n break;\r\n default:\r\n this.value = [];\r\n return;\r\n }\r\n const parsedSID = parseInt(sid, 10);\r\n if (isNaN(parsedSID))\r\n return;\r\n sidBlock.valueDec = parsedSID + plus;\r\n flag = false;\r\n }\r\n else {\r\n const sidBlock = new LocalSidValueBlock();\r\n if (sid > Number.MAX_SAFE_INTEGER) {\r\n assertBigInt();\r\n const sidValue = BigInt(sid);\r\n sidBlock.valueBigInt = sidValue;\r\n }\r\n else {\r\n sidBlock.valueDec = parseInt(sid, 10);\r\n if (isNaN(sidBlock.valueDec))\r\n return;\r\n }\r\n if (!this.value.length) {\r\n sidBlock.isFirstSid = true;\r\n flag = true;\r\n }\r\n this.value.push(sidBlock);\r\n }\r\n } while (pos2 !== -1);\r\n }\r\n toString() {\r\n let result = \"\";\r\n let isHexOnly = false;\r\n for (let i = 0; i < this.value.length; i++) {\r\n isHexOnly = this.value[i].isHexOnly;\r\n let sidStr = this.value[i].toString();\r\n if (i !== 0)\r\n result = `${result}.`;\r\n if (isHexOnly) {\r\n sidStr = `{${sidStr}}`;\r\n if (this.value[i].isFirstSid)\r\n result = `2.{${sidStr} - 80}`;\r\n else\r\n result += sidStr;\r\n }\r\n else\r\n result += sidStr;\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n value: this.toString(),\r\n sidArray: [],\r\n };\r\n for (let i = 0; i < this.value.length; i++) {\r\n object.sidArray.push(this.value[i].toJSON());\r\n }\r\n return object;\r\n }\r\n}\r\nLocalObjectIdentifierValueBlock.NAME = \"ObjectIdentifierValueBlock\";\n\nvar _a$m;\r\nclass ObjectIdentifier extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalObjectIdentifierValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 6;\r\n }\r\n getValue() {\r\n return this.valueBlock.toString();\r\n }\r\n setValue(value) {\r\n this.valueBlock.fromString(value);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.getValue(),\r\n };\r\n }\r\n}\r\n_a$m = ObjectIdentifier;\r\n(() => {\r\n typeStore.ObjectIdentifier = _a$m;\r\n})();\r\nObjectIdentifier.NAME = \"OBJECT IDENTIFIER\";\n\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock) {\r\n constructor({ valueDec = 0, ...parameters } = {}) {\r\n super(parameters);\r\n this.valueDec = valueDec;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (inputLength === 0)\r\n return inputOffset;\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength))\r\n return -1;\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.valueHexView = new Uint8Array(inputLength);\r\n for (let i = 0; i < inputLength; i++) {\r\n this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n this.blockLength++;\r\n if ((intBuffer[i] & 0x80) === 0x00)\r\n break;\r\n }\r\n const tempView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < this.blockLength; i++)\r\n tempView[i] = this.valueHexView[i];\r\n this.valueHexView = tempView;\r\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (this.valueHexView[0] === 0x00)\r\n this.warnings.push(\"Needlessly long format of SID encoding\");\r\n if (this.blockLength <= 8)\r\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Too big SID for decoding, hex only\");\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n toBER(sizeOnly) {\r\n if (this.isHexOnly) {\r\n if (sizeOnly)\r\n return (new ArrayBuffer(this.valueHexView.byteLength));\r\n const curView = this.valueHexView;\r\n const retView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < (this.blockLength - 1); i++)\r\n retView[i] = curView[i] | 0x80;\r\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n return retView.buffer;\r\n }\r\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\r\n if (encodedBuf.byteLength === 0) {\r\n this.error = \"Error during encoding SID value\";\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(encodedBuf.byteLength);\r\n if (!sizeOnly) {\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const len = encodedBuf.byteLength - 1;\r\n for (let i = 0; i < len; i++)\r\n retView[i] = encodedView[i] | 0x80;\r\n retView[len] = encodedView[len];\r\n }\r\n return retView.buffer;\r\n }\r\n toString() {\r\n let result = \"\";\r\n if (this.isHexOnly)\r\n result = pvtsutils.Convert.ToHex(this.valueHexView);\r\n else {\r\n result = this.valueDec.toString();\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n };\r\n }\r\n}\r\nLocalRelativeSidValueBlock.NAME = \"relativeSidBlock\";\n\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = [];\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = inputOffset;\r\n while (inputLength > 0) {\r\n const sidBlock = new LocalRelativeSidValueBlock();\r\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n if (resultOffset === -1) {\r\n this.blockLength = 0;\r\n this.error = sidBlock.error;\r\n return resultOffset;\r\n }\r\n this.blockLength += sidBlock.blockLength;\r\n inputLength -= sidBlock.blockLength;\r\n this.value.push(sidBlock);\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const retBuffers = [];\r\n for (let i = 0; i < this.value.length; i++) {\r\n const valueBuf = this.value[i].toBER(sizeOnly);\r\n if (valueBuf.byteLength === 0) {\r\n this.error = this.value[i].error;\r\n return EMPTY_BUFFER;\r\n }\r\n retBuffers.push(valueBuf);\r\n }\r\n return concat(retBuffers);\r\n }\r\n fromString(string) {\r\n this.value = [];\r\n let pos1 = 0;\r\n let pos2 = 0;\r\n let sid = \"\";\r\n do {\r\n pos2 = string.indexOf(\".\", pos1);\r\n if (pos2 === -1)\r\n sid = string.substring(pos1);\r\n else\r\n sid = string.substring(pos1, pos2);\r\n pos1 = pos2 + 1;\r\n const sidBlock = new LocalRelativeSidValueBlock();\r\n sidBlock.valueDec = parseInt(sid, 10);\r\n if (isNaN(sidBlock.valueDec))\r\n return true;\r\n this.value.push(sidBlock);\r\n } while (pos2 !== -1);\r\n return true;\r\n }\r\n toString() {\r\n let result = \"\";\r\n let isHexOnly = false;\r\n for (let i = 0; i < this.value.length; i++) {\r\n isHexOnly = this.value[i].isHexOnly;\r\n let sidStr = this.value[i].toString();\r\n if (i !== 0)\r\n result = `${result}.`;\r\n if (isHexOnly) {\r\n sidStr = `{${sidStr}}`;\r\n result += sidStr;\r\n }\r\n else\r\n result += sidStr;\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n value: this.toString(),\r\n sidArray: [],\r\n };\r\n for (let i = 0; i < this.value.length; i++)\r\n object.sidArray.push(this.value[i].toJSON());\r\n return object;\r\n }\r\n}\r\nLocalRelativeObjectIdentifierValueBlock.NAME = \"RelativeObjectIdentifierValueBlock\";\n\nvar _a$l;\r\nclass RelativeObjectIdentifier extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalRelativeObjectIdentifierValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 13;\r\n }\r\n getValue() {\r\n return this.valueBlock.toString();\r\n }\r\n setValue(value) {\r\n this.valueBlock.fromString(value);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.getValue(),\r\n };\r\n }\r\n}\r\n_a$l = RelativeObjectIdentifier;\r\n(() => {\r\n typeStore.RelativeObjectIdentifier = _a$l;\r\n})();\r\nRelativeObjectIdentifier.NAME = \"RelativeObjectIdentifier\";\n\nvar _a$k;\r\nclass Sequence extends Constructed {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 16;\r\n }\r\n}\r\n_a$k = Sequence;\r\n(() => {\r\n typeStore.Sequence = _a$k;\r\n})();\r\nSequence.NAME = \"SEQUENCE\";\n\nvar _a$j;\r\nclass Set extends Constructed {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 17;\r\n }\r\n}\r\n_a$j = Set;\r\n(() => {\r\n typeStore.Set = _a$j;\r\n})();\r\nSet.NAME = \"SET\";\n\nclass LocalStringValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.isHexOnly = true;\r\n this.value = EMPTY_STRING;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.value,\r\n };\r\n }\r\n}\r\nLocalStringValueBlock.NAME = \"StringValueBlock\";\n\nclass LocalSimpleStringValueBlock extends LocalStringValueBlock {\r\n}\r\nLocalSimpleStringValueBlock.NAME = \"SimpleStringValueBlock\";\n\nclass LocalSimpleStringBlock extends BaseStringBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters, LocalSimpleStringValueBlock);\r\n }\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.value = String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\r\n }\r\n fromString(inputString) {\r\n const strLen = inputString.length;\r\n const view = this.valueBlock.valueHexView = new Uint8Array(strLen);\r\n for (let i = 0; i < strLen; i++)\r\n view[i] = inputString.charCodeAt(i);\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalSimpleStringBlock.NAME = \"SIMPLE STRING\";\n\nclass LocalUtf8StringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n try {\r\n this.valueBlock.value = pvtsutils.Convert.ToUtf8String(inputBuffer);\r\n }\r\n catch (ex) {\r\n this.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\r\n this.valueBlock.value = pvtsutils.Convert.ToBinary(inputBuffer);\r\n }\r\n }\r\n fromString(inputString) {\r\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf8String(inputString));\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalUtf8StringValueBlock.NAME = \"Utf8StringValueBlock\";\n\nvar _a$i;\r\nclass Utf8String extends LocalUtf8StringValueBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 12;\r\n }\r\n}\r\n_a$i = Utf8String;\r\n(() => {\r\n typeStore.Utf8String = _a$i;\r\n})();\r\nUtf8String.NAME = \"UTF8String\";\n\nclass LocalBmpStringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.value = pvtsutils.Convert.ToUtf16String(inputBuffer);\r\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n }\r\n fromString(inputString) {\r\n this.valueBlock.value = inputString;\r\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf16String(inputString));\r\n }\r\n}\r\nLocalBmpStringValueBlock.NAME = \"BmpStringValueBlock\";\n\nvar _a$h;\r\nclass BmpString extends LocalBmpStringValueBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 30;\r\n }\r\n}\r\n_a$h = BmpString;\r\n(() => {\r\n typeStore.BmpString = _a$h;\r\n})();\r\nBmpString.NAME = \"BMPString\";\n\nclass LocalUniversalStringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n const copyBuffer = ArrayBuffer.isView(inputBuffer) ? inputBuffer.slice().buffer : inputBuffer.slice(0);\r\n const valueView = new Uint8Array(copyBuffer);\r\n for (let i = 0; i < valueView.length; i += 4) {\r\n valueView[i] = valueView[i + 3];\r\n valueView[i + 1] = valueView[i + 2];\r\n valueView[i + 2] = 0x00;\r\n valueView[i + 3] = 0x00;\r\n }\r\n this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\r\n }\r\n fromString(inputString) {\r\n const strLength = inputString.length;\r\n const valueHexView = this.valueBlock.valueHexView = new Uint8Array(strLength * 4);\r\n for (let i = 0; i < strLength; i++) {\r\n const codeBuf = pvutils.utilToBase(inputString.charCodeAt(i), 8);\r\n const codeView = new Uint8Array(codeBuf);\r\n if (codeView.length > 4)\r\n continue;\r\n const dif = 4 - codeView.length;\r\n for (let j = (codeView.length - 1); j >= 0; j--)\r\n valueHexView[i * 4 + j + dif] = codeView[j];\r\n }\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalUniversalStringValueBlock.NAME = \"UniversalStringValueBlock\";\n\nvar _a$g;\r\nclass UniversalString extends LocalUniversalStringValueBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 28;\r\n }\r\n}\r\n_a$g = UniversalString;\r\n(() => {\r\n typeStore.UniversalString = _a$g;\r\n})();\r\nUniversalString.NAME = \"UniversalString\";\n\nvar _a$f;\r\nclass NumericString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 18;\r\n }\r\n}\r\n_a$f = NumericString;\r\n(() => {\r\n typeStore.NumericString = _a$f;\r\n})();\r\nNumericString.NAME = \"NumericString\";\n\nvar _a$e;\r\nclass PrintableString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 19;\r\n }\r\n}\r\n_a$e = PrintableString;\r\n(() => {\r\n typeStore.PrintableString = _a$e;\r\n})();\r\nPrintableString.NAME = \"PrintableString\";\n\nvar _a$d;\r\nclass TeletexString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 20;\r\n }\r\n}\r\n_a$d = TeletexString;\r\n(() => {\r\n typeStore.TeletexString = _a$d;\r\n})();\r\nTeletexString.NAME = \"TeletexString\";\n\nvar _a$c;\r\nclass VideotexString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 21;\r\n }\r\n}\r\n_a$c = VideotexString;\r\n(() => {\r\n typeStore.VideotexString = _a$c;\r\n})();\r\nVideotexString.NAME = \"VideotexString\";\n\nvar _a$b;\r\nclass IA5String extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 22;\r\n }\r\n}\r\n_a$b = IA5String;\r\n(() => {\r\n typeStore.IA5String = _a$b;\r\n})();\r\nIA5String.NAME = \"IA5String\";\n\nvar _a$a;\r\nclass GraphicString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 25;\r\n }\r\n}\r\n_a$a = GraphicString;\r\n(() => {\r\n typeStore.GraphicString = _a$a;\r\n})();\r\nGraphicString.NAME = \"GraphicString\";\n\nvar _a$9;\r\nclass VisibleString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 26;\r\n }\r\n}\r\n_a$9 = VisibleString;\r\n(() => {\r\n typeStore.VisibleString = _a$9;\r\n})();\r\nVisibleString.NAME = \"VisibleString\";\n\nvar _a$8;\r\nclass GeneralString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 27;\r\n }\r\n}\r\n_a$8 = GeneralString;\r\n(() => {\r\n typeStore.GeneralString = _a$8;\r\n})();\r\nGeneralString.NAME = \"GeneralString\";\n\nvar _a$7;\r\nclass CharacterString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 29;\r\n }\r\n}\r\n_a$7 = CharacterString;\r\n(() => {\r\n typeStore.CharacterString = _a$7;\r\n})();\r\nCharacterString.NAME = \"CharacterString\";\n\nvar _a$6;\r\nclass UTCTime extends VisibleString {\r\n constructor({ value, valueDate, ...parameters } = {}) {\r\n super(parameters);\r\n this.year = 0;\r\n this.month = 0;\r\n this.day = 0;\r\n this.hour = 0;\r\n this.minute = 0;\r\n this.second = 0;\r\n if (value) {\r\n this.fromString(value);\r\n this.valueBlock.valueHexView = new Uint8Array(value.length);\r\n for (let i = 0; i < value.length; i++)\r\n this.valueBlock.valueHexView[i] = value.charCodeAt(i);\r\n }\r\n if (valueDate) {\r\n this.fromDate(valueDate);\r\n this.valueBlock.valueHexView = new Uint8Array(this.toBuffer());\r\n }\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 23;\r\n }\r\n fromBuffer(inputBuffer) {\r\n this.fromString(String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer)));\r\n }\r\n toBuffer() {\r\n const str = this.toString();\r\n const buffer = new ArrayBuffer(str.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < str.length; i++)\r\n view[i] = str.charCodeAt(i);\r\n return buffer;\r\n }\r\n fromDate(inputDate) {\r\n this.year = inputDate.getUTCFullYear();\r\n this.month = inputDate.getUTCMonth() + 1;\r\n this.day = inputDate.getUTCDate();\r\n this.hour = inputDate.getUTCHours();\r\n this.minute = inputDate.getUTCMinutes();\r\n this.second = inputDate.getUTCSeconds();\r\n }\r\n toDate() {\r\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\r\n }\r\n fromString(inputString) {\r\n const parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\r\n const parserArray = parser.exec(inputString);\r\n if (parserArray === null) {\r\n this.error = \"Wrong input string for conversion\";\r\n return;\r\n }\r\n const year = parseInt(parserArray[1], 10);\r\n if (year >= 50)\r\n this.year = 1900 + year;\r\n else\r\n this.year = 2000 + year;\r\n this.month = parseInt(parserArray[2], 10);\r\n this.day = parseInt(parserArray[3], 10);\r\n this.hour = parseInt(parserArray[4], 10);\r\n this.minute = parseInt(parserArray[5], 10);\r\n this.second = parseInt(parserArray[6], 10);\r\n }\r\n toString(encoding = \"iso\") {\r\n if (encoding === \"iso\") {\r\n const outputArray = new Array(7);\r\n outputArray[0] = pvutils.padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\r\n outputArray[1] = pvutils.padNumber(this.month, 2);\r\n outputArray[2] = pvutils.padNumber(this.day, 2);\r\n outputArray[3] = pvutils.padNumber(this.hour, 2);\r\n outputArray[4] = pvutils.padNumber(this.minute, 2);\r\n outputArray[5] = pvutils.padNumber(this.second, 2);\r\n outputArray[6] = \"Z\";\r\n return outputArray.join(\"\");\r\n }\r\n return super.toString(encoding);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.toDate().toISOString()}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n year: this.year,\r\n month: this.month,\r\n day: this.day,\r\n hour: this.hour,\r\n minute: this.minute,\r\n second: this.second,\r\n };\r\n }\r\n}\r\n_a$6 = UTCTime;\r\n(() => {\r\n typeStore.UTCTime = _a$6;\r\n})();\r\nUTCTime.NAME = \"UTCTime\";\n\nvar _a$5;\r\nclass GeneralizedTime extends UTCTime {\r\n constructor(parameters = {}) {\r\n var _b;\r\n super(parameters);\r\n (_b = this.millisecond) !== null && _b !== void 0 ? _b : (this.millisecond = 0);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 24;\r\n }\r\n fromDate(inputDate) {\r\n super.fromDate(inputDate);\r\n this.millisecond = inputDate.getUTCMilliseconds();\r\n }\r\n toDate() {\r\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)));\r\n }\r\n fromString(inputString) {\r\n let isUTC = false;\r\n let timeString = \"\";\r\n let dateTimeString = \"\";\r\n let fractionPart = 0;\r\n let parser;\r\n let hourDifference = 0;\r\n let minuteDifference = 0;\r\n if (inputString[inputString.length - 1] === \"Z\") {\r\n timeString = inputString.substring(0, inputString.length - 1);\r\n isUTC = true;\r\n }\r\n else {\r\n const number = new Number(inputString[inputString.length - 1]);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n timeString = inputString;\r\n }\r\n if (isUTC) {\r\n if (timeString.indexOf(\"+\") !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n if (timeString.indexOf(\"-\") !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n else {\r\n let multiplier = 1;\r\n let differencePosition = timeString.indexOf(\"+\");\r\n let differenceString = \"\";\r\n if (differencePosition === -1) {\r\n differencePosition = timeString.indexOf(\"-\");\r\n multiplier = -1;\r\n }\r\n if (differencePosition !== -1) {\r\n differenceString = timeString.substring(differencePosition + 1);\r\n timeString = timeString.substring(0, differencePosition);\r\n if ((differenceString.length !== 2) && (differenceString.length !== 4))\r\n throw new Error(\"Wrong input string for conversion\");\r\n let number = parseInt(differenceString.substring(0, 2), 10);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n hourDifference = multiplier * number;\r\n if (differenceString.length === 4) {\r\n number = parseInt(differenceString.substring(2, 4), 10);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n minuteDifference = multiplier * number;\r\n }\r\n }\r\n }\r\n let fractionPointPosition = timeString.indexOf(\".\");\r\n if (fractionPointPosition === -1)\r\n fractionPointPosition = timeString.indexOf(\",\");\r\n if (fractionPointPosition !== -1) {\r\n const fractionPartCheck = new Number(`0${timeString.substring(fractionPointPosition)}`);\r\n if (isNaN(fractionPartCheck.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n fractionPart = fractionPartCheck.valueOf();\r\n dateTimeString = timeString.substring(0, fractionPointPosition);\r\n }\r\n else\r\n dateTimeString = timeString;\r\n switch (true) {\r\n case (dateTimeString.length === 8):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n break;\r\n case (dateTimeString.length === 10):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n let fractionResult = 60 * fractionPart;\r\n this.minute = Math.floor(fractionResult);\r\n fractionResult = 60 * (fractionResult - this.minute);\r\n this.second = Math.floor(fractionResult);\r\n fractionResult = 1000 * (fractionResult - this.second);\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n case (dateTimeString.length === 12):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n let fractionResult = 60 * fractionPart;\r\n this.second = Math.floor(fractionResult);\r\n fractionResult = 1000 * (fractionResult - this.second);\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n case (dateTimeString.length === 14):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n const fractionResult = 1000 * fractionPart;\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n default:\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n const parserArray = parser.exec(dateTimeString);\r\n if (parserArray === null)\r\n throw new Error(\"Wrong input string for conversion\");\r\n for (let j = 1; j < parserArray.length; j++) {\r\n switch (j) {\r\n case 1:\r\n this.year = parseInt(parserArray[j], 10);\r\n break;\r\n case 2:\r\n this.month = parseInt(parserArray[j], 10);\r\n break;\r\n case 3:\r\n this.day = parseInt(parserArray[j], 10);\r\n break;\r\n case 4:\r\n this.hour = parseInt(parserArray[j], 10) + hourDifference;\r\n break;\r\n case 5:\r\n this.minute = parseInt(parserArray[j], 10) + minuteDifference;\r\n break;\r\n case 6:\r\n this.second = parseInt(parserArray[j], 10);\r\n break;\r\n default:\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n }\r\n if (isUTC === false) {\r\n const tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\r\n this.year = tempDate.getUTCFullYear();\r\n this.month = tempDate.getUTCMonth();\r\n this.day = tempDate.getUTCDay();\r\n this.hour = tempDate.getUTCHours();\r\n this.minute = tempDate.getUTCMinutes();\r\n this.second = tempDate.getUTCSeconds();\r\n this.millisecond = tempDate.getUTCMilliseconds();\r\n }\r\n }\r\n toString(encoding = \"iso\") {\r\n if (encoding === \"iso\") {\r\n const outputArray = [];\r\n outputArray.push(pvutils.padNumber(this.year, 4));\r\n outputArray.push(pvutils.padNumber(this.month, 2));\r\n outputArray.push(pvutils.padNumber(this.day, 2));\r\n outputArray.push(pvutils.padNumber(this.hour, 2));\r\n outputArray.push(pvutils.padNumber(this.minute, 2));\r\n outputArray.push(pvutils.padNumber(this.second, 2));\r\n if (this.millisecond !== 0) {\r\n outputArray.push(\".\");\r\n outputArray.push(pvutils.padNumber(this.millisecond, 3));\r\n }\r\n outputArray.push(\"Z\");\r\n return outputArray.join(\"\");\r\n }\r\n return super.toString(encoding);\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n millisecond: this.millisecond,\r\n };\r\n }\r\n}\r\n_a$5 = GeneralizedTime;\r\n(() => {\r\n typeStore.GeneralizedTime = _a$5;\r\n})();\r\nGeneralizedTime.NAME = \"GeneralizedTime\";\n\nvar _a$4;\r\nclass DATE extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 31;\r\n }\r\n}\r\n_a$4 = DATE;\r\n(() => {\r\n typeStore.DATE = _a$4;\r\n})();\r\nDATE.NAME = \"DATE\";\n\nvar _a$3;\r\nclass TimeOfDay extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 32;\r\n }\r\n}\r\n_a$3 = TimeOfDay;\r\n(() => {\r\n typeStore.TimeOfDay = _a$3;\r\n})();\r\nTimeOfDay.NAME = \"TimeOfDay\";\n\nvar _a$2;\r\nclass DateTime extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 33;\r\n }\r\n}\r\n_a$2 = DateTime;\r\n(() => {\r\n typeStore.DateTime = _a$2;\r\n})();\r\nDateTime.NAME = \"DateTime\";\n\nvar _a$1;\r\nclass Duration extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 34;\r\n }\r\n}\r\n_a$1 = Duration;\r\n(() => {\r\n typeStore.Duration = _a$1;\r\n})();\r\nDuration.NAME = \"Duration\";\n\nvar _a;\r\nclass TIME extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 14;\r\n }\r\n}\r\n_a = TIME;\r\n(() => {\r\n typeStore.TIME = _a;\r\n})();\r\nTIME.NAME = \"TIME\";\n\nclass Any {\r\n constructor({ name = EMPTY_STRING, optional = false, } = {}) {\r\n this.name = name;\r\n this.optional = optional;\r\n }\r\n}\n\nclass Choice extends Any {\r\n constructor({ value = [], ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n }\r\n}\n\nclass Repeated extends Any {\r\n constructor({ value = new Any(), local = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n this.local = local;\r\n }\r\n}\n\nclass RawData {\r\n constructor({ data = EMPTY_VIEW } = {}) {\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(data);\r\n }\r\n get data() {\r\n return this.dataView.slice().buffer;\r\n }\r\n set data(value) {\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(value);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const endLength = inputOffset + inputLength;\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).subarray(inputOffset, endLength);\r\n return endLength;\r\n }\r\n toBER(sizeOnly) {\r\n return this.dataView.slice().buffer;\r\n }\r\n}\n\nfunction compareSchema(root, inputData, inputSchema) {\r\n if (inputSchema instanceof Choice) {\r\n for (let j = 0; j < inputSchema.value.length; j++) {\r\n const result = compareSchema(root, inputData, inputSchema.value[j]);\r\n if (result.verified) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n }\r\n {\r\n const _result = {\r\n verified: false,\r\n result: {\r\n error: \"Wrong values for Choice type\"\r\n },\r\n };\r\n if (inputSchema.hasOwnProperty(NAME))\r\n _result.name = inputSchema.name;\r\n return _result;\r\n }\r\n }\r\n if (inputSchema instanceof Any) {\r\n if (inputSchema.hasOwnProperty(NAME))\r\n root[inputSchema.name] = inputData;\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if ((root instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong root object\" }\r\n };\r\n }\r\n if ((inputData instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 data\" }\r\n };\r\n }\r\n if ((inputSchema instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((ID_BLOCK in inputSchema) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((FROM_BER in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((TO_BER in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n const encodedId = inputSchema.idBlock.toBER(false);\r\n if (encodedId.byteLength === 0) {\r\n return {\r\n verified: false,\r\n result: { error: \"Error encoding idBlock for ASN.1 schema\" }\r\n };\r\n }\r\n const decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\r\n if (decodedOffset === -1) {\r\n return {\r\n verified: false,\r\n result: { error: \"Error decoding idBlock for ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (!(IS_HEX_ONLY in inputSchema.idBlock)) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.isHexOnly) {\r\n if ((VALUE_HEX_VIEW in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n const schemaView = inputSchema.idBlock.valueHexView;\r\n const asn1View = inputData.idBlock.valueHexView;\r\n if (schemaView.length !== asn1View.length) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n for (let i = 0; i < schemaView.length; i++) {\r\n if (schemaView[i] !== asn1View[1]) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n }\r\n }\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n root[inputSchema.name] = inputData;\r\n }\r\n if (inputSchema instanceof typeStore.Constructed) {\r\n let admission = 0;\r\n let result = {\r\n verified: false,\r\n result: {\r\n error: \"Unknown error\",\r\n }\r\n };\r\n let maxLength = inputSchema.valueBlock.value.length;\r\n if (maxLength > 0) {\r\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n maxLength = inputData.valueBlock.value.length;\r\n }\r\n }\r\n if (maxLength === 0) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if ((inputData.valueBlock.value.length === 0) &&\r\n (inputSchema.valueBlock.value.length !== 0)) {\r\n let _optional = true;\r\n for (let i = 0; i < inputSchema.valueBlock.value.length; i++)\r\n _optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\r\n if (_optional) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n root.error = \"Inconsistent object length\";\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n for (let i = 0; i < maxLength; i++) {\r\n if ((i - admission) >= inputData.valueBlock.value.length) {\r\n if (inputSchema.valueBlock.value[i].optional === false) {\r\n const _result = {\r\n verified: false,\r\n result: root\r\n };\r\n root.error = \"Inconsistent length between ASN.1 data and schema\";\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n }\r\n else {\r\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n result = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\r\n if (result.verified === false) {\r\n if (inputSchema.valueBlock.value[0].optional)\r\n admission++;\r\n else {\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n return result;\r\n }\r\n }\r\n if ((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0)) {\r\n let arrayRoot = {};\r\n if ((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local))\r\n arrayRoot = inputData;\r\n else\r\n arrayRoot = root;\r\n if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\r\n arrayRoot[inputSchema.valueBlock.value[0].name] = [];\r\n arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\r\n }\r\n }\r\n else {\r\n result = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\r\n if (result.verified === false) {\r\n if (inputSchema.valueBlock.value[i].optional)\r\n admission++;\r\n else {\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (result.verified === false) {\r\n const _result = {\r\n verified: false,\r\n result: root\r\n };\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.primitiveSchema &&\r\n (VALUE_HEX_VIEW in inputData.valueBlock)) {\r\n const asn1 = localFromBER(inputData.valueBlock.valueHexView);\r\n if (asn1.offset === -1) {\r\n const _result = {\r\n verified: false,\r\n result: asn1.result\r\n };\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n return compareSchema(root, asn1.result, inputSchema.primitiveSchema);\r\n }\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n}\r\nfunction verifySchema(inputBuffer, inputSchema) {\r\n if ((inputSchema instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema type\" }\r\n };\r\n }\r\n const asn1 = localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\r\n if (asn1.offset === -1) {\r\n return {\r\n verified: false,\r\n result: asn1.result\r\n };\r\n }\r\n return compareSchema(asn1.result, asn1.result, inputSchema);\r\n}\n\nexport { Any, BaseBlock, BaseStringBlock, BitString, BmpString, Boolean, CharacterString, Choice, Constructed, DATE, DateTime, Duration, EndOfContent, Enumerated, GeneralString, GeneralizedTime, GraphicString, HexBlock, IA5String, Integer, Null, NumericString, ObjectIdentifier, OctetString, Primitive, PrintableString, RawData, RelativeObjectIdentifier, Repeated, Sequence, Set, TIME, TeletexString, TimeOfDay, UTCTime, UniversalString, Utf8String, ValueBlock, VideotexString, ViewWriter, VisibleString, compareSchema, fromBER, verifySchema };\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class AlgorithmIdentifier\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for AlgorithmIdentifier class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t * @property {string} [algorithmId] ObjectIdentifier for algorithm (string representation)\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc ObjectIdentifier for algorithm (string representation)\r\n\t\t */\r\n\t\tthis.algorithmId = getParametersValue(parameters, \"algorithmId\", AlgorithmIdentifier.defaultValues(\"algorithmId\"));\r\n\r\n\t\tif(\"algorithmParams\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Object}\r\n\t\t\t * @desc Any algorithm parameters\r\n\t\t\t */\r\n\t\t\tthis.algorithmParams = getParametersValue(parameters, \"algorithmParams\", AlgorithmIdentifier.defaultValues(\"algorithmParams\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"algorithmId\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"algorithmParams\":\r\n\t\t\t\treturn new asn1js.Any();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for AlgorithmIdentifier class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"algorithmId\":\r\n\t\t\t\treturn (memberValue === \"\");\r\n\t\t\tcase \"algorithmParams\":\r\n\t\t\t\treturn (memberValue instanceof asn1js.Any);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for AlgorithmIdentifier class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * AlgorithmIdentifier ::= Sequence {\r\n\t * algorithm OBJECT IDENTIFIER,\r\n\t * parameters ANY DEFINED BY algorithm OPTIONAL }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} algorithmIdentifier ObjectIdentifier for the algorithm\r\n\t\t * @property {string} algorithmParams Any algorithm parameters\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\toptional: (names.optional || false),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.algorithmIdentifier || \"\") }),\r\n\t\t\t\tnew asn1js.Any({ name: (names.algorithmParams || \"\"), optional: true })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"algorithm\",\r\n\t\t\t\"params\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAlgorithmIdentifier.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\talgorithmIdentifier: \"algorithm\",\r\n\t\t\t\t\talgorithmParams: \"params\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AlgorithmIdentifier\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.algorithmId = asn1.result.algorithm.valueBlock.toString();\r\n\t\tif(\"params\" in asn1.result)\r\n\t\t\tthis.algorithmParams = asn1.result.params;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.algorithmId }));\r\n\t\tif((\"algorithmParams\" in this) && ((this.algorithmParams instanceof asn1js.Any) === false))\r\n\t\t\toutputArray.push(this.algorithmParams);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\talgorithmId: this.algorithmId\r\n\t\t};\r\n\r\n\t\tif((\"algorithmParams\" in this) && ((this.algorithmParams instanceof asn1js.Any) === false))\r\n\t\t\tobject.algorithmParams = this.algorithmParams.toJSON();\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Check that two \"AlgorithmIdentifiers\" are equal\r\n\t * @param {AlgorithmIdentifier} algorithmIdentifier\r\n\t * @returns {boolean}\r\n\t */\r\n\tisEqual(algorithmIdentifier)\r\n\t{\r\n\t\t//region Check input type\r\n\t\tif((algorithmIdentifier instanceof AlgorithmIdentifier) === false)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\r\n\t\t//region Check \"algorithm_id\"\r\n\t\tif(this.algorithmId !== algorithmIdentifier.algorithmId)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\r\n\t\t//region Check \"algorithm_params\"\r\n\t\tif(\"algorithmParams\" in this)\r\n\t\t{\r\n\t\t\tif(\"algorithmParams\" in algorithmIdentifier)\r\n\t\t\t\treturn JSON.stringify(this.algorithmParams) === JSON.stringify(algorithmIdentifier.algorithmParams);\r\n\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif(\"algorithmParams\" in algorithmIdentifier)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\r\n\t\treturn true;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","\r\nexport default class ECNamedCurves {\r\n\r\n\t/**\r\n\t * Registers an ECC named curve\r\n\t * @param {string} name The name o the curve\r\n\t * @param {string} id The curve ASN.1 object identifier\r\n\t * @param {number} size The coordinate length in bytes\r\n\t */\r\n\tstatic register(name, id, size) {\r\n\t\tthis.namedCurves[name.toLowerCase()] = this.namedCurves[id] = { name, id, size };\r\n\t}\r\n\r\n\t/**\r\n\t* Returns an ECC named curve object\r\n\t* @param {string} nameOrId Name or identifier of the named curve\r\n\t* @returns {Object | null}\r\n\t*/\r\n\tstatic find(nameOrId) {\r\n\t\treturn this.namedCurves[nameOrId.toLowerCase()] || null;\r\n\t}\r\n\r\n}\r\n\r\nECNamedCurves.namedCurves = {};\r\n\r\n// NIST\r\nECNamedCurves.register(\"P-256\", \"1.2.840.10045.3.1.7\", 32);\r\nECNamedCurves.register(\"P-384\", \"1.3.132.0.34\", 48);\r\nECNamedCurves.register(\"P-521\", \"1.3.132.0.35\", 66);\r\n\r\n// Brainpool\r\nECNamedCurves.register(\"brainpoolP256r1\", \"1.3.36.3.3.2.8.1.1.7\", 32);\r\nECNamedCurves.register(\"brainpoolP384r1\", \"1.3.36.3.3.2.8.1.1.11\", 48);\r\nECNamedCurves.register(\"brainpoolP512r1\", \"1.3.36.3.3.2.8.1.1.13\", 64);\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, utilConcatBuf, isEqualBuffer, toBase64, fromBase64, arrayBufferToString, stringToArrayBuffer } from \"pvutils\";\r\nimport ECNamedCurves from \"./ECNamedCurves.js\";\r\n//**************************************************************************************\r\n\r\n/**\r\n * Class from RFC5480\r\n */\r\nexport default class ECPublicKey\r\n{\r\n\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for ECCPublicKey class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc type\r\n\t\t */\r\n\t\tthis.x = getParametersValue(parameters, \"x\", ECPublicKey.defaultValues(\"x\"));\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc values\r\n\t\t */\r\n\t\tthis.y = getParametersValue(parameters, \"y\", ECPublicKey.defaultValues(\"y\"));\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc namedCurve\r\n\t\t */\r\n\t\tthis.namedCurve = getParametersValue(parameters, \"namedCurve\", ECPublicKey.defaultValues(\"namedCurve\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t\t//region If input argument array contains \"json\" for this object\r\n\t\tif(\"json\" in parameters)\r\n\t\t\tthis.fromJSON(parameters.json);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"x\":\r\n\t\t\tcase \"y\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tcase \"namedCurve\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for ECCPublicKey class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"x\":\r\n\t\t\tcase \"y\":\r\n\t\t\t\treturn (isEqualBuffer(memberValue, ECPublicKey.defaultValues(memberName)));\r\n\t\t\tcase \"namedCurve\":\r\n\t\t\t\treturn (memberValue === \"\");\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for ECCPublicKey class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\treturn new asn1js.RawData();\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert ArrayBuffer into current class\r\n\t * @param {!ArrayBuffer} schema Special case: schema is an ArrayBuffer\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Check the schema is valid\r\n\t\tif((schema instanceof ArrayBuffer) === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ECPublicKey\");\r\n\r\n\t\tconst view = new Uint8Array(schema);\r\n\t\tif(view[0] !== 0x04)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ECPublicKey\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tconst namedCurve = ECNamedCurves.find(this.namedCurve);\r\n\t\tif (!namedCurve) {\r\n\t\t\tthrow new Error(`Incorrect curve OID: ${this.namedCurve}`);\r\n\t\t}\r\n\t\tconst coordinateLength = namedCurve.size;\r\n\r\n\t\tif(schema.byteLength !== (coordinateLength * 2 + 1))\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ECPublicKey\");\r\n\r\n\t\tthis.x = schema.slice(1, coordinateLength + 1);\r\n\t\tthis.y = schema.slice(1 + coordinateLength, coordinateLength * 2 + 1);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\treturn new asn1js.RawData({ data: utilConcatBuf(\r\n\t\t\t(new Uint8Array([0x04])).buffer,\r\n\t\t\tthis.x,\r\n\t\t\tthis.y\r\n\t\t)\r\n\t\t});\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Conversion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst namedCurve = ECNamedCurves.find(this.namedCurve);\r\n\r\n\t\treturn {\r\n\t\t\tcrv: namedCurve ? namedCurve.name : this.namedCurve,\r\n\t\t\tx: toBase64(arrayBufferToString(this.x), true, true, false),\r\n\t\t\ty: toBase64(arrayBufferToString(this.y), true, true, false)\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert JSON value into current object\r\n\t * @param {Object} json\r\n\t */\r\n\tfromJSON(json)\r\n\t{\r\n\t\tlet coordinateLength = 0;\r\n\r\n\t\tif(\"crv\" in json)\r\n\t\t{\r\n\t\t\tconst namedCurve = ECNamedCurves.find(json.crv);\r\n\t\t\tif (namedCurve) {\r\n\t\t\t\tthis.namedCurve = namedCurve.id;\r\n\t\t\t\tcoordinateLength = namedCurve.size;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"crv\\\"\");\r\n\r\n\t\tif(\"x\" in json)\r\n\t\t{\r\n\t\t\tconst convertBuffer = stringToArrayBuffer(fromBase64(json.x, true));\r\n\r\n\t\t\tif(convertBuffer.byteLength < coordinateLength)\r\n\t\t\t{\r\n\t\t\t\tthis.x = new ArrayBuffer(coordinateLength);\r\n\t\t\t\tconst view = new Uint8Array(this.x);\r\n\t\t\t\tconst convertBufferView = new Uint8Array(convertBuffer);\r\n\t\t\t\tview.set(convertBufferView, 1);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tthis.x = convertBuffer.slice(0, coordinateLength);\r\n\t\t}\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"x\\\"\");\r\n\r\n\t\tif(\"y\" in json)\r\n\t\t{\r\n\t\t\tconst convertBuffer = stringToArrayBuffer(fromBase64(json.y, true));\r\n\r\n\t\t\tif(convertBuffer.byteLength < coordinateLength)\r\n\t\t\t{\r\n\t\t\t\tthis.y = new ArrayBuffer(coordinateLength);\r\n\t\t\t\tconst view = new Uint8Array(this.y);\r\n\t\t\t\tconst convertBufferView = new Uint8Array(convertBuffer);\r\n\t\t\t\tview.set(convertBufferView, 1);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tthis.y = convertBuffer.slice(0, coordinateLength);\r\n\t\t}\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"y\\\"\");\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, toBase64, arrayBufferToString, stringToArrayBuffer, fromBase64, nearestPowerOf2, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC3447\r\n */\r\nexport default class RSAPublicKey\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for RSAPublicKey class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t * @property {Integer} [modulus]\r\n\t * @property {Integer} [publicExponent]\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc Modulus part of RSA public key\r\n\t\t */\r\n\t\tthis.modulus = getParametersValue(parameters, \"modulus\", RSAPublicKey.defaultValues(\"modulus\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc Public exponent of RSA public key\r\n\t\t */\r\n\t\tthis.publicExponent = getParametersValue(parameters, \"publicExponent\", RSAPublicKey.defaultValues(\"publicExponent\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t\t//region If input argument array contains \"json\" for this object\r\n\t\tif(\"json\" in parameters)\r\n\t\t\tthis.fromJSON(parameters.json);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"modulus\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"publicExponent\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RSAPublicKey class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * RSAPublicKey ::= Sequence {\r\n\t * modulus Integer, -- n\r\n\t * publicExponent Integer -- e\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} utcTimeName Name for \"utcTimeName\" choice\r\n\t\t * @property {string} generalTimeName Name for \"generalTimeName\" choice\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.modulus || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.publicExponent || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"modulus\",\r\n\t\t\t\"publicExponent\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tRSAPublicKey.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tmodulus: \"modulus\",\r\n\t\t\t\t\tpublicExponent: \"publicExponent\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for RSAPublicKey\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.modulus = asn1.result.modulus.convertFromDER(256);\r\n\t\tthis.publicExponent = asn1.result.publicExponent;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.modulus.convertToDER(),\r\n\t\t\t\tthis.publicExponent\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tn: toBase64(arrayBufferToString(this.modulus.valueBlock.valueHex), true, true, true),\r\n\t\t\te: toBase64(arrayBufferToString(this.publicExponent.valueBlock.valueHex), true, true, true)\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert JSON value into current object\r\n\t * @param {Object} json\r\n\t */\r\n\tfromJSON(json)\r\n\t{\r\n\t\tif(\"n\" in json)\r\n\t\t{\r\n\t\t\tconst array = stringToArrayBuffer(fromBase64(json.n, true));\r\n\t\t\tthis.modulus = new asn1js.Integer({ valueHex: array.slice(0, Math.pow(2, nearestPowerOf2(array.byteLength))) });\r\n\t\t}\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"n\\\"\");\r\n\r\n\t\tif(\"e\" in json)\r\n\t\t\tthis.publicExponent = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.e, true)).slice(0, 3) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"e\\\"\");\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport { getCrypto } from \"./common.js\";\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\nimport ECPublicKey from \"./ECPublicKey.js\";\nimport RSAPublicKey from \"./RSAPublicKey.js\";\n//**************************************************************************************\n/**\n * Class from RFC5280\n */\nexport default class PublicKeyInfo \n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for PublicKeyInfo class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {AlgorithmIdentifier}\n\t\t * @desc Algorithm identifier\n\t\t */\n\t\tthis.algorithm = getParametersValue(parameters, \"algorithm\", PublicKeyInfo.defaultValues(\"algorithm\"));\n\t\t/**\n\t\t * @type {BitString}\n\t\t * @desc Subject public key value\n\t\t */\n\t\tthis.subjectPublicKey = getParametersValue(parameters, \"subjectPublicKey\", PublicKeyInfo.defaultValues(\"subjectPublicKey\"));\n\t\t\n\t\tif(\"parsedKey\" in parameters)\n\t\t\t/**\n\t\t\t * @type {ECPublicKey|RSAPublicKey}\n\t\t\t * @desc Parsed public key value\n\t\t\t */\n\t\t\tthis.parsedKey = getParametersValue(parameters, \"parsedKey\", PublicKeyInfo.defaultValues(\"parsedKey\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t\t//region If input argument array contains \"json\" for this object\n\t\tif(\"json\" in parameters)\n\t\t\tthis.fromJSON(parameters.json);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"algorithm\":\n\t\t\t\treturn new AlgorithmIdentifier();\n\t\t\tcase \"subjectPublicKey\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for PublicKeyInfo class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * SubjectPublicKeyInfo ::= Sequence {\n\t * algorithm AlgorithmIdentifier,\n\t * subjectPublicKey BIT STRING }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [algorithm]\n\t\t * @property {string} [subjectPublicKey]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tAlgorithmIdentifier.schema(names.algorithm || {}),\n\t\t\t\tnew asn1js.BitString({ name: (names.subjectPublicKey || \"\") })\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"algorithm\",\n\t\t\t\"subjectPublicKey\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tPublicKeyInfo.schema({\n\t\t\t\tnames: {\n\t\t\t\t\talgorithm: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"algorithm\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsubjectPublicKey: \"subjectPublicKey\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PublicKeyInfo\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.algorithm = new AlgorithmIdentifier({ schema: asn1.result.algorithm });\n\t\tthis.subjectPublicKey = asn1.result.subjectPublicKey;\n\t\t\n\t\tswitch(this.algorithm.algorithmId)\n\t\t{\n\t\t\tcase \"1.2.840.10045.2.1\": // ECDSA\n\t\t\t\tif(\"algorithmParams\" in this.algorithm)\n\t\t\t\t{\n\t\t\t\t\tif(this.algorithm.algorithmParams.constructor.blockName() === asn1js.ObjectIdentifier.blockName())\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.parsedKey = new ECPublicKey({\n\t\t\t\t\t\t\t\tnamedCurve: this.algorithm.algorithmParams.valueBlock.toString(),\n\t\t\t\t\t\t\t\tschema: this.subjectPublicKey.valueBlock.valueHex\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(ex){} // Could be a problems during recognision of internal public key data here. Let's ignore them.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"1.2.840.113549.1.1.1\": // RSA\n\t\t\t\t{\n\t\t\t\t\tconst publicKeyASN1 = asn1js.fromBER(this.subjectPublicKey.valueBlock.valueHex);\n\t\t\t\t\tif(publicKeyASN1.offset !== (-1))\n\t\t\t\t\t{\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.parsedKey = new RSAPublicKey({ schema: publicKeyASN1.result });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(ex){} // Could be a problems during recognision of internal public key data here. Let's ignore them.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: [\n\t\t\t\tthis.algorithm.toSchema(),\n\t\t\t\tthis.subjectPublicKey\n\t\t\t]\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\t//region Return common value in case we do not have enough info fo making JWK\n\t\tif((\"parsedKey\" in this) === false)\n\t\t{\n\t\t\treturn {\n\t\t\t\talgorithm: this.algorithm.toJSON(),\n\t\t\t\tsubjectPublicKey: this.subjectPublicKey.toJSON()\n\t\t\t};\n\t\t}\n\t\t//endregion\n\t\t\n\t\t//region Making JWK\n\t\tconst jwk = {};\n\t\t\n\t\tswitch(this.algorithm.algorithmId)\n\t\t{\n\t\t\tcase \"1.2.840.10045.2.1\": // ECDSA\n\t\t\t\tjwk.kty = \"EC\";\n\t\t\t\tbreak;\n\t\t\tcase \"1.2.840.113549.1.1.1\": // RSA\n\t\t\t\tjwk.kty = \"RSA\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t\t\n\t\tconst publicKeyJWK = this.parsedKey.toJSON();\n\t\t\n\t\tfor(const key of Object.keys(publicKeyJWK))\n\t\t\tjwk[key] = publicKeyJWK[key];\n\t\t\n\t\treturn jwk;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert JSON value into current object\n\t * @param {Object} json\n\t */\n\tfromJSON(json)\n\t{\n\t\tif(\"kty\" in json)\n\t\t{\n\t\t\tswitch(json.kty.toUpperCase())\n\t\t\t{\n\t\t\t\tcase \"EC\":\n\t\t\t\t\tthis.parsedKey = new ECPublicKey({ json });\n\t\t\t\t\t\n\t\t\t\t\tthis.algorithm = new AlgorithmIdentifier({\n\t\t\t\t\t\talgorithmId: \"1.2.840.10045.2.1\",\n\t\t\t\t\t\talgorithmParams: new asn1js.ObjectIdentifier({ value: this.parsedKey.namedCurve })\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"RSA\":\n\t\t\t\t\tthis.parsedKey = new RSAPublicKey({ json });\n\t\t\t\t\t\n\t\t\t\t\tthis.algorithm = new AlgorithmIdentifier({\n\t\t\t\t\t\talgorithmId: \"1.2.840.113549.1.1.1\",\n\t\t\t\t\t\talgorithmParams: new asn1js.Null()\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Invalid value for \"kty\" parameter: ${json.kty}`);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subjectPublicKey = new asn1js.BitString({ valueHex: this.parsedKey.toSchema().toBER(false) });\n\t\t}\n\t}\n\t//**********************************************************************************\n\timportKey(publicKey)\n\t{\n\t\t//region Initial variables\n\t\tlet sequence = Promise.resolve();\n\t\tconst _this = this;\n\t\t//endregion\n\t\t\n\t\t//region Initial check\n\t\tif(typeof publicKey === \"undefined\")\n\t\t\treturn Promise.reject(\"Need to provide publicKey input parameter\");\n\t\t//endregion\n\t\t\n\t\t//region Get a \"crypto\" extension\n\t\tconst crypto = getCrypto();\n\t\tif(typeof crypto === \"undefined\")\n\t\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\n\t\t//endregion\n\t\t\n\t\t//region Export public key\n\t\tsequence = sequence.then(() =>\n\t\t\tcrypto.exportKey(\"spki\", publicKey));\n\t\t//endregion\n\t\t\n\t\t//region Initialize internal variables by parsing exported value\n\t\tsequence = sequence.then(\n\t\t\t/**\n\t\t\t * @param {ArrayBuffer} exportedKey\n\t\t\t */\n\t\t\texportedKey =>\n\t\t\t{\n\t\t\t\tconst asn1 = asn1js.fromBER(exportedKey);\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\t_this.fromSchema(asn1.result);\n\t\t\t\t}\n\t\t\t\tcatch(exception)\n\t\t\t\t{\n\t\t\t\t\treturn Promise.reject(\"Error during initializing object from schema\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\terror => Promise.reject(`Error during exporting public key: ${error}`)\n\t\t);\n\t\t//endregion\n\t\t\n\t\treturn sequence;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC2986\r\n */\r\nexport default class Attribute {\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for Attribute class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc ObjectIdentifier for attribute (string representation)\r\n\t\t */\r\n\t\tthis.type = getParametersValue(parameters, \"type\", Attribute.defaultValues(\"type\"));\r\n\t\t/**\r\n\t\t * @type {Array}\r\n\t\t * @desc Any attribute values\r\n\t\t */\r\n\t\tthis.values = getParametersValue(parameters, \"values\", Attribute.defaultValues(\"values\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"values\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Attribute class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\treturn (memberValue === \"\");\r\n\t\t\tcase \"values\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Attribute class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {\r\n\t * type ATTRIBUTE.&id({IOSet}),\r\n\t * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [type]\r\n\t\t * @property {string} [setName]\r\n\t\t * @property {string} [values]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.type || \"\") }),\r\n\t\t\t\tnew asn1js.Set({\r\n\t\t\t\t\tname: (names.setName || \"\"),\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.values || \"\"),\r\n\t\t\t\t\t\t\tvalue: new asn1js.Any()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"type\",\r\n\t\t\t\"values\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAttribute.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\ttype: \"type\",\r\n\t\t\t\t\tvalues: \"values\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Attribute\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.type = asn1.result.type.valueBlock.toString();\r\n\t\tthis.values = asn1.result.values;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.type }),\r\n\t\t\t\tnew asn1js.Set({\r\n\t\t\t\t\tvalue: this.values\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\ttype: this.type,\r\n\t\t\tvalues: Array.from(this.values, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, toBase64, arrayBufferToString, stringToArrayBuffer, fromBase64, clearProps } from \"pvutils\";\nimport ECPublicKey from \"./ECPublicKey.js\";\n//**************************************************************************************\n/**\n * Class from RFC5915\n */\nexport default class ECPrivateKey\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for ECPrivateKey class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {number}\n\t\t * @desc version\n\t\t */\n\t\tthis.version = getParametersValue(parameters, \"version\", ECPrivateKey.defaultValues(\"version\"));\n\t\t/**\n\t\t * @type {OctetString}\n\t\t * @desc privateKey\n\t\t */\n\t\tthis.privateKey = getParametersValue(parameters, \"privateKey\", ECPrivateKey.defaultValues(\"privateKey\"));\n\n\t\tif(\"namedCurve\" in parameters)\n\t\t\t/**\n\t\t\t * @type {string}\n\t\t\t * @desc namedCurve\n\t\t\t */\n\t\t\tthis.namedCurve = getParametersValue(parameters, \"namedCurve\", ECPrivateKey.defaultValues(\"namedCurve\"));\n\n\t\tif(\"publicKey\" in parameters)\n\t\t\t/**\n\t\t\t * @type {ECPublicKey}\n\t\t\t * @desc publicKey\n\t\t\t */\n\t\t\tthis.publicKey = getParametersValue(parameters, \"publicKey\", ECPrivateKey.defaultValues(\"publicKey\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t\t//region If input argument array contains \"json\" for this object\n\t\tif(\"json\" in parameters)\n\t\t\tthis.fromJSON(parameters.json);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"version\":\n\t\t\t\treturn 1;\n\t\t\tcase \"privateKey\":\n\t\t\t\treturn new asn1js.OctetString();\n\t\t\tcase \"namedCurve\":\n\t\t\t\treturn \"\";\n\t\t\tcase \"publicKey\":\n\t\t\t\treturn new ECPublicKey();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for ECCPrivateKey class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Compare values with default values for all class members\n\t * @param {string} memberName String name for a class member\n\t * @param {*} memberValue Value to compare with default value\n\t */\n\tstatic compareWithDefault(memberName, memberValue)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"version\":\n\t\t\t\treturn (memberValue === ECPrivateKey.defaultValues(memberName));\n\t\t\tcase \"privateKey\":\n\t\t\t\treturn (memberValue.isEqual(ECPrivateKey.defaultValues(memberName)));\n\t\t\tcase \"namedCurve\":\n\t\t\t\treturn (memberValue === \"\");\n\t\t\tcase \"publicKey\":\n\t\t\t\treturn ((ECPublicKey.compareWithDefault(\"namedCurve\", memberValue.namedCurve)) &&\n\t\t\t\t\t\t(ECPublicKey.compareWithDefault(\"x\", memberValue.x)) &&\n\t\t\t\t\t\t(ECPublicKey.compareWithDefault(\"y\", memberValue.y)));\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for ECCPrivateKey class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * ECPrivateKey ::= SEQUENCE {\n\t * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),\n\t * privateKey OCTET STRING,\n\t * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,\n\t * publicKey [1] BIT STRING OPTIONAL\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [version]\n\t\t * @property {string} [privateKey]\n\t\t * @property {string} [namedCurve]\n\t\t * @property {string} [publicKey]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"\") }),\n\t\t\t\tnew asn1js.OctetString({ name: (names.privateKey || \"\") }),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.namedCurve || \"\") })\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.BitString({ name: (names.publicKey || \"\") })\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"version\",\n\t\t\t\"privateKey\",\n\t\t\t\"namedCurve\",\n\t\t\t\"publicKey\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tECPrivateKey.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tversion: \"version\",\n\t\t\t\t\tprivateKey: \"privateKey\",\n\t\t\t\t\tnamedCurve: \"namedCurve\",\n\t\t\t\t\tpublicKey: \"publicKey\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ECPrivateKey\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tthis.version = asn1.result.version.valueBlock.valueDec;\n\t\tthis.privateKey = asn1.result.privateKey;\n\n\t\tif(\"namedCurve\" in asn1.result)\n\t\t\tthis.namedCurve = asn1.result.namedCurve.valueBlock.toString();\n\n\t\tif(\"publicKey\" in asn1.result)\n\t\t{\n\t\t\tconst publicKeyData = { schema: asn1.result.publicKey.valueBlock.valueHex };\n\t\t\tif(\"namedCurve\" in this)\n\t\t\t\tpublicKeyData.namedCurve = this.namedCurve;\n\n\t\t\tthis.publicKey = new ECPublicKey(publicKeyData);\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst outputArray = [\n\t\t\tnew asn1js.Integer({ value: this.version }),\n\t\t\tthis.privateKey\n\t\t];\n\n\t\tif(\"namedCurve\" in this)\n\t\t{\n\t\t\toutputArray.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.namedCurve })\n\t\t\t\t]\n\t\t\t}));\n\t\t}\n\n\t\tif(\"publicKey\" in this)\n\t\t{\n\t\t\toutputArray.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.BitString({ valueHex: this.publicKey.toSchema().toBER(false) })\n\t\t\t\t]\n\t\t\t}));\n\t\t}\n\n\t\treturn new asn1js.Sequence({\n\t\t\tvalue: outputArray\n\t\t});\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tif(((\"namedCurve\" in this) === false) || (ECPrivateKey.compareWithDefault(\"namedCurve\", this.namedCurve)))\n\t\t\tthrow new Error(\"Not enough information for making JSON: absent \\\"namedCurve\\\" value\");\n\n\t\tlet crvName = \"\";\n\n\t\tswitch(this.namedCurve)\n\t\t{\n\t\t\tcase \"1.2.840.10045.3.1.7\": // P-256\n\t\t\t\tcrvName = \"P-256\";\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.132.0.34\": // P-384\n\t\t\t\tcrvName = \"P-384\";\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.132.0.35\": // P-521\n\t\t\t\tcrvName = \"P-521\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\n\t\tconst privateKeyJSON = {\n\t\t\tcrv: crvName,\n\t\t\td: toBase64(arrayBufferToString(this.privateKey.valueBlock.valueHex), true, true, false)\n\t\t};\n\n\t\tif(\"publicKey\" in this)\n\t\t{\n\t\t\tconst publicKeyJSON = this.publicKey.toJSON();\n\n\t\t\tprivateKeyJSON.x = publicKeyJSON.x;\n\t\t\tprivateKeyJSON.y = publicKeyJSON.y;\n\t\t}\n\n\t\treturn privateKeyJSON;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert JSON value into current object\n\t * @param {Object} json\n\t */\n\tfromJSON(json)\n\t{\n\t\tlet coodinateLength = 0;\n\n\t\tif(\"crv\" in json)\n\t\t{\n\t\t\tswitch(json.crv.toUpperCase())\n\t\t\t{\n\t\t\t\tcase \"P-256\":\n\t\t\t\t\tthis.namedCurve = \"1.2.840.10045.3.1.7\";\n\t\t\t\t\tcoodinateLength = 32;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"P-384\":\n\t\t\t\t\tthis.namedCurve = \"1.3.132.0.34\";\n\t\t\t\t\tcoodinateLength = 48;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"P-521\":\n\t\t\t\t\tthis.namedCurve = \"1.3.132.0.35\";\n\t\t\t\t\tcoodinateLength = 66;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"crv\\\"\");\n\n\t\tif(\"d\" in json)\n\t\t{\n\t\t\tconst convertBuffer = stringToArrayBuffer(fromBase64(json.d, true));\n\t\t\t\n\t\t\tif(convertBuffer.byteLength < coodinateLength)\n\t\t\t{\n\t\t\t\tconst buffer = new ArrayBuffer(coodinateLength);\n\t\t\t\tconst view = new Uint8Array(buffer);\n\t\t\t\tconst convertBufferView = new Uint8Array(convertBuffer);\n\t\t\t\tview.set(convertBufferView, 1);\n\t\t\t\t\n\t\t\t\tthis.privateKey = new asn1js.OctetString({ valueHex: buffer });\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.privateKey = new asn1js.OctetString({ valueHex: convertBuffer.slice(0, coodinateLength) });\n\t\t}\n\t\telse\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"d\\\"\");\n\n\t\tif((\"x\" in json) && (\"y\" in json))\n\t\t\tthis.publicKey = new ECPublicKey({ json });\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, toBase64, arrayBufferToString, stringToArrayBuffer, fromBase64, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC3447\r\n */\r\nexport default class OtherPrimeInfo\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for OtherPrimeInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc prime\r\n\t\t */\r\n\t\tthis.prime = getParametersValue(parameters, \"prime\", OtherPrimeInfo.defaultValues(\"prime\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc exponent\r\n\t\t */\r\n\t\tthis.exponent = getParametersValue(parameters, \"exponent\", OtherPrimeInfo.defaultValues(\"exponent\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc coefficient\r\n\t\t */\r\n\t\tthis.coefficient = getParametersValue(parameters, \"coefficient\", OtherPrimeInfo.defaultValues(\"coefficient\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t\t//region If input argument array contains \"json\" for this object\r\n\t\tif(\"json\" in parameters)\r\n\t\t\tthis.fromJSON(parameters.json);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"prime\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"exponent\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"coefficient\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for OtherPrimeInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * OtherPrimeInfo ::= Sequence {\r\n\t * prime Integer, -- ri\r\n\t * exponent Integer, -- di\r\n\t * coefficient Integer -- ti\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} prime\r\n\t\t * @property {string} exponent\r\n\t\t * @property {string} coefficient\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.prime || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.exponent || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.coefficient || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"prime\",\r\n\t\t\t\"exponent\",\r\n\t\t\t\"coefficient\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tOtherPrimeInfo.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tprime: \"prime\",\r\n\t\t\t\t\texponent: \"exponent\",\r\n\t\t\t\t\tcoefficient: \"coefficient\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for OtherPrimeInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.prime = asn1.result.prime.convertFromDER();\r\n\t\tthis.exponent = asn1.result.exponent.convertFromDER();\r\n\t\tthis.coefficient = asn1.result.coefficient.convertFromDER();\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.prime.convertToDER(),\r\n\t\t\t\tthis.exponent.convertToDER(),\r\n\t\t\t\tthis.coefficient.convertToDER()\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tr: toBase64(arrayBufferToString(this.prime.valueBlock.valueHex), true, true),\r\n\t\t\td: toBase64(arrayBufferToString(this.exponent.valueBlock.valueHex), true, true),\r\n\t\t\tt: toBase64(arrayBufferToString(this.coefficient.valueBlock.valueHex), true, true)\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert JSON value into current object\r\n\t * @param {Object} json\r\n\t */\r\n\tfromJSON(json)\r\n\t{\r\n\t\tif(\"r\" in json)\r\n\t\t\tthis.prime = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.r, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"r\\\"\");\r\n\r\n\t\tif(\"d\" in json)\r\n\t\t\tthis.exponent = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.d, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"d\\\"\");\r\n\r\n\t\tif(\"t\" in json)\r\n\t\t\tthis.coefficient = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.t, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"t\\\"\");\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, toBase64, arrayBufferToString, stringToArrayBuffer, fromBase64, clearProps } from \"pvutils\";\r\nimport OtherPrimeInfo from \"./OtherPrimeInfo.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC3447\r\n */\r\nexport default class RSAPrivateKey\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for RSAPrivateKey class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc version\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", RSAPrivateKey.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc modulus\r\n\t\t */\r\n\t\tthis.modulus = getParametersValue(parameters, \"modulus\", RSAPrivateKey.defaultValues(\"modulus\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc publicExponent\r\n\t\t */\r\n\t\tthis.publicExponent = getParametersValue(parameters, \"publicExponent\", RSAPrivateKey.defaultValues(\"publicExponent\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc privateExponent\r\n\t\t */\r\n\t\tthis.privateExponent = getParametersValue(parameters, \"privateExponent\", RSAPrivateKey.defaultValues(\"privateExponent\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc prime1\r\n\t\t */\r\n\t\tthis.prime1 = getParametersValue(parameters, \"prime1\", RSAPrivateKey.defaultValues(\"prime1\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc prime2\r\n\t\t */\r\n\t\tthis.prime2 = getParametersValue(parameters, \"prime2\", RSAPrivateKey.defaultValues(\"prime2\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc exponent1\r\n\t\t */\r\n\t\tthis.exponent1 = getParametersValue(parameters, \"exponent1\", RSAPrivateKey.defaultValues(\"exponent1\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc exponent2\r\n\t\t */\r\n\t\tthis.exponent2 = getParametersValue(parameters, \"exponent2\", RSAPrivateKey.defaultValues(\"exponent2\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc coefficient\r\n\t\t */\r\n\t\tthis.coefficient = getParametersValue(parameters, \"coefficient\", RSAPrivateKey.defaultValues(\"coefficient\"));\r\n\r\n\t\tif(\"otherPrimeInfos\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc otherPrimeInfos\r\n\t\t\t */\r\n\t\t\tthis.otherPrimeInfos = getParametersValue(parameters, \"otherPrimeInfos\", RSAPrivateKey.defaultValues(\"otherPrimeInfos\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t\t//region If input argument array contains \"json\" for this object\r\n\t\tif(\"json\" in parameters)\r\n\t\t\tthis.fromJSON(parameters.json);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"modulus\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"publicExponent\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"privateExponent\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"prime1\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"prime2\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"exponent1\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"exponent2\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"coefficient\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"otherPrimeInfos\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RSAPrivateKey class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * RSAPrivateKey ::= Sequence {\r\n\t * version Version,\r\n\t * modulus Integer, -- n\r\n\t * publicExponent Integer, -- e\r\n\t * privateExponent Integer, -- d\r\n\t * prime1 Integer, -- p\r\n\t * prime2 Integer, -- q\r\n\t * exponent1 Integer, -- d mod (p-1)\r\n\t * exponent2 Integer, -- d mod (q-1)\r\n\t * coefficient Integer, -- (inverse of q) mod p\r\n\t * otherPrimeInfos OtherPrimeInfos OPTIONAL\r\n\t * }\r\n\t *\r\n\t * OtherPrimeInfos ::= Sequence SIZE(1..MAX) OF OtherPrimeInfo\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [version]\r\n\t\t * @property {string} [modulus]\r\n\t\t * @property {string} [publicExponent]\r\n\t\t * @property {string} [privateExponent]\r\n\t\t * @property {string} [prime1]\r\n\t\t * @property {string} [prime2]\r\n\t\t * @property {string} [exponent1]\r\n\t\t * @property {string} [exponent2]\r\n\t\t * @property {string} [coefficient]\r\n\t\t * @property {string} [otherPrimeInfosName]\r\n\t\t * @property {Object} [otherPrimeInfo]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.modulus || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.publicExponent || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.privateExponent || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.prime1 || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.prime2 || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.exponent1 || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.exponent2 || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.coefficient || \"\") }),\r\n\t\t\t\tnew asn1js.Sequence({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.otherPrimeInfosName || \"\"),\r\n\t\t\t\t\t\t\tvalue: OtherPrimeInfo.schema(names.otherPrimeInfo || {})\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"version\",\r\n\t\t\t\"modulus\",\r\n\t\t\t\"publicExponent\",\r\n\t\t\t\"privateExponent\",\r\n\t\t\t\"prime1\",\r\n\t\t\t\"prime2\",\r\n\t\t\t\"exponent1\",\r\n\t\t\t\"exponent2\",\r\n\t\t\t\"coefficient\",\r\n\t\t\t\"otherPrimeInfos\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tRSAPrivateKey.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tversion: \"version\",\r\n\t\t\t\t\tmodulus: \"modulus\",\r\n\t\t\t\t\tpublicExponent: \"publicExponent\",\r\n\t\t\t\t\tprivateExponent: \"privateExponent\",\r\n\t\t\t\t\tprime1: \"prime1\",\r\n\t\t\t\t\tprime2: \"prime2\",\r\n\t\t\t\t\texponent1: \"exponent1\",\r\n\t\t\t\t\texponent2: \"exponent2\",\r\n\t\t\t\t\tcoefficient: \"coefficient\",\r\n\t\t\t\t\totherPrimeInfo: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"otherPrimeInfos\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for RSAPrivateKey\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.version = asn1.result.version.valueBlock.valueDec;\r\n\t\tthis.modulus = asn1.result.modulus.convertFromDER(256);\r\n\t\tthis.publicExponent = asn1.result.publicExponent;\r\n\t\tthis.privateExponent = asn1.result.privateExponent.convertFromDER(256);\r\n\t\tthis.prime1 = asn1.result.prime1.convertFromDER(128);\r\n\t\tthis.prime2 = asn1.result.prime2.convertFromDER(128);\r\n\t\tthis.exponent1 = asn1.result.exponent1.convertFromDER(128);\r\n\t\tthis.exponent2 = asn1.result.exponent2.convertFromDER(128);\r\n\t\tthis.coefficient = asn1.result.coefficient.convertFromDER(128);\r\n\r\n\t\tif(\"otherPrimeInfos\" in asn1.result)\r\n\t\t\tthis.otherPrimeInfos = Array.from(asn1.result.otherPrimeInfos, element => new OtherPrimeInfo({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(new asn1js.Integer({ value: this.version }));\r\n\t\toutputArray.push(this.modulus.convertToDER());\r\n\t\toutputArray.push(this.publicExponent);\r\n\t\toutputArray.push(this.privateExponent.convertToDER());\r\n\t\toutputArray.push(this.prime1.convertToDER());\r\n\t\toutputArray.push(this.prime2.convertToDER());\r\n\t\toutputArray.push(this.exponent1.convertToDER());\r\n\t\toutputArray.push(this.exponent2.convertToDER());\r\n\t\toutputArray.push(this.coefficient.convertToDER());\r\n\t\t\r\n\t\tif(\"otherPrimeInfos\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Sequence({\r\n\t\t\t\tvalue: Array.from(this.otherPrimeInfos, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst jwk = {\r\n\t\t\tn: toBase64(arrayBufferToString(this.modulus.valueBlock.valueHex), true, true, true),\r\n\t\t\te: toBase64(arrayBufferToString(this.publicExponent.valueBlock.valueHex), true, true, true),\r\n\t\t\td: toBase64(arrayBufferToString(this.privateExponent.valueBlock.valueHex), true, true, true),\r\n\t\t\tp: toBase64(arrayBufferToString(this.prime1.valueBlock.valueHex), true, true, true),\r\n\t\t\tq: toBase64(arrayBufferToString(this.prime2.valueBlock.valueHex), true, true, true),\r\n\t\t\tdp: toBase64(arrayBufferToString(this.exponent1.valueBlock.valueHex), true, true, true),\r\n\t\t\tdq: toBase64(arrayBufferToString(this.exponent2.valueBlock.valueHex), true, true, true),\r\n\t\t\tqi: toBase64(arrayBufferToString(this.coefficient.valueBlock.valueHex), true, true, true)\r\n\t\t};\r\n\r\n\t\tif(\"otherPrimeInfos\" in this)\r\n\t\t\tjwk.oth = Array.from(this.otherPrimeInfos, element => element.toJSON());\r\n\r\n\t\treturn jwk;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert JSON value into current object\r\n\t * @param {Object} json\r\n\t */\r\n\tfromJSON(json)\r\n\t{\r\n\t\tif(\"n\" in json)\r\n\t\t\tthis.modulus = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.n, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"n\\\"\");\r\n\r\n\t\tif(\"e\" in json)\r\n\t\t\tthis.publicExponent = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.e, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"e\\\"\");\r\n\r\n\t\tif(\"d\" in json)\r\n\t\t\tthis.privateExponent = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.d, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"d\\\"\");\r\n\r\n\t\tif(\"p\" in json)\r\n\t\t\tthis.prime1 = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.p, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"p\\\"\");\r\n\r\n\t\tif(\"q\" in json)\r\n\t\t\tthis.prime2 = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.q, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"q\\\"\");\r\n\r\n\t\tif(\"dp\" in json)\r\n\t\t\tthis.exponent1 = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.dp, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"dp\\\"\");\r\n\r\n\t\tif(\"dq\" in json)\r\n\t\t\tthis.exponent2 = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.dq, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"dq\\\"\");\r\n\r\n\t\tif(\"qi\" in json)\r\n\t\t\tthis.coefficient = new asn1js.Integer({ valueHex: stringToArrayBuffer(fromBase64(json.qi, true, true)) });\r\n\t\telse\r\n\t\t\tthrow new Error(\"Absent mandatory parameter \\\"qi\\\"\");\r\n\r\n\t\tif(\"oth\" in json)\r\n\t\t\tthis.otherPrimeInfos = Array.from(json.oth, element => new OtherPrimeInfo({ json: element }));\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport Attribute from \"./Attribute.js\";\r\nimport ECPrivateKey from \"./ECPrivateKey.js\";\r\nimport RSAPrivateKey from \"./RSAPrivateKey.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5208\r\n */\r\nexport default class PrivateKeyInfo\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PrivateKeyInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc version\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", PrivateKeyInfo.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc privateKeyAlgorithm\r\n\t\t */\r\n\t\tthis.privateKeyAlgorithm = getParametersValue(parameters, \"privateKeyAlgorithm\", PrivateKeyInfo.defaultValues(\"privateKeyAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {OctetString}\r\n\t\t * @desc privateKey\r\n\t\t */\r\n\t\tthis.privateKey = getParametersValue(parameters, \"privateKey\", PrivateKeyInfo.defaultValues(\"privateKey\"));\r\n\r\n\t\tif(\"attributes\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc attributes\r\n\t\t\t */\r\n\t\t\tthis.attributes = getParametersValue(parameters, \"attributes\", PrivateKeyInfo.defaultValues(\"attributes\"));\r\n\r\n\t\tif(\"parsedKey\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {ECPrivateKey|RSAPrivateKey}\r\n\t\t\t * @desc Parsed public key value\r\n\t\t\t */\r\n\t\t\tthis.parsedKey = getParametersValue(parameters, \"parsedKey\", PrivateKeyInfo.defaultValues(\"parsedKey\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t\t//region If input argument array contains \"json\" for this object\r\n\t\tif(\"json\" in parameters)\r\n\t\t\tthis.fromJSON(parameters.json);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"privateKeyAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"privateKey\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tcase \"attributes\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"parsedKey\":\r\n\t\t\t\treturn {};\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PrivateKeyInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PrivateKeyInfo ::= SEQUENCE {\r\n\t * version Version,\r\n\t * privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},\r\n\t * privateKey PrivateKey,\r\n\t * attributes [0] Attributes OPTIONAL }\r\n\t *\r\n\t * Version ::= INTEGER {v1(0)} (v1,...)\r\n\t *\r\n\t * PrivateKey ::= OCTET STRING\r\n\t *\r\n\t * Attributes ::= SET OF Attribute\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [version]\r\n\t\t * @property {string} [privateKeyAlgorithm]\r\n\t\t * @property {string} [privateKey]\r\n\t\t * @property {string} [attributes]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"\") }),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.privateKeyAlgorithm || {}),\r\n\t\t\t\tnew asn1js.OctetString({ name: (names.privateKey || \"\") }),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.attributes || \"\"),\r\n\t\t\t\t\t\t\tvalue: Attribute.schema()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"version\",\r\n\t\t\t\"privateKeyAlgorithm\",\r\n\t\t\t\"privateKey\",\r\n\t\t\t\"attributes\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPrivateKeyInfo.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tversion: \"version\",\r\n\t\t\t\t\tprivateKeyAlgorithm: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"privateKeyAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tprivateKey: \"privateKey\",\r\n\t\t\t\t\tattributes: \"attributes\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PrivateKeyInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.version = asn1.result.version.valueBlock.valueDec;\r\n\t\tthis.privateKeyAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.privateKeyAlgorithm });\r\n\t\tthis.privateKey = asn1.result.privateKey;\r\n\r\n\t\tif(\"attributes\" in asn1.result)\r\n\t\t\tthis.attributes = Array.from(asn1.result.attributes, element => new Attribute({ schema: element }));\r\n\r\n\t\tswitch(this.privateKeyAlgorithm.algorithmId)\r\n\t\t{\r\n\t\t\tcase \"1.2.840.113549.1.1.1\": // RSA\r\n\t\t\t\t{\r\n\t\t\t\t\tconst privateKeyASN1 = asn1js.fromBER(this.privateKey.valueBlock.valueHex);\r\n\t\t\t\t\tif(privateKeyASN1.offset !== (-1))\r\n\t\t\t\t\t\tthis.parsedKey = new RSAPrivateKey({ schema: privateKeyASN1.result });\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"1.2.840.10045.2.1\": // ECDSA\r\n\t\t\t\tif(\"algorithmParams\" in this.privateKeyAlgorithm)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.privateKeyAlgorithm.algorithmParams instanceof asn1js.ObjectIdentifier)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst privateKeyASN1 = asn1js.fromBER(this.privateKey.valueBlock.valueHex);\r\n\t\t\t\t\t\tif(privateKeyASN1.offset !== (-1))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.parsedKey = new ECPrivateKey({\r\n\t\t\t\t\t\t\t\tnamedCurve: this.privateKeyAlgorithm.algorithmParams.valueBlock.toString(),\r\n\t\t\t\t\t\t\t\tschema: privateKeyASN1.result\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [\r\n\t\t\tnew asn1js.Integer({ value: this.version }),\r\n\t\t\tthis.privateKeyAlgorithm.toSchema(),\r\n\t\t\tthis.privateKey\r\n\t\t];\r\n\r\n\t\tif(\"attributes\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: Array.from(this.attributes, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\t//region Return common value in case we do not have enough info fo making JWK\r\n\t\tif((\"parsedKey\" in this) === false)\r\n\t\t{\r\n\t\t\tconst object = {\r\n\t\t\t\tversion: this.version,\r\n\t\t\t\tprivateKeyAlgorithm: this.privateKeyAlgorithm.toJSON(),\r\n\t\t\t\tprivateKey: this.privateKey.toJSON()\r\n\t\t\t};\r\n\r\n\t\t\tif(\"attributes\" in this)\r\n\t\t\t\tobject.attributes = Array.from(this.attributes, element => element.toJSON());\r\n\r\n\t\t\treturn object;\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region Making JWK\r\n\t\tconst jwk = {};\r\n\r\n\t\tswitch(this.privateKeyAlgorithm.algorithmId)\r\n\t\t{\r\n\t\t\tcase \"1.2.840.10045.2.1\": // ECDSA\r\n\t\t\t\tjwk.kty = \"EC\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"1.2.840.113549.1.1.1\": // RSA\r\n\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\r\n\t\tconst publicKeyJWK = this.parsedKey.toJSON();\r\n\r\n\t\tfor(const key of Object.keys(publicKeyJWK))\r\n\t\t\tjwk[key] = publicKeyJWK[key];\r\n\r\n\t\treturn jwk;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert JSON value into current object\r\n\t * @param {Object} json\r\n\t */\r\n\tfromJSON(json)\r\n\t{\r\n\t\tif(\"kty\" in json)\r\n\t\t{\r\n\t\t\tswitch(json.kty.toUpperCase())\r\n\t\t\t{\r\n\t\t\t\tcase \"EC\":\r\n\t\t\t\t\tthis.parsedKey = new ECPrivateKey({ json });\r\n\r\n\t\t\t\t\tthis.privateKeyAlgorithm = new AlgorithmIdentifier({\r\n\t\t\t\t\t\talgorithmId: \"1.2.840.10045.2.1\",\r\n\t\t\t\t\t\talgorithmParams: new asn1js.ObjectIdentifier({ value: this.parsedKey.namedCurve })\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"RSA\":\r\n\t\t\t\t\tthis.parsedKey = new RSAPrivateKey({ json });\r\n\r\n\t\t\t\t\tthis.privateKeyAlgorithm = new AlgorithmIdentifier({\r\n\t\t\t\t\t\talgorithmId: \"1.2.840.113549.1.1.1\",\r\n\t\t\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t\t\t});\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new Error(`Invalid value for \"kty\" parameter: ${json.kty}`);\r\n\t\t\t}\r\n\r\n\t\t\tthis.privateKey = new asn1js.OctetString({ valueHex: this.parsedKey.toSchema().toBER(false) });\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class EncryptedContentInfo\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for EncryptedContentInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc contentType\r\n\t\t */\r\n\t\tthis.contentType = getParametersValue(parameters, \"contentType\", EncryptedContentInfo.defaultValues(\"contentType\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc contentEncryptionAlgorithm\r\n\t\t */\r\n\t\tthis.contentEncryptionAlgorithm = getParametersValue(parameters, \"contentEncryptionAlgorithm\", EncryptedContentInfo.defaultValues(\"contentEncryptionAlgorithm\"));\r\n\r\n\t\tif(\"encryptedContent\" in parameters)\r\n\t\t{\r\n\t\t\t/**\r\n\t\t\t * @type {OctetString}\r\n\t\t\t * @desc encryptedContent (!!!) could be contructive or primitive value (!!!)\r\n\t\t\t */\r\n\t\t\tthis.encryptedContent = parameters.encryptedContent;\r\n\t\t\t\r\n\t\t\tif((this.encryptedContent.idBlock.tagClass === 1) &&\r\n\t\t\t\t(this.encryptedContent.idBlock.tagNumber === 4))\r\n\t\t\t{\r\n\t\t\t\t//region Divide OCTETSTRING value down to small pieces\r\n\t\t\t\tif(this.encryptedContent.idBlock.isConstructed === false)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst constrString = new asn1js.OctetString({\r\n\t\t\t\t\t\tidBlock: { isConstructed: true },\r\n\t\t\t\t\t\tisConstructed: true\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet offset = 0;\r\n\t\t\t\t\tlet length = this.encryptedContent.valueBlock.valueHex.byteLength;\r\n\t\t\t\t\t\r\n\t\t\t\t\twhile(length > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst pieceView = new Uint8Array(this.encryptedContent.valueBlock.valueHex, offset, ((offset + 1024) > this.encryptedContent.valueBlock.valueHex.byteLength) ? (this.encryptedContent.valueBlock.valueHex.byteLength - offset) : 1024);\r\n\t\t\t\t\t\tconst _array = new ArrayBuffer(pieceView.length);\r\n\t\t\t\t\t\tconst _view = new Uint8Array(_array);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(let i = 0; i < _view.length; i++)\r\n\t\t\t\t\t\t\t_view[i] = pieceView[i];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tconstrString.valueBlock.value.push(new asn1js.OctetString({ valueHex: _array }));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tlength -= pieceView.length;\r\n\t\t\t\t\t\toffset += pieceView.length;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.encryptedContent = constrString;\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"contentType\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"contentEncryptionAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"encryptedContent\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for EncryptedContentInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"contentType\":\r\n\t\t\t\treturn (memberValue === \"\");\r\n\t\t\tcase \"contentEncryptionAlgorithm\":\r\n\t\t\t\treturn ((memberValue.algorithmId === \"\") && ((\"algorithmParams\" in memberValue) === false));\r\n\t\t\tcase \"encryptedContent\":\r\n\t\t\t\treturn (memberValue.isEqual(EncryptedContentInfo.defaultValues(memberName)));\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for EncryptedContentInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * EncryptedContentInfo ::= SEQUENCE {\r\n\t * contentType ContentType,\r\n\t * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,\r\n\t * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL }\r\n\t *\r\n\t * Comment: Strange, but modern crypto engines create \"encryptedContent\" as \"[0] EXPLICIT EncryptedContent\"\r\n\t *\r\n\t * EncryptedContent ::= OCTET STRING\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [contentType]\r\n\t\t * @property {string} [contentEncryptionAlgorithm]\r\n\t\t * @property {string} [encryptedContent]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.contentType || \"\") }),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.contentEncryptionAlgorithm || {}),\r\n\t\t\t\t// The CHOICE we need because \"EncryptedContent\" could have either \"constructive\"\r\n\t\t\t\t// or \"primitive\" form of encoding and we need to handle both variants\r\n\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\tname: (names.encryptedContent || \"\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\t\t\tvalue: new asn1js.OctetString()\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\t\t\tname: (names.encryptedContent || \"\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"contentType\",\r\n\t\t\t\"contentEncryptionAlgorithm\",\r\n\t\t\t\"encryptedContent\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tEncryptedContentInfo.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tcontentType: \"contentType\",\r\n\t\t\t\t\tcontentEncryptionAlgorithm: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"contentEncryptionAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tencryptedContent: \"encryptedContent\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for EncryptedContentInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.contentType = asn1.result.contentType.valueBlock.toString();\r\n\t\tthis.contentEncryptionAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.contentEncryptionAlgorithm });\r\n\r\n\t\tif(\"encryptedContent\" in asn1.result)\r\n\t\t{\r\n\t\t\tthis.encryptedContent = asn1.result.encryptedContent;\r\n\r\n\t\t\tthis.encryptedContent.idBlock.tagClass = 1; // UNIVERSAL\r\n\t\t\tthis.encryptedContent.idBlock.tagNumber = 4; // OCTETSTRING (!!!) The value still has instance of \"in_window.org.pkijs.asn1.ASN1_CONSTRUCTED / ASN1_PRIMITIVE\"\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst sequenceLengthBlock = {\r\n\t\t\tisIndefiniteForm: false\r\n\t\t};\r\n\r\n\t\tconst outputArray = [];\r\n\r\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.contentType }));\r\n\t\toutputArray.push(this.contentEncryptionAlgorithm.toSchema());\r\n\r\n\t\tif(\"encryptedContent\" in this)\r\n\t\t{\r\n\t\t\tsequenceLengthBlock.isIndefiniteForm = this.encryptedContent.idBlock.isConstructed;\r\n\r\n\t\t\tconst encryptedValue = this.encryptedContent;\r\n\r\n\t\t\tencryptedValue.idBlock.tagClass = 3; // CONTEXT-SPECIFIC\r\n\t\t\tencryptedValue.idBlock.tagNumber = 0; // [0]\r\n\r\n\t\t\tencryptedValue.lenBlock.isIndefiniteForm = this.encryptedContent.idBlock.isConstructed;\r\n\r\n\t\t\toutputArray.push(encryptedValue);\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tlenBlock: sequenceLengthBlock,\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\tcontentType: this.contentType,\r\n\t\t\tcontentEncryptionAlgorithm: this.contentEncryptionAlgorithm.toJSON()\r\n\t\t};\r\n\r\n\t\tif(\"encryptedContent\" in this)\r\n\t\t\t_object.encryptedContent = this.encryptedContent.toJSON();\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC4055\r\n */\r\nexport default class RSASSAPSSParams\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for RSASSAPSSParams class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc Algorithms of hashing (DEFAULT sha1)\r\n\t\t */\r\n\t\tthis.hashAlgorithm = getParametersValue(parameters, \"hashAlgorithm\", RSASSAPSSParams.defaultValues(\"hashAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc Algorithm of \"mask generaion function (MGF)\" (DEFAULT mgf1SHA1)\r\n\t\t */\r\n\t\tthis.maskGenAlgorithm = getParametersValue(parameters, \"maskGenAlgorithm\", RSASSAPSSParams.defaultValues(\"maskGenAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc Salt length (DEFAULT 20)\r\n\t\t */\r\n\t\tthis.saltLength = getParametersValue(parameters, \"saltLength\", RSASSAPSSParams.defaultValues(\"saltLength\"));\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc (DEFAULT 1)\r\n\t\t */\r\n\t\tthis.trailerField = getParametersValue(parameters, \"trailerField\", RSASSAPSSParams.defaultValues(\"trailerField\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"hashAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier({\r\n\t\t\t\t\talgorithmId: \"1.3.14.3.2.26\", // SHA-1\r\n\t\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t\t});\r\n\t\t\tcase \"maskGenAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier({\r\n\t\t\t\t\talgorithmId: \"1.2.840.113549.1.1.8\", // MGF1\r\n\t\t\t\t\talgorithmParams: (new AlgorithmIdentifier({\r\n\t\t\t\t\t\talgorithmId: \"1.3.14.3.2.26\", // SHA-1\r\n\t\t\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t\t\t})).toSchema()\r\n\t\t\t\t});\r\n\t\t\tcase \"saltLength\":\r\n\t\t\t\treturn 20;\r\n\t\t\tcase \"trailerField\":\r\n\t\t\t\treturn 1;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RSASSAPSSParams class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * RSASSA-PSS-params ::= Sequence {\r\n\t * hashAlgorithm [0] HashAlgorithm DEFAULT sha1Identifier,\r\n\t * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1Identifier,\r\n\t * saltLength [2] Integer DEFAULT 20,\r\n\t * trailerField [3] Integer DEFAULT 1 }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [hashAlgorithm]\r\n\t\t * @property {string} [maskGenAlgorithm]\r\n\t\t * @property {string} [saltLength]\r\n\t\t * @property {string} [trailerField]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalue: [AlgorithmIdentifier.schema(names.hashAlgorithm || {})]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalue: [AlgorithmIdentifier.schema(names.maskGenAlgorithm || {})]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalue: [new asn1js.Integer({ name: (names.saltLength || \"\") })]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 3 // [3]\r\n\t\t\t\t\t},\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalue: [new asn1js.Integer({ name: (names.trailerField || \"\") })]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"hashAlgorithm\",\r\n\t\t\t\"maskGenAlgorithm\",\r\n\t\t\t\"saltLength\",\r\n\t\t\t\"trailerField\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tRSASSAPSSParams.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\thashAlgorithm: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"hashAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tmaskGenAlgorithm: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"maskGenAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsaltLength: \"saltLength\",\r\n\t\t\t\t\ttrailerField: \"trailerField\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for RSASSAPSSParams\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"hashAlgorithm\" in asn1.result)\r\n\t\t\tthis.hashAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.hashAlgorithm });\r\n\r\n\t\tif(\"maskGenAlgorithm\" in asn1.result)\r\n\t\t\tthis.maskGenAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.maskGenAlgorithm });\r\n\r\n\t\tif(\"saltLength\" in asn1.result)\r\n\t\t\tthis.saltLength = asn1.result.saltLength.valueBlock.valueDec;\r\n\r\n\t\tif(\"trailerField\" in asn1.result)\r\n\t\t\tthis.trailerField = asn1.result.trailerField.valueBlock.valueDec;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(!this.hashAlgorithm.isEqual(RSASSAPSSParams.defaultValues(\"hashAlgorithm\")))\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [this.hashAlgorithm.toSchema()]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.maskGenAlgorithm.isEqual(RSASSAPSSParams.defaultValues(\"maskGenAlgorithm\")))\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [this.maskGenAlgorithm.toSchema()]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.saltLength !== RSASSAPSSParams.defaultValues(\"saltLength\"))\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [new asn1js.Integer({ value: this.saltLength })]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.trailerField !== RSASSAPSSParams.defaultValues(\"trailerField\"))\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 3 // [3]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [new asn1js.Integer({ value: this.trailerField })]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {};\r\n\r\n\t\tif(!this.hashAlgorithm.isEqual(RSASSAPSSParams.defaultValues(\"hashAlgorithm\")))\r\n\t\t\tobject.hashAlgorithm = this.hashAlgorithm.toJSON();\r\n\r\n\t\tif(!this.maskGenAlgorithm.isEqual(RSASSAPSSParams.defaultValues(\"maskGenAlgorithm\")))\r\n\t\t\tobject.maskGenAlgorithm = this.maskGenAlgorithm.toJSON();\r\n\r\n\t\tif(this.saltLength !== RSASSAPSSParams.defaultValues(\"saltLength\"))\r\n\t\t\tobject.saltLength = this.saltLength;\r\n\r\n\t\tif(this.trailerField !== RSASSAPSSParams.defaultValues(\"trailerField\"))\r\n\t\t\tobject.trailerField = this.trailerField;\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC2898\r\n */\r\nexport default class PBKDF2Params\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PBKDF2Params class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc salt\r\n\t\t */\r\n\t\tthis.salt = getParametersValue(parameters, \"salt\", PBKDF2Params.defaultValues(\"salt\"));\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc iterationCount\r\n\t\t */\r\n\t\tthis.iterationCount = getParametersValue(parameters, \"iterationCount\", PBKDF2Params.defaultValues(\"iterationCount\"));\r\n\t\t\r\n\t\tif(\"keyLength\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number}\r\n\t\t\t * @desc keyLength\r\n\t\t\t */\r\n\t\t\tthis.keyLength = getParametersValue(parameters, \"keyLength\", PBKDF2Params.defaultValues(\"keyLength\"));\r\n\t\t\r\n\t\tif(\"prf\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {AlgorithmIdentifier}\r\n\t\t\t * @desc prf\r\n\t\t\t */\r\n\t\t\tthis.prf = getParametersValue(parameters, \"prf\", PBKDF2Params.defaultValues(\"prf\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"salt\":\r\n\t\t\t\treturn {};\r\n\t\t\tcase \"iterationCount\":\r\n\t\t\t\treturn (-1);\r\n\t\t\tcase \"keyLength\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"prf\":\r\n\t\t\t\treturn new AlgorithmIdentifier({\r\n\t\t\t\t\talgorithmId: \"1.3.14.3.2.26\", // SHA-1\r\n\t\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t\t});\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PBKDF2Params class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PBKDF2-params ::= SEQUENCE {\r\n\t * salt CHOICE {\r\n\t * specified OCTET STRING,\r\n\t * otherSource AlgorithmIdentifier },\r\n\t * iterationCount INTEGER (1..MAX),\r\n\t * keyLength INTEGER (1..MAX) OPTIONAL,\r\n\t * prf AlgorithmIdentifier\r\n\t * DEFAULT { algorithm hMAC-SHA1, parameters NULL } }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [saltPrimitive]\r\n\t\t * @property {string} [saltConstructed]\r\n\t\t * @property {string} [iterationCount]\r\n\t\t * @property {string} [keyLength]\r\n\t\t * @property {string} [prf]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.OctetString({ name: (names.saltPrimitive || \"\") }),\r\n\t\t\t\t\t\tAlgorithmIdentifier.schema(names.saltConstructed || {})\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.iterationCount || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({\r\n\t\t\t\t\tname: (names.keyLength || \"\"),\r\n\t\t\t\t\toptional: true\r\n\t\t\t\t}),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.prf || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\toptional: true\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"salt\",\r\n\t\t\t\"iterationCount\",\r\n\t\t\t\"keyLength\",\r\n\t\t\t\"prf\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPBKDF2Params.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tsaltPrimitive: \"salt\",\r\n\t\t\t\t\tsaltConstructed: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"salt\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\titerationCount: \"iterationCount\",\r\n\t\t\t\t\tkeyLength: \"keyLength\",\r\n\t\t\t\t\tprf: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"prf\",\r\n\t\t\t\t\t\t\toptional: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PBKDF2Params\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.salt = asn1.result.salt;\r\n\t\tthis.iterationCount = asn1.result.iterationCount.valueBlock.valueDec;\r\n\r\n\t\tif(\"keyLength\" in asn1.result)\r\n\t\t\tthis.keyLength = asn1.result.keyLength.valueBlock.valueDec;\r\n\r\n\t\tif(\"prf\" in asn1.result)\r\n\t\t\tthis.prf = new AlgorithmIdentifier({ schema: asn1.result.prf });\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence \r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(this.salt);\r\n\t\toutputArray.push(new asn1js.Integer({ value: this.iterationCount }));\r\n\t\t\r\n\t\tif(\"keyLength\" in this)\r\n\t\t{\r\n\t\t\tif(PBKDF2Params.defaultValues(\"keyLength\") !== this.keyLength)\r\n\t\t\t\toutputArray.push(new asn1js.Integer({ value: this.keyLength }));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"prf\" in this)\r\n\t\t{\r\n\t\t\tif(PBKDF2Params.defaultValues(\"prf\").isEqual(this.prf) === false)\r\n\t\t\t\toutputArray.push(this.prf.toSchema());\r\n\t\t}\r\n\t\t//endregion \r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object \r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion \r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\tsalt: this.salt.toJSON(),\r\n\t\t\titerationCount: this.iterationCount\r\n\t\t};\r\n\t\t\r\n\t\tif(\"keyLength\" in this)\r\n\t\t{\r\n\t\t\tif(PBKDF2Params.defaultValues(\"keyLength\") !== this.keyLength)\r\n\t\t\t\t_object.keyLength = this.keyLength;\r\n\t\t}\r\n\t\t\r\n\t\tif(\"prf\" in this)\r\n\t\t{\r\n\t\t\tif(PBKDF2Params.defaultValues(\"prf\").isEqual(this.prf) === false)\r\n\t\t\t\t_object.prf = this.prf.toJSON();\r\n\t\t}\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC2898\r\n */\r\nexport default class PBES2Params\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PBES2Params class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc keyDerivationFunc\r\n\t\t */\r\n\t\tthis.keyDerivationFunc = getParametersValue(parameters, \"keyDerivationFunc\", PBES2Params.defaultValues(\"keyDerivationFunc\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc encryptionScheme\r\n\t\t */\r\n\t\tthis.encryptionScheme = getParametersValue(parameters, \"encryptionScheme\", PBES2Params.defaultValues(\"encryptionScheme\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"keyDerivationFunc\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"encryptionScheme\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PBES2Params class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PBES2-params ::= SEQUENCE {\r\n\t * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},\r\n\t * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [keyDerivationFunc]\r\n\t\t * @property {string} [encryptionScheme]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tAlgorithmIdentifier.schema(names.keyDerivationFunc || {}),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.encryptionScheme || {})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"keyDerivationFunc\",\r\n\t\t\t\"encryptionScheme\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPBES2Params.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tkeyDerivationFunc: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"keyDerivationFunc\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tencryptionScheme: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"encryptionScheme\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PBES2Params\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.keyDerivationFunc = new AlgorithmIdentifier({ schema: asn1.result.keyDerivationFunc });\r\n\t\tthis.encryptionScheme = new AlgorithmIdentifier({ schema: asn1.result.encryptionScheme });\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.keyDerivationFunc.toSchema(),\r\n\t\t\t\tthis.encryptionScheme.toSchema()\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tkeyDerivationFunc: this.keyDerivationFunc.toJSON(),\r\n\t\t\tencryptionScheme: this.encryptionScheme.toJSON()\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, stringToArrayBuffer, arrayBufferToString, utilConcatBuf } from \"pvutils\";\r\nimport { createCMSECDSASignature, createECDSASignatureFromCMS } from \"./common.js\";\r\nimport PublicKeyInfo from \"./PublicKeyInfo.js\";\r\nimport PrivateKeyInfo from \"./PrivateKeyInfo.js\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport EncryptedContentInfo from \"./EncryptedContentInfo.js\";\r\nimport RSASSAPSSParams from \"./RSASSAPSSParams.js\";\r\nimport PBKDF2Params from \"./PBKDF2Params.js\";\r\nimport PBES2Params from \"./PBES2Params.js\";\r\n//**************************************************************************************\r\n/**\r\n * Making MAC key using algorithm described in B.2 of PKCS#12 standard.\r\n */\r\nfunction makePKCS12B2Key(cryptoEngine, hashAlgorithm, keyLength, password, salt, iterationCount)\r\n{\r\n\t//region Initial variables\r\n\tlet u;\r\n\tlet v;\r\n\t\r\n\tconst result = [];\r\n\t//endregion\r\n\t\r\n\t//region Get \"u\" and \"v\" values\r\n\tswitch(hashAlgorithm.toUpperCase())\r\n\t{\r\n\t\tcase \"SHA-1\":\r\n\t\t\tu = 20; // 160\r\n\t\t\tv = 64; // 512\r\n\t\t\tbreak;\r\n\t\tcase \"SHA-256\":\r\n\t\t\tu = 32; // 256\r\n\t\t\tv = 64; // 512\r\n\t\t\tbreak;\r\n\t\tcase \"SHA-384\":\r\n\t\t\tu = 48; // 384\r\n\t\t\tv = 128; // 1024\r\n\t\t\tbreak;\r\n\t\tcase \"SHA-512\":\r\n\t\t\tu = 64; // 512\r\n\t\t\tv = 128; // 1024\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"Unsupported hashing algorithm\");\r\n\t}\r\n\t//endregion\r\n\t\r\n\t//region Main algorithm making key\r\n\t//region Transform password to UTF-8 like string\r\n\tconst passwordViewInitial = new Uint8Array(password);\r\n\t\r\n\tconst passwordTransformed = new ArrayBuffer((password.byteLength * 2) + 2);\r\n\tconst passwordTransformedView = new Uint8Array(passwordTransformed);\r\n\t\r\n\tfor(let i = 0; i < passwordViewInitial.length; i++)\r\n\t{\r\n\t\tpasswordTransformedView[i * 2] = 0x00;\r\n\t\tpasswordTransformedView[i * 2 + 1] = passwordViewInitial[i];\r\n\t}\r\n\t\r\n\tpasswordTransformedView[passwordTransformedView.length - 2] = 0x00;\r\n\tpasswordTransformedView[passwordTransformedView.length - 1] = 0x00;\r\n\t\r\n\tpassword = passwordTransformed.slice(0);\r\n\t//endregion\r\n\t\r\n\t//region Construct a string D (the \"diversifier\") by concatenating v/8 copies of ID\r\n\tconst D = new ArrayBuffer(v);\r\n\tconst dView = new Uint8Array(D);\r\n\t\r\n\tfor(let i = 0; i < D.byteLength; i++)\r\n\t\tdView[i] = 3; // The ID value equal to \"3\" for MACing (see B.3 of standard)\r\n\t//endregion\r\n\t\r\n\t//region Concatenate copies of the salt together to create a string S of length v * ceil(s / v) bytes (the final copy of the salt may be trunacted to create S)\r\n\tconst saltLength = salt.byteLength;\r\n\t\r\n\tconst sLen = v * Math.ceil(saltLength / v);\r\n\tconst S = new ArrayBuffer(sLen);\r\n\tconst sView = new Uint8Array(S);\r\n\t\r\n\tconst saltView = new Uint8Array(salt);\r\n\t\r\n\tfor(let i = 0; i < sLen; i++)\r\n\t\tsView[i] = saltView[i % saltLength];\r\n\t//endregion\r\n\t\r\n\t//region Concatenate copies of the password together to create a string P of length v * ceil(p / v) bytes (the final copy of the password may be truncated to create P)\r\n\tconst passwordLength = password.byteLength;\r\n\t\r\n\tconst pLen = v * Math.ceil(passwordLength / v);\r\n\tconst P = new ArrayBuffer(pLen);\r\n\tconst pView = new Uint8Array(P);\r\n\t\r\n\tconst passwordView = new Uint8Array(password);\r\n\t\r\n\tfor(let i = 0; i < pLen; i++)\r\n\t\tpView[i] = passwordView[i % passwordLength];\r\n\t//endregion\r\n\t\r\n\t//region Set I=S||P to be the concatenation of S and P\r\n\tconst sPlusPLength = S.byteLength + P.byteLength;\r\n\t\r\n\tlet I = new ArrayBuffer(sPlusPLength);\r\n\tlet iView = new Uint8Array(I);\r\n\t\r\n\tiView.set(sView);\r\n\tiView.set(pView, sView.length);\r\n\t//endregion\r\n\t\r\n\t//region Set c=ceil(n / u)\r\n\tconst c = Math.ceil((keyLength >> 3) / u);\r\n\t//endregion\r\n\t\r\n\t//region Initial variables\r\n\tlet internalSequence = Promise.resolve(I);\r\n\t//endregion\r\n\t\r\n\t//region For i=1, 2, ..., c, do the following:\r\n\tfor(let i = 0; i <= c; i++)\r\n\t{\r\n\t\tinternalSequence = internalSequence.then(_I =>\r\n\t\t{\r\n\t\t\t//region Create contecanetion of D and I\r\n\t\t\tconst dAndI = new ArrayBuffer(D.byteLength + _I.byteLength);\r\n\t\t\tconst dAndIView = new Uint8Array(dAndI);\r\n\t\t\t\r\n\t\t\tdAndIView.set(dView);\r\n\t\t\tdAndIView.set(iView, dView.length);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn dAndI;\r\n\t\t});\r\n\t\t\r\n\t\t//region Make \"iterationCount\" rounds of hashing\r\n\t\tfor(let j = 0; j < iterationCount; j++)\r\n\t\t\tinternalSequence = internalSequence.then(roundBuffer => cryptoEngine.digest({ name: hashAlgorithm }, new Uint8Array(roundBuffer)));\r\n\t\t//endregion\r\n\t\t\r\n\t\tinternalSequence = internalSequence.then(roundBuffer =>\r\n\t\t{\r\n\t\t\t//region Concatenate copies of Ai to create a string B of length v bits (the final copy of Ai may be truncated to create B)\r\n\t\t\tconst B = new ArrayBuffer(v);\r\n\t\t\tconst bView = new Uint8Array(B);\r\n\t\t\t\r\n\t\t\tfor(let j = 0; j < B.byteLength; j++)\r\n\t\t\t\tbView[j] = roundBuffer[j % roundBuffer.length];\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Make new I value\r\n\t\t\tconst k = Math.ceil(saltLength / v) + Math.ceil(passwordLength / v);\r\n\t\t\tconst iRound = [];\r\n\t\t\t\r\n\t\t\tlet sliceStart = 0;\r\n\t\t\tlet sliceLength = v;\r\n\t\t\t\r\n\t\t\tfor(let j = 0; j < k; j++)\r\n\t\t\t{\r\n\t\t\t\tconst chunk = Array.from(new Uint8Array(I.slice(sliceStart, sliceStart + sliceLength)));\r\n\t\t\t\tsliceStart += v;\r\n\t\t\t\tif((sliceStart + v) > I.byteLength)\r\n\t\t\t\t\tsliceLength = I.byteLength - sliceStart;\r\n\t\t\t\t\r\n\t\t\t\tlet x = 0x1ff;\r\n\t\t\t\t\r\n\t\t\t\tfor(let l = (B.byteLength - 1); l >= 0; l--)\r\n\t\t\t\t{\r\n\t\t\t\t\tx >>= 8;\r\n\t\t\t\t\tx += bView[l] + chunk[l];\r\n\t\t\t\t\tchunk[l] = (x & 0xff);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tiRound.push(...chunk);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tI = new ArrayBuffer(iRound.length);\r\n\t\t\tiView = new Uint8Array(I);\r\n\t\t\t\r\n\t\t\tiView.set(iRound);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tresult.push(...(new Uint8Array(roundBuffer)));\r\n\t\t\t\r\n\t\t\treturn I;\r\n\t\t});\r\n\t}\r\n\t//endregion\r\n\t\r\n\t//region Initialize final key\r\n\tinternalSequence = internalSequence.then(() =>\r\n\t{\r\n\t\tconst resultBuffer = new ArrayBuffer(keyLength >> 3);\r\n\t\tconst resultView = new Uint8Array(resultBuffer);\r\n\t\t\r\n\t\tresultView.set((new Uint8Array(result)).slice(0, keyLength >> 3));\r\n\t\t\r\n\t\treturn resultBuffer;\r\n\t});\r\n\t//endregion\r\n\t//endregion\r\n\t\r\n\treturn internalSequence;\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Default cryptographic engine for Web Cryptography API\r\n */\r\nexport default class CryptoEngine\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for CryptoEngine class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc Usually here we are expecting \"window.crypto\" or an equivalent from custom \"crypto engine\"\r\n\t\t */\r\n\t\tthis.crypto = getParametersValue(parameters, \"crypto\", {});\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc Usually here we are expecting \"window.crypto.subtle\" or an equivalent from custom \"crypto engine\"\r\n\t\t */\r\n\t\tthis.subtle = getParametersValue(parameters, \"subtle\", {});\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc Name of the \"crypto engine\"\r\n\t\t */\r\n\t\tthis.name = getParametersValue(parameters, \"name\", \"\");\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Import WebCrypto keys from different formats\r\n\t * @param {string} format\r\n\t * @param {ArrayBuffer|Uint8Array} keyData\r\n\t * @param {Object} algorithm\r\n\t * @param {boolean} extractable\r\n\t * @param {Array} keyUsages\r\n\t * @returns {Promise}\r\n\t */\r\n\timportKey(format, keyData, algorithm, extractable, keyUsages)\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet jwk = {};\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Change \"keyData\" type if needed\r\n\t\tif(keyData instanceof Uint8Array)\r\n\t\t\tkeyData = keyData.buffer;\r\n\t\t//endregion\r\n\t\t\r\n\t\tswitch(format.toLowerCase())\r\n\t\t{\r\n\t\t\tcase \"raw\":\r\n\t\t\t\treturn this.subtle.importKey(\"raw\", keyData, algorithm, extractable, keyUsages);\r\n\t\t\tcase \"spki\":\r\n\t\t\t\t{\r\n\t\t\t\t\tconst asn1 = asn1js.fromBER(keyData);\r\n\t\t\t\t\tif(asn1.offset === (-1))\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect keyData\");\r\n\r\n\t\t\t\t\tconst publicKeyInfo = new PublicKeyInfo();\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpublicKeyInfo.fromSchema(asn1.result);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect keyData\");\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t// noinspection FallThroughInSwitchStatementJS\r\n\t\t\t\t\tswitch(algorithm.name.toUpperCase())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"RSA-PSS\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS1\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS256\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS384\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS512\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect hash algorithm: ${algorithm.hash.name.toUpperCase()}`);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// break omitted\r\n\t\t\t\t\t\tcase \"RSASSA-PKCS1-V1_5\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeyUsages = [\"verify\"]; // Override existing keyUsages value since the key is a public key\r\n\r\n\t\t\t\t\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\t\t\t\t\tjwk.ext = extractable;\r\n\t\t\t\t\t\t\t\tjwk.key_ops = keyUsages;\r\n\r\n\t\t\t\t\t\t\t\tif(publicKeyInfo.algorithm.algorithmId !== \"1.2.840.113549.1.1.1\")\r\n\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect public key algorithm: ${publicKeyInfo.algorithm.algorithmId}`);\r\n\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tif((\"alg\" in jwk) === false)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS1\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS256\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS384\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS512\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect hash algorithm: ${algorithm.hash.name.toUpperCase()}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Create RSA Public Key elements\r\n\t\t\t\t\t\t\t\tconst publicKeyJSON = publicKeyInfo.toJSON();\r\n\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(publicKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = publicKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"ECDSA\":\r\n\t\t\t\t\t\t\tkeyUsages = [\"verify\"]; // Override existing keyUsages value since the key is a public key\r\n\t\t\t\t\t\t\t// break omitted\r\n\t\t\t\t\t\tcase \"ECDH\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region Initial variables\r\n\t\t\t\t\t\t\t\tjwk = {\r\n\t\t\t\t\t\t\t\t\tkty: \"EC\",\r\n\t\t\t\t\t\t\t\t\text: extractable,\r\n\t\t\t\t\t\t\t\t\tkey_ops: keyUsages\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Get information about algorithm\r\n\t\t\t\t\t\t\t\tif(publicKeyInfo.algorithm.algorithmId !== \"1.2.840.10045.2.1\")\r\n\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect public key algorithm: ${publicKeyInfo.algorithm.algorithmId}`);\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Create ECDSA Public Key elements\r\n\t\t\t\t\t\t\t\tconst publicKeyJSON = publicKeyInfo.toJSON();\r\n\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(publicKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = publicKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"RSA-OAEP\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\t\t\t\t\tjwk.ext = extractable;\r\n\t\t\t\t\t\t\t\tjwk.key_ops = keyUsages;\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(this.name.toLowerCase() === \"safari\")\r\n\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP\";\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP-256\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP-384\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP-512\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect hash algorithm: ${algorithm.hash.name.toUpperCase()}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t//region Create ECDSA Public Key elements\r\n\t\t\t\t\t\t\t\tconst publicKeyJSON = publicKeyInfo.toJSON();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(publicKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = publicKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"RSAES-PKCS1-V1_5\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\t\t\t\t\tjwk.ext = extractable;\r\n\t\t\t\t\t\t\t\tjwk.key_ops = keyUsages;\r\n\t\t\t\t\t\t\t\tjwk.alg = \"PS1\";\r\n\r\n\t\t\t\t\t\t\t\tconst publicKeyJSON = publicKeyInfo.toJSON();\r\n\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(publicKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = publicKeyJSON[key];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\treturn Promise.reject(`Incorrect algorithm name: ${algorithm.name.toUpperCase()}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pkcs8\":\r\n\t\t\t\t{\r\n\t\t\t\t\tconst privateKeyInfo = new PrivateKeyInfo();\r\n\r\n\t\t\t\t\t//region Parse \"PrivateKeyInfo\" object\r\n\t\t\t\t\tconst asn1 = asn1js.fromBER(keyData);\r\n\t\t\t\t\tif(asn1.offset === (-1))\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect keyData\");\r\n\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tprivateKeyInfo.fromSchema(asn1.result);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect keyData\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif((\"parsedKey\" in privateKeyInfo) === false)\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect keyData\");\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t// noinspection FallThroughInSwitchStatementJS\r\n\t\t\t\t\t// noinspection FallThroughInSwitchStatementJS\r\n\t\t\t\t\tswitch(algorithm.name.toUpperCase())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"RSA-PSS\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS1\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS256\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS384\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\t\t\t\tjwk.alg = \"PS512\";\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect hash algorithm: ${algorithm.hash.name.toUpperCase()}`);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// break omitted\r\n\t\t\t\t\t\tcase \"RSASSA-PKCS1-V1_5\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeyUsages = [\"sign\"]; // Override existing keyUsages value since the key is a private key\r\n\r\n\t\t\t\t\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\t\t\t\t\tjwk.ext = extractable;\r\n\t\t\t\t\t\t\t\tjwk.key_ops = keyUsages;\r\n\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tif(privateKeyInfo.privateKeyAlgorithm.algorithmId !== \"1.2.840.113549.1.1.1\")\r\n\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect private key algorithm: ${privateKeyInfo.privateKeyAlgorithm.algorithmId}`);\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tif((\"alg\" in jwk) === false)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS1\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS256\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS384\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RS512\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect hash algorithm: ${algorithm.hash.name.toUpperCase()}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Create RSA Private Key elements\r\n\t\t\t\t\t\t\t\tconst privateKeyJSON = privateKeyInfo.toJSON();\r\n\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(privateKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = privateKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"ECDSA\":\r\n\t\t\t\t\t\t\tkeyUsages = [\"sign\"]; // Override existing keyUsages value since the key is a private key\r\n\t\t\t\t\t\t\t// break omitted\r\n\t\t\t\t\t\tcase \"ECDH\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region Initial variables\r\n\t\t\t\t\t\t\t\tjwk = {\r\n\t\t\t\t\t\t\t\t\tkty: \"EC\",\r\n\t\t\t\t\t\t\t\t\text: extractable,\r\n\t\t\t\t\t\t\t\t\tkey_ops: keyUsages\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tif(privateKeyInfo.privateKeyAlgorithm.algorithmId !== \"1.2.840.10045.2.1\")\r\n\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect algorithm: ${privateKeyInfo.privateKeyAlgorithm.algorithmId}`);\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Create ECDSA Private Key elements\r\n\t\t\t\t\t\t\t\tconst privateKeyJSON = privateKeyInfo.toJSON();\r\n\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(privateKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = privateKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"RSA-OAEP\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\t\t\t\t\tjwk.ext = extractable;\r\n\t\t\t\t\t\t\t\tjwk.key_ops = keyUsages;\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t//region Get information about used hash function\r\n\t\t\t\t\t\t\t\tif(this.name.toLowerCase() === \"safari\")\r\n\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP\";\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP-256\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP-384\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\t\t\t\t\tjwk.alg = \"RSA-OAEP-512\";\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\treturn Promise.reject(`Incorrect hash algorithm: ${algorithm.hash.name.toUpperCase()}`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t//region Create RSA Private Key elements\r\n\t\t\t\t\t\t\t\tconst privateKeyJSON = privateKeyInfo.toJSON();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(privateKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = privateKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"RSAES-PKCS1-V1_5\":\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tkeyUsages = [\"decrypt\"]; // Override existing keyUsages value since the key is a private key\r\n\r\n\t\t\t\t\t\t\t\tjwk.kty = \"RSA\";\r\n\t\t\t\t\t\t\t\tjwk.ext = extractable;\r\n\t\t\t\t\t\t\t\tjwk.key_ops = keyUsages;\r\n\t\t\t\t\t\t\t\tjwk.alg = \"PS1\";\r\n\r\n\t\t\t\t\t\t\t\t//region Create RSA Private Key elements\r\n\t\t\t\t\t\t\t\tconst privateKeyJSON = privateKeyInfo.toJSON();\r\n\r\n\t\t\t\t\t\t\t\tfor(const key of Object.keys(privateKeyJSON))\r\n\t\t\t\t\t\t\t\t\tjwk[key] = privateKeyJSON[key];\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\treturn Promise.reject(`Incorrect algorithm name: ${algorithm.name.toUpperCase()}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"jwk\":\r\n\t\t\t\tjwk = keyData;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(`Incorrect format: ${format}`);\r\n\t\t}\r\n\t\t\r\n\t\t//region Special case for Safari browser (since its acting not as WebCrypto standard describes)\r\n\t\tif(this.name.toLowerCase() === \"safari\")\r\n\t\t{\r\n\t\t\t// Try to use both ways - import using ArrayBuffer and pure JWK (for Safari Technology Preview)\r\n\t\t\treturn Promise.resolve().then(() => this.subtle.importKey(\"jwk\", stringToArrayBuffer(JSON.stringify(jwk)), algorithm, extractable, keyUsages))\r\n\t\t\t\t.then(result => result, () => this.subtle.importKey(\"jwk\", jwk, algorithm, extractable, keyUsages));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn this.subtle.importKey(\"jwk\", jwk, algorithm, extractable, keyUsages);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Export WebCrypto keys to different formats\r\n\t * @param {string} format\r\n\t * @param {Object} key\r\n\t * @returns {Promise}\r\n\t */\r\n\texportKey(format, key)\r\n\t{\r\n\t\tlet sequence = this.subtle.exportKey(\"jwk\", key);\r\n\t\t\r\n\t\t//region Currently Safari returns ArrayBuffer as JWK thus we need an additional transformation\r\n\t\tif(this.name.toLowerCase() === \"safari\")\r\n\t\t{\r\n\t\t\tsequence = sequence.then(result =>\r\n\t\t\t{\r\n\t\t\t\t// Some additional checks for Safari Technology Preview\r\n\t\t\t\tif(result instanceof ArrayBuffer)\r\n\t\t\t\t\treturn JSON.parse(arrayBufferToString(result));\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t});\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\tswitch(format.toLowerCase())\r\n\t\t{\r\n\t\t\tcase \"raw\":\r\n\t\t\t\treturn this.subtle.exportKey(\"raw\", key);\r\n\t\t\tcase \"spki\":\r\n\t\t\t\tsequence = sequence.then(result =>\r\n\t\t\t\t{\r\n\t\t\t\t\tconst publicKeyInfo = new PublicKeyInfo();\r\n\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpublicKeyInfo.fromJSON(result);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect key data\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn publicKeyInfo.toSchema().toBER(false);\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pkcs8\":\r\n\t\t\t\tsequence = sequence.then(result =>\r\n\t\t\t\t{\r\n\t\t\t\t\tconst privateKeyInfo = new PrivateKeyInfo();\r\n\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tprivateKeyInfo.fromJSON(result);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject(\"Incorrect key data\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn privateKeyInfo.toSchema().toBER(false);\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"jwk\":\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(`Incorrect format: ${format}`);\r\n\t\t}\r\n\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert WebCrypto keys between different export formats\r\n\t * @param {string} inputFormat\r\n\t * @param {string} outputFormat\r\n\t * @param {ArrayBuffer|Object} keyData\r\n\t * @param {Object} algorithm\r\n\t * @param {boolean} extractable\r\n\t * @param {Array} keyUsages\r\n\t * @returns {Promise}\r\n\t */\r\n\tconvert(inputFormat, outputFormat, keyData, algorithm, extractable, keyUsages)\r\n\t{\r\n\t\tswitch(inputFormat.toLowerCase())\r\n\t\t{\r\n\t\t\tcase \"raw\":\r\n\t\t\t\tswitch(outputFormat.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"raw\":\r\n\t\t\t\t\t\treturn Promise.resolve(keyData);\r\n\t\t\t\t\tcase \"spki\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"raw\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"spki\", result));\r\n\t\t\t\t\tcase \"pkcs8\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"raw\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"pkcs8\", result));\r\n\t\t\t\t\tcase \"jwk\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"raw\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"jwk\", result));\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn Promise.reject(`Incorrect outputFormat: ${outputFormat}`);\r\n\t\t\t\t}\r\n\t\t\tcase \"spki\":\r\n\t\t\t\tswitch(outputFormat.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"raw\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"spki\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"raw\", result));\r\n\t\t\t\t\tcase \"spki\":\r\n\t\t\t\t\t\treturn Promise.resolve(keyData);\r\n\t\t\t\t\tcase \"pkcs8\":\r\n\t\t\t\t\t\treturn Promise.reject(\"Impossible to convert between SPKI/PKCS8\");\r\n\t\t\t\t\tcase \"jwk\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"spki\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"jwk\", result));\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn Promise.reject(`Incorrect outputFormat: ${outputFormat}`);\r\n\t\t\t\t}\r\n\t\t\tcase \"pkcs8\":\r\n\t\t\t\tswitch(outputFormat.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"raw\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"pkcs8\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"raw\", result));\r\n\t\t\t\t\tcase \"spki\":\r\n\t\t\t\t\t\treturn Promise.reject(\"Impossible to convert between SPKI/PKCS8\");\r\n\t\t\t\t\tcase \"pkcs8\":\r\n\t\t\t\t\t\treturn Promise.resolve(keyData);\r\n\t\t\t\t\tcase \"jwk\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"pkcs8\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"jwk\", result));\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn Promise.reject(`Incorrect outputFormat: ${outputFormat}`);\r\n\t\t\t\t}\r\n\t\t\tcase \"jwk\":\r\n\t\t\t\tswitch(outputFormat.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"raw\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"jwk\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"raw\", result));\r\n\t\t\t\t\tcase \"spki\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"jwk\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"spki\", result));\r\n\t\t\t\t\tcase \"pkcs8\":\r\n\t\t\t\t\t\treturn Promise.resolve()\r\n\t\t\t\t\t\t\t.then(() => this.importKey(\"jwk\", keyData, algorithm, extractable, keyUsages))\r\n\t\t\t\t\t\t\t.then(result => this.exportKey(\"pkcs8\", result));\r\n\t\t\t\t\tcase \"jwk\":\r\n\t\t\t\t\t\treturn Promise.resolve(keyData);\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn Promise.reject(`Incorrect outputFormat: ${outputFormat}`);\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(`Incorrect inputFormat: ${inputFormat}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"encrypt\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tencrypt(...args)\r\n\t{\r\n\t\treturn this.subtle.encrypt(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"decrypt\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tdecrypt(...args)\r\n\t{\r\n\t\treturn this.subtle.decrypt(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"sign\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tsign(...args)\r\n\t{\r\n\t\treturn this.subtle.sign(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"verify\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tverify(...args)\r\n\t{\r\n\t\treturn this.subtle.verify(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"digest\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tdigest(...args)\r\n\t{\r\n\t\treturn this.subtle.digest(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"generateKey\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tgenerateKey(...args)\r\n\t{\r\n\t\treturn this.subtle.generateKey(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"deriveKey\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tderiveKey(...args)\r\n\t{\r\n\t\treturn this.subtle.deriveKey(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"deriveBits\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tderiveBits(...args)\r\n\t{\r\n\t\treturn this.subtle.deriveBits(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"wrapKey\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\twrapKey(...args)\r\n\t{\r\n\t\treturn this.subtle.wrapKey(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Wrapper for standard function \"unwrapKey\"\r\n\t * @param args\r\n\t * @returns {Promise}\r\n\t */\r\n\tunwrapKey(...args)\r\n\t{\r\n\t\treturn this.subtle.unwrapKey(...args);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Initialize input Uint8Array by random values (with help from current \"crypto engine\")\r\n\t * @param {!Uint8Array} view\r\n\t * @returns {*}\r\n\t */\r\n\tgetRandomValues(view)\r\n\t{\r\n\t\tif((\"getRandomValues\" in this.crypto) === false)\r\n\t\t\tthrow new Error(\"No support for getRandomValues\");\r\n\t\t\r\n\t\treturn this.crypto.getRandomValues(view);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Get WebCrypto algorithm by wel-known OID\r\n\t * @param {string} oid well-known OID to search for\r\n\t * @returns {Object}\r\n\t */\r\n\tgetAlgorithmByOID(oid)\r\n\t{\r\n\t\tswitch(oid)\r\n\t\t{\r\n\t\t\tcase \"1.2.840.113549.1.1.1\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSAES-PKCS1-v1_5\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.1.5\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.1.11\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.1.12\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-384\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.1.13\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-512\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.1.10\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSA-PSS\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.1.7\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"RSA-OAEP\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.10045.2.1\":\r\n\t\t\tcase \"1.2.840.10045.4.1\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.10045.4.3.2\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.10045.4.3.3\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-384\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.10045.4.3.4\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-512\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.133.16.840.63.0.2\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDH\",\r\n\t\t\t\t\tkdf: \"SHA-1\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.132.1.11.1\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDH\",\r\n\t\t\t\t\tkdf: \"SHA-256\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.132.1.11.2\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDH\",\r\n\t\t\t\t\tkdf: \"SHA-384\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.132.1.11.3\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"ECDH\",\r\n\t\t\t\t\tkdf: \"SHA-512\"\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.2\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-CBC\",\r\n\t\t\t\t\tlength: 128\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.22\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-CBC\",\r\n\t\t\t\t\tlength: 192\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.42\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-CBC\",\r\n\t\t\t\t\tlength: 256\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.6\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-GCM\",\r\n\t\t\t\t\tlength: 128\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.26\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-GCM\",\r\n\t\t\t\t\tlength: 192\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.46\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-GCM\",\r\n\t\t\t\t\tlength: 256\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.4\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-CFB\",\r\n\t\t\t\t\tlength: 128\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.24\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-CFB\",\r\n\t\t\t\t\tlength: 192\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.44\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-CFB\",\r\n\t\t\t\t\tlength: 256\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.5\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-KW\",\r\n\t\t\t\t\tlength: 128\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.25\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-KW\",\r\n\t\t\t\t\tlength: 192\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.1.45\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"AES-KW\",\r\n\t\t\t\t\tlength: 256\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.2.7\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"HMAC\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.2.9\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"HMAC\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.2.10\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"HMAC\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-384\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.2.11\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"HMAC\",\r\n\t\t\t\t\thash: {\r\n\t\t\t\t\t\tname: \"SHA-512\"\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.9.16.3.5\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"DH\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.14.3.2.26\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.2.1\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.2.2\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"SHA-384\"\r\n\t\t\t\t};\r\n\t\t\tcase \"2.16.840.1.101.3.4.2.3\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"SHA-512\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.2.840.113549.1.5.12\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"PBKDF2\"\r\n\t\t\t\t};\r\n\t\t\t//region Special case - OIDs for ECC curves\r\n\t\t\tcase \"1.2.840.10045.3.1.7\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"P-256\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.132.0.34\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"P-384\"\r\n\t\t\t\t};\r\n\t\t\tcase \"1.3.132.0.35\":\r\n\t\t\t\treturn {\r\n\t\t\t\t\tname: \"P-521\"\r\n\t\t\t\t};\r\n\t\t\t//endregion\r\n\t\t\tdefault:\r\n\t\t}\r\n\t\t\r\n\t\treturn {};\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Get OID for each specific algorithm\r\n\t * @param {Object} algorithm\r\n\t * @returns {string}\r\n\t */\r\n\tgetOIDByAlgorithm(algorithm)\r\n\t{\r\n\t\tlet result = \"\";\r\n\t\t\r\n\t\tswitch(algorithm.name.toUpperCase())\r\n\t\t{\r\n\t\t\tcase \"RSAES-PKCS1-V1_5\":\r\n\t\t\t\tresult = \"1.2.840.113549.1.1.1\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"RSASSA-PKCS1-V1_5\":\r\n\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.1.1.5\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.1.1.11\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.1.1.12\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.1.1.13\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"RSA-PSS\":\r\n\t\t\t\tresult = \"1.2.840.113549.1.1.10\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"RSA-OAEP\":\r\n\t\t\t\tresult = \"1.2.840.113549.1.1.7\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"ECDSA\":\r\n\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\tresult = \"1.2.840.10045.4.1\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\tresult = \"1.2.840.10045.4.3.2\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\tresult = \"1.2.840.10045.4.3.3\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\tresult = \"1.2.840.10045.4.3.4\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"ECDH\":\r\n\t\t\t\tswitch(algorithm.kdf.toUpperCase()) // Non-standard addition - hash algorithm of KDF function\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\tresult = \"1.3.133.16.840.63.0.2\"; // dhSinglePass-stdDH-sha1kdf-scheme\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\tresult = \"1.3.132.1.11.1\"; // dhSinglePass-stdDH-sha256kdf-scheme\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\tresult = \"1.3.132.1.11.2\"; // dhSinglePass-stdDH-sha384kdf-scheme\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\tresult = \"1.3.132.1.11.3\"; // dhSinglePass-stdDH-sha512kdf-scheme\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-CTR\":\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-CBC\":\r\n\t\t\t\tswitch(algorithm.length)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 128:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.2\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 192:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.22\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 256:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.42\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-CMAC\":\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-GCM\":\r\n\t\t\t\tswitch(algorithm.length)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 128:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.6\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 192:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.26\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 256:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.46\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-CFB\":\r\n\t\t\t\tswitch(algorithm.length)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 128:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.4\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 192:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.24\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 256:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.44\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-KW\":\r\n\t\t\t\tswitch(algorithm.length)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 128:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.5\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 192:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.25\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 256:\r\n\t\t\t\t\t\tresult = \"2.16.840.1.101.3.4.1.45\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"HMAC\":\r\n\t\t\t\tswitch(algorithm.hash.name.toUpperCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"SHA-1\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.2.7\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.2.9\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.2.10\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\tresult = \"1.2.840.113549.2.11\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"DH\":\r\n\t\t\t\tresult = \"1.2.840.113549.1.9.16.3.5\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"SHA-1\":\r\n\t\t\t\tresult = \"1.3.14.3.2.26\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"SHA-256\":\r\n\t\t\t\tresult = \"2.16.840.1.101.3.4.2.1\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"SHA-384\":\r\n\t\t\t\tresult = \"2.16.840.1.101.3.4.2.2\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"SHA-512\":\r\n\t\t\t\tresult = \"2.16.840.1.101.3.4.2.3\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"CONCAT\":\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"HKDF\":\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"PBKDF2\":\r\n\t\t\t\tresult = \"1.2.840.113549.1.5.12\";\r\n\t\t\t\tbreak;\r\n\t\t\t//region Special case - OIDs for ECC curves\r\n\t\t\tcase \"P-256\":\r\n\t\t\t\tresult = \"1.2.840.10045.3.1.7\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"P-384\":\r\n\t\t\t\tresult = \"1.3.132.0.34\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"P-521\":\r\n\t\t\t\tresult = \"1.3.132.0.35\";\r\n\t\t\t\tbreak;\r\n\t\t\t//endregion\r\n\t\t\tdefault:\r\n\t\t}\r\n\t\t\r\n\t\treturn result;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Get default algorithm parameters for each kind of operation\r\n\t * @param {string} algorithmName Algorithm name to get common parameters for\r\n\t * @param {string} operation Kind of operation: \"sign\", \"encrypt\", \"generatekey\", \"importkey\", \"exportkey\", \"verify\"\r\n\t * @returns {*}\r\n\t */\r\n\tgetAlgorithmParameters(algorithmName, operation)\r\n\t{\r\n\t\tlet result = {\r\n\t\t\talgorithm: {},\r\n\t\t\tusages: []\r\n\t\t};\r\n\t\t\r\n\t\tswitch(algorithmName.toUpperCase())\r\n\t\t{\r\n\t\t\tcase \"RSAES-PKCS1-V1_5\":\r\n\t\t\tcase \"RSASSA-PKCS1-V1_5\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\r\n\t\t\t\t\t\t\t\tmodulusLength: 2048,\r\n\t\t\t\t\t\t\t\tpublicExponent: new Uint8Array([0x01, 0x00, 0x01]),\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\", \"verify\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"verify\":\r\n\t\t\t\t\tcase \"sign\":\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"verify\"] // For importKey(\"pkcs8\") usage must be \"sign\" only\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"RSA-PSS\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"sign\":\r\n\t\t\t\t\tcase \"verify\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-PSS\",\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tsaltLength: 20\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\", \"verify\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-PSS\",\r\n\t\t\t\t\t\t\t\tmodulusLength: 2048,\r\n\t\t\t\t\t\t\t\tpublicExponent: new Uint8Array([0x01, 0x00, 0x01]),\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\", \"verify\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-PSS\",\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-1\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"verify\"] // For importKey(\"pkcs8\") usage must be \"sign\" only\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-PSS\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"RSA-OAEP\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"encrypt\":\r\n\t\t\t\t\tcase \"decrypt\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-OAEP\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-OAEP\",\r\n\t\t\t\t\t\t\t\tmodulusLength: 2048,\r\n\t\t\t\t\t\t\t\tpublicExponent: new Uint8Array([0x01, 0x00, 0x01]),\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-OAEP\",\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\"] // encrypt for \"spki\" and decrypt for \"pkcs8\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"RSA-OAEP\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"ECDSA\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\t\t\t\tnamedCurve: \"P-256\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\", \"verify\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\t\t\t\tnamedCurve: \"P-256\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"verify\"] // \"sign\" for \"pkcs8\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"verify\":\r\n\t\t\t\t\tcase \"sign\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDSA\",\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDSA\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"ECDH\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDH\",\r\n\t\t\t\t\t\t\t\tnamedCurve: \"P-256\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"deriveKey\", \"deriveBits\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"derivekey\":\r\n\t\t\t\t\tcase \"derivebits\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDH\",\r\n\t\t\t\t\t\t\t\tnamedCurve: \"P-256\",\r\n\t\t\t\t\t\t\t\tpublic: [] // Must be a \"publicKey\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"ECDH\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-CTR\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-CTR\",\r\n\t\t\t\t\t\t\t\tlength: 256\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"decrypt\":\r\n\t\t\t\t\tcase \"encrypt\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-CTR\",\r\n\t\t\t\t\t\t\t\tcounter: new Uint8Array(16),\r\n\t\t\t\t\t\t\t\tlength: 10\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-CTR\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-CBC\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-CBC\",\r\n\t\t\t\t\t\t\t\tlength: 256\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"decrypt\":\r\n\t\t\t\t\tcase \"encrypt\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-CBC\",\r\n\t\t\t\t\t\t\t\tiv: this.getRandomValues(new Uint8Array(16)) // For \"decrypt\" the value should be replaced with value got on \"encrypt\" step\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-CBC\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-GCM\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-GCM\",\r\n\t\t\t\t\t\t\t\tlength: 256\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"decrypt\":\r\n\t\t\t\t\tcase \"encrypt\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-GCM\",\r\n\t\t\t\t\t\t\t\tiv: this.getRandomValues(new Uint8Array(16)) // For \"decrypt\" the value should be replaced with value got on \"encrypt\" step\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-GCM\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"AES-KW\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\tcase \"wrapkey\":\r\n\t\t\t\t\tcase \"unwrapkey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-KW\",\r\n\t\t\t\t\t\t\t\tlength: 256\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"wrapKey\", \"unwrapKey\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"AES-KW\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"HMAC\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"sign\":\r\n\t\t\t\t\tcase \"verify\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"HMAC\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\", \"verify\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"importkey\":\r\n\t\t\t\t\tcase \"exportkey\":\r\n\t\t\t\t\tcase \"generatekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"HMAC\",\r\n\t\t\t\t\t\t\t\tlength: 32,\r\n\t\t\t\t\t\t\t\thash: {\r\n\t\t\t\t\t\t\t\t\tname: \"SHA-256\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"sign\", \"verify\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"HMAC\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"HKDF\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"derivekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"HKDF\",\r\n\t\t\t\t\t\t\t\thash: \"SHA-256\",\r\n\t\t\t\t\t\t\t\tsalt: new Uint8Array([]),\r\n\t\t\t\t\t\t\t\tinfo: new Uint8Array([])\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"HKDF\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"PBKDF2\":\r\n\t\t\t\tswitch(operation.toLowerCase())\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"derivekey\":\r\n\t\t\t\t\t\tresult = {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"PBKDF2\",\r\n\t\t\t\t\t\t\t\thash: { name: \"SHA-256\" },\r\n\t\t\t\t\t\t\t\tsalt: new Uint8Array([]),\r\n\t\t\t\t\t\t\t\titerations: 10000\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: [\"encrypt\", \"decrypt\"]\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\talgorithm: {\r\n\t\t\t\t\t\t\t\tname: \"PBKDF2\"\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tusages: []\r\n\t\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\t\t\r\n\t\treturn result;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Getting hash algorithm by signature algorithm\r\n\t * @param {AlgorithmIdentifier} signatureAlgorithm Signature algorithm\r\n\t * @returns {string}\r\n\t */\r\n\tgetHashAlgorithm(signatureAlgorithm)\r\n\t{\r\n\t\tlet result = \"\";\r\n\t\t\r\n\t\tswitch(signatureAlgorithm.algorithmId)\r\n\t\t{\r\n\t\t\tcase \"1.2.840.10045.4.1\": // ecdsa-with-SHA1\r\n\t\t\tcase \"1.2.840.113549.1.1.5\":\r\n\t\t\t\tresult = \"SHA-1\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"1.2.840.10045.4.3.2\": // ecdsa-with-SHA256\r\n\t\t\tcase \"1.2.840.113549.1.1.11\":\r\n\t\t\t\tresult = \"SHA-256\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"1.2.840.10045.4.3.3\": // ecdsa-with-SHA384\r\n\t\t\tcase \"1.2.840.113549.1.1.12\":\r\n\t\t\t\tresult = \"SHA-384\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"1.2.840.10045.4.3.4\": // ecdsa-with-SHA512\r\n\t\t\tcase \"1.2.840.113549.1.1.13\":\r\n\t\t\t\tresult = \"SHA-512\";\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"1.2.840.113549.1.1.10\": // RSA-PSS\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst params = new RSASSAPSSParams({ schema: signatureAlgorithm.algorithmParams });\r\n\t\t\t\t\t\tif(\"hashAlgorithm\" in params)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tconst algorithm = this.getAlgorithmByOID(params.hashAlgorithm.algorithmId);\r\n\t\t\t\t\t\t\tif((\"name\" in algorithm) === false)\r\n\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tresult = algorithm.name;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tresult = \"SHA-1\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t}\r\n\t\t\r\n\t\treturn result;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Specialized function encrypting \"EncryptedContentInfo\" object using parameters\r\n\t * @param {Object} parameters\r\n\t * @returns {Promise}\r\n\t */\r\n\tencryptEncryptedContentInfo(parameters)\r\n\t{\r\n\t\t//region Check for input parameters\r\n\t\tif((parameters instanceof Object) === false)\r\n\t\t\treturn Promise.reject(\"Parameters must have type \\\"Object\\\"\");\r\n\t\t\r\n\t\tif((\"password\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"password\\\"\");\r\n\t\t\r\n\t\tif((\"contentEncryptionAlgorithm\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"contentEncryptionAlgorithm\\\"\");\r\n\t\t\r\n\t\tif((\"hmacHashAlgorithm\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"hmacHashAlgorithm\\\"\");\r\n\t\t\r\n\t\tif((\"iterationCount\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"iterationCount\\\"\");\r\n\t\t\r\n\t\tif((\"contentToEncrypt\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"contentToEncrypt\\\"\");\r\n\t\t\r\n\t\tif((\"contentType\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"contentType\\\"\");\r\n\r\n\t\tconst contentEncryptionOID = this.getOIDByAlgorithm(parameters.contentEncryptionAlgorithm);\r\n\t\tif(contentEncryptionOID === \"\")\r\n\t\t\treturn Promise.reject(\"Wrong \\\"contentEncryptionAlgorithm\\\" value\");\r\n\t\t\r\n\t\tconst pbkdf2OID = this.getOIDByAlgorithm({\r\n\t\t\tname: \"PBKDF2\"\r\n\t\t});\r\n\t\tif(pbkdf2OID === \"\")\r\n\t\t\treturn Promise.reject(\"Can not find OID for PBKDF2\");\r\n\t\t\r\n\t\tconst hmacOID = this.getOIDByAlgorithm({\r\n\t\t\tname: \"HMAC\",\r\n\t\t\thash: {\r\n\t\t\t\tname: parameters.hmacHashAlgorithm\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(hmacOID === \"\")\r\n\t\t\treturn Promise.reject(`Incorrect value for \"hmacHashAlgorithm\": ${parameters.hmacHashAlgorithm}`);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tconst ivBuffer = new ArrayBuffer(16); // For AES we need IV 16 bytes long\r\n\t\tconst ivView = new Uint8Array(ivBuffer);\r\n\t\tthis.getRandomValues(ivView);\r\n\t\t\r\n\t\tconst saltBuffer = new ArrayBuffer(64);\r\n\t\tconst saltView = new Uint8Array(saltBuffer);\r\n\t\tthis.getRandomValues(saltView);\r\n\t\t\r\n\t\tconst contentView = new Uint8Array(parameters.contentToEncrypt);\r\n\t\t\r\n\t\tconst pbkdf2Params = new PBKDF2Params({\r\n\t\t\tsalt: new asn1js.OctetString({ valueHex: saltBuffer }),\r\n\t\t\titerationCount: parameters.iterationCount,\r\n\t\t\tprf: new AlgorithmIdentifier({\r\n\t\t\t\talgorithmId: hmacOID,\r\n\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t})\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Derive PBKDF2 key from \"password\" buffer\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tconst passwordView = new Uint8Array(parameters.password);\r\n\t\t\t\r\n\t\t\treturn this.importKey(\"raw\",\r\n\t\t\t\tpasswordView,\r\n\t\t\t\t\"PBKDF2\",\r\n\t\t\t\tfalse,\r\n\t\t\t\t[\"deriveKey\"]);\r\n\t\t}, error =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Derive key for \"contentEncryptionAlgorithm\"\r\n\t\tsequence = sequence.then(result =>\r\n\t\t\tthis.deriveKey({\r\n\t\t\t\tname: \"PBKDF2\",\r\n\t\t\t\thash: {\r\n\t\t\t\t\tname: parameters.hmacHashAlgorithm\r\n\t\t\t\t},\r\n\t\t\t\tsalt: saltView,\r\n\t\t\t\titerations: parameters.iterationCount\r\n\t\t\t},\r\n\t\t\tresult,\r\n\t\t\tparameters.contentEncryptionAlgorithm,\r\n\t\t\tfalse,\r\n\t\t\t[\"encrypt\"]),\r\n\t\terror =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Encrypt content\r\n\t\tsequence = sequence.then(result =>\r\n\t\t\tthis.encrypt({\r\n\t\t\t\tname: parameters.contentEncryptionAlgorithm.name,\r\n\t\t\t\tiv: ivView\r\n\t\t\t},\r\n\t\t\tresult,\r\n\t\t\tcontentView),\r\n\t\terror =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Store all parameters in EncryptedData object\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tconst pbes2Parameters = new PBES2Params({\r\n\t\t\t\tkeyDerivationFunc: new AlgorithmIdentifier({\r\n\t\t\t\t\talgorithmId: pbkdf2OID,\r\n\t\t\t\t\talgorithmParams: pbkdf2Params.toSchema()\r\n\t\t\t\t}),\r\n\t\t\t\tencryptionScheme: new AlgorithmIdentifier({\r\n\t\t\t\t\talgorithmId: contentEncryptionOID,\r\n\t\t\t\t\talgorithmParams: new asn1js.OctetString({ valueHex: ivBuffer })\r\n\t\t\t\t})\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\treturn new EncryptedContentInfo({\r\n\t\t\t\tcontentType: parameters.contentType,\r\n\t\t\t\tcontentEncryptionAlgorithm: new AlgorithmIdentifier({\r\n\t\t\t\t\talgorithmId: \"1.2.840.113549.1.5.13\", // pkcs5PBES2\r\n\t\t\t\t\talgorithmParams: pbes2Parameters.toSchema()\r\n\t\t\t\t}),\r\n\t\t\t\tencryptedContent: new asn1js.OctetString({ valueHex: result })\r\n\t\t\t});\r\n\t\t}, error =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Decrypt data stored in \"EncryptedContentInfo\" object using parameters\r\n\t * @param parameters\r\n\t * @return {Promise}\r\n\t */\r\n\tdecryptEncryptedContentInfo(parameters)\r\n\t{\r\n\t\t//region Check for input parameters\r\n\t\tif((parameters instanceof Object) === false)\r\n\t\t\treturn Promise.reject(\"Parameters must have type \\\"Object\\\"\");\r\n\t\t\r\n\t\tif((\"password\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"password\\\"\");\r\n\t\t\r\n\t\tif((\"encryptedContentInfo\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"encryptedContentInfo\\\"\");\r\n\r\n\t\tif(parameters.encryptedContentInfo.contentEncryptionAlgorithm.algorithmId !== \"1.2.840.113549.1.5.13\") // pkcs5PBES2\r\n\t\t\treturn Promise.reject(`Unknown \"contentEncryptionAlgorithm\": ${parameters.encryptedContentInfo.contentEncryptionAlgorithm.algorithmId}`);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tlet pbes2Parameters;\r\n\t\t\r\n\t\ttry\r\n\t\t{\r\n\t\t\tpbes2Parameters = new PBES2Params({ schema: parameters.encryptedContentInfo.contentEncryptionAlgorithm.algorithmParams });\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn Promise.reject(\"Incorrectly encoded \\\"pbes2Parameters\\\"\");\r\n\t\t}\r\n\t\t\r\n\t\tlet pbkdf2Params;\r\n\t\t\r\n\t\ttry\r\n\t\t{\r\n\t\t\tpbkdf2Params = new PBKDF2Params({ schema: pbes2Parameters.keyDerivationFunc.algorithmParams });\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn Promise.reject(\"Incorrectly encoded \\\"pbkdf2Params\\\"\");\r\n\t\t}\r\n\t\t\r\n\t\tconst contentEncryptionAlgorithm = this.getAlgorithmByOID(pbes2Parameters.encryptionScheme.algorithmId);\r\n\t\tif((\"name\" in contentEncryptionAlgorithm) === false)\r\n\t\t\treturn Promise.reject(`Incorrect OID for \"contentEncryptionAlgorithm\": ${pbes2Parameters.encryptionScheme.algorithmId}`);\r\n\t\t\r\n\t\tconst ivBuffer = pbes2Parameters.encryptionScheme.algorithmParams.valueBlock.valueHex;\r\n\t\tconst ivView = new Uint8Array(ivBuffer);\r\n\t\t\r\n\t\tconst saltBuffer = pbkdf2Params.salt.valueBlock.valueHex;\r\n\t\tconst saltView = new Uint8Array(saltBuffer);\r\n\t\t\r\n\t\tconst iterationCount = pbkdf2Params.iterationCount;\r\n\t\t\r\n\t\tlet hmacHashAlgorithm = \"SHA-1\";\r\n\t\t\r\n\t\tif(\"prf\" in pbkdf2Params)\r\n\t\t{\r\n\t\t\tconst algorithm = this.getAlgorithmByOID(pbkdf2Params.prf.algorithmId);\r\n\t\t\tif((\"name\" in algorithm) === false)\r\n\t\t\t\treturn Promise.reject(\"Incorrect OID for HMAC hash algorithm\");\r\n\t\t\t\r\n\t\t\thmacHashAlgorithm = algorithm.hash.name;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Derive PBKDF2 key from \"password\" buffer\r\n\t\tsequence = sequence.then(() =>\r\n\t\t\tthis.importKey(\"raw\",\r\n\t\t\t\tparameters.password,\r\n\t\t\t\t\"PBKDF2\",\r\n\t\t\t\tfalse,\r\n\t\t\t\t[\"deriveKey\"]),\r\n\t\terror =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Derive key for \"contentEncryptionAlgorithm\"\r\n\t\tsequence = sequence.then(result =>\r\n\t\t\tthis.deriveKey({\r\n\t\t\t\tname: \"PBKDF2\",\r\n\t\t\t\thash: {\r\n\t\t\t\t\tname: hmacHashAlgorithm\r\n\t\t\t\t},\r\n\t\t\t\tsalt: saltView,\r\n\t\t\t\titerations: iterationCount\r\n\t\t\t},\r\n\t\t\tresult,\r\n\t\t\tcontentEncryptionAlgorithm,\r\n\t\t\tfalse,\r\n\t\t\t[\"decrypt\"]),\r\n\t\terror =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Decrypt internal content using derived key\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\t//region Create correct data block for decryption\r\n\t\t\tlet dataBuffer = new ArrayBuffer(0);\r\n\t\t\t\r\n\t\t\tif(parameters.encryptedContentInfo.encryptedContent.idBlock.isConstructed === false)\r\n\t\t\t\tdataBuffer = parameters.encryptedContentInfo.encryptedContent.valueBlock.valueHex;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor(const content of parameters.encryptedContentInfo.encryptedContent.valueBlock.value)\r\n\t\t\t\t\tdataBuffer = utilConcatBuf(dataBuffer, content.valueBlock.valueHex);\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn this.decrypt({\r\n\t\t\t\tname: contentEncryptionAlgorithm.name,\r\n\t\t\t\tiv: ivView\r\n\t\t\t},\r\n\t\t\tresult,\r\n\t\t\tdataBuffer);\r\n\t\t}, error =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Stamping (signing) data using algorithm simular to HMAC\r\n\t * @param {Object} parameters\r\n\t * @return {Promise.|Promise}\r\n\t */\r\n\tstampDataWithPassword(parameters)\r\n\t{\r\n\t\t//region Check for input parameters\r\n\t\tif((parameters instanceof Object) === false)\r\n\t\t\treturn Promise.reject(\"Parameters must have type \\\"Object\\\"\");\r\n\t\t\r\n\t\tif((\"password\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"password\\\"\");\r\n\t\t\r\n\t\tif((\"hashAlgorithm\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"hashAlgorithm\\\"\");\r\n\t\t\r\n\t\tif((\"salt\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"iterationCount\\\"\");\r\n\t\t\r\n\t\tif((\"iterationCount\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"salt\\\"\");\r\n\t\t\r\n\t\tif((\"contentToStamp\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"contentToStamp\\\"\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Choose correct length for HMAC key\r\n\t\tlet length;\r\n\t\t\r\n\t\tswitch(parameters.hashAlgorithm.toLowerCase())\r\n\t\t{\r\n\t\t\tcase \"sha-1\":\r\n\t\t\t\tlength = 160;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sha-256\":\r\n\t\t\t\tlength = 256;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sha-384\":\r\n\t\t\t\tlength = 384;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sha-512\":\r\n\t\t\t\tlength = 512;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(`Incorrect \"parameters.hashAlgorithm\" parameter: ${parameters.hashAlgorithm}`);\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tconst hmacAlgorithm = {\r\n\t\t\tname: \"HMAC\",\r\n\t\t\tlength,\r\n\t\t\thash: {\r\n\t\t\t\tname: parameters.hashAlgorithm\r\n\t\t\t}\r\n\t\t};\r\n\t\t//endregion\r\n\r\n\t\t//region Create PKCS#12 key for integrity checking\r\n\t\tsequence = sequence.then(() => makePKCS12B2Key(this, parameters.hashAlgorithm, length, parameters.password, parameters.salt, parameters.iterationCount));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Import HMAC key\r\n\t\t// noinspection JSCheckFunctionSignatures\r\n\t\tsequence = sequence.then(\r\n\t\t\tresult =>\r\n\t\t\t\tthis.importKey(\"raw\",\r\n\t\t\t\t\tnew Uint8Array(result),\r\n\t\t\t\t\thmacAlgorithm,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\t[\"sign\"])\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Make signed HMAC value\r\n\t\tsequence = sequence.then(\r\n\t\t\tresult =>\r\n\t\t\t\tthis.sign(hmacAlgorithm, result, new Uint8Array(parameters.contentToStamp)),\r\n\t\t\terror => Promise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\tverifyDataStampedWithPassword(parameters)\r\n\t{\r\n\t\t//region Check for input parameters\r\n\t\tif((parameters instanceof Object) === false)\r\n\t\t\treturn Promise.reject(\"Parameters must have type \\\"Object\\\"\");\r\n\t\t\r\n\t\tif((\"password\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"password\\\"\");\r\n\t\t\r\n\t\tif((\"hashAlgorithm\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"hashAlgorithm\\\"\");\r\n\t\t\r\n\t\tif((\"salt\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"iterationCount\\\"\");\r\n\t\t\r\n\t\tif((\"iterationCount\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"salt\\\"\");\r\n\t\t\r\n\t\tif((\"contentToVerify\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"contentToVerify\\\"\");\r\n\t\t\r\n\t\tif((\"signatureToVerify\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Absent mandatory parameter \\\"signatureToVerify\\\"\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Choose correct length for HMAC key\r\n\t\tlet length;\r\n\t\t\r\n\t\tswitch(parameters.hashAlgorithm.toLowerCase())\r\n\t\t{\r\n\t\t\tcase \"sha-1\":\r\n\t\t\t\tlength = 160;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sha-256\":\r\n\t\t\t\tlength = 256;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sha-384\":\r\n\t\t\t\tlength = 384;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sha-512\":\r\n\t\t\t\tlength = 512;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(`Incorrect \"parameters.hashAlgorithm\" parameter: ${parameters.hashAlgorithm}`);\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tconst hmacAlgorithm = {\r\n\t\t\tname: \"HMAC\",\r\n\t\t\tlength,\r\n\t\t\thash: {\r\n\t\t\t\tname: parameters.hashAlgorithm\r\n\t\t\t}\r\n\t\t};\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create PKCS#12 key for integrity checking\r\n\t\tsequence = sequence.then(() => makePKCS12B2Key(this, parameters.hashAlgorithm, length, parameters.password, parameters.salt, parameters.iterationCount));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Import HMAC key\r\n\t\t// noinspection JSCheckFunctionSignatures\r\n\t\tsequence = sequence.then(result =>\r\n\t\t\tthis.importKey(\"raw\",\r\n\t\t\t\tnew Uint8Array(result),\r\n\t\t\t\thmacAlgorithm,\r\n\t\t\t\tfalse,\r\n\t\t\t\t[\"verify\"])\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Make signed HMAC value\r\n\t\tsequence = sequence.then(\r\n\t\t\tresult =>\r\n\t\t\t\tthis.verify(hmacAlgorithm, result, new Uint8Array(parameters.signatureToVerify), new Uint8Array(parameters.contentToVerify)),\r\n\t\t\terror => Promise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Get signature parameters by analyzing private key algorithm\r\n\t * @param {Object} privateKey The private key user would like to use\r\n\t * @param {string} [hashAlgorithm=\"SHA-1\"] Hash algorithm user would like to use\r\n\t * @return {Promise.|Promise}\r\n\t */\r\n\tgetSignatureParameters(privateKey, hashAlgorithm = \"SHA-1\")\r\n\t{\r\n\t\t//region Check hashing algorithm\r\n\t\tconst oid = this.getOIDByAlgorithm({ name: hashAlgorithm });\r\n\t\tif(oid === \"\")\r\n\t\t\treturn Promise.reject(`Unsupported hash algorithm: ${hashAlgorithm}`);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tconst signatureAlgorithm = new AlgorithmIdentifier();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"default parameters\" for current algorithm\r\n\t\tconst parameters = this.getAlgorithmParameters(privateKey.algorithm.name, \"sign\");\r\n\t\tparameters.algorithm.hash.name = hashAlgorithm;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Fill internal structures base on \"privateKey\" and \"hashAlgorithm\"\r\n\t\tswitch(privateKey.algorithm.name.toUpperCase())\r\n\t\t{\r\n\t\t\tcase \"RSASSA-PKCS1-V1_5\":\r\n\t\t\tcase \"ECDSA\":\r\n\t\t\t\tsignatureAlgorithm.algorithmId = this.getOIDByAlgorithm(parameters.algorithm);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"RSA-PSS\":\r\n\t\t\t\t{\r\n\t\t\t\t\t//region Set \"saltLength\" as a length (in octets) of hash function result\r\n\t\t\t\t\tswitch(hashAlgorithm.toUpperCase())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"SHA-256\":\r\n\t\t\t\t\t\t\tparameters.algorithm.saltLength = 32;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"SHA-384\":\r\n\t\t\t\t\t\t\tparameters.algorithm.saltLength = 48;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"SHA-512\":\r\n\t\t\t\t\t\t\tparameters.algorithm.saltLength = 64;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Fill \"RSASSA_PSS_params\" object\r\n\t\t\t\t\tconst paramsObject = {};\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(hashAlgorithm.toUpperCase() !== \"SHA-1\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst hashAlgorithmOID = this.getOIDByAlgorithm({ name: hashAlgorithm });\r\n\t\t\t\t\t\tif(hashAlgorithmOID === \"\")\r\n\t\t\t\t\t\t\treturn Promise.reject(`Unsupported hash algorithm: ${hashAlgorithm}`);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tparamsObject.hashAlgorithm = new AlgorithmIdentifier({\r\n\t\t\t\t\t\t\talgorithmId: hashAlgorithmOID,\r\n\t\t\t\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tparamsObject.maskGenAlgorithm = new AlgorithmIdentifier({\r\n\t\t\t\t\t\t\talgorithmId: \"1.2.840.113549.1.1.8\", // MGF1\r\n\t\t\t\t\t\t\talgorithmParams: paramsObject.hashAlgorithm.toSchema()\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(parameters.algorithm.saltLength !== 20)\r\n\t\t\t\t\t\tparamsObject.saltLength = parameters.algorithm.saltLength;\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst pssParameters = new RSASSAPSSParams(paramsObject);\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Automatically set signature algorithm\r\n\t\t\t\t\tsignatureAlgorithm.algorithmId = \"1.2.840.113549.1.1.10\";\r\n\t\t\t\t\tsignatureAlgorithm.algorithmParams = pssParameters.toSchema();\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(`Unsupported signature algorithm: ${privateKey.algorithm.name}`);\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\treturn Promise.resolve().then(() => ({\r\n\t\t\tsignatureAlgorithm,\r\n\t\t\tparameters\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Sign data with pre-defined private key\r\n\t * @param {ArrayBuffer} data Data to be signed\r\n\t * @param {Object} privateKey Private key to use\r\n\t * @param {Object} parameters Parameters for used algorithm\r\n\t * @return {Promise.|Promise}\r\n\t */\r\n\tsignWithPrivateKey(data, privateKey, parameters)\r\n\t{\r\n\t\treturn this.sign(parameters.algorithm,\r\n\t\t\tprivateKey,\r\n\t\t\tnew Uint8Array(data))\r\n\t\t\t.then(result =>\r\n\t\t\t{\r\n\t\t\t\t//region Special case for ECDSA algorithm\r\n\t\t\t\tif(parameters.algorithm.name === \"ECDSA\")\r\n\t\t\t\t\tresult = createCMSECDSASignature(result);\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\treturn result;\r\n\t\t\t}, error =>\r\n\t\t\t\tPromise.reject(`Signing error: ${error}`)\r\n\t\t\t);\r\n\t}\r\n\t//**********************************************************************************\r\n\tfillPublicKeyParameters(publicKeyInfo, signatureAlgorithm)\r\n\t{\r\n\t\tconst parameters = {};\r\n\t\t\r\n\t\t//region Find signer's hashing algorithm\r\n\t\tconst shaAlgorithm = this.getHashAlgorithm(signatureAlgorithm);\r\n\t\tif(shaAlgorithm === \"\")\r\n\t\t\treturn Promise.reject(`Unsupported signature algorithm: ${signatureAlgorithm.algorithmId}`);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get information about public key algorithm and default parameters for import\r\n\t\tlet algorithmId;\r\n\t\tif(signatureAlgorithm.algorithmId === \"1.2.840.113549.1.1.10\")\r\n\t\t\talgorithmId = signatureAlgorithm.algorithmId;\r\n\t\telse\r\n\t\t\talgorithmId = publicKeyInfo.algorithm.algorithmId;\r\n\t\t\r\n\t\tconst algorithmObject = this.getAlgorithmByOID(algorithmId);\r\n\t\tif((\"name\" in algorithmObject) === \"\")\r\n\t\t\treturn Promise.reject(`Unsupported public key algorithm: ${signatureAlgorithm.algorithmId}`);\r\n\t\t\r\n\t\tparameters.algorithm = this.getAlgorithmParameters(algorithmObject.name, \"importkey\");\r\n\t\tif(\"hash\" in parameters.algorithm.algorithm)\r\n\t\t\tparameters.algorithm.algorithm.hash.name = shaAlgorithm;\r\n\t\t\r\n\t\t//region Special case for ECDSA\r\n\t\tif(algorithmObject.name === \"ECDSA\")\r\n\t\t{\r\n\t\t\t//region Get information about named curve\r\n\t\t\tlet algorithmParamsChecked = false;\r\n\t\t\t\r\n\t\t\tif((\"algorithmParams\" in publicKeyInfo.algorithm) === true)\r\n\t\t\t{\r\n\t\t\t\tif(\"idBlock\" in publicKeyInfo.algorithm.algorithmParams)\r\n\t\t\t\t{\r\n\t\t\t\t\tif((publicKeyInfo.algorithm.algorithmParams.idBlock.tagClass === 1) && (publicKeyInfo.algorithm.algorithmParams.idBlock.tagNumber === 6))\r\n\t\t\t\t\t\talgorithmParamsChecked = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(algorithmParamsChecked === false)\r\n\t\t\t\treturn Promise.reject(\"Incorrect type for ECDSA public key parameters\");\r\n\t\t\t\r\n\t\t\tconst curveObject = this.getAlgorithmByOID(publicKeyInfo.algorithm.algorithmParams.valueBlock.toString());\r\n\t\t\tif((\"name\" in curveObject) === false)\r\n\t\t\t\treturn Promise.reject(`Unsupported named curve algorithm: ${publicKeyInfo.algorithm.algorithmParams.valueBlock.toString()}`);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tparameters.algorithm.algorithm.namedCurve = curveObject.name;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn parameters;\r\n\t}\r\n\t//**********************************************************************************\r\n\tgetPublicKey(publicKeyInfo, signatureAlgorithm, parameters = null)\r\n\t{\r\n\t\tif(parameters === null)\r\n\t\t\tparameters = this.fillPublicKeyParameters(publicKeyInfo, signatureAlgorithm);\r\n\t\t\r\n\t\tconst publicKeyInfoSchema = publicKeyInfo.toSchema();\r\n\t\tconst publicKeyInfoBuffer = publicKeyInfoSchema.toBER(false);\r\n\t\tconst publicKeyInfoView = new Uint8Array(publicKeyInfoBuffer);\r\n\t\t\r\n\t\treturn this.importKey(\"spki\",\r\n\t\t\tpublicKeyInfoView,\r\n\t\t\tparameters.algorithm.algorithm,\r\n\t\t\ttrue,\r\n\t\t\tparameters.algorithm.usages\r\n\t\t);\r\n\t}\r\n\t//**********************************************************************************\r\n\tverifyWithPublicKey(data, signature, publicKeyInfo, signatureAlgorithm, shaAlgorithm = null)\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find signer's hashing algorithm\r\n\t\tif(shaAlgorithm === null)\r\n\t\t{\r\n\t\t\tshaAlgorithm = this.getHashAlgorithm(signatureAlgorithm);\r\n\t\t\tif(shaAlgorithm === \"\")\r\n\t\t\t\treturn Promise.reject(`Unsupported signature algorithm: ${signatureAlgorithm.algorithmId}`);\r\n\t\t\t\r\n\t\t\t//region Import public key\r\n\t\t\tsequence = sequence.then(() =>\r\n\t\t\t\tthis.getPublicKey(publicKeyInfo, signatureAlgorithm));\r\n\t\t\t//endregion\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tconst parameters = {};\r\n\t\t\t\r\n\t\t\t//region Get information about public key algorithm and default parameters for import\r\n\t\t\tlet algorithmId;\r\n\t\t\tif(signatureAlgorithm.algorithmId === \"1.2.840.113549.1.1.10\")\r\n\t\t\t\talgorithmId = signatureAlgorithm.algorithmId;\r\n\t\t\telse\r\n\t\t\t\talgorithmId = publicKeyInfo.algorithm.algorithmId;\r\n\t\t\t\r\n\t\t\tconst algorithmObject = this.getAlgorithmByOID(algorithmId);\r\n\t\t\tif((\"name\" in algorithmObject) === \"\")\r\n\t\t\t\treturn Promise.reject(`Unsupported public key algorithm: ${signatureAlgorithm.algorithmId}`);\r\n\t\t\t\r\n\t\t\tparameters.algorithm = this.getAlgorithmParameters(algorithmObject.name, \"importkey\");\r\n\t\t\tif(\"hash\" in parameters.algorithm.algorithm)\r\n\t\t\t\tparameters.algorithm.algorithm.hash.name = shaAlgorithm;\r\n\t\t\t\r\n\t\t\t//region Special case for ECDSA\r\n\t\t\tif(algorithmObject.name === \"ECDSA\")\r\n\t\t\t{\r\n\t\t\t\t//region Get information about named curve\r\n\t\t\t\tlet algorithmParamsChecked = false;\r\n\t\t\t\t\r\n\t\t\t\tif((\"algorithmParams\" in publicKeyInfo.algorithm) === true)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(\"idBlock\" in publicKeyInfo.algorithm.algorithmParams)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif((publicKeyInfo.algorithm.algorithmParams.idBlock.tagClass === 1) && (publicKeyInfo.algorithm.algorithmParams.idBlock.tagNumber === 6))\r\n\t\t\t\t\t\t\talgorithmParamsChecked = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(algorithmParamsChecked === false)\r\n\t\t\t\t\treturn Promise.reject(\"Incorrect type for ECDSA public key parameters\");\r\n\t\t\t\t\r\n\t\t\t\tconst curveObject = this.getAlgorithmByOID(publicKeyInfo.algorithm.algorithmParams.valueBlock.toString());\r\n\t\t\t\tif((\"name\" in curveObject) === false)\r\n\t\t\t\t\treturn Promise.reject(`Unsupported named curve algorithm: ${publicKeyInfo.algorithm.algorithmParams.valueBlock.toString()}`);\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\tparameters.algorithm.algorithm.namedCurve = curveObject.name;\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t//endregion\r\n\r\n\t\t\t//region Import public key\r\n\t\t\tsequence = sequence.then(() =>\r\n\t\t\t\tthis.getPublicKey(publicKeyInfo, null, parameters));\r\n\t\t\t//endregion\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Verify signature\r\n\t\tsequence = sequence.then(publicKey =>\r\n\t\t{\r\n\t\t\t//region Get default algorithm parameters for verification\r\n\t\t\tconst algorithm = this.getAlgorithmParameters(publicKey.algorithm.name, \"verify\");\r\n\t\t\tif(\"hash\" in algorithm.algorithm)\r\n\t\t\t\talgorithm.algorithm.hash.name = shaAlgorithm;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Special case for ECDSA signatures\r\n\t\t\tlet signatureValue = signature.valueBlock.valueHex;\r\n\t\t\t\r\n\t\t\tif(publicKey.algorithm.name === \"ECDSA\")\r\n\t\t\t{\r\n\t\t\t\tconst asn1 = asn1js.fromBER(signatureValue);\r\n\t\t\t\t// noinspection JSCheckFunctionSignatures\r\n\t\t\t\tsignatureValue = createECDSASignatureFromCMS(asn1.result);\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Special case for RSA-PSS\r\n\t\t\tif(publicKey.algorithm.name === \"RSA-PSS\")\r\n\t\t\t{\r\n\t\t\t\tlet pssParameters;\r\n\t\t\t\t\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tpssParameters = new RSASSAPSSParams({ schema: signatureAlgorithm.algorithmParams });\r\n\t\t\t\t}\r\n\t\t\t\tcatch(ex)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Promise.reject(ex);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(\"saltLength\" in pssParameters)\r\n\t\t\t\t\talgorithm.algorithm.saltLength = pssParameters.saltLength;\r\n\t\t\t\telse\r\n\t\t\t\t\talgorithm.algorithm.saltLength = 20;\r\n\t\t\t\t\r\n\t\t\t\tlet hashAlgo = \"SHA-1\";\r\n\t\t\t\t\r\n\t\t\t\tif(\"hashAlgorithm\" in pssParameters)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst hashAlgorithm = this.getAlgorithmByOID(pssParameters.hashAlgorithm.algorithmId);\r\n\t\t\t\t\tif((\"name\" in hashAlgorithm) === false)\r\n\t\t\t\t\t\treturn Promise.reject(`Unrecognized hash algorithm: ${pssParameters.hashAlgorithm.algorithmId}`);\r\n\t\t\t\t\t\r\n\t\t\t\t\thashAlgo = hashAlgorithm.name;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\talgorithm.algorithm.hash.name = hashAlgo;\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn this.verify(algorithm.algorithm,\r\n\t\t\t\tpublicKey,\r\n\t\t\t\tnew Uint8Array(signatureValue),\r\n\t\t\t\tnew Uint8Array(data)\r\n\t\t\t);\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { utilConcatBuf } from \"pvutils\";\r\nimport CryptoEngine from \"./CryptoEngine.js\";\r\n//**************************************************************************************\r\n//region Crypto engine related function\r\n//**************************************************************************************\r\nlet engine = {\r\n\tname: \"none\",\r\n\tcrypto: null,\r\n\tsubtle: null\r\n};\r\n//**************************************************************************************\r\nexport function setEngine(name, crypto, subtle)\r\n{\r\n\t//region We are in Node\r\n\t// noinspection JSUnresolvedVariable\r\n\tif((typeof process !== \"undefined\") && (\"pid\" in process) && (typeof global !== \"undefined\") && (typeof window === \"undefined\"))\r\n\t{\r\n\t\t// noinspection ES6ModulesDependencies, JSUnresolvedVariable\r\n\t\tif(typeof global[process.pid] === \"undefined\")\r\n\t\t{\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tglobal[process.pid] = {};\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tif(typeof global[process.pid] !== \"object\")\r\n\t\t\t{\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tthrow new Error(`Name global.${process.pid} already exists and it is not an object`);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tif(typeof global[process.pid].pkijs === \"undefined\")\r\n\t\t{\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tglobal[process.pid].pkijs = {};\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\tif(typeof global[process.pid].pkijs !== \"object\")\r\n\t\t\t{\r\n\t\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t\tthrow new Error(`Name global.${process.pid}.pkijs already exists and it is not an object`);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tglobal[process.pid].pkijs.engine = {\r\n\t\t\tname: name,\r\n\t\t\tcrypto: crypto,\r\n\t\t\tsubtle: subtle\r\n\t\t};\r\n\t}\r\n\t//endregion\r\n\t//region We are in browser\r\n\telse\r\n\t{\r\n\t\tif(engine.name !== name)\r\n\t\t{\r\n\t\t\tengine = {\r\n\t\t\t\tname: name,\r\n\t\t\t\tcrypto: crypto,\r\n\t\t\t\tsubtle: subtle\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t//endregion\r\n}\r\n//**************************************************************************************\r\nexport function getEngine()\r\n{\r\n\t//region We are in Node\r\n\t// noinspection JSUnresolvedVariable\r\n\tif((typeof process !== \"undefined\") && (\"pid\" in process) && (typeof global !== \"undefined\") && (typeof window === \"undefined\"))\r\n\t{\r\n\t\tlet _engine;\r\n\t\t\r\n\t\ttry\r\n\t\t{\r\n\t\t\t// noinspection JSUnresolvedVariable\r\n\t\t\t_engine = global[process.pid].pkijs.engine;\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\tthrow new Error(\"Please call \\\"setEngine\\\" before call to \\\"getEngine\\\"\");\r\n\t\t}\r\n\t\t\r\n\t\treturn _engine;\r\n\t}\r\n\t//endregion\r\n\t\r\n\treturn engine;\r\n}\r\n//**************************************************************************************\r\n(function initCryptoEngine()\r\n{\r\n\tif(typeof self !== \"undefined\")\r\n\t{\r\n\t\tif(\"crypto\" in self)\r\n\t\t{\r\n\t\t\tlet engineName = \"webcrypto\";\r\n\t\t\t\r\n\t\t\t/**\r\n\t\t\t * Standard crypto object\r\n\t\t\t * @type {Object}\r\n\t\t\t * @property {Object} [webkitSubtle] Subtle object from Apple\r\n\t\t\t */\r\n\t\t\tconst cryptoObject = self.crypto;\r\n\t\t\tlet subtleObject;\r\n\t\t\t\r\n\t\t\t// Apple Safari support\r\n\t\t\tif(\"webkitSubtle\" in self.crypto)\r\n\t\t\t{\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\tsubtleObject = self.crypto.webkitSubtle;\r\n\t\t\t\t}\r\n\t\t\t\tcatch(ex)\r\n\t\t\t\t{\r\n\t\t\t\t\tsubtleObject = self.crypto.subtle;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tengineName = \"safari\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(\"subtle\" in self.crypto)\r\n\t\t\t\tsubtleObject = self.crypto.subtle;\r\n\r\n\r\n\t\t\tif(typeof subtleObject === \"undefined\")\r\n\t\t\t{\r\n\t\t\t\tengine = {\r\n\t\t\t\t\tname: engineName,\r\n\t\t\t\t\tcrypto: cryptoObject,\r\n\t\t\t\t\tsubtle: null\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tengine = {\r\n\t\t\t\t\tname: engineName,\r\n\t\t\t\t\tcrypto: cryptoObject,\r\n\t\t\t\t\tsubtle: new CryptoEngine({name: engineName, crypto: self.crypto, subtle: subtleObject})\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetEngine(engine.name, engine.crypto, engine.subtle);\r\n})();\r\n//**************************************************************************************\r\n//endregion\r\n//**************************************************************************************\r\n//region Declaration of common functions\r\n//**************************************************************************************\r\n/**\r\n * Get crypto subtle from current \"crypto engine\" or \"undefined\"\r\n * @returns {({decrypt, deriveKey, digest, encrypt, exportKey, generateKey, importKey, sign, unwrapKey, verify, wrapKey}|null)}\r\n */\r\nexport function getCrypto()\r\n{\r\n\tconst _engine = getEngine();\r\n\t\r\n\tif(_engine.subtle !== null)\r\n\t\treturn _engine.subtle;\r\n\t\r\n\treturn undefined;\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Initialize input Uint8Array by random values (with help from current \"crypto engine\")\r\n * @param {!Uint8Array} view\r\n * @returns {*}\r\n */\r\nexport function getRandomValues(view)\r\n{\r\n\treturn getEngine().subtle.getRandomValues(view);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Get OID for each specific algorithm\r\n * @param {Object} algorithm\r\n * @returns {string}\r\n */\r\nexport function getOIDByAlgorithm(algorithm)\r\n{\r\n\treturn getEngine().subtle.getOIDByAlgorithm(algorithm);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Get default algorithm parameters for each kind of operation\r\n * @param {string} algorithmName Algorithm name to get common parameters for\r\n * @param {string} operation Kind of operation: \"sign\", \"encrypt\", \"generatekey\", \"importkey\", \"exportkey\", \"verify\"\r\n * @returns {*}\r\n */\r\nexport function getAlgorithmParameters(algorithmName, operation)\r\n{\r\n\treturn getEngine().subtle.getAlgorithmParameters(algorithmName, operation);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Create CMS ECDSA signature from WebCrypto ECDSA signature\r\n * @param {ArrayBuffer} signatureBuffer WebCrypto result of \"sign\" function\r\n * @returns {ArrayBuffer}\r\n */\r\nexport function createCMSECDSASignature(signatureBuffer)\r\n{\r\n\t//region Initial check for correct length\r\n\tif((signatureBuffer.byteLength % 2) !== 0)\r\n\t\treturn new ArrayBuffer(0);\r\n\t//endregion\r\n\t\r\n\t//region Initial variables\r\n\tconst length = signatureBuffer.byteLength / 2; // There are two equal parts inside incoming ArrayBuffer\r\n\t\r\n\tconst rBuffer = new ArrayBuffer(length);\r\n\tconst rView = new Uint8Array(rBuffer);\r\n\trView.set(new Uint8Array(signatureBuffer, 0, length));\r\n\t\r\n\tconst rInteger = new asn1js.Integer({ valueHex: rBuffer });\r\n\t\r\n\tconst sBuffer = new ArrayBuffer(length);\r\n\tconst sView = new Uint8Array(sBuffer);\r\n\tsView.set(new Uint8Array(signatureBuffer, length, length));\r\n\t\r\n\tconst sInteger = new asn1js.Integer({ valueHex: sBuffer });\r\n\t//endregion\r\n\t\r\n\treturn (new asn1js.Sequence({\r\n\t\tvalue: [\r\n\t\t\trInteger.convertToDER(),\r\n\t\t\tsInteger.convertToDER()\r\n\t\t]\r\n\t})).toBER(false);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * String preparation function. In a future here will be realization of algorithm from RFC4518\r\n * @param {string} inputString JavaScript string. As soon as for each ASN.1 string type we have a specific transformation function here we will work with pure JavaScript string\r\n * @returns {string} Formated string\r\n */\r\nexport function stringPrep(inputString)\r\n{\r\n\t//region Initial variables\r\n\tlet isSpace = false;\r\n\tlet cuttedResult = \"\";\r\n\t//endregion\r\n\t\r\n\tconst result = inputString.trim(); // Trim input string\r\n\t\r\n\t//region Change all sequence of SPACE down to SPACE char\r\n\tfor(let i = 0; i < result.length; i++)\r\n\t{\r\n\t\tif(result.charCodeAt(i) === 32)\r\n\t\t{\r\n\t\t\tif(isSpace === false)\r\n\t\t\t\tisSpace = true;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(isSpace)\r\n\t\t\t{\r\n\t\t\t\tcuttedResult += \" \";\r\n\t\t\t\tisSpace = false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcuttedResult += result[i];\r\n\t\t}\r\n\t}\r\n\t//endregion\r\n\t\r\n\treturn cuttedResult.toLowerCase();\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Create a single ArrayBuffer from CMS ECDSA signature\r\n * @param {Sequence} cmsSignature ASN.1 SEQUENCE contains CMS ECDSA signature\r\n * @returns {ArrayBuffer}\r\n */\r\nexport function createECDSASignatureFromCMS(cmsSignature)\r\n{\r\n\t//region Check input variables\r\n\tif((cmsSignature instanceof asn1js.Sequence) === false)\r\n\t\treturn new ArrayBuffer(0);\r\n\t\r\n\tif(cmsSignature.valueBlock.value.length !== 2)\r\n\t\treturn new ArrayBuffer(0);\r\n\t\r\n\tif((cmsSignature.valueBlock.value[0] instanceof asn1js.Integer) === false)\r\n\t\treturn new ArrayBuffer(0);\r\n\t\r\n\tif((cmsSignature.valueBlock.value[1] instanceof asn1js.Integer) === false)\r\n\t\treturn new ArrayBuffer(0);\r\n\t//endregion\r\n\t\r\n\tconst rValue = cmsSignature.valueBlock.value[0].convertFromDER();\r\n\tconst sValue = cmsSignature.valueBlock.value[1].convertFromDER();\r\n\t\r\n\t//region Check the lengths of two parts are equal\r\n\tswitch(true)\r\n\t{\r\n\t\tcase (rValue.valueBlock.valueHex.byteLength < sValue.valueBlock.valueHex.byteLength):\r\n\t\t\t{\r\n\t\t\t\tif((sValue.valueBlock.valueHex.byteLength - rValue.valueBlock.valueHex.byteLength) !== 1)\r\n\t\t\t\t\tthrow new Error(\"Incorrect DER integer decoding\");\r\n\t\t\t\t\r\n\t\t\t\tconst correctedLength = sValue.valueBlock.valueHex.byteLength;\r\n\t\t\t\t\r\n\t\t\t\tconst rValueView = new Uint8Array(rValue.valueBlock.valueHex);\r\n\t\t\t\t\r\n\t\t\t\tconst rValueBufferCorrected = new ArrayBuffer(correctedLength);\r\n\t\t\t\tconst rValueViewCorrected = new Uint8Array(rValueBufferCorrected);\r\n\t\t\t\t\r\n\t\t\t\trValueViewCorrected.set(rValueView, 1);\r\n\t\t\t\trValueViewCorrected[0] = 0x00; // In order to be sure we do not have any garbage here\r\n\t\t\t\t\r\n\t\t\t\treturn utilConcatBuf(rValueBufferCorrected, sValue.valueBlock.valueHex);\r\n\t\t\t}\r\n\t\tcase (rValue.valueBlock.valueHex.byteLength > sValue.valueBlock.valueHex.byteLength):\r\n\t\t\t{\r\n\t\t\t\tif((rValue.valueBlock.valueHex.byteLength - sValue.valueBlock.valueHex.byteLength) !== 1)\r\n\t\t\t\t\tthrow new Error(\"Incorrect DER integer decoding\");\r\n\t\t\t\t\r\n\t\t\t\tconst correctedLength = rValue.valueBlock.valueHex.byteLength;\r\n\t\t\t\t\r\n\t\t\t\tconst sValueView = new Uint8Array(sValue.valueBlock.valueHex);\r\n\t\t\t\t\r\n\t\t\t\tconst sValueBufferCorrected = new ArrayBuffer(correctedLength);\r\n\t\t\t\tconst sValueViewCorrected = new Uint8Array(sValueBufferCorrected);\r\n\t\t\t\t\r\n\t\t\t\tsValueViewCorrected.set(sValueView, 1);\r\n\t\t\t\tsValueViewCorrected[0] = 0x00; // In order to be sure we do not have any garbage here\r\n\t\t\t\t\r\n\t\t\t\treturn utilConcatBuf(rValue.valueBlock.valueHex, sValueBufferCorrected);\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\t{\r\n\t\t\t\t//region In case we have equal length and the length is not even with 2\r\n\t\t\t\tif(rValue.valueBlock.valueHex.byteLength % 2)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst correctedLength = (rValue.valueBlock.valueHex.byteLength + 1);\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst rValueView = new Uint8Array(rValue.valueBlock.valueHex);\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst rValueBufferCorrected = new ArrayBuffer(correctedLength);\r\n\t\t\t\t\tconst rValueViewCorrected = new Uint8Array(rValueBufferCorrected);\r\n\t\t\t\t\t\r\n\t\t\t\t\trValueViewCorrected.set(rValueView, 1);\r\n\t\t\t\t\trValueViewCorrected[0] = 0x00; // In order to be sure we do not have any garbage here\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst sValueView = new Uint8Array(sValue.valueBlock.valueHex);\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst sValueBufferCorrected = new ArrayBuffer(correctedLength);\r\n\t\t\t\t\tconst sValueViewCorrected = new Uint8Array(sValueBufferCorrected);\r\n\t\t\t\t\t\r\n\t\t\t\t\tsValueViewCorrected.set(sValueView, 1);\r\n\t\t\t\t\tsValueViewCorrected[0] = 0x00; // In order to be sure we do not have any garbage here\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn utilConcatBuf(rValueBufferCorrected, sValueBufferCorrected);\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t}\r\n\t//endregion\r\n\t\r\n\treturn utilConcatBuf(rValue.valueBlock.valueHex, sValue.valueBlock.valueHex);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Get WebCrypto algorithm by wel-known OID\r\n * @param {string} oid well-known OID to search for\r\n * @returns {Object}\r\n */\r\nexport function getAlgorithmByOID(oid)\r\n{\r\n\treturn getEngine().subtle.getAlgorithmByOID(oid);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Getting hash algorithm by signature algorithm\r\n * @param {AlgorithmIdentifier} signatureAlgorithm Signature algorithm\r\n * @returns {string}\r\n */\r\nexport function getHashAlgorithm(signatureAlgorithm)\r\n{\r\n\treturn getEngine().subtle.getHashAlgorithm(signatureAlgorithm);\r\n}\r\n//**************************************************************************************\r\n/**\r\n * ANS X9.63 Key Derivation Function having a \"Counter\" as a parameter\r\n * @param {string} hashFunction Used hash function\r\n * @param {ArrayBuffer} Zbuffer ArrayBuffer containing ECDH shared secret to derive from\r\n * @param {number} Counter\r\n * @param {ArrayBuffer} SharedInfo Usually DER encoded \"ECC_CMS_SharedInfo\" structure\r\n */\r\nexport function kdfWithCounter(hashFunction, Zbuffer, Counter, SharedInfo)\r\n{\r\n\t//region Check of input parameters\r\n\tswitch(hashFunction.toUpperCase())\r\n\t{\r\n\t\tcase \"SHA-1\":\r\n\t\tcase \"SHA-256\":\r\n\t\tcase \"SHA-384\":\r\n\t\tcase \"SHA-512\":\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn Promise.reject(`Unknown hash function: ${hashFunction}`);\r\n\t}\r\n\t\r\n\tif((Zbuffer instanceof ArrayBuffer) === false)\r\n\t\treturn Promise.reject(\"Please set \\\"Zbuffer\\\" as \\\"ArrayBuffer\\\"\");\r\n\t\r\n\tif(Zbuffer.byteLength === 0)\r\n\t\treturn Promise.reject(\"\\\"Zbuffer\\\" has zero length, error\");\r\n\t\r\n\tif((SharedInfo instanceof ArrayBuffer) === false)\r\n\t\treturn Promise.reject(\"Please set \\\"SharedInfo\\\" as \\\"ArrayBuffer\\\"\");\r\n\t\r\n\tif(Counter > 255)\r\n\t\treturn Promise.reject(\"Please set \\\"Counter\\\" variable to value less or equal to 255\");\r\n\t//endregion\r\n\t\r\n\t//region Initial variables\r\n\tconst counterBuffer = new ArrayBuffer(4);\r\n\tconst counterView = new Uint8Array(counterBuffer);\r\n\tcounterView[0] = 0x00;\r\n\tcounterView[1] = 0x00;\r\n\tcounterView[2] = 0x00;\r\n\tcounterView[3] = Counter;\r\n\t\r\n\tlet combinedBuffer = new ArrayBuffer(0);\r\n\t//endregion\r\n\t\r\n\t//region Get a \"crypto\" extension\r\n\tconst crypto = getCrypto();\r\n\tif(typeof crypto === \"undefined\")\r\n\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\r\n\t//endregion\r\n\t\r\n\t//region Create a combined ArrayBuffer for digesting\r\n\tcombinedBuffer = utilConcatBuf(combinedBuffer, Zbuffer);\r\n\tcombinedBuffer = utilConcatBuf(combinedBuffer, counterBuffer);\r\n\tcombinedBuffer = utilConcatBuf(combinedBuffer, SharedInfo);\r\n\t//endregion\r\n\t\r\n\t//region Return digest of combined ArrayBuffer and information about current counter\r\n\treturn crypto.digest({\r\n\t\tname: hashFunction\r\n\t},\r\n\tcombinedBuffer)\r\n\t\t.then(result =>\r\n\t\t\t({\r\n\t\t\t\tcounter: Counter,\r\n\t\t\t\tresult\r\n\t\t\t}));\r\n\t//endregion\r\n}\r\n//**************************************************************************************\r\n/**\r\n * ANS X9.63 Key Derivation Function\r\n * @param {string} hashFunction Used hash function\r\n * @param {ArrayBuffer} Zbuffer ArrayBuffer containing ECDH shared secret to derive from\r\n * @param {number} keydatalen Length (!!! in BITS !!!) of used kew derivation function\r\n * @param {ArrayBuffer} SharedInfo Usually DER encoded \"ECC_CMS_SharedInfo\" structure\r\n */\r\nexport function kdf(hashFunction, Zbuffer, keydatalen, SharedInfo)\r\n{\r\n\t//region Initial variables\r\n\tlet hashLength = 0;\r\n\tlet maxCounter = 1;\r\n\t\r\n\tconst kdfArray = [];\r\n\t//endregion\r\n\t\r\n\t//region Check of input parameters\r\n\tswitch(hashFunction.toUpperCase())\r\n\t{\r\n\t\tcase \"SHA-1\":\r\n\t\t\thashLength = 160; // In bits\r\n\t\t\tbreak;\r\n\t\tcase \"SHA-256\":\r\n\t\t\thashLength = 256; // In bits\r\n\t\t\tbreak;\r\n\t\tcase \"SHA-384\":\r\n\t\t\thashLength = 384; // In bits\r\n\t\t\tbreak;\r\n\t\tcase \"SHA-512\":\r\n\t\t\thashLength = 512; // In bits\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn Promise.reject(`Unknown hash function: ${hashFunction}`);\r\n\t}\r\n\t\r\n\tif((Zbuffer instanceof ArrayBuffer) === false)\r\n\t\treturn Promise.reject(\"Please set \\\"Zbuffer\\\" as \\\"ArrayBuffer\\\"\");\r\n\t\r\n\tif(Zbuffer.byteLength === 0)\r\n\t\treturn Promise.reject(\"\\\"Zbuffer\\\" has zero length, error\");\r\n\t\r\n\tif((SharedInfo instanceof ArrayBuffer) === false)\r\n\t\treturn Promise.reject(\"Please set \\\"SharedInfo\\\" as \\\"ArrayBuffer\\\"\");\r\n\t//endregion\r\n\t\r\n\t//region Calculated maximum value of \"Counter\" variable\r\n\tconst quotient = keydatalen / hashLength;\r\n\t\r\n\tif(Math.floor(quotient) > 0)\r\n\t{\r\n\t\tmaxCounter = Math.floor(quotient);\r\n\t\t\r\n\t\tif((quotient - maxCounter) > 0)\r\n\t\t\tmaxCounter++;\r\n\t}\r\n\t//endregion\r\n\t\r\n\t//region Create an array of \"kdfWithCounter\"\r\n\tfor(let i = 1; i <= maxCounter; i++)\r\n\t\tkdfArray.push(kdfWithCounter(hashFunction, Zbuffer, i, SharedInfo));\r\n\t//endregion\r\n\t\r\n\t//region Return combined digest with specified length\r\n\treturn Promise.all(kdfArray).then(incomingResult =>\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet combinedBuffer = new ArrayBuffer(0);\r\n\t\tlet currentCounter = 1;\r\n\t\tlet found = true;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Combine all buffer together\r\n\t\twhile(found)\r\n\t\t{\r\n\t\t\tfound = false;\r\n\t\t\t\r\n\t\t\tfor(const result of incomingResult)\r\n\t\t\t{\r\n\t\t\t\tif(result.counter === currentCounter)\r\n\t\t\t\t{\r\n\t\t\t\t\tcombinedBuffer = utilConcatBuf(combinedBuffer, result.result);\r\n\t\t\t\t\tfound = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcurrentCounter++;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create output buffer with specified length\r\n\t\tkeydatalen >>= 3; // Divide by 8 since \"keydatalen\" is in bits\r\n\t\t\r\n\t\tif(combinedBuffer.byteLength > keydatalen)\r\n\t\t{\r\n\t\t\tconst newBuffer = new ArrayBuffer(keydatalen);\r\n\t\t\tconst newView = new Uint8Array(newBuffer);\r\n\t\t\tconst combinedView = new Uint8Array(combinedBuffer);\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < keydatalen; i++)\r\n\t\t\t\tnewView[i] = combinedView[i];\r\n\t\t\t\r\n\t\t\treturn newBuffer;\r\n\t\t}\r\n\t\t\r\n\t\treturn combinedBuffer; // Since the situation when \"combinedBuffer.byteLength < keydatalen\" here we have only \"combinedBuffer.byteLength === keydatalen\"\r\n\t\t//endregion\r\n\t});\r\n\t//endregion\r\n}\r\n//**************************************************************************************\r\n//endregion\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, isEqualBuffer, clearProps } from \"pvutils\";\r\nimport { stringPrep } from \"./common.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class AttributeTypeAndValue\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for AttributeTypeAndValue class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc type\r\n\t\t */\r\n\t\tthis.type = getParametersValue(parameters, \"type\", AttributeTypeAndValue.defaultValues(\"type\"));\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc Value of the AttributeTypeAndValue class\r\n\t\t */\r\n\t\tthis.value = getParametersValue(parameters, \"value\", AttributeTypeAndValue.defaultValues(\"value\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"value\":\r\n\t\t\t\treturn {};\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for AttributeTypeAndValue class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * AttributeTypeAndValue ::= Sequence {\r\n\t * type AttributeType,\r\n\t * value AttributeValue }\r\n\t *\r\n\t * AttributeType ::= OBJECT IDENTIFIER\r\n\t *\r\n\t * AttributeValue ::= ANY -- DEFINED BY AttributeType\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName] Name for entire block\r\n\t\t * @property {string} [type] Name for \"type\" element\r\n\t\t * @property {string} [value] Name for \"value\" element\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.type || \"\") }),\r\n\t\t\t\tnew asn1js.Any({ name: (names.value || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\tstatic blockName()\r\n\t{\r\n\t\treturn \"AttributeTypeAndValue\";\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"type\",\r\n\t\t\t\"typeValue\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAttributeTypeAndValue.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\ttype: \"type\",\r\n\t\t\t\t\tvalue: \"typeValue\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AttributeTypeAndValue\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.type = asn1.result.type.valueBlock.toString();\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tthis.value = asn1.result.typeValue;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.type }),\r\n\t\t\t\tthis.value\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\ttype: this.type\r\n\t\t};\r\n\r\n\t\tif(Object.keys(this.value).length !== 0)\r\n\t\t\t_object.value = this.value.toJSON();\r\n\t\telse\r\n\t\t\t_object.value = this.value;\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare two AttributeTypeAndValue values, or AttributeTypeAndValue with ArrayBuffer value\r\n\t * @param {(AttributeTypeAndValue|ArrayBuffer)} compareTo The value compare to current\r\n\t * @returns {boolean}\r\n\t */\r\n\tisEqual(compareTo)\r\n\t{\r\n\t\tconst stringBlockNames = [\r\n\t\t\tasn1js.Utf8String.blockName(),\r\n\t\t\tasn1js.BmpString.blockName(),\r\n\t\t\tasn1js.UniversalString.blockName(),\r\n\t\t\tasn1js.NumericString.blockName(),\r\n\t\t\tasn1js.PrintableString.blockName(),\r\n\t\t\tasn1js.TeletexString.blockName(),\r\n\t\t\tasn1js.VideotexString.blockName(),\r\n\t\t\tasn1js.IA5String.blockName(),\r\n\t\t\tasn1js.GraphicString.blockName(),\r\n\t\t\tasn1js.VisibleString.blockName(),\r\n\t\t\tasn1js.GeneralString.blockName(),\r\n\t\t\tasn1js.CharacterString.blockName()\r\n\t\t];\r\n\r\n\t\tif(compareTo.constructor.blockName() === AttributeTypeAndValue.blockName())\r\n\t\t{\r\n\t\t\tif(this.type !== compareTo.type)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t//region Check we do have both strings\r\n\t\t\tlet isString = [false, false];\r\n\t\t\tconst thisName = this.value.constructor.blockName();\r\n\t\t\tfor(const name of stringBlockNames)\r\n\t\t\t{\r\n\t\t\t\tif(thisName === name)\r\n\t\t\t\t{\r\n\t\t\t\t\tisString[0] = true;\r\n\t\t\t\t}\r\n\t\t\t\tif(compareTo.value.constructor.blockName() === name)\r\n\t\t\t\t{\r\n\t\t\t\t\tisString[1] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(isString[0] ^ isString[1])\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tisString = (isString[0] && isString[1]);\r\n\t\t\t//endregion\r\n\r\n\t\t\tif(isString)\r\n\t\t\t{\r\n\t\t\t\tconst value1 = stringPrep(this.value.valueBlock.value);\r\n\t\t\t\tconst value2 = stringPrep(compareTo.value.valueBlock.value);\r\n\r\n\t\t\t\tif(value1.localeCompare(value2) !== 0)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\telse // Comparing as two ArrayBuffers\r\n\t\t\t{\r\n\t\t\t\tif(isEqualBuffer(this.value.valueBeforeDecode, compareTo.value.valueBeforeDecode) === false)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(compareTo instanceof ArrayBuffer)\r\n\t\t\treturn isEqualBuffer(this.value.valueBeforeDecode, compareTo);\r\n\r\n\t\treturn false;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, isEqualBuffer, clearProps } from \"pvutils\";\r\nimport AttributeTypeAndValue from \"./AttributeTypeAndValue.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class RelativeDistinguishedNames\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for RelativeDistinguishedNames class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t * @property {Array.} [typesAndValues] Array of \"type and value\" objects\r\n\t * @property {ArrayBuffer} [valueBeforeDecode] Value of the RDN before decoding from schema\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc Array of \"type and value\" objects\r\n\t\t */\r\n\t\tthis.typesAndValues = getParametersValue(parameters, \"typesAndValues\", RelativeDistinguishedNames.defaultValues(\"typesAndValues\"));\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc Value of the RDN before decoding from schema\r\n\t\t */\r\n\t\tthis.valueBeforeDecode = getParametersValue(parameters, \"valueBeforeDecode\", RelativeDistinguishedNames.defaultValues(\"valueBeforeDecode\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"typesAndValues\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"valueBeforeDecode\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RelativeDistinguishedNames class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"typesAndValues\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tcase \"valueBeforeDecode\":\r\n\t\t\t\treturn (memberValue.byteLength === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RelativeDistinguishedNames class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * RDNSequence ::= Sequence OF RelativeDistinguishedName\r\n\t *\r\n\t * RelativeDistinguishedName ::=\r\n\t * SET SIZE (1..MAX) OF AttributeTypeAndValue\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName] Name for entire block\r\n\t\t * @property {string} [repeatedSequence] Name for \"repeatedSequence\" block\r\n\t\t * @property {string} [repeatedSet] Name for \"repeatedSet\" block\r\n\t\t * @property {string} [typeAndValue] Name for \"typeAndValue\" block\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.repeatedSequence || \"\"),\r\n\t\t\t\t\tvalue: new asn1js.Set({\r\n\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\t\tname: (names.repeatedSet || \"\"),\r\n\t\t\t\t\t\t\t\tvalue: AttributeTypeAndValue.schema(names.typeAndValue || {})\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"RDN\",\r\n\t\t\t\"typesAndValues\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tRelativeDistinguishedNames.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"RDN\",\r\n\t\t\t\t\trepeatedSet: \"typesAndValues\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for RelativeDistinguishedNames\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"typesAndValues\" in asn1.result) // Could be a case when there is no \"types and values\"\r\n\t\t\tthis.typesAndValues = Array.from(asn1.result.typesAndValues, element => new AttributeTypeAndValue({ schema: element }));\r\n\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tthis.valueBeforeDecode = asn1.result.RDN.valueBeforeDecode;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Decode stored TBS value\r\n\t\tif(this.valueBeforeDecode.byteLength === 0) // No stored encoded array, create \"from scratch\"\r\n\t\t{\r\n\t\t\treturn (new asn1js.Sequence({\r\n\t\t\t\tvalue: [new asn1js.Set({\r\n\t\t\t\t\tvalue: Array.from(this.typesAndValues, element => element.toSchema())\r\n\t\t\t\t})]\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\tconst asn1 = asn1js.fromBER(this.valueBeforeDecode);\r\n\t\t//endregion\r\n\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn asn1.result;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\ttypesAndValues: Array.from(this.typesAndValues, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare two RDN values, or RDN with ArrayBuffer value\r\n\t * @param {(RelativeDistinguishedNames|ArrayBuffer)} compareTo The value compare to current\r\n\t * @returns {boolean}\r\n\t */\r\n\tisEqual(compareTo)\r\n\t{\r\n\t\tif(compareTo instanceof RelativeDistinguishedNames)\r\n\t\t{\r\n\t\t\tif(this.typesAndValues.length !== compareTo.typesAndValues.length)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tfor(const [index, typeAndValue] of this.typesAndValues.entries())\r\n\t\t\t{\r\n\t\t\t\tif(typeAndValue.isEqual(compareTo.typesAndValues[index]) === false)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(compareTo instanceof ArrayBuffer)\r\n\t\t\treturn isEqualBuffer(this.valueBeforeDecode, compareTo);\r\n\r\n\t\treturn false;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\n//**************************************************************************************\n//region Additional asn1js schema elements existing inside GeneralName schema\n//**************************************************************************************\n/**\n * Schema for \"builtInStandardAttributes\" of \"ORAddress\"\n * @param {Object} parameters\n * @property {Object} [names]\n * @param {boolean} optional\n * @returns {Sequence}\n */\nfunction builtInStandardAttributes(parameters = {}, optional = false)\n{\n\t//builtInStandardAttributes ::= Sequence {\n\t// country-name CountryName OPTIONAL,\n\t// administration-domain-name AdministrationDomainName OPTIONAL,\n\t// network-address [0] IMPLICIT NetworkAddress OPTIONAL,\n\t// terminal-identifier [1] IMPLICIT TerminalIdentifier OPTIONAL,\n\t// private-domain-name [2] PrivateDomainName OPTIONAL,\n\t// organization-name [3] IMPLICIT OrganizationName OPTIONAL,\n\t// numeric-user-identifier [4] IMPLICIT NumericUserIdentifier OPTIONAL,\n\t// personal-name [5] IMPLICIT PersonalName OPTIONAL,\n\t// organizational-unit-names [6] IMPLICIT OrganizationalUnitNames OPTIONAL }\n\n\t/**\n\t * @type {Object}\n\t * @property {string} [country_name]\n\t * @property {string} [administration_domain_name]\n\t * @property {string} [network_address]\n\t * @property {string} [terminal_identifier]\n\t * @property {string} [private_domain_name]\n\t * @property {string} [organization_name]\n\t * @property {string} [numeric_user_identifier]\n\t * @property {string} [personal_name]\n\t * @property {string} [organizational_unit_names]\n\t */\n\tconst names = getParametersValue(parameters, \"names\", {});\n\n\treturn (new asn1js.Sequence({\n\t\toptional,\n\t\tvalue: [\n\t\t\tnew asn1js.Constructed({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 2, // APPLICATION-SPECIFIC\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tname: (names.country_name || \"\"),\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\tnew asn1js.NumericString(),\n\t\t\t\t\t\t\tnew asn1js.PrintableString()\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\tnew asn1js.Constructed({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 2, // APPLICATION-SPECIFIC\n\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t},\n\t\t\t\tname: (names.administration_domain_name || \"\"),\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\tnew asn1js.NumericString(),\n\t\t\t\t\t\t\tnew asn1js.PrintableString()\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\tnew asn1js.Primitive({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tname: (names.network_address || \"\"),\n\t\t\t\tisHexOnly: true\n\t\t\t}),\n\t\t\tnew asn1js.Primitive({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tname: (names.terminal_identifier || \"\"),\n\t\t\t\tisHexOnly: true\n\t\t\t}),\n\t\t\tnew asn1js.Constructed({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t},\n\t\t\t\tname: (names.private_domain_name || \"\"),\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\tnew asn1js.NumericString(),\n\t\t\t\t\t\t\tnew asn1js.PrintableString()\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\tnew asn1js.Primitive({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 3 // [3]\n\t\t\t\t},\n\t\t\t\tname: (names.organization_name || \"\"),\n\t\t\t\tisHexOnly: true\n\t\t\t}),\n\t\t\tnew asn1js.Primitive({\n\t\t\t\toptional: true,\n\t\t\t\tname: (names.numeric_user_identifier || \"\"),\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 4 // [4]\n\t\t\t\t},\n\t\t\t\tisHexOnly: true\n\t\t\t}),\n\t\t\tnew asn1js.Constructed({\n\t\t\t\toptional: true,\n\t\t\t\tname: (names.personal_name || \"\"),\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 5 // [5]\n\t\t\t\t},\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisHexOnly: true\n\t\t\t\t\t}),\n\t\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisHexOnly: true\n\t\t\t\t\t}),\n\t\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisHexOnly: true\n\t\t\t\t\t}),\n\t\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\ttagNumber: 3 // [3]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisHexOnly: true\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\tnew asn1js.Constructed({\n\t\t\t\toptional: true,\n\t\t\t\tname: (names.organizational_unit_names || \"\"),\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 6 // [6]\n\t\t\t\t},\n\t\t\t\tvalue: [\n\t\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\t\tvalue: new asn1js.PrintableString()\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t})\n\t\t]\n\t}));\n}\n//**************************************************************************************\n/**\n * Schema for \"builtInDomainDefinedAttributes\" of \"ORAddress\"\n * @param {boolean} optional\n * @returns {Sequence}\n */\nfunction builtInDomainDefinedAttributes(optional = false)\n{\n\treturn (new asn1js.Sequence({\n\t\toptional,\n\t\tvalue: [\n\t\t\tnew asn1js.PrintableString(),\n\t\t\tnew asn1js.PrintableString()\n\t\t]\n\t}));\n}\n//**************************************************************************************\n/**\n * Schema for \"builtInDomainDefinedAttributes\" of \"ORAddress\"\n * @param {boolean} optional\n * @returns {Set}\n */\nfunction extensionAttributes(optional = false)\n{\n\treturn (new asn1js.Set({\n\t\toptional,\n\t\tvalue: [\n\t\t\tnew asn1js.Primitive({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tisHexOnly: true\n\t\t\t}),\n\t\t\tnew asn1js.Constructed({\n\t\t\t\toptional: true,\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalue: [new asn1js.Any()]\n\t\t\t})\n\t\t]\n\t}));\n}\n//**************************************************************************************\n//endregion\n//**************************************************************************************\n/**\n * Class from RFC5280\n */\nexport default class GeneralName\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for GeneralName class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t * @property {number} [type] value type - from a tagged value (0 for \"otherName\", 1 for \"rfc822Name\" etc.)\n\t * @property {Object} [value] asn1js object having GeneralName value (type depends on \"type\" value)\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {number}\n\t\t * @desc value type - from a tagged value (0 for \"otherName\", 1 for \"rfc822Name\" etc.)\n\t\t */\n\t\tthis.type = getParametersValue(parameters, \"type\", GeneralName.defaultValues(\"type\"));\n\t\t/**\n\t\t * @type {Object}\n\t\t * @desc asn1js object having GeneralName value (type depends on \"type\" value)\n\t\t */\n\t\tthis.value = getParametersValue(parameters, \"value\", GeneralName.defaultValues(\"value\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"type\":\n\t\t\t\treturn 9;\n\t\t\tcase \"value\":\n\t\t\t\treturn {};\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for GeneralName class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Compare values with default values for all class members\n\t * @param {string} memberName String name for a class member\n\t * @param {*} memberValue Value to compare with default value\n\t */\n\tstatic compareWithDefault(memberName, memberValue)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"type\":\n\t\t\t\treturn (memberValue === GeneralName.defaultValues(memberName));\n\t\t\tcase \"value\":\n\t\t\t\treturn (Object.keys(memberValue).length === 0);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for GeneralName class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * GeneralName ::= Choice {\n\t * otherName [0] OtherName,\n\t * rfc822Name [1] IA5String,\n\t * dNSName [2] IA5String,\n\t * x400Address [3] ORAddress,\n\t * directoryName [4] value,\n\t * ediPartyName [5] EDIPartyName,\n\t * uniformResourceIdentifier [6] IA5String,\n\t * iPAddress [7] OCTET STRING,\n\t * registeredID [8] OBJECT IDENTIFIER }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {Object} [directoryName]\n\t\t * @property {Object} [builtInStandardAttributes]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Choice({\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.ObjectIdentifier(),\n\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: [new asn1js.Any()]\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 3 // [3]\n\t\t\t\t\t},\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tbuiltInStandardAttributes((names.builtInStandardAttributes || {}), false),\n\t\t\t\t\t\tbuiltInDomainDefinedAttributes(true),\n\t\t\t\t\t\textensionAttributes(true)\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 4 // [4]\n\t\t\t\t\t},\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tvalue: [RelativeDistinguishedNames.schema(names.directoryName || {})]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 5 // [5]\n\t\t\t\t\t},\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\toptional: true,\n\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\t\t\t\tnew asn1js.TeletexString(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.PrintableString(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.UniversalString(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.Utf8String(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.BmpString()\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\t\t\t\tnew asn1js.TeletexString(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.PrintableString(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.UniversalString(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.Utf8String(),\n\t\t\t\t\t\t\t\t\t\tnew asn1js.BmpString()\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 6 // [6]\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 7 // [7]\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.blockName || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 8 // [8]\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"blockName\",\n\t\t\t\"otherName\",\n\t\t\t\"rfc822Name\",\n\t\t\t\"dNSName\",\n\t\t\t\"x400Address\",\n\t\t\t\"directoryName\",\n\t\t\t\"ediPartyName\",\n\t\t\t\"uniformResourceIdentifier\",\n\t\t\t\"iPAddress\",\n\t\t\t\"registeredID\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tGeneralName.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tblockName: \"blockName\",\n\t\t\t\t\totherName: \"otherName\",\n\t\t\t\t\trfc822Name: \"rfc822Name\",\n\t\t\t\t\tdNSName: \"dNSName\",\n\t\t\t\t\tx400Address: \"x400Address\",\n\t\t\t\t\tdirectoryName: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"directoryName\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tediPartyName: \"ediPartyName\",\n\t\t\t\t\tuniformResourceIdentifier: \"uniformResourceIdentifier\",\n\t\t\t\t\tiPAddress: \"iPAddress\",\n\t\t\t\t\tregisteredID: \"registeredID\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for GeneralName\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tthis.type = asn1.result.blockName.idBlock.tagNumber;\n\n\t\tswitch(this.type)\n\t\t{\n\t\t\tcase 0: // otherName\n\t\t\t\tthis.value = asn1.result.blockName;\n\t\t\t\tbreak;\n\t\t\tcase 1: // rfc822Name + dNSName + uniformResourceIdentifier\n\t\t\tcase 2:\n\t\t\tcase 6:\n\t\t\t\t{\n\t\t\t\t\tconst value = asn1.result.blockName;\n\n\t\t\t\t\tvalue.idBlock.tagClass = 1; // UNIVERSAL\n\t\t\t\t\tvalue.idBlock.tagNumber = 22; // IA5STRING\n\n\t\t\t\t\tconst valueBER = value.toBER(false);\n\n\t\t\t\t\tthis.value = asn1js.fromBER(valueBER).result.valueBlock.value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 3: // x400Address\n\t\t\t\tthis.value = asn1.result.blockName;\n\t\t\t\tbreak;\n\t\t\tcase 4: // directoryName\n\t\t\t\tthis.value = new RelativeDistinguishedNames({ schema: asn1.result.directoryName });\n\t\t\t\tbreak;\n\t\t\tcase 5: // ediPartyName\n\t\t\t\tthis.value = asn1.result.ediPartyName;\n\t\t\t\tbreak;\n\t\t\tcase 7: // iPAddress\n\t\t\t\tthis.value = new asn1js.OctetString({ valueHex: asn1.result.blockName.valueBlock.valueHex });\n\t\t\t\tbreak;\n\t\t\tcase 8: // registeredID\n\t\t\t\t{\n\t\t\t\t\tconst value = asn1.result.blockName;\n\n\t\t\t\t\tvalue.idBlock.tagClass = 1; // UNIVERSAL\n\t\t\t\t\tvalue.idBlock.tagNumber = 6; // ObjectIdentifier\n\n\t\t\t\t\tconst valueBER = value.toBER(false);\n\n\t\t\t\t\tthis.value = asn1js.fromBER(valueBER).result.valueBlock.toString(); // Getting a string representation of the ObjectIdentifier\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\tswitch(this.type)\n\t\t{\n\t\t\tcase 0:\n\t\t\tcase 3:\n\t\t\tcase 5:\n\t\t\t\treturn new asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: this.type\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\tcase 1:\n\t\t\tcase 2:\n\t\t\tcase 6:\n\t\t\t\t{\n\t\t\t\t\tconst value = new asn1js.IA5String({ value: this.value });\n\n\t\t\t\t\tvalue.idBlock.tagClass = 3;\n\t\t\t\t\tvalue.idBlock.tagNumber = this.type;\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\tcase 4:\n\t\t\t\treturn new asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 4\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [this.value.toSchema()]\n\t\t\t\t});\n\t\t\tcase 7:\n\t\t\t\t{\n\t\t\t\t\tconst value = this.value;\n\n\t\t\t\t\tvalue.idBlock.tagClass = 3;\n\t\t\t\t\tvalue.idBlock.tagNumber = this.type;\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\tcase 8:\n\t\t\t\t{\n\t\t\t\t\tconst value = new asn1js.ObjectIdentifier({ value: this.value });\n\n\t\t\t\t\tvalue.idBlock.tagClass = 3;\n\t\t\t\t\tvalue.idBlock.tagNumber = this.type;\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn GeneralName.schema();\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst _object = {\n\t\t\ttype: this.type,\n\t\t\tvalue: \"\"\n\t\t};\n\n\t\tif((typeof this.value) === \"string\")\n\t\t\t_object.value = this.value;\n\t\telse\n\t\t{\n\t\t\ttry\n\t\t\t{\n\t\t\t\t_object.value = this.value.toJSON();\n\t\t\t}\n\t\t\tcatch(ex){}\n\t\t}\n\n\t\treturn _object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport GeneralName from \"./GeneralName.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class AccessDescription\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for AccessDescription class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc The type and format of the information are specified by the accessMethod field. This profile defines two accessMethod OIDs: id-ad-caIssuers and id-ad-ocsp\r\n\t\t */\r\n\t\tthis.accessMethod = getParametersValue(parameters, \"accessMethod\", AccessDescription.defaultValues(\"accessMethod\"));\r\n\t\t/**\r\n\t\t * @type {GeneralName}\r\n\t\t * @desc The accessLocation field specifies the location of the information\r\n\t\t */\r\n\t\tthis.accessLocation = getParametersValue(parameters, \"accessLocation\", AccessDescription.defaultValues(\"accessLocation\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"accessMethod\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"accessLocation\":\r\n\t\t\t\treturn new GeneralName();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for AccessDescription class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * AccessDescription ::= SEQUENCE {\r\n\t * accessMethod OBJECT IDENTIFIER,\r\n\t * accessLocation GeneralName }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [accessMethod]\r\n\t\t * @property {string} [accessLocation]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.accessMethod || \"\") }),\r\n\t\t\t\tGeneralName.schema(names.accessLocation || {})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"accessMethod\",\r\n\t\t\t\"accessLocation\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAccessDescription.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\taccessMethod: \"accessMethod\",\r\n\t\t\t\t\taccessLocation: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"accessLocation\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AccessDescription\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.accessMethod = asn1.result.accessMethod.valueBlock.toString();\r\n\t\tthis.accessLocation = new GeneralName({ schema: asn1.result.accessLocation });\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.accessMethod }),\r\n\t\t\t\tthis.accessLocation.toSchema()\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\taccessMethod: this.accessMethod,\r\n\t\t\taccessLocation: this.accessLocation.toJSON()\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC3161. Accuracy represents the time deviation around the UTC time contained in GeneralizedTime.\r\n */\r\nexport default class Accuracy\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for Accuracy class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\tif(\"seconds\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number}\r\n\t\t\t * @desc seconds\r\n\t\t\t */\r\n\t\t\tthis.seconds = getParametersValue(parameters, \"seconds\", Accuracy.defaultValues(\"seconds\"));\r\n\t\t\r\n\t\tif(\"millis\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number}\r\n\t\t\t * @desc millis\r\n\t\t\t */\r\n\t\t\tthis.millis = getParametersValue(parameters, \"millis\", Accuracy.defaultValues(\"millis\"));\r\n\t\t\r\n\t\tif(\"micros\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number}\r\n\t\t\t * @desc micros\r\n\t\t\t */\r\n\t\t\tthis.micros = getParametersValue(parameters, \"micros\", Accuracy.defaultValues(\"micros\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"seconds\":\r\n\t\t\tcase \"millis\":\r\n\t\t\tcase \"micros\":\r\n\t\t\t\treturn 0;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Accuracy class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"seconds\":\r\n\t\t\tcase \"millis\":\r\n\t\t\tcase \"micros\":\r\n\t\t\t\treturn (memberValue === Accuracy.defaultValues(memberName));\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Accuracy class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * Accuracy ::= SEQUENCE {\r\n\t * seconds INTEGER OPTIONAL,\r\n\t * millis [0] INTEGER (1..999) OPTIONAL,\r\n\t * micros [1] INTEGER (1..999) OPTIONAL }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [seconds]\r\n\t\t * @property {string} [millis]\r\n\t\t * @property {string} [micros]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\toptional: true,\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tname: (names.seconds || \"\")\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.millis || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.micros || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"seconds\",\r\n\t\t\t\"millis\",\r\n\t\t\t\"micros\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAccuracy.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tseconds: \"seconds\",\r\n\t\t\t\t\tmillis: \"millis\",\r\n\t\t\t\t\tmicros: \"micros\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Accuracy\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"seconds\" in asn1.result)\r\n\t\t\tthis.seconds = asn1.result.seconds.valueBlock.valueDec;\r\n\r\n\t\tif(\"millis\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst intMillis = new asn1js.Integer({ valueHex: asn1.result.millis.valueBlock.valueHex });\r\n\t\t\tthis.millis = intMillis.valueBlock.valueDec;\r\n\t\t}\r\n\r\n\t\tif(\"micros\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst intMicros = new asn1js.Integer({ valueHex: asn1.result.micros.valueBlock.valueHex });\r\n\t\t\tthis.micros = intMicros.valueBlock.valueDec;\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array of output sequence\r\n\t\tconst outputArray = [];\r\n\r\n\t\tif(\"seconds\" in this)\r\n\t\t\toutputArray.push(new asn1js.Integer({ value: this.seconds }));\r\n\r\n\t\tif(\"millis\" in this)\r\n\t\t{\r\n\t\t\tconst intMillis = new asn1js.Integer({ value: this.millis });\r\n\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: intMillis.valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\tif(\"micros\" in this)\r\n\t\t{\r\n\t\t\tconst intMicros = new asn1js.Integer({ value: this.micros });\r\n\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: intMicros.valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {};\r\n\r\n\t\tif(\"seconds\" in this)\r\n\t\t\t_object.seconds = this.seconds;\r\n\r\n\t\tif(\"millis\" in this)\r\n\t\t\t_object.millis = this.millis;\r\n\r\n\t\tif(\"micros\" in this)\r\n\t\t\t_object.micros = this.micros;\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport GeneralName from \"./GeneralName.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class AltName\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for AltName class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc Array of alternative names in GeneralName type\r\n\t\t */\r\n\t\tthis.altNames = getParametersValue(parameters, \"altNames\", AltName.defaultValues(\"altNames\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"altNames\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for AltName class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * AltName ::= GeneralNames\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [altNames]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.altNames || \"\"),\r\n\t\t\t\t\tvalue: GeneralName.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"altNames\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAltName.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\taltNames: \"altNames\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AltName\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"altNames\" in asn1.result)\r\n\t\t\tthis.altNames = Array.from(asn1.result.altNames, element => new GeneralName({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.altNames, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\taltNames: Array.from(this.altNames, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class Time\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for Time class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t * @property {number} [type] 0 - UTCTime; 1 - GeneralizedTime; 2 - empty value\r\n\t * @property {Date} [value] Value of the TIME class\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc 0 - UTCTime; 1 - GeneralizedTime; 2 - empty value\r\n\t\t */\r\n\t\tthis.type = getParametersValue(parameters, \"type\", Time.defaultValues(\"type\"));\r\n\t\t/**\r\n\t\t * @type {Date}\r\n\t\t * @desc Value of the TIME class\r\n\t\t */\r\n\t\tthis.value = getParametersValue(parameters, \"value\", Time.defaultValues(\"value\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"value\":\r\n\t\t\t\treturn new Date(0, 0, 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Time class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * Time ::= CHOICE {\r\n * utcTime UTCTime,\r\n * generalTime GeneralizedTime }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @param {boolean} optional Flag that current schema should be optional\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {}, optional = false)\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [utcTimeName] Name for \"utcTimeName\" choice\r\n\t\t * @property {string} [generalTimeName] Name for \"generalTimeName\" choice\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Choice({\r\n\t\t\toptional,\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.UTCTime({ name: (names.utcTimeName || \"\") }),\r\n\t\t\t\tnew asn1js.GeneralizedTime({ name: (names.generalTimeName || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"utcTimeName\",\r\n\t\t\t\"generalTimeName\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema, schema, Time.schema({\r\n\t\t\tnames: {\r\n\t\t\t\tutcTimeName: \"utcTimeName\",\r\n\t\t\t\tgeneralTimeName: \"generalTimeName\"\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Time\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"utcTimeName\" in asn1.result)\r\n\t\t{\r\n\t\t\tthis.type = 0;\r\n\t\t\tthis.value = asn1.result.utcTimeName.toDate();\r\n\t\t}\r\n\t\tif(\"generalTimeName\" in asn1.result)\r\n\t\t{\r\n\t\t\tthis.type = 1;\r\n\t\t\tthis.value = asn1.result.generalTimeName.toDate();\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\tlet result = {};\r\n\r\n\t\tif(this.type === 0)\r\n\t\t\tresult = new asn1js.UTCTime({ valueDate: this.value });\r\n\t\tif(this.type === 1)\r\n\t\t\tresult = new asn1js.GeneralizedTime({ valueDate: this.value });\r\n\r\n\t\treturn result;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\ttype: this.type,\r\n\t\t\tvalue: this.value\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport Attribute from \"./Attribute.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class SubjectDirectoryAttributes\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for SubjectDirectoryAttributes class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc attributes\r\n\t\t */\r\n\t\tthis.attributes = getParametersValue(parameters, \"attributes\", SubjectDirectoryAttributes.defaultValues(\"attributes\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"attributes\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SubjectDirectoryAttributes class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [utcTimeName] Name for \"utcTimeName\" choice\r\n\t\t * @property {string} [generalTimeName] Name for \"generalTimeName\" choice\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.attributes || \"\"),\r\n\t\t\t\t\tvalue: Attribute.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"attributes\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tSubjectDirectoryAttributes.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tattributes: \"attributes\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SubjectDirectoryAttributes\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.attributes = Array.from(asn1.result.attributes, element => new Attribute({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.attributes, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tattributes: Array.from(this.attributes, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class PrivateKeyUsagePeriod\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PrivateKeyUsagePeriod class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\tif(\"notBefore\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Date}\r\n\t\t\t * @desc notBefore\r\n\t\t\t */\r\n\t\t\tthis.notBefore = getParametersValue(parameters, \"notBefore\", PrivateKeyUsagePeriod.defaultValues(\"notBefore\"));\r\n\r\n\t\tif(\"notAfter\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Date}\r\n\t\t\t * @desc notAfter\r\n\t\t\t */\r\n\t\t\tthis.notAfter = getParametersValue(parameters, \"notAfter\", PrivateKeyUsagePeriod.defaultValues(\"notAfter\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"notBefore\":\r\n\t\t\t\treturn new Date();\r\n\t\t\tcase \"notAfter\":\r\n\t\t\t\treturn new Date();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PrivateKeyUsagePeriod class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PrivateKeyUsagePeriod OID ::= 2.5.29.16\r\n\t *\r\n\t * PrivateKeyUsagePeriod ::= SEQUENCE {\r\n\t * notBefore [0] GeneralizedTime OPTIONAL,\r\n\t * notAfter [1] GeneralizedTime OPTIONAL }\r\n\t * -- either notBefore or notAfter MUST be present\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [notBefore]\r\n\t\t * @property {string} [notAfter]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.notBefore || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.notAfter || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"notBefore\",\r\n\t\t\t\"notAfter\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPrivateKeyUsagePeriod.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tnotBefore: \"notBefore\",\r\n\t\t\t\t\tnotAfter: \"notAfter\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PrivateKeyUsagePeriod\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"notBefore\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst localNotBefore = new asn1js.GeneralizedTime();\r\n\t\t\tlocalNotBefore.fromBuffer(asn1.result.notBefore.valueBlock.valueHex);\r\n\t\t\tthis.notBefore = localNotBefore.toDate();\r\n\t\t}\r\n\r\n\t\tif(\"notAfter\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst localNotAfter = new asn1js.GeneralizedTime({ valueHex: asn1.result.notAfter.valueBlock.valueHex });\r\n\t\t\tlocalNotAfter.fromBuffer(asn1.result.notAfter.valueBlock.valueHex);\r\n\t\t\tthis.notAfter = localNotAfter.toDate();\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(\"notBefore\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: (new asn1js.GeneralizedTime({ valueDate: this.notBefore })).valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"notAfter\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: (new asn1js.GeneralizedTime({ valueDate: this.notAfter })).valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {};\r\n\r\n\t\tif(\"notBefore\" in this)\r\n\t\t\tobject.notBefore = this.notBefore;\r\n\r\n\t\tif(\"notAfter\" in this)\r\n\t\t\tobject.notAfter = this.notAfter;\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class BasicConstraints\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for BasicConstraints class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t * @property {Object} [cA]\r\n\t * @property {Object} [pathLenConstraint]\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {boolean}\r\n\t\t * @desc cA\r\n\t\t */\r\n\t\tthis.cA = getParametersValue(parameters, \"cA\", false);\r\n\r\n\t\tif(\"pathLenConstraint\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number|Integer}\r\n\t\t\t * @desc pathLenConstraint\r\n\t\t\t */\r\n\t\t\tthis.pathLenConstraint = getParametersValue(parameters, \"pathLenConstraint\", 0);\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"cA\":\r\n\t\t\t\treturn false;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for BasicConstraints class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * BasicConstraints ::= SEQUENCE {\r\n\t * cA BOOLEAN DEFAULT FALSE,\r\n\t * pathLenConstraint INTEGER (0..MAX) OPTIONAL }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [cA]\r\n\t\t * @property {string} [pathLenConstraint]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Boolean({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tname: (names.cA || \"\")\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Integer({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tname: (names.pathLenConstraint || \"\")\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"cA\",\r\n\t\t\t\"pathLenConstraint\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tBasicConstraints.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tcA: \"cA\",\r\n\t\t\t\t\tpathLenConstraint: \"pathLenConstraint\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for BasicConstraints\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"cA\" in asn1.result)\r\n\t\t\tthis.cA = asn1.result.cA.valueBlock.value;\r\n\r\n\t\tif(\"pathLenConstraint\" in asn1.result)\r\n\t\t{\r\n\t\t\tif(asn1.result.pathLenConstraint.valueBlock.isHexOnly)\r\n\t\t\t\tthis.pathLenConstraint = asn1.result.pathLenConstraint;\r\n\t\t\telse\r\n\t\t\t\tthis.pathLenConstraint = asn1.result.pathLenConstraint.valueBlock.valueDec;\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(this.cA !== BasicConstraints.defaultValues(\"cA\"))\r\n\t\t\toutputArray.push(new asn1js.Boolean({ value: this.cA }));\r\n\t\t\r\n\t\tif(\"pathLenConstraint\" in this)\r\n\t\t{\r\n\t\t\tif(this.pathLenConstraint instanceof asn1js.Integer)\r\n\t\t\t\toutputArray.push(this.pathLenConstraint);\r\n\t\t\telse\r\n\t\t\t\toutputArray.push(new asn1js.Integer({ value: this.pathLenConstraint }));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {};\r\n\r\n\t\tif(this.cA !== BasicConstraints.defaultValues(\"cA\"))\r\n\t\t\tobject.cA = this.cA;\r\n\r\n\t\tif(\"pathLenConstraint\" in this)\r\n\t\t{\r\n\t\t\tif(this.pathLenConstraint instanceof asn1js.Integer)\r\n\t\t\t\tobject.pathLenConstraint = this.pathLenConstraint.toJSON();\r\n\t\t\telse\r\n\t\t\t\tobject.pathLenConstraint = this.pathLenConstraint;\r\n\t\t}\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport GeneralName from \"./GeneralName.js\";\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\n//**************************************************************************************\n/**\n * Class from RFC5280\n */\nexport default class IssuingDistributionPoint\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for IssuingDistributionPoint class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\tif(\"distributionPoint\" in parameters)\n\t\t\t/**\n\t\t\t * @type {Array.|RelativeDistinguishedNames}\n\t\t\t * @desc distributionPoint\n\t\t\t */\n\t\t\tthis.distributionPoint = getParametersValue(parameters, \"distributionPoint\", IssuingDistributionPoint.defaultValues(\"distributionPoint\"));\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @desc onlyContainsUserCerts\n\t\t */\n\t\tthis.onlyContainsUserCerts = getParametersValue(parameters, \"onlyContainsUserCerts\", IssuingDistributionPoint.defaultValues(\"onlyContainsUserCerts\"));\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @desc onlyContainsCACerts\n\t\t */\n\t\tthis.onlyContainsCACerts = getParametersValue(parameters, \"onlyContainsCACerts\", IssuingDistributionPoint.defaultValues(\"onlyContainsCACerts\"));\n\n\t\tif(\"onlySomeReasons\" in parameters)\n\t\t\t/**\n\t\t\t * @type {number}\n\t\t\t * @desc onlySomeReasons\n\t\t\t */\n\t\t\tthis.onlySomeReasons = getParametersValue(parameters, \"onlySomeReasons\", IssuingDistributionPoint.defaultValues(\"onlySomeReasons\"));\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @desc indirectCRL\n\t\t */\n\t\tthis.indirectCRL = getParametersValue(parameters, \"indirectCRL\", IssuingDistributionPoint.defaultValues(\"indirectCRL\"));\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @desc onlyContainsAttributeCerts\n\t\t */\n\t\tthis.onlyContainsAttributeCerts = getParametersValue(parameters, \"onlyContainsAttributeCerts\", IssuingDistributionPoint.defaultValues(\"onlyContainsAttributeCerts\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"distributionPoint\":\n\t\t\t\treturn [];\n\t\t\tcase \"onlyContainsUserCerts\":\n\t\t\t\treturn false;\n\t\t\tcase \"onlyContainsCACerts\":\n\t\t\t\treturn false;\n\t\t\tcase \"onlySomeReasons\":\n\t\t\t\treturn 0;\n\t\t\tcase \"indirectCRL\":\n\t\t\t\treturn false;\n\t\t\tcase \"onlyContainsAttributeCerts\":\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for IssuingDistributionPoint class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * IssuingDistributionPoint ::= SEQUENCE {\n\t * distributionPoint [0] DistributionPointName OPTIONAL,\n\t * onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,\n\t * onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,\n\t * onlySomeReasons [3] ReasonFlags OPTIONAL,\n\t * indirectCRL [4] BOOLEAN DEFAULT FALSE,\n\t * onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }\n\t *\n\t * ReasonFlags ::= BIT STRING {\n\t * unused (0),\n\t * keyCompromise (1),\n\t * cACompromise (2),\n\t * affiliationChanged (3),\n\t * superseded (4),\n\t * cessationOfOperation (5),\n\t * certificateHold (6),\n\t * privilegeWithdrawn (7),\n\t * aACompromise (8) }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [distributionPoint]\n\t\t * @property {string} [distributionPointNames]\n\t\t * @property {string} [onlyContainsUserCerts]\n\t\t * @property {string} [onlyContainsCACerts]\n\t\t * @property {string} [onlySomeReasons]\n\t\t * @property {string} [indirectCRL]\n\t\t * @property {string} [onlyContainsAttributeCerts]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\t\t\tname: (names.distributionPoint || \"\"),\n\t\t\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tvalue: [\n\t\t\t\t\t\t\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\t\t\t\t\t\t\tname: (names.distributionPointNames || \"\"),\n\t\t\t\t\t\t\t\t\t\t\tvalue: GeneralName.schema()\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\t\t\tname: (names.distributionPoint || \"\"),\n\t\t\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tvalue: RelativeDistinguishedNames.schema().valueBlock.value\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.onlyContainsUserCerts || \"\"),\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t}\n\t\t\t\t}), // IMPLICIT boolean value\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.onlyContainsCACerts || \"\"),\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t\t}\n\t\t\t\t}), // IMPLICIT boolean value\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.onlySomeReasons || \"\"),\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 3 // [3]\n\t\t\t\t\t}\n\t\t\t\t}), // IMPLICIT bitstring value\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.indirectCRL || \"\"),\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 4 // [4]\n\t\t\t\t\t}\n\t\t\t\t}), // IMPLICIT boolean value\n\t\t\t\tnew asn1js.Primitive({\n\t\t\t\t\tname: (names.onlyContainsAttributeCerts || \"\"),\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 5 // [5]\n\t\t\t\t\t}\n\t\t\t\t}) // IMPLICIT boolean value\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"distributionPoint\",\n\t\t\t\"distributionPointNames\",\n\t\t\t\"onlyContainsUserCerts\",\n\t\t\t\"onlyContainsCACerts\",\n\t\t\t\"onlySomeReasons\",\n\t\t\t\"indirectCRL\",\n\t\t\t\"onlyContainsAttributeCerts\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tIssuingDistributionPoint.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tdistributionPoint: \"distributionPoint\",\n\t\t\t\t\tdistributionPointNames: \"distributionPointNames\",\n\t\t\t\t\tonlyContainsUserCerts: \"onlyContainsUserCerts\",\n\t\t\t\t\tonlyContainsCACerts: \"onlyContainsCACerts\",\n\t\t\t\t\tonlySomeReasons: \"onlySomeReasons\",\n\t\t\t\t\tindirectCRL: \"indirectCRL\",\n\t\t\t\t\tonlyContainsAttributeCerts: \"onlyContainsAttributeCerts\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for IssuingDistributionPoint\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tif(\"distributionPoint\" in asn1.result)\n\t\t{\n\t\t\tswitch(true)\n\t\t\t{\n\t\t\t\tcase (asn1.result.distributionPoint.idBlock.tagNumber === 0): // GENERAL_NAMES variant\n\t\t\t\t\tthis.distributionPoint = Array.from(asn1.result.distributionPointNames, element => new GeneralName({ schema: element }));\n\t\t\t\t\tbreak;\n\t\t\t\tcase (asn1.result.distributionPoint.idBlock.tagNumber === 1): // RDN variant\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.distributionPoint = new RelativeDistinguishedNames({\n\t\t\t\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\t\t\t\tvalue: asn1.result.distributionPoint.valueBlock.value\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Unknown tagNumber for distributionPoint: {$asn1.result.distributionPoint.idBlock.tagNumber}\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(\"onlyContainsUserCerts\" in asn1.result)\n\t\t{\n\t\t\tconst view = new Uint8Array(asn1.result.onlyContainsUserCerts.valueBlock.valueHex);\n\t\t\tthis.onlyContainsUserCerts = (view[0] !== 0x00);\n\t\t}\n\t\t\n\t\tif(\"onlyContainsCACerts\" in asn1.result)\n\t\t{\n\t\t\tconst view = new Uint8Array(asn1.result.onlyContainsCACerts.valueBlock.valueHex);\n\t\t\tthis.onlyContainsCACerts = (view[0] !== 0x00);\n\t\t}\n\t\t\n\t\tif(\"onlySomeReasons\" in asn1.result)\n\t\t{\n\t\t\tconst view = new Uint8Array(asn1.result.onlySomeReasons.valueBlock.valueHex);\n\t\t\tthis.onlySomeReasons = view[0];\n\t\t}\n\t\t\n\t\tif(\"indirectCRL\" in asn1.result)\n\t\t{\n\t\t\tconst view = new Uint8Array(asn1.result.indirectCRL.valueBlock.valueHex);\n\t\t\tthis.indirectCRL = (view[0] !== 0x00);\n\t\t}\n\t\t\n\t\tif(\"onlyContainsAttributeCerts\" in asn1.result)\n\t\t{\n\t\t\tconst view = new Uint8Array(asn1.result.onlyContainsAttributeCerts.valueBlock.valueHex);\n\t\t\tthis.onlyContainsAttributeCerts = (view[0] !== 0x00);\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Create array for output sequence\n\t\tconst outputArray = [];\n\t\t\n\t\tif(\"distributionPoint\" in this)\n\t\t{\n\t\t\tlet value;\n\t\t\t\n\t\t\tif(this.distributionPoint instanceof Array)\n\t\t\t{\n\t\t\t\tvalue = new asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: Array.from(this.distributionPoint, element => element.toSchema())\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvalue = this.distributionPoint.toSchema();\n\t\t\t\t\n\t\t\t\tvalue.idBlock.tagClass = 3; // CONTEXT - SPECIFIC\n\t\t\t\tvalue.idBlock.tagNumber = 1; // [1]\n\t\t\t}\n\t\t\t\n\t\t\toutputArray.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tvalue: [value]\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(this.onlyContainsUserCerts !== IssuingDistributionPoint.defaultValues(\"onlyContainsUserCerts\"))\n\t\t{\n\t\t\toutputArray.push(new asn1js.Primitive({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalueHex: (new Uint8Array([0xFF])).buffer\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(this.onlyContainsCACerts !== IssuingDistributionPoint.defaultValues(\"onlyContainsCACerts\"))\n\t\t{\n\t\t\toutputArray.push(new asn1js.Primitive({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t},\n\t\t\t\tvalueHex: (new Uint8Array([0xFF])).buffer\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(\"onlySomeReasons\" in this)\n\t\t{\n\t\t\tconst buffer = new ArrayBuffer(1);\n\t\t\tconst view = new Uint8Array(buffer);\n\t\t\t\n\t\t\tview[0] = this.onlySomeReasons;\n\t\t\t\n\t\t\toutputArray.push(new asn1js.Primitive({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 3 // [3]\n\t\t\t\t},\n\t\t\t\tvalueHex: buffer\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(this.indirectCRL !== IssuingDistributionPoint.defaultValues(\"indirectCRL\"))\n\t\t{\n\t\t\toutputArray.push(new asn1js.Primitive({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 4 // [4]\n\t\t\t\t},\n\t\t\t\tvalueHex: (new Uint8Array([0xFF])).buffer\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(this.onlyContainsAttributeCerts !== IssuingDistributionPoint.defaultValues(\"onlyContainsAttributeCerts\"))\n\t\t{\n\t\t\toutputArray.push(new asn1js.Primitive({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 5 // [5]\n\t\t\t\t},\n\t\t\t\tvalueHex: (new Uint8Array([0xFF])).buffer\n\t\t\t}));\n\t\t}\n\t\t//endregion\n\t\t\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: outputArray\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst object = {};\n\t\t\n\t\tif(\"distributionPoint\" in this)\n\t\t{\n\t\t\tif(this.distributionPoint instanceof Array)\n\t\t\t\tobject.distributionPoint = Array.from(this.distributionPoint, element => element.toJSON());\n\t\t\telse\n\t\t\t\tobject.distributionPoint = this.distributionPoint.toJSON();\n\t\t}\n\t\t\n\t\tif(this.onlyContainsUserCerts !== IssuingDistributionPoint.defaultValues(\"onlyContainsUserCerts\"))\n\t\t\tobject.onlyContainsUserCerts = this.onlyContainsUserCerts;\n\t\t\n\t\tif(this.onlyContainsCACerts !== IssuingDistributionPoint.defaultValues(\"onlyContainsCACerts\"))\n\t\t\tobject.onlyContainsCACerts = this.onlyContainsCACerts;\n\t\t\n\t\tif(\"onlySomeReasons\" in this)\n\t\t\tobject.onlySomeReasons = this.onlySomeReasons;\n\t\t\n\t\tif(this.indirectCRL !== IssuingDistributionPoint.defaultValues(\"indirectCRL\"))\n\t\t\tobject.indirectCRL = this.indirectCRL;\n\t\t\n\t\tif(this.onlyContainsAttributeCerts !== IssuingDistributionPoint.defaultValues(\"onlyContainsAttributeCerts\"))\n\t\t\tobject.onlyContainsAttributeCerts = this.onlyContainsAttributeCerts;\n\t\t\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport GeneralName from \"./GeneralName.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class GeneralNames\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for GeneralNames class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc Array of \"general names\"\r\n\t\t */\r\n\t\tthis.names = getParametersValue(parameters, \"names\", GeneralNames.defaultValues(\"names\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"names\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for GeneralNames class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @param {boolean} [optional=false] Flag would be element optional or not\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {}, optional = false)\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} utcTimeName Name for \"utcTimeName\" choice\r\n\t\t * @property {string} generalTimeName Name for \"generalTimeName\" choice\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\toptional,\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.generalNames || \"\"),\r\n\t\t\t\t\tvalue: GeneralName.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"names\",\r\n\t\t\t\"generalNames\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tGeneralNames.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"names\",\r\n\t\t\t\t\tgeneralNames: \"generalNames\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for GeneralNames\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.names = Array.from(asn1.result.generalNames, element => new GeneralName({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.names, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tnames: Array.from(this.names, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport GeneralName from \"./GeneralName.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class GeneralSubtree\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for GeneralSubtree class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {GeneralName}\r\n\t\t * @desc base\r\n\t\t */\r\n\t\tthis.base = getParametersValue(parameters, \"base\", GeneralSubtree.defaultValues(\"base\"));\r\n\r\n\t\t/**\r\n\t\t * @type {number|Integer}\r\n\t\t * @desc base\r\n\t\t */\r\n\t\tthis.minimum = getParametersValue(parameters, \"minimum\", GeneralSubtree.defaultValues(\"minimum\"));\r\n\r\n\t\tif(\"maximum\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number|Integer}\r\n\t\t\t * @desc minimum\r\n\t\t\t */\r\n\t\t\tthis.maximum = getParametersValue(parameters, \"maximum\", GeneralSubtree.defaultValues(\"maximum\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"base\":\r\n\t\t\t\treturn new GeneralName();\r\n\t\t\tcase \"minimum\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"maximum\":\r\n\t\t\t\treturn 0;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for GeneralSubtree class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * GeneralSubtree ::= SEQUENCE {\r\n\t * base GeneralName,\r\n\t * minimum [0] BaseDistance DEFAULT 0,\r\n\t * maximum [1] BaseDistance OPTIONAL }\r\n\t *\r\n\t * BaseDistance ::= INTEGER (0..MAX)\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [base]\r\n\t\t * @property {string} [minimum]\r\n\t\t * @property {string} [maximum]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tGeneralName.schema(names.base || {}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [new asn1js.Integer({ name: (names.minimum || \"\") })]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [new asn1js.Integer({ name: (names.maximum || \"\") })]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"base\",\r\n\t\t\t\"minimum\",\r\n\t\t\t\"maximum\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tGeneralSubtree.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tbase: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"base\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tminimum: \"minimum\",\r\n\t\t\t\t\tmaximum: \"maximum\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for GeneralSubtree\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.base = new GeneralName({ schema: asn1.result.base });\r\n\r\n\t\tif(\"minimum\" in asn1.result)\r\n\t\t{\r\n\t\t\tif(asn1.result.minimum.valueBlock.isHexOnly)\r\n\t\t\t\tthis.minimum = asn1.result.minimum;\r\n\t\t\telse\r\n\t\t\t\tthis.minimum = asn1.result.minimum.valueBlock.valueDec;\r\n\t\t}\r\n\r\n\t\tif(\"maximum\" in asn1.result)\r\n\t\t{\r\n\t\t\tif(asn1.result.maximum.valueBlock.isHexOnly)\r\n\t\t\t\tthis.maximum = asn1.result.maximum;\r\n\t\t\telse\r\n\t\t\t\tthis.maximum = asn1.result.maximum.valueBlock.valueDec;\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(this.base.toSchema());\r\n\t\t\r\n\t\tif(this.minimum !== 0)\r\n\t\t{\r\n\t\t\tlet valueMinimum = 0;\r\n\t\t\t\r\n\t\t\tif(this.minimum instanceof asn1js.Integer)\r\n\t\t\t\tvalueMinimum = this.minimum;\r\n\t\t\telse\r\n\t\t\t\tvalueMinimum = new asn1js.Integer({ value: this.minimum });\r\n\t\t\t\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [valueMinimum]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"maximum\" in this)\r\n\t\t{\r\n\t\t\tlet valueMaximum = 0;\r\n\t\t\t\r\n\t\t\tif(this.maximum instanceof asn1js.Integer)\r\n\t\t\t\tvalueMaximum = this.maximum;\r\n\t\t\telse\r\n\t\t\t\tvalueMaximum = new asn1js.Integer({ value: this.maximum });\r\n\t\t\t\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [valueMaximum]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\tbase: this.base.toJSON()\r\n\t\t};\r\n\t\t\r\n\t\tif(this.minimum !== 0)\r\n\t\t{\r\n\t\t\tif((typeof this.minimum) === \"number\")\r\n\t\t\t\tobject.minimum = this.minimum;\r\n\t\t\telse\r\n\t\t\t\tobject.minimum = this.minimum.toJSON();\r\n\t\t}\r\n\t\t\r\n\t\tif(\"maximum\" in this)\r\n\t\t{\r\n\t\t\tif((typeof this.maximum) === \"number\")\r\n\t\t\t\tobject.maximum = this.maximum;\r\n\t\t\telse\r\n\t\t\t\tobject.maximum = this.maximum.toJSON();\r\n\t\t}\r\n\t\t\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport GeneralSubtree from \"./GeneralSubtree.js\";\n//**************************************************************************************\n/**\n * Class from RFC5280\n */\nexport default class NameConstraints\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for NameConstraints class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\tif(\"permittedSubtrees\" in parameters)\n\t\t\t/**\n\t\t\t * @type {Array.}\n\t\t\t * @desc permittedSubtrees\n\t\t\t */\n\t\t\tthis.permittedSubtrees = getParametersValue(parameters, \"permittedSubtrees\", NameConstraints.defaultValues(\"permittedSubtrees\"));\n\n\t\tif(\"excludedSubtrees\" in parameters)\n\t\t\t/**\n\t\t\t * @type {Array.}\n\t\t\t * @desc excludedSubtrees\n\t\t\t */\n\t\t\tthis.excludedSubtrees = getParametersValue(parameters, \"excludedSubtrees\", NameConstraints.defaultValues(\"excludedSubtrees\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"permittedSubtrees\":\n\t\t\t\treturn [];\n\t\t\tcase \"excludedSubtrees\":\n\t\t\t\treturn [];\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for NameConstraints class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * NameConstraints ::= SEQUENCE {\n\t * permittedSubtrees [0] GeneralSubtrees OPTIONAL,\n\t * excludedSubtrees [1] GeneralSubtrees OPTIONAL }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [permittedSubtrees]\n\t\t * @property {string} [excludedSubtrees]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\t\t\tname: (names.permittedSubtrees || \"\"),\n\t\t\t\t\t\t\tvalue: GeneralSubtree.schema()\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\t\t\tname: (names.excludedSubtrees || \"\"),\n\t\t\t\t\t\t\tvalue: GeneralSubtree.schema()\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"permittedSubtrees\",\n\t\t\t\"excludedSubtrees\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tNameConstraints.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tpermittedSubtrees: \"permittedSubtrees\",\n\t\t\t\t\texcludedSubtrees: \"excludedSubtrees\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for NameConstraints\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tif(\"permittedSubtrees\" in asn1.result)\n\t\t\tthis.permittedSubtrees = Array.from(asn1.result.permittedSubtrees, element => new GeneralSubtree({ schema: element }));\n\n\t\tif(\"excludedSubtrees\" in asn1.result)\n\t\t\tthis.excludedSubtrees = Array.from(asn1.result.excludedSubtrees, element => new GeneralSubtree({ schema: element }));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Create array for output sequence\n\t\tconst outputArray = [];\n\t\t\n\t\tif(\"permittedSubtrees\" in this)\n\t\t{\n\t\t\toutputArray.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tvalue: Array.from(this.permittedSubtrees, element => element.toSchema())\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(\"excludedSubtrees\" in this)\n\t\t{\n\t\t\toutputArray.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalue: Array.from(this.excludedSubtrees, element => element.toSchema())\n\t\t\t}));\n\t\t}\n\t\t//endregion\n\t\t\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: outputArray\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst object = {};\n\t\t\n\t\tif(\"permittedSubtrees\" in this)\n\t\t\tobject.permittedSubtrees = Array.from(this.permittedSubtrees, element => element.toJSON());\n\n\t\tif(\"excludedSubtrees\" in this)\n\t\t\tobject.excludedSubtrees = Array.from(this.excludedSubtrees, element => element.toJSON());\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport GeneralName from \"./GeneralName.js\";\r\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class DistributionPoint\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for DistributionPoint class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t * @property {Object} [distributionPoint]\r\n\t * @property {Object} [reasons]\r\n\t * @property {Object} [cRLIssuer]\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\tif(\"distributionPoint\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc distributionPoint\r\n\t\t\t */\r\n\t\t\tthis.distributionPoint = getParametersValue(parameters, \"distributionPoint\", DistributionPoint.defaultValues(\"distributionPoint\"));\r\n\r\n\t\tif(\"reasons\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {BitString}\r\n\t\t\t * @desc values\r\n\t\t\t */\r\n\t\t\tthis.reasons = getParametersValue(parameters, \"reasons\", DistributionPoint.defaultValues(\"reasons\"));\r\n\r\n\t\tif(\"cRLIssuer\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc cRLIssuer\r\n\t\t\t */\r\n\t\t\tthis.cRLIssuer = getParametersValue(parameters, \"cRLIssuer\", DistributionPoint.defaultValues(\"cRLIssuer\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"distributionPoint\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"reasons\":\r\n\t\t\t\treturn new asn1js.BitString();\r\n\t\t\tcase \"cRLIssuer\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for DistributionPoint class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * DistributionPoint ::= SEQUENCE {\r\n\t * distributionPoint [0] DistributionPointName OPTIONAL,\r\n\t * reasons [1] ReasonFlags OPTIONAL,\r\n\t * cRLIssuer [2] GeneralNames OPTIONAL }\r\n\t *\r\n\t * DistributionPointName ::= CHOICE {\r\n\t * fullName [0] GeneralNames,\r\n\t * nameRelativeToCRLIssuer [1] RelativeDistinguishedName }\r\n\t *\r\n\t * ReasonFlags ::= BIT STRING {\r\n\t * unused (0),\r\n\t * keyCompromise (1),\r\n\t * cACompromise (2),\r\n\t * affiliationChanged (3),\r\n\t * superseded (4),\r\n\t * cessationOfOperation (5),\r\n\t * certificateHold (6),\r\n\t * privilegeWithdrawn (7),\r\n\t * aACompromise (8) }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [distributionPoint]\r\n\t\t * @property {string} [distributionPointNames]\r\n\t\t * @property {string} [reasons]\r\n\t\t * @property {string} [cRLIssuer]\r\n\t\t * @property {string} [cRLIssuerNames]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\tname: (names.distributionPoint || \"\"),\r\n\t\t\t\t\t\t\t\t\toptional: true,\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\t\t\t\t\tname: (names.distributionPointNames || \"\"),\r\n\t\t\t\t\t\t\t\t\t\t\tvalue: GeneralName.schema()\r\n\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\tname: (names.distributionPoint || \"\"),\r\n\t\t\t\t\t\t\t\t\toptional: true,\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: RelativeDistinguishedNames.schema().valueBlock.value\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.reasons || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t}\r\n\t\t\t\t}), // IMPLICIT bitstring value\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\tname: (names.cRLIssuer || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.cRLIssuerNames || \"\"),\r\n\t\t\t\t\t\t\tvalue: GeneralName.schema()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}) // IMPLICIT bitstring value\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"distributionPoint\",\r\n\t\t\t\"distributionPointNames\",\r\n\t\t\t\"reasons\",\r\n\t\t\t\"cRLIssuer\",\r\n\t\t\t\"cRLIssuerNames\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tDistributionPoint.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tdistributionPoint: \"distributionPoint\",\r\n\t\t\t\t\tdistributionPointNames: \"distributionPointNames\",\r\n\t\t\t\t\treasons: \"reasons\",\r\n\t\t\t\t\tcRLIssuer: \"cRLIssuer\",\r\n\t\t\t\t\tcRLIssuerNames: \"cRLIssuerNames\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for DistributionPoint\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"distributionPoint\" in asn1.result)\r\n\t\t{\r\n\t\t\tif(asn1.result.distributionPoint.idBlock.tagNumber === 0) // GENERAL_NAMES variant\r\n\t\t\t\tthis.distributionPoint = Array.from(asn1.result.distributionPointNames, element => new GeneralName({ schema: element }));\r\n\r\n\t\t\tif(asn1.result.distributionPoint.idBlock.tagNumber === 1) // RDN variant\r\n\t\t\t{\r\n\t\t\t\tthis.distributionPoint = new RelativeDistinguishedNames({\r\n\t\t\t\t\tschema: new asn1js.Sequence({\r\n\t\t\t\t\t\tvalue: asn1.result.distributionPoint.valueBlock.value\r\n\t\t\t\t\t})\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(\"reasons\" in asn1.result)\r\n\t\t\tthis.reasons = new asn1js.BitString({ valueHex: asn1.result.reasons.valueBlock.valueHex });\r\n\r\n\t\tif(\"cRLIssuer\" in asn1.result)\r\n\t\t\tthis.cRLIssuer = Array.from(asn1.result.cRLIssuerNames, element => new GeneralName({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(\"distributionPoint\" in this)\r\n\t\t{\r\n\t\t\tlet internalValue;\r\n\t\t\t\r\n\t\t\tif(this.distributionPoint instanceof Array)\r\n\t\t\t{\r\n\t\t\t\tinternalValue = new asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: Array.from(this.distributionPoint, element => element.toSchema())\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tinternalValue = new asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [this.distributionPoint.toSchema()]\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [internalValue]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"reasons\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: this.reasons.valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"cRLIssuer\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: Array.from(this.cRLIssuer, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {};\r\n\r\n\t\tif(\"distributionPoint\" in this)\r\n\t\t{\r\n\t\t\tif(this.distributionPoint instanceof Array)\r\n\t\t\t\tobject.distributionPoint = Array.from(this.distributionPoint, element => element.toJSON());\r\n\t\t\telse\r\n\t\t\t\tobject.distributionPoint = this.distributionPoint.toJSON();\r\n\t\t}\r\n\r\n\t\tif(\"reasons\" in this)\r\n\t\t\tobject.reasons = this.reasons.toJSON();\r\n\r\n\t\tif(\"cRLIssuer\" in this)\r\n\t\t\tobject.cRLIssuer = Array.from(this.cRLIssuer, element => element.toJSON());\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport DistributionPoint from \"./DistributionPoint.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class CRLDistributionPoints\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for CRLDistributionPoints class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc distributionPoints\r\n\t\t */\r\n\t\tthis.distributionPoints = getParametersValue(parameters, \"distributionPoints\", CRLDistributionPoints.defaultValues(\"distributionPoints\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"distributionPoints\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for CRLDistributionPoints class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [distributionPoints]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.distributionPoints || \"\"),\r\n\t\t\t\t\tvalue: DistributionPoint.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"distributionPoints\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tCRLDistributionPoints.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tdistributionPoints: \"distributionPoints\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CRLDistributionPoints\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.distributionPoints = Array.from(asn1.result.distributionPoints, element => new DistributionPoint({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.distributionPoints, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tdistributionPoints: Array.from(this.distributionPoints, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class PolicyQualifierInfo\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PolicyQualifierInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc policyQualifierId\r\n\t\t */\r\n\t\tthis.policyQualifierId = getParametersValue(parameters, \"policyQualifierId\", PolicyQualifierInfo.defaultValues(\"policyQualifierId\"));\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc qualifier\r\n\t\t */\r\n\t\tthis.qualifier = getParametersValue(parameters, \"qualifier\", PolicyQualifierInfo.defaultValues(\"qualifier\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"policyQualifierId\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"qualifier\":\r\n\t\t\t\treturn new asn1js.Any();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PolicyQualifierInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PolicyQualifierInfo ::= SEQUENCE {\r\n\t * policyQualifierId PolicyQualifierId,\r\n\t * qualifier ANY DEFINED BY policyQualifierId }\r\n\t *\r\n\t * id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }\r\n\t * id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 }\r\n\t * id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }\r\n\t *\r\n\t * PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [policyQualifierId]\r\n\t\t * @property {string} [qualifier]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.policyQualifierId || \"\") }),\r\n\t\t\t\tnew asn1js.Any({ name: (names.qualifier || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"policyQualifierId\",\r\n\t\t\t\"qualifier\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPolicyQualifierInfo.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tpolicyQualifierId: \"policyQualifierId\",\r\n\t\t\t\t\tqualifier: \"qualifier\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PolicyQualifierInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.policyQualifierId = asn1.result.policyQualifierId.valueBlock.toString();\r\n\t\tthis.qualifier = asn1.result.qualifier;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.policyQualifierId }),\r\n\t\t\t\tthis.qualifier\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tpolicyQualifierId: this.policyQualifierId,\r\n\t\t\tqualifier: this.qualifier.toJSON()\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport PolicyQualifierInfo from \"./PolicyQualifierInfo.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class PolicyInformation\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PolicyInformation class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc policyIdentifier\r\n\t\t */\r\n\t\tthis.policyIdentifier = getParametersValue(parameters, \"policyIdentifier\", PolicyInformation.defaultValues(\"policyIdentifier\"));\r\n\r\n\t\tif(\"policyQualifiers\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc Value of the TIME class\r\n\t\t\t */\r\n\t\t\tthis.policyQualifiers = getParametersValue(parameters, \"policyQualifiers\", PolicyInformation.defaultValues(\"policyQualifiers\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"policyIdentifier\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"policyQualifiers\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PolicyInformation class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PolicyInformation ::= SEQUENCE {\r\n\t * policyIdentifier CertPolicyId,\r\n\t * policyQualifiers SEQUENCE SIZE (1..MAX) OF\r\n\t * PolicyQualifierInfo OPTIONAL }\r\n\t *\r\n\t * CertPolicyId ::= OBJECT IDENTIFIER\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [policyIdentifier]\r\n\t\t * @property {string} [policyQualifiers]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.policyIdentifier || \"\") }),\r\n\t\t\t\tnew asn1js.Sequence({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.policyQualifiers || \"\"),\r\n\t\t\t\t\t\t\tvalue: PolicyQualifierInfo.schema()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"policyIdentifier\",\r\n\t\t\t\"policyQualifiers\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPolicyInformation.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tpolicyIdentifier: \"policyIdentifier\",\r\n\t\t\t\t\tpolicyQualifiers: \"policyQualifiers\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PolicyInformation\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.policyIdentifier = asn1.result.policyIdentifier.valueBlock.toString();\r\n\r\n\t\tif(\"policyQualifiers\" in asn1.result)\r\n\t\t\tthis.policyQualifiers = Array.from(asn1.result.policyQualifiers, element => new PolicyQualifierInfo({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.policyIdentifier }));\r\n\t\t\r\n\t\tif(\"policyQualifiers\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Sequence({\r\n\t\t\t\tvalue: Array.from(this.policyQualifiers, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\tpolicyIdentifier: this.policyIdentifier\r\n\t\t};\r\n\r\n\t\tif(\"policyQualifiers\" in this)\r\n\t\t\tobject.policyQualifiers = Array.from(this.policyQualifiers, element => element.toJSON());\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport PolicyInformation from \"./PolicyInformation.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class CertificatePolicies\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for CertificatePolicies class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc certificatePolicies\r\n\t\t */\r\n\t\tthis.certificatePolicies = getParametersValue(parameters, \"certificatePolicies\", CertificatePolicies.defaultValues(\"certificatePolicies\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"certificatePolicies\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for CertificatePolicies class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [certificatePolicies]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.certificatePolicies || \"\"),\r\n\t\t\t\t\tvalue: PolicyInformation.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"certificatePolicies\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tCertificatePolicies.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tcertificatePolicies: \"certificatePolicies\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CertificatePolicies\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.certificatePolicies = Array.from(asn1.result.certificatePolicies, element => new PolicyInformation({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.certificatePolicies, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tcertificatePolicies: Array.from(this.certificatePolicies, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class PolicyMapping\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PolicyMapping class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc issuerDomainPolicy\r\n\t\t */\r\n\t\tthis.issuerDomainPolicy = getParametersValue(parameters, \"issuerDomainPolicy\", PolicyMapping.defaultValues(\"issuerDomainPolicy\"));\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc subjectDomainPolicy\r\n\t\t */\r\n\t\tthis.subjectDomainPolicy = getParametersValue(parameters, \"subjectDomainPolicy\", PolicyMapping.defaultValues(\"subjectDomainPolicy\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"issuerDomainPolicy\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"subjectDomainPolicy\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PolicyMapping class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PolicyMapping ::= SEQUENCE {\r\n\t * issuerDomainPolicy CertPolicyId,\r\n\t * subjectDomainPolicy CertPolicyId }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [issuerDomainPolicy]\r\n\t\t * @property {string} [subjectDomainPolicy]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.issuerDomainPolicy || \"\") }),\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.subjectDomainPolicy || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"issuerDomainPolicy\",\r\n\t\t\t\"subjectDomainPolicy\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPolicyMapping.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tissuerDomainPolicy: \"issuerDomainPolicy\",\r\n\t\t\t\t\tsubjectDomainPolicy: \"subjectDomainPolicy\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PolicyMapping\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.issuerDomainPolicy = asn1.result.issuerDomainPolicy.valueBlock.toString();\r\n\t\tthis.subjectDomainPolicy = asn1.result.subjectDomainPolicy.valueBlock.toString();\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.issuerDomainPolicy }),\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.subjectDomainPolicy })\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tissuerDomainPolicy: this.issuerDomainPolicy,\r\n\t\t\tsubjectDomainPolicy: this.subjectDomainPolicy\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport PolicyMapping from \"./PolicyMapping.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class PolicyMappings\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PolicyMappings class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc mappings\r\n\t\t */\r\n\t\tthis.mappings = getParametersValue(parameters, \"mappings\", PolicyMappings.defaultValues(\"mappings\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"mappings\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PolicyMappings class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF PolicyMapping\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [utcTimeName] Name for \"utcTimeName\" choice\r\n\t\t * @property {string} [generalTimeName] Name for \"generalTimeName\" choice\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.mappings || \"\"),\r\n\t\t\t\t\tvalue: PolicyMapping.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"mappings\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPolicyMappings.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tmappings: \"mappings\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PolicyMappings\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.mappings = Array.from(asn1.result.mappings, element => new PolicyMapping({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.mappings, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tmappings: Array.from(this.mappings, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport GeneralName from \"./GeneralName.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class AuthorityKeyIdentifier\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for AuthorityKeyIdentifier class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\tif(\"keyIdentifier\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {OctetString}\r\n\t\t\t * @desc keyIdentifier\r\n\t\t\t */\r\n\t\t\tthis.keyIdentifier = getParametersValue(parameters, \"keyIdentifier\", AuthorityKeyIdentifier.defaultValues(\"keyIdentifier\"));\r\n\r\n\t\tif(\"authorityCertIssuer\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc authorityCertIssuer\r\n\t\t\t */\r\n\t\t\tthis.authorityCertIssuer = getParametersValue(parameters, \"authorityCertIssuer\", AuthorityKeyIdentifier.defaultValues(\"authorityCertIssuer\"));\r\n\r\n\t\tif(\"authorityCertSerialNumber\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Integer}\r\n\t\t\t * @desc authorityCertIssuer\r\n\t\t\t */\r\n\t\t\tthis.authorityCertSerialNumber = getParametersValue(parameters, \"authorityCertSerialNumber\", AuthorityKeyIdentifier.defaultValues(\"authorityCertSerialNumber\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"keyIdentifier\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tcase \"authorityCertIssuer\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"authorityCertSerialNumber\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for AuthorityKeyIdentifier class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * AuthorityKeyIdentifier OID ::= 2.5.29.35\r\n\t *\r\n\t * AuthorityKeyIdentifier ::= SEQUENCE {\r\n\t * keyIdentifier [0] KeyIdentifier OPTIONAL,\r\n\t * authorityCertIssuer [1] GeneralNames OPTIONAL,\r\n\t * authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }\r\n\t *\r\n\t * KeyIdentifier ::= OCTET STRING\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [keyIdentifier]\r\n\t\t * @property {string} [authorityCertIssuer]\r\n\t\t * @property {string} [authorityCertSerialNumber]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.keyIdentifier || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.authorityCertIssuer || \"\"),\r\n\t\t\t\t\t\t\tvalue: GeneralName.schema()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.authorityCertSerialNumber || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"keyIdentifier\",\r\n\t\t\t\"authorityCertIssuer\",\r\n\t\t\t\"authorityCertSerialNumber\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tAuthorityKeyIdentifier.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tkeyIdentifier: \"keyIdentifier\",\r\n\t\t\t\t\tauthorityCertIssuer: \"authorityCertIssuer\",\r\n\t\t\t\t\tauthorityCertSerialNumber: \"authorityCertSerialNumber\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AuthorityKeyIdentifier\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"keyIdentifier\" in asn1.result)\r\n\t\t\tthis.keyIdentifier = new asn1js.OctetString({ valueHex: asn1.result.keyIdentifier.valueBlock.valueHex });\r\n\r\n\t\tif(\"authorityCertIssuer\" in asn1.result)\r\n\t\t\tthis.authorityCertIssuer = Array.from(asn1.result.authorityCertIssuer, element => new GeneralName({ schema: element }));\r\n\r\n\t\tif(\"authorityCertSerialNumber\" in asn1.result)\r\n\t\t\tthis.authorityCertSerialNumber = new asn1js.Integer({ valueHex: asn1.result.authorityCertSerialNumber.valueBlock.valueHex });\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(\"keyIdentifier\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: this.keyIdentifier.valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"authorityCertIssuer\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: Array.from(this.authorityCertIssuer, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"authorityCertSerialNumber\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: this.authorityCertSerialNumber.valueBlock.valueHex\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {};\r\n\r\n\t\tif(\"keyIdentifier\" in this)\r\n\t\t\tobject.keyIdentifier = this.keyIdentifier.toJSON();\r\n\r\n\t\tif(\"authorityCertIssuer\" in this)\r\n\t\t\tobject.authorityCertIssuer = Array.from(this.authorityCertIssuer, element => element.toJSON());\r\n\r\n\t\tif(\"authorityCertSerialNumber\" in this)\r\n\t\t\tobject.authorityCertSerialNumber = this.authorityCertSerialNumber.toJSON();\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class PolicyConstraints\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for PolicyConstraints class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\tif(\"requireExplicitPolicy\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number}\r\n\t\t\t * @desc requireExplicitPolicy\r\n\t\t\t */\r\n\t\t\tthis.requireExplicitPolicy = getParametersValue(parameters, \"requireExplicitPolicy\", PolicyConstraints.defaultValues(\"requireExplicitPolicy\"));\r\n\r\n\t\tif(\"inhibitPolicyMapping\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {number}\r\n\t\t\t * @desc Value of the TIME class\r\n\t\t\t */\r\n\t\t\tthis.inhibitPolicyMapping = getParametersValue(parameters, \"inhibitPolicyMapping\", PolicyConstraints.defaultValues(\"inhibitPolicyMapping\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"requireExplicitPolicy\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"inhibitPolicyMapping\":\r\n\t\t\t\treturn 0;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for PolicyConstraints class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * PolicyConstraints ::= SEQUENCE {\r\n\t * requireExplicitPolicy [0] SkipCerts OPTIONAL,\r\n\t * inhibitPolicyMapping [1] SkipCerts OPTIONAL }\r\n\t *\r\n\t * SkipCerts ::= INTEGER (0..MAX)\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [requireExplicitPolicy]\r\n\t\t * @property {string} [inhibitPolicyMapping]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.requireExplicitPolicy || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t}\r\n\t\t\t\t}), // IMPLICIT integer value\r\n\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\tname: (names.inhibitPolicyMapping || \"\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t}\r\n\t\t\t\t}) // IMPLICIT integer value\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"requireExplicitPolicy\",\r\n\t\t\t\"inhibitPolicyMapping\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tPolicyConstraints.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\trequireExplicitPolicy: \"requireExplicitPolicy\",\r\n\t\t\t\t\tinhibitPolicyMapping: \"inhibitPolicyMapping\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for PolicyConstraints\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tif(\"requireExplicitPolicy\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst field1 = asn1.result.requireExplicitPolicy;\r\n\r\n\t\t\tfield1.idBlock.tagClass = 1; // UNIVERSAL\r\n\t\t\tfield1.idBlock.tagNumber = 2; // INTEGER\r\n\r\n\t\t\tconst ber1 = field1.toBER(false);\r\n\t\t\tconst int1 = asn1js.fromBER(ber1);\r\n\r\n\t\t\tthis.requireExplicitPolicy = int1.result.valueBlock.valueDec;\r\n\t\t}\r\n\r\n\t\tif(\"inhibitPolicyMapping\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst field2 = asn1.result.inhibitPolicyMapping;\r\n\r\n\t\t\tfield2.idBlock.tagClass = 1; // UNIVERSAL\r\n\t\t\tfield2.idBlock.tagNumber = 2; // INTEGER\r\n\r\n\t\t\tconst ber2 = field2.toBER(false);\r\n\t\t\tconst int2 = asn1js.fromBER(ber2);\r\n\r\n\t\t\tthis.inhibitPolicyMapping = int2.result.valueBlock.valueDec;\r\n\t\t}\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create correct values for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(\"requireExplicitPolicy\" in this)\r\n\t\t{\r\n\t\t\tconst int1 = new asn1js.Integer({ value: this.requireExplicitPolicy });\r\n\t\t\t\r\n\t\t\tint1.idBlock.tagClass = 3; // CONTEXT-SPECIFIC\r\n\t\t\tint1.idBlock.tagNumber = 0; // [0]\r\n\t\t\t\r\n\t\t\toutputArray.push(int1);\r\n\t\t}\r\n\t\t\r\n\t\tif(\"inhibitPolicyMapping\" in this)\r\n\t\t{\r\n\t\t\tconst int2 = new asn1js.Integer({ value: this.inhibitPolicyMapping });\r\n\t\t\t\r\n\t\t\tint2.idBlock.tagClass = 3; // CONTEXT-SPECIFIC\r\n\t\t\tint2.idBlock.tagNumber = 1; // [1]\r\n\t\t\t\r\n\t\t\toutputArray.push(int2);\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {};\r\n\r\n\t\tif(\"requireExplicitPolicy\" in this)\r\n\t\t\tobject.requireExplicitPolicy = this.requireExplicitPolicy;\r\n\r\n\t\tif(\"inhibitPolicyMapping\" in this)\r\n\t\t\tobject.inhibitPolicyMapping = this.inhibitPolicyMapping;\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class ExtKeyUsage\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for ExtKeyUsage class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc keyPurposes\r\n\t\t */\r\n\t\tthis.keyPurposes = getParametersValue(parameters, \"keyPurposes\", ExtKeyUsage.defaultValues(\"keyPurposes\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"keyPurposes\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for ExtKeyUsage class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * ExtKeyUsage ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId\r\n\t *\r\n\t * KeyPurposeId ::= OBJECT IDENTIFIER\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [keyPurposes]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.keyPurposes || \"\"),\r\n\t\t\t\t\tvalue: new asn1js.ObjectIdentifier()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"keyPurposes\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tExtKeyUsage.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tkeyPurposes: \"keyPurposes\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ExtKeyUsage\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.keyPurposes = Array.from(asn1.result.keyPurposes, element => element.valueBlock.toString());\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.keyPurposes, element => new asn1js.ObjectIdentifier({ value: element }))\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tkeyPurposes: Array.from(this.keyPurposes)\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AccessDescription from \"./AccessDescription.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class InfoAccess\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for InfoAccess class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc accessDescriptions\r\n\t\t */\r\n\t\tthis.accessDescriptions = getParametersValue(parameters, \"accessDescriptions\", InfoAccess.defaultValues(\"accessDescriptions\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"accessDescriptions\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for InfoAccess class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * AuthorityInfoAccessSyntax ::=\r\n\t * SEQUENCE SIZE (1..MAX) OF AccessDescription\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [accessDescriptions]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.accessDescriptions || \"\"),\r\n\t\t\t\t\tvalue: AccessDescription.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"accessDescriptions\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tInfoAccess.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\taccessDescriptions: \"accessDescriptions\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for InfoAccess\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.accessDescriptions = Array.from(asn1.result.accessDescriptions, element => new AccessDescription({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.accessDescriptions, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\taccessDescriptions: Array.from(this.accessDescriptions, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","export class ByteStream {\n constructor(parameters = {}) {\n if (\"view\" in parameters) {\n this.fromUint8Array(parameters.view);\n }\n else if (\"buffer\" in parameters) {\n this.fromArrayBuffer(parameters.buffer);\n }\n else if (\"string\" in parameters) {\n this.fromString(parameters.string);\n }\n else if (\"hexstring\" in parameters) {\n this.fromHexString(parameters.hexstring);\n }\n else {\n if (\"length\" in parameters && parameters.length > 0) {\n this.length = parameters.length;\n if (parameters.stub) {\n for (let i = 0; i < this._view.length; i++) {\n this._view[i] = parameters.stub;\n }\n }\n }\n else {\n this.length = 0;\n }\n }\n }\n set buffer(value) {\n this._buffer = value;\n this._view = new Uint8Array(this._buffer);\n }\n get buffer() {\n return this._buffer;\n }\n set view(value) {\n this._buffer = new ArrayBuffer(value.length);\n this._view = new Uint8Array(this._buffer);\n this._view.set(value);\n }\n get view() {\n return this._view;\n }\n get length() {\n return this.view.byteLength;\n }\n set length(value) {\n this._buffer = new ArrayBuffer(value);\n this._view = new Uint8Array(this._buffer);\n }\n clear() {\n this._buffer = new ArrayBuffer(0);\n this._view = new Uint8Array(this._buffer);\n }\n fromArrayBuffer(array) {\n this._buffer = array;\n this._view = new Uint8Array(this._buffer);\n }\n fromUint8Array(array) {\n this.fromArrayBuffer(new Uint8Array(array).buffer);\n }\n fromString(string) {\n const stringLength = string.length;\n this.length = stringLength;\n for (let i = 0; i < stringLength; i++)\n this.view[i] = string.charCodeAt(i);\n }\n toString(start = 0, length = (this.view.length - start)) {\n let result = \"\";\n if ((start >= this.view.length) || (start < 0)) {\n start = 0;\n }\n if ((length >= this.view.length) || (length < 0)) {\n length = this.view.length - start;\n }\n for (let i = start; i < (start + length); i++)\n result += String.fromCharCode(this.view[i]);\n return result;\n }\n fromHexString(hexString) {\n const stringLength = hexString.length;\n this.buffer = new ArrayBuffer(stringLength >> 1);\n this.view = new Uint8Array(this.buffer);\n const hexMap = new Map();\n hexMap.set(\"0\", 0x00);\n hexMap.set(\"1\", 0x01);\n hexMap.set(\"2\", 0x02);\n hexMap.set(\"3\", 0x03);\n hexMap.set(\"4\", 0x04);\n hexMap.set(\"5\", 0x05);\n hexMap.set(\"6\", 0x06);\n hexMap.set(\"7\", 0x07);\n hexMap.set(\"8\", 0x08);\n hexMap.set(\"9\", 0x09);\n hexMap.set(\"A\", 0x0A);\n hexMap.set(\"a\", 0x0A);\n hexMap.set(\"B\", 0x0B);\n hexMap.set(\"b\", 0x0B);\n hexMap.set(\"C\", 0x0C);\n hexMap.set(\"c\", 0x0C);\n hexMap.set(\"D\", 0x0D);\n hexMap.set(\"d\", 0x0D);\n hexMap.set(\"E\", 0x0E);\n hexMap.set(\"e\", 0x0E);\n hexMap.set(\"F\", 0x0F);\n hexMap.set(\"f\", 0x0F);\n let j = 0;\n let temp = 0x00;\n for (let i = 0; i < stringLength; i++) {\n if (!(i % 2)) {\n temp = hexMap.get(hexString.charAt(i)) << 4;\n }\n else {\n temp |= hexMap.get(hexString.charAt(i));\n this.view[j] = temp;\n j++;\n }\n }\n }\n toHexString(start = 0, length = (this.view.length - start)) {\n let result = \"\";\n if ((start >= this.view.length) || (start < 0)) {\n start = 0;\n }\n if ((length >= this.view.length) || (length < 0)) {\n length = this.view.length - start;\n }\n for (let i = start; i < (start + length); i++) {\n const str = this.view[i].toString(16).toUpperCase();\n result = result + ((str.length == 1) ? \"0\" : \"\") + str;\n }\n return result;\n }\n copy(start = 0, length = (this.length - start)) {\n if (!start && !this.length) {\n return new ByteStream();\n }\n if ((start < 0) || (start > (this.length - 1))) {\n throw new Error(`Wrong start position: ${start}`);\n }\n const stream = new ByteStream({\n buffer: this._buffer.slice(start, start + length)\n });\n return stream;\n }\n slice(start = 0, end = this.length) {\n if (!start && !this.length) {\n return new ByteStream();\n }\n if ((start < 0) || (start > (this.length - 1))) {\n throw new Error(`Wrong start position: ${start}`);\n }\n const stream = new ByteStream({\n buffer: this._buffer.slice(start, end),\n });\n return stream;\n }\n realloc(size) {\n const buffer = new ArrayBuffer(size);\n const view = new Uint8Array(buffer);\n if (size > this._view.length)\n view.set(this._view);\n else {\n view.set(new Uint8Array(this._buffer, 0, size));\n }\n this._buffer = buffer;\n this._view = new Uint8Array(this._buffer);\n }\n append(stream) {\n const initialSize = this.length;\n const streamViewLength = stream.length;\n const subarrayView = stream._view.subarray();\n this.realloc(initialSize + streamViewLength);\n this._view.set(subarrayView, initialSize);\n }\n insert(stream, start = 0, length = (this.length - start)) {\n if (start > (this.length - 1))\n return false;\n if (length > (this.length - start)) {\n length = this.length - start;\n }\n if (length > stream.length) {\n length = stream.length;\n }\n if (length == stream.length)\n this._view.set(stream._view, start);\n else {\n this._view.set(stream._view.subarray(0, length), start);\n }\n return true;\n }\n isEqual(stream) {\n if (this.length != stream.length)\n return false;\n for (let i = 0; i < stream.length; i++) {\n if (this.view[i] != stream.view[i])\n return false;\n }\n return true;\n }\n isEqualView(view) {\n if (view.length != this.view.length)\n return false;\n for (let i = 0; i < view.length; i++) {\n if (this.view[i] != view[i])\n return false;\n }\n return true;\n }\n findPattern(pattern, start_, length_, backward_) {\n const { start, length, backward } = this.prepareFindParameters(start_, length_, backward_);\n const patternLength = pattern.length;\n if (patternLength > length) {\n return (-1);\n }\n const patternArray = [];\n for (let i = 0; i < patternLength; i++)\n patternArray.push(pattern.view[i]);\n for (let i = 0; i <= (length - patternLength); i++) {\n let equal = true;\n const equalStart = (backward) ? (start - patternLength - i) : (start + i);\n for (let j = 0; j < patternLength; j++) {\n if (this.view[j + equalStart] != patternArray[j]) {\n equal = false;\n break;\n }\n }\n if (equal) {\n return (backward) ? (start - patternLength - i) : (start + patternLength + i);\n }\n }\n return (-1);\n }\n findFirstIn(patterns, start_, length_, backward_) {\n const { start, length, backward } = this.prepareFindParameters(start_, length_, backward_);\n const result = {\n id: (-1),\n position: (backward) ? 0 : (start + length),\n length: 0\n };\n for (let i = 0; i < patterns.length; i++) {\n const position = this.findPattern(patterns[i], start, length, backward);\n if (position != (-1)) {\n let valid = false;\n const patternLength = patterns[i].length;\n if (backward) {\n if ((position - patternLength) >= (result.position - result.length))\n valid = true;\n }\n else {\n if ((position - patternLength) <= (result.position - result.length))\n valid = true;\n }\n if (valid) {\n result.position = position;\n result.id = i;\n result.length = patternLength;\n }\n }\n }\n return result;\n }\n findAllIn(patterns, start_, length_) {\n let { start, length } = this.prepareFindParameters(start_, length_);\n const result = [];\n let patternFound = {\n id: (-1),\n position: start\n };\n do {\n const position = patternFound.position;\n patternFound = this.findFirstIn(patterns, patternFound.position, length);\n if (patternFound.id == (-1)) {\n break;\n }\n length -= (patternFound.position - position);\n result.push({\n id: patternFound.id,\n position: patternFound.position\n });\n } while (true);\n return result;\n }\n findAllPatternIn(pattern, start_, length_) {\n const { start, length } = this.prepareFindParameters(start_, length_);\n const result = [];\n const patternLength = pattern.length;\n if (patternLength > length) {\n return (-1);\n }\n const patternArray = Array.from(pattern.view);\n for (let i = 0; i <= (length - patternLength); i++) {\n let equal = true;\n const equalStart = start + i;\n for (let j = 0; j < patternLength; j++) {\n if (this.view[j + equalStart] != patternArray[j]) {\n equal = false;\n break;\n }\n }\n if (equal) {\n result.push(start + patternLength + i);\n i += (patternLength - 1);\n }\n }\n return result;\n }\n findFirstNotIn(patterns, start_, length_, backward_) {\n let { start, length, backward } = this.prepareFindParameters(start_, length_, backward_);\n const result = {\n left: {\n id: (-1),\n position: start\n },\n right: {\n id: (-1),\n position: 0\n },\n value: new ByteStream()\n };\n let currentLength = length;\n while (currentLength > 0) {\n result.right = this.findFirstIn(patterns, (backward) ? (start - length + currentLength) : (start + length - currentLength), currentLength, backward);\n if (result.right.id == (-1)) {\n length = currentLength;\n if (backward) {\n start -= length;\n }\n else {\n start = result.left.position;\n }\n result.value = new ByteStream({\n buffer: this._buffer.slice(start, start + length),\n });\n break;\n }\n if (result.right.position != ((backward) ? (result.left.position - patterns[result.right.id].length) : (result.left.position + patterns[result.right.id].length))) {\n if (backward) {\n start = result.right.position + patterns[result.right.id].length;\n length = result.left.position - result.right.position - patterns[result.right.id].length;\n }\n else {\n start = result.left.position;\n length = result.right.position - result.left.position - patterns[result.right.id].length;\n }\n result.value = new ByteStream({\n buffer: this._buffer.slice(start, start + length),\n });\n break;\n }\n result.left = result.right;\n currentLength -= patterns[result.right.id].length;\n }\n if (backward) {\n const temp = result.right;\n result.right = result.left;\n result.left = temp;\n }\n return result;\n }\n findAllNotIn(patterns, start_, length_) {\n let { start, length } = this.prepareFindParameters(start_, length_);\n const result = [];\n let patternFound = {\n left: {\n id: (-1),\n position: start\n },\n right: {\n id: (-1),\n position: start\n },\n value: new ByteStream()\n };\n do {\n const position = patternFound.right.position;\n patternFound = this.findFirstNotIn(patterns, patternFound.right.position, length);\n length -= (patternFound.right.position - position);\n result.push({\n left: {\n id: patternFound.left.id,\n position: patternFound.left.position\n },\n right: {\n id: patternFound.right.id,\n position: patternFound.right.position\n },\n value: patternFound.value\n });\n } while (patternFound.right.id != (-1));\n return result;\n }\n findFirstSequence(patterns, start_, length_, backward_) {\n let { start, length, backward } = this.prepareFindParameters(start_, length_, backward_);\n const firstIn = this.skipNotPatterns(patterns, start, length, backward);\n if (firstIn == (-1)) {\n return {\n position: (-1),\n value: new ByteStream()\n };\n }\n const firstNotIn = this.skipPatterns(patterns, firstIn, length - ((backward) ? (start - firstIn) : (firstIn - start)), backward);\n if (backward) {\n start = firstNotIn;\n length = (firstIn - firstNotIn);\n }\n else {\n start = firstIn;\n length = (firstNotIn - firstIn);\n }\n const value = new ByteStream({\n buffer: this._buffer.slice(start, start + length),\n });\n return {\n position: firstNotIn,\n value\n };\n }\n findAllSequences(patterns, start_, length_) {\n let { start, length } = this.prepareFindParameters(start_, length_);\n const result = [];\n let patternFound = {\n position: start,\n value: new ByteStream()\n };\n do {\n const position = patternFound.position;\n patternFound = this.findFirstSequence(patterns, patternFound.position, length);\n if (patternFound.position != (-1)) {\n length -= (patternFound.position - position);\n result.push({\n position: patternFound.position,\n value: patternFound.value,\n });\n }\n } while (patternFound.position != (-1));\n return result;\n }\n findPairedPatterns(leftPattern, rightPattern, start_, length_) {\n const result = [];\n if (leftPattern.isEqual(rightPattern))\n return result;\n const { start, length } = this.prepareFindParameters(start_, length_);\n let currentPositionLeft = 0;\n const leftPatterns = this.findAllPatternIn(leftPattern, start, length);\n if (!Array.isArray(leftPatterns) || leftPatterns.length == 0) {\n return result;\n }\n const rightPatterns = this.findAllPatternIn(rightPattern, start, length);\n if (!Array.isArray(rightPatterns) || rightPatterns.length == 0) {\n return result;\n }\n while (currentPositionLeft < leftPatterns.length) {\n if (rightPatterns.length == 0) {\n break;\n }\n if (leftPatterns[0] == rightPatterns[0]) {\n result.push({\n left: leftPatterns[0],\n right: rightPatterns[0]\n });\n leftPatterns.splice(0, 1);\n rightPatterns.splice(0, 1);\n continue;\n }\n if (leftPatterns[currentPositionLeft] > rightPatterns[0]) {\n break;\n }\n while (leftPatterns[currentPositionLeft] < rightPatterns[0]) {\n currentPositionLeft++;\n if (currentPositionLeft >= leftPatterns.length) {\n break;\n }\n }\n result.push({\n left: leftPatterns[currentPositionLeft - 1],\n right: rightPatterns[0]\n });\n leftPatterns.splice(currentPositionLeft - 1, 1);\n rightPatterns.splice(0, 1);\n currentPositionLeft = 0;\n }\n result.sort((a, b) => (a.left - b.left));\n return result;\n }\n findPairedArrays(inputLeftPatterns, inputRightPatterns, start_, length_) {\n const { start, length } = this.prepareFindParameters(start_, length_);\n const result = [];\n let currentPositionLeft = 0;\n const leftPatterns = this.findAllIn(inputLeftPatterns, start, length);\n if (leftPatterns.length == 0)\n return result;\n const rightPatterns = this.findAllIn(inputRightPatterns, start, length);\n if (rightPatterns.length == 0)\n return result;\n while (currentPositionLeft < leftPatterns.length) {\n if (rightPatterns.length == 0) {\n break;\n }\n if (leftPatterns[0].position == rightPatterns[0].position) {\n result.push({\n left: leftPatterns[0],\n right: rightPatterns[0]\n });\n leftPatterns.splice(0, 1);\n rightPatterns.splice(0, 1);\n continue;\n }\n if (leftPatterns[currentPositionLeft].position > rightPatterns[0].position) {\n break;\n }\n while (leftPatterns[currentPositionLeft].position < rightPatterns[0].position) {\n currentPositionLeft++;\n if (currentPositionLeft >= leftPatterns.length) {\n break;\n }\n }\n result.push({\n left: leftPatterns[currentPositionLeft - 1],\n right: rightPatterns[0]\n });\n leftPatterns.splice(currentPositionLeft - 1, 1);\n rightPatterns.splice(0, 1);\n currentPositionLeft = 0;\n }\n result.sort((a, b) => (a.left.position - b.left.position));\n return result;\n }\n replacePattern(searchPattern, replacePattern, start_, length_, findAllResult = null) {\n let result = [];\n let i;\n const output = {\n status: (-1),\n searchPatternPositions: [],\n replacePatternPositions: []\n };\n const { start, length } = this.prepareFindParameters(start_, length_);\n if (findAllResult == null) {\n result = this.findAllIn([searchPattern], start, length);\n if (result.length == 0) {\n return output;\n }\n }\n else {\n result = findAllResult;\n }\n output.searchPatternPositions.push(...Array.from(result, element => element.position));\n const patternDifference = searchPattern.length - replacePattern.length;\n const changedBuffer = new ArrayBuffer(this.view.length - (result.length * patternDifference));\n const changedView = new Uint8Array(changedBuffer);\n changedView.set(new Uint8Array(this.buffer, 0, start));\n for (i = 0; i < result.length; i++) {\n const currentPosition = (i == 0) ? start : result[i - 1].position;\n changedView.set(new Uint8Array(this.buffer, currentPosition, result[i].position - searchPattern.length - currentPosition), currentPosition - i * patternDifference);\n changedView.set(replacePattern.view, result[i].position - searchPattern.length - i * patternDifference);\n output.replacePatternPositions.push(result[i].position - searchPattern.length - i * patternDifference);\n }\n i--;\n changedView.set(new Uint8Array(this.buffer, result[i].position, this.length - result[i].position), result[i].position - searchPattern.length + replacePattern.length - i * patternDifference);\n this.buffer = changedBuffer;\n this.view = new Uint8Array(this.buffer);\n output.status = 1;\n return output;\n }\n skipPatterns(patterns, start_, length_, backward_) {\n const { start, length, backward } = this.prepareFindParameters(start_, length_, backward_);\n let result = start;\n for (let k = 0; k < patterns.length; k++) {\n const patternLength = patterns[k].length;\n const equalStart = (backward) ? (result - patternLength) : (result);\n let equal = true;\n for (let j = 0; j < patternLength; j++) {\n if (this.view[j + equalStart] != patterns[k].view[j]) {\n equal = false;\n break;\n }\n }\n if (equal) {\n k = (-1);\n if (backward) {\n result -= patternLength;\n if (result <= 0)\n return result;\n }\n else {\n result += patternLength;\n if (result >= (start + length))\n return result;\n }\n }\n }\n return result;\n }\n skipNotPatterns(patterns, start_, length_, backward_) {\n const { start, length, backward } = this.prepareFindParameters(start_, length_, backward_);\n let result = (-1);\n for (let i = 0; i < length; i++) {\n for (let k = 0; k < patterns.length; k++) {\n const patternLength = patterns[k].length;\n const equalStart = (backward) ? (start - i - patternLength) : (start + i);\n let equal = true;\n for (let j = 0; j < patternLength; j++) {\n if (this.view[j + equalStart] != patterns[k].view[j]) {\n equal = false;\n break;\n }\n }\n if (equal) {\n result = (backward) ? (start - i) : (start + i);\n break;\n }\n }\n if (result != (-1)) {\n break;\n }\n }\n return result;\n }\n prepareFindParameters(start = null, length = null, backward = false) {\n if (start === null) {\n start = (backward) ? this.length : 0;\n }\n if (start > this.length) {\n start = this.length;\n }\n if (backward) {\n if (length === null) {\n length = start;\n }\n if (length > start) {\n length = start;\n }\n }\n else {\n if (length === null) {\n length = this.length - start;\n }\n if (length > (this.length - start)) {\n length = this.length - start;\n }\n }\n return { start, length, backward };\n }\n}\n","import { ByteStream } from \"./byte_stream\";\nexport class SeqStream {\n constructor(parameters = {}) {\n this._stream = new ByteStream();\n this._length = 0;\n this._start = 0;\n this.backward = false;\n this.appendBlock = 0;\n this.prevLength = 0;\n this.prevStart = 0;\n if (\"view\" in parameters) {\n this.stream = new ByteStream({ view: parameters.view });\n }\n else if (\"buffer\" in parameters) {\n this.stream = new ByteStream({ buffer: parameters.buffer });\n }\n else if (\"string\" in parameters) {\n this.stream = new ByteStream({ string: parameters.string });\n }\n else if (\"hexstring\" in parameters) {\n this.stream = new ByteStream({ hexstring: parameters.hexstring });\n }\n else if (\"stream\" in parameters) {\n this.stream = parameters.stream.slice();\n }\n else {\n this.stream = new ByteStream();\n }\n if (\"backward\" in parameters && parameters.backward) {\n this.backward = parameters.backward;\n this._start = this.stream.length;\n }\n if (\"length\" in parameters && parameters.length > 0) {\n this._length = parameters.length;\n }\n if (\"start\" in parameters && parameters.start && parameters.start > 0) {\n this._start = parameters.start;\n }\n if (\"appendBlock\" in parameters && parameters.appendBlock && parameters.appendBlock > 0) {\n this.appendBlock = parameters.appendBlock;\n }\n }\n set stream(value) {\n this._stream = value;\n this.prevLength = this._length;\n this._length = value.length;\n this.prevStart = this._start;\n this._start = 0;\n }\n get stream() {\n return this._stream;\n }\n set length(value) {\n this.prevLength = this._length;\n this._length = value;\n }\n get length() {\n if (this.appendBlock) {\n return this.start;\n }\n return this._length;\n }\n set start(value) {\n if (value > this.stream.length)\n return;\n this.prevStart = this._start;\n this.prevLength = this._length;\n this._length -= (this.backward) ? (this._start - value) : (value - this._start);\n this._start = value;\n }\n get start() {\n return this._start;\n }\n get buffer() {\n return this._stream.buffer.slice(0, this._length);\n }\n resetPosition() {\n this._start = this.prevStart;\n this._length = this.prevLength;\n }\n findPattern(pattern, gap = null) {\n if ((gap == null) || (gap > this.length)) {\n gap = this.length;\n }\n const result = this.stream.findPattern(pattern, this.start, this.length, this.backward);\n if (result == (-1))\n return result;\n if (this.backward) {\n if (result < (this.start - pattern.length - gap)) {\n return (-1);\n }\n }\n else {\n if (result > (this.start + pattern.length + gap)) {\n return (-1);\n }\n }\n this.start = result;\n return result;\n }\n findFirstIn(patterns, gap = null) {\n if ((gap == null) || (gap > this.length)) {\n gap = this.length;\n }\n const result = this.stream.findFirstIn(patterns, this.start, this.length, this.backward);\n if (result.id == (-1))\n return result;\n if (this.backward) {\n if (result.position < (this.start - patterns[result.id].length - gap)) {\n return {\n id: (-1),\n position: (this.backward) ? 0 : (this.start + this.length)\n };\n }\n }\n else {\n if (result.position > (this.start + patterns[result.id].length + gap)) {\n return {\n id: (-1),\n position: (this.backward) ? 0 : (this.start + this.length)\n };\n }\n }\n this.start = result.position;\n return result;\n }\n findAllIn(patterns) {\n const start = (this.backward) ? (this.start - this.length) : this.start;\n return this.stream.findAllIn(patterns, start, this.length);\n }\n findFirstNotIn(patterns, gap = null) {\n if ((gap == null) || (gap > this._length)) {\n gap = this._length;\n }\n const result = this._stream.findFirstNotIn(patterns, this._start, this._length, this.backward);\n if ((result.left.id == (-1)) && (result.right.id == (-1))) {\n return result;\n }\n if (this.backward) {\n if (result.right.id != (-1)) {\n if (result.right.position < (this._start - patterns[result.right.id].length - gap)) {\n return {\n left: {\n id: (-1),\n position: this._start\n },\n right: {\n id: (-1),\n position: 0\n },\n value: new ByteStream()\n };\n }\n }\n }\n else {\n if (result.left.id != (-1)) {\n if (result.left.position > (this._start + patterns[result.left.id].length + gap)) {\n return {\n left: {\n id: (-1),\n position: this._start\n },\n right: {\n id: (-1),\n position: 0\n },\n value: new ByteStream()\n };\n }\n }\n }\n if (this.backward) {\n if (result.left.id == (-1)) {\n this.start = 0;\n }\n else {\n this.start = result.left.position;\n }\n }\n else {\n if (result.right.id == (-1)) {\n this.start = (this._start + this._length);\n }\n else {\n this.start = result.right.position;\n }\n }\n return result;\n }\n findAllNotIn(patterns) {\n const start = (this.backward) ? (this._start - this._length) : this._start;\n return this._stream.findAllNotIn(patterns, start, this._length);\n }\n findFirstSequence(patterns, length = null, gap = null) {\n if ((length == null) || (length > this._length)) {\n length = this._length;\n }\n if ((gap == null) || (gap > length)) {\n gap = length;\n }\n const result = this._stream.findFirstSequence(patterns, this._start, length, this.backward);\n if (result.value.length == 0) {\n return result;\n }\n if (this.backward) {\n if (result.position < (this._start - result.value.length - gap)) {\n return {\n position: (-1),\n value: new ByteStream()\n };\n }\n }\n else {\n if (result.position > (this._start + result.value.length + gap)) {\n return {\n position: (-1),\n value: new ByteStream()\n };\n }\n }\n this.start = result.position;\n return result;\n }\n findAllSequences(patterns) {\n const start = (this.backward) ? (this.start - this.length) : this.start;\n return this.stream.findAllSequences(patterns, start, this.length);\n }\n findPairedPatterns(leftPattern, rightPattern, gap = null) {\n if ((gap == null) || (gap > this.length)) {\n gap = this.length;\n }\n const start = (this.backward) ? (this.start - this.length) : this.start;\n const result = this.stream.findPairedPatterns(leftPattern, rightPattern, start, this.length);\n if (result.length) {\n if (this.backward) {\n if (result[0].right < (this.start - rightPattern.length - gap)) {\n return [];\n }\n }\n else {\n if (result[0].left > (this.start + leftPattern.length + gap)) {\n return [];\n }\n }\n }\n return result;\n }\n findPairedArrays(leftPatterns, rightPatterns, gap = null) {\n if ((gap == null) || (gap > this.length)) {\n gap = this.length;\n }\n const start = (this.backward) ? (this.start - this.length) : this.start;\n const result = this.stream.findPairedArrays(leftPatterns, rightPatterns, start, this.length);\n if (result.length) {\n if (this.backward) {\n if (result[0].right.position < (this.start - rightPatterns[result[0].right.id].length - gap)) {\n return [];\n }\n }\n else {\n if (result[0].left.position > (this.start + leftPatterns[result[0].left.id].length + gap)) {\n return [];\n }\n }\n }\n return result;\n }\n replacePattern(searchPattern, replacePattern) {\n const start = (this.backward) ? (this.start - this.length) : this.start;\n return this.stream.replacePattern(searchPattern, replacePattern, start, this.length);\n }\n skipPatterns(patterns) {\n const result = this.stream.skipPatterns(patterns, this.start, this.length, this.backward);\n this.start = result;\n return result;\n }\n skipNotPatterns(patterns) {\n const result = this.stream.skipNotPatterns(patterns, this.start, this.length, this.backward);\n if (result == (-1))\n return (-1);\n this.start = result;\n return result;\n }\n append(stream) {\n this.beforeAppend(stream.length);\n this._stream.view.set(stream.view, this._start);\n this._length += (stream.length * 2);\n this.start = (this._start + stream.length);\n this.prevLength -= (stream.length * 2);\n }\n appendView(view) {\n this.beforeAppend(view.length);\n this._stream.view.set(view, this._start);\n this._length += (view.length * 2);\n this.start = (this._start + view.length);\n this.prevLength -= (view.length * 2);\n }\n appendChar(char) {\n this.beforeAppend(1);\n this._stream.view[this._start] = char;\n this._length += 2;\n this.start = (this._start + 1);\n this.prevLength -= 2;\n }\n appendUint16(number) {\n this.beforeAppend(2);\n const value = new Uint16Array([number]);\n const view = new Uint8Array(value.buffer);\n this.stream.view[this._start] = view[1];\n this._stream.view[this._start + 1] = view[0];\n this._length += 4;\n this.start = this._start + 2;\n this.prevLength -= 4;\n }\n appendUint24(number) {\n this.beforeAppend(3);\n const value = new Uint32Array([number]);\n const view = new Uint8Array(value.buffer);\n this._stream.view[this._start] = view[2];\n this._stream.view[this._start + 1] = view[1];\n this._stream.view[this._start + 2] = view[0];\n this._length += 6;\n this.start = (this._start + 3);\n this.prevLength -= 6;\n }\n appendUint32(number) {\n this.beforeAppend(4);\n const value = new Uint32Array([number]);\n const view = new Uint8Array(value.buffer);\n this._stream.view[this._start] = view[3];\n this._stream.view[this._start + 1] = view[2];\n this._stream.view[this._start + 2] = view[1];\n this._stream.view[this._start + 3] = view[0];\n this._length += 8;\n this.start = (this._start + 4);\n this.prevLength -= 8;\n }\n appendInt16(number) {\n this.beforeAppend(2);\n const value = new Int16Array([number]);\n const view = new Uint8Array(value.buffer);\n this._stream.view[this._start] = view[1];\n this._stream.view[this._start + 1] = view[0];\n this._length += 4;\n this.start = (this._start + 2);\n this.prevLength -= 4;\n }\n appendInt32(number) {\n this.beforeAppend(4);\n const value = new Int32Array([number]);\n const view = new Uint8Array(value.buffer);\n this._stream.view[this._start] = view[3];\n this._stream.view[this._start + 1] = view[2];\n this._stream.view[this._start + 2] = view[1];\n this._stream.view[this._start + 3] = view[0];\n this._length += 8;\n this.start = (this._start + 4);\n this.prevLength -= 8;\n }\n getBlock(size, changeLength = true) {\n if (this._length <= 0) {\n return new Uint8Array(0);\n }\n if (this._length < size) {\n size = this._length;\n }\n let result;\n if (this.backward) {\n const view = this._stream.view.subarray(this._length - size, this._length);\n result = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n result[size - 1 - i] = view[i];\n }\n }\n else {\n result = this._stream.view.subarray(this._start, this._start + size);\n }\n if (changeLength) {\n this.start += ((this.backward) ? ((-1) * size) : size);\n }\n return result;\n }\n getUint16(changeLength = true) {\n const block = this.getBlock(2, changeLength);\n if (block.length < 2)\n return 0;\n const value = new Uint16Array(1);\n const view = new Uint8Array(value.buffer);\n view[0] = block[1];\n view[1] = block[0];\n return value[0];\n }\n getInt16(changeLength = true) {\n const block = this.getBlock(2, changeLength);\n if (block.length < 2)\n return 0;\n const value = new Int16Array(1);\n const view = new Uint8Array(value.buffer);\n view[0] = block[1];\n view[1] = block[0];\n return value[0];\n }\n getUint24(changeLength = true) {\n const block = this.getBlock(3, changeLength);\n if (block.length < 3)\n return 0;\n const value = new Uint32Array(1);\n const view = new Uint8Array(value.buffer);\n for (let i = 3; i >= 1; i--) {\n view[3 - i] = block[i - 1];\n }\n return value[0];\n }\n getUint32(changeLength = true) {\n const block = this.getBlock(4, changeLength);\n if (block.length < 4) {\n return 0;\n }\n const value = new Uint32Array(1);\n const view = new Uint8Array(value.buffer);\n for (let i = 3; i >= 0; i--) {\n view[3 - i] = block[i];\n }\n return value[0];\n }\n getInt32(changeLength = true) {\n const block = this.getBlock(4, changeLength);\n if (block.length < 4)\n return 0;\n const value = new Int32Array(1);\n const view = new Uint8Array(value.buffer);\n for (let i = 3; i >= 0; i--) {\n view[3 - i] = block[i];\n }\n return value[0];\n }\n beforeAppend(size) {\n if ((this._start + size) > this._stream.length) {\n if (size > this.appendBlock) {\n this.appendBlock = size + SeqStream.APPEND_BLOCK;\n }\n this._stream.realloc(this._stream.length + this.appendBlock);\n }\n }\n}\nSeqStream.APPEND_BLOCK = 1000;\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, utilFromBase, utilToBase, bufferToHexCodes, toBase64, fromBase64, arrayBufferToString, stringToArrayBuffer } from \"pvutils\";\nimport { ByteStream, SeqStream } from \"bytestreamjs\";\nimport { getCrypto, getEngine } from \"./common.js\";\nimport PublicKeyInfo from \"./PublicKeyInfo.js\";\n//**************************************************************************************\nexport class SignedCertificateTimestamp\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for SignedCertificateTimestamp class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {number}\n\t\t * @desc version\n\t\t */\n\t\tthis.version = getParametersValue(parameters, \"version\", SignedCertificateTimestamp.defaultValues(\"version\"));\n\t\t/**\n\t\t * @type {ArrayBuffer}\n\t\t * @desc logID\n\t\t */\n\t\tthis.logID = getParametersValue(parameters, \"logID\", SignedCertificateTimestamp.defaultValues(\"logID\"));\n\t\t/**\n\t\t * @type {Date}\n\t\t * @desc timestamp\n\t\t */\n\t\tthis.timestamp = getParametersValue(parameters, \"timestamp\", SignedCertificateTimestamp.defaultValues(\"timestamp\"));\n\t\t/**\n\t\t * @type {ArrayBuffer}\n\t\t * @desc extensions\n\t\t */\n\t\tthis.extensions = getParametersValue(parameters, \"extensions\", SignedCertificateTimestamp.defaultValues(\"extensions\"));\n\t\t/**\n\t\t * @type {string}\n\t\t * @desc hashAlgorithm\n\t\t */\n\t\tthis.hashAlgorithm = getParametersValue(parameters, \"hashAlgorithm\", SignedCertificateTimestamp.defaultValues(\"hashAlgorithm\"));\n\t\t/**\n\t\t * @type {string}\n\t\t * @desc signatureAlgorithm\n\t\t */\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", SignedCertificateTimestamp.defaultValues(\"signatureAlgorithm\"));\n\t\t/**\n\t\t * @type {Object}\n\t\t * @desc signature\n\t\t */\n\t\tthis.signature = getParametersValue(parameters, \"signature\", SignedCertificateTimestamp.defaultValues(\"signature\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"stream\"\n\t\tif(\"stream\" in parameters)\n\t\t\tthis.fromStream(parameters.stream);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"version\":\n\t\t\t\treturn 0;\n\t\t\tcase \"logID\":\n\t\t\tcase \"extensions\":\n\t\t\t\treturn new ArrayBuffer(0);\n\t\t\tcase \"timestamp\":\n\t\t\t\treturn new Date(0);\n\t\t\tcase \"hashAlgorithm\":\n\t\t\tcase \"signatureAlgorithm\":\n\t\t\t\treturn \"\";\n\t\t\tcase \"signature\":\n\t\t\t\treturn new asn1js.Any();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for SignedCertificateTimestamp class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\tif((schema instanceof asn1js.RawData) === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SignedCertificateTimestamp\");\n\t\t\n\t\tconst seqStream = new SeqStream({\n\t\t\tstream: new ByteStream({\n\t\t\t\tbuffer: schema.data\n\t\t\t})\n\t\t});\n\t\t\n\t\tthis.fromStream(seqStream);\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert SeqStream data into current class\n\t * @param {!SeqStream} stream\n\t */\n\tfromStream(stream)\n\t{\n\t\tconst blockLength = stream.getUint16();\n\t\t\n\t\tthis.version = (stream.getBlock(1))[0];\n\t\t\n\t\tif(this.version === 0)\n\t\t{\n\t\t\tthis.logID = (new Uint8Array(stream.getBlock(32))).buffer.slice(0);\n\t\t\tthis.timestamp = new Date(utilFromBase(new Uint8Array(stream.getBlock(8)), 8));\n\t\t\t\n\t\t\t//region Extensions\n\t\t\tconst extensionsLength = stream.getUint16();\n\t\t\tthis.extensions = (new Uint8Array(stream.getBlock(extensionsLength))).buffer.slice(0);\n\t\t\t//endregion\n\t\t\t\n\t\t\t//region Hash algorithm\n\t\t\tswitch((stream.getBlock(1))[0])\n\t\t\t{\n\t\t\t\tcase 0:\n\t\t\t\t\tthis.hashAlgorithm = \"none\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.hashAlgorithm = \"md5\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.hashAlgorithm = \"sha1\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.hashAlgorithm = \"sha224\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.hashAlgorithm = \"sha256\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tthis.hashAlgorithm = \"sha384\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\t\tthis.hashAlgorithm = \"sha512\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Object's stream was not correct for SignedCertificateTimestamp\");\n\t\t\t}\n\t\t\t//endregion\n\t\t\t\n\t\t\t//region Signature algorithm\n\t\t\tswitch((stream.getBlock(1))[0])\n\t\t\t{\n\t\t\t\tcase 0:\n\t\t\t\t\tthis.signatureAlgorithm = \"anonymous\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.signatureAlgorithm = \"rsa\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.signatureAlgorithm = \"dsa\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.signatureAlgorithm = \"ecdsa\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Object's stream was not correct for SignedCertificateTimestamp\");\n\t\t\t}\n\t\t\t//endregion\n\t\t\t\n\t\t\t//region Signature\n\t\t\tconst signatureLength = stream.getUint16();\n\t\t\tconst signatureData = (new Uint8Array(stream.getBlock(signatureLength))).buffer.slice(0);\n\t\t\t\n\t\t\tconst asn1 = asn1js.fromBER(signatureData);\n\t\t\tif(asn1.offset === (-1))\n\t\t\t\tthrow new Error(\"Object's stream was not correct for SignedCertificateTimestamp\");\n\t\t\t\n\t\t\tthis.signature = asn1.result;\n\t\t\t//endregion\n\t\t\t\n\t\t\tif(blockLength !== (47 + extensionsLength + signatureLength))\n\t\t\t\tthrow new Error(\"Object's stream was not correct for SignedCertificateTimestamp\");\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst stream = this.toStream();\n\t\t\n\t\treturn new asn1js.RawData({ data: stream.stream.buffer });\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to SeqStream data\n\t * @returns {SeqStream} SeqStream object\n\t */\n\ttoStream()\n\t{\n\t\tconst stream = new SeqStream();\n\t\t\n\t\tstream.appendUint16(47 + this.extensions.byteLength + this.signature.valueBeforeDecode.byteLength);\n\t\tstream.appendChar(this.version);\n\t\tstream.appendView(new Uint8Array(this.logID));\n\t\t\n\t\tconst timeBuffer = new ArrayBuffer(8);\n\t\tconst timeView = new Uint8Array(timeBuffer);\n\t\t\n\t\tconst baseArray = utilToBase(this.timestamp.valueOf(), 8);\n\t\ttimeView.set(new Uint8Array(baseArray), 8 - baseArray.byteLength);\n\t\t\n\t\tstream.appendView(timeView);\n\t\tstream.appendUint16(this.extensions.byteLength);\n\t\t\n\t\tif(this.extensions.byteLength)\n\t\t\tstream.appendView(new Uint8Array(this.extensions));\n\t\t\n\t\tlet _hashAlgorithm;\n\t\t\n\t\tswitch(this.hashAlgorithm.toLowerCase())\n\t\t{\n\t\t\tcase \"none\":\n\t\t\t\t_hashAlgorithm = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"md5\":\n\t\t\t\t_hashAlgorithm = 1;\n\t\t\t\tbreak;\n\t\t\tcase \"sha1\":\n\t\t\t\t_hashAlgorithm = 2;\n\t\t\t\tbreak;\n\t\t\tcase \"sha224\":\n\t\t\t\t_hashAlgorithm = 3;\n\t\t\t\tbreak;\n\t\t\tcase \"sha256\":\n\t\t\t\t_hashAlgorithm = 4;\n\t\t\t\tbreak;\n\t\t\tcase \"sha384\":\n\t\t\t\t_hashAlgorithm = 5;\n\t\t\t\tbreak;\n\t\t\tcase \"sha512\":\n\t\t\t\t_hashAlgorithm = 6;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Incorrect data for hashAlgorithm: ${this.hashAlgorithm}`);\n\t\t}\n\t\t\n\t\tstream.appendChar(_hashAlgorithm);\n\t\t\n\t\tlet _signatureAlgorithm;\n\t\t\n\t\tswitch(this.signatureAlgorithm.toLowerCase())\n\t\t{\n\t\t\tcase \"anonymous\":\n\t\t\t\t_signatureAlgorithm = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"rsa\":\n\t\t\t\t_signatureAlgorithm = 1;\n\t\t\t\tbreak;\n\t\t\tcase \"dsa\":\n\t\t\t\t_signatureAlgorithm = 2;\n\t\t\t\tbreak;\n\t\t\tcase \"ecdsa\":\n\t\t\t\t_signatureAlgorithm = 3;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Incorrect data for signatureAlgorithm: ${this.signatureAlgorithm}`);\n\t\t}\n\t\t\n\t\tstream.appendChar(_signatureAlgorithm);\n\t\t\n\t\tconst _signature = this.signature.toBER(false);\n\t\t\n\t\tstream.appendUint16(_signature.byteLength);\n\t\tstream.appendView(new Uint8Array(_signature));\n\t\t\n\t\treturn stream;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\tversion: this.version,\n\t\t\tlogID: bufferToHexCodes(this.logID),\n\t\t\ttimestamp: this.timestamp,\n\t\t\textensions: bufferToHexCodes(this.extensions),\n\t\t\thashAlgorithm: this.hashAlgorithm,\n\t\t\tsignatureAlgorithm: this.signatureAlgorithm,\n\t\t\tsignature: this.signature.toJSON()\n\t\t};\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Verify SignedCertificateTimestamp for specific input data\n\t * @param {Object[]} logs Array of objects with information about each CT Log (like here: https://ct.grahamedgecombe.com/logs.json)\n\t * @param {String} logs.log_id Identifier of the CT Log encoded in BASE-64 format\n\t * @param {String} logs.key Public key of the CT Log encoded in BASE-64 format\n\t * @param {ArrayBuffer} data Data to verify signature against. Could be encoded Certificate or encoded PreCert\n\t * @param {Number} [dataType=0] Type = 0 (data is encoded Certificate), type = 1 (data is encoded PreCert)\n\t * @return {Promise}\n\t */\n\tasync verify(logs, data, dataType = 0)\n\t{\n\t\t//region Initial variables\n\t\tlet logId = toBase64(arrayBufferToString(this.logID));\n\t\t\n\t\tlet publicKeyBase64 = null;\n\t\tlet publicKeyInfo;\n\t\t\n\t\tlet stream = new SeqStream();\n\t\t//endregion\n\t\t\n\t\t//region Found and init public key\n\t\tfor(const log of logs)\n\t\t{\n\t\t\tif(log.log_id === logId)\n\t\t\t{\n\t\t\t\tpublicKeyBase64 = log.key;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(publicKeyBase64 === null)\n\t\t\tthrow new Error(`Public key not found for CT with logId: ${logId}`);\n\t\t\n\t\tconst asn1 = asn1js.fromBER(stringToArrayBuffer(fromBase64(publicKeyBase64)));\n\t\tif(asn1.offset === (-1))\n\t\t\tthrow new Error(`Incorrect key value for CT Log with logId: ${logId}`);\n\t\t\n\t\tpublicKeyInfo = new PublicKeyInfo({ schema: asn1.result });\n\t\t//endregion\n\t\t\n\t\t//region Initialize signed data block\n\t\tstream.appendChar(0x00); // sct_version\n\t\tstream.appendChar(0x00); // signature_type = certificate_timestamp\n\t\t\n\t\tconst timeBuffer = new ArrayBuffer(8);\n\t\tconst timeView = new Uint8Array(timeBuffer);\n\t\t\n\t\tconst baseArray = utilToBase(this.timestamp.valueOf(), 8);\n\t\ttimeView.set(new Uint8Array(baseArray), 8 - baseArray.byteLength);\n\t\t\n\t\tstream.appendView(timeView);\n\t\t\n\t\tstream.appendUint16(dataType);\n\t\t\n\t\tif(dataType === 0)\n\t\t\tstream.appendUint24(data.byteLength);\n\t\t\n\t\tstream.appendView(new Uint8Array(data));\n\t\t\n\t\tstream.appendUint16(this.extensions.byteLength);\n\t\t\n\t\tif(this.extensions.byteLength !== 0)\n\t\t\tstream.appendView(new Uint8Array(this.extensions));\n\t\t//endregion\n\t\t\n\t\t//region Perform verification\n\t\treturn getEngine().subtle.verifyWithPublicKey(\n\t\t\tstream._stream._buffer.slice(0, stream._length),\n\t\t\t{ valueBlock: { valueHex: this.signature.toBER(false) } },\n\t\t\tpublicKeyInfo,\n\t\t\t{ algorithmId: \"\" },\n\t\t\t\"SHA-256\"\n\t\t);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC6962\n */\nexport default class SignedCertificateTimestampList\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for SignedCertificateTimestampList class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {Array.}\n\t\t * @desc timestamps\n\t\t */\n\t\tthis.timestamps = getParametersValue(parameters, \"timestamps\", SignedCertificateTimestampList.defaultValues(\"timestamps\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"timestamps\":\n\t\t\t\treturn [];\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for SignedCertificateTimestampList class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Compare values with default values for all class members\n\t * @param {string} memberName String name for a class member\n\t * @param {*} memberValue Value to compare with default value\n\t */\n\tstatic compareWithDefault(memberName, memberValue)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"timestamps\":\n\t\t\t\treturn (memberValue.length === 0);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for SignedCertificateTimestampList class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * SignedCertificateTimestampList ::= OCTET STRING\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [optional]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\tif((\"optional\" in names) === false)\n\t\t\tnames.optional = false;\n\t\t\n\t\treturn (new asn1js.OctetString({\n\t\t\tname: (names.blockName || \"SignedCertificateTimestampList\"),\n\t\t\toptional: names.optional\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Check the schema is valid\n\t\tif((schema instanceof asn1js.OctetString) === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SignedCertificateTimestampList\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tconst seqStream = new SeqStream({\n\t\t\tstream: new ByteStream({\n\t\t\t\tbuffer: schema.valueBlock.valueHex\n\t\t\t})\n\t\t});\n\t\t\n\t\tlet dataLength = seqStream.getUint16();\n\t\tif(dataLength !== seqStream.length)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SignedCertificateTimestampList\");\n\t\t\n\t\twhile(seqStream.length)\n\t\t\tthis.timestamps.push(new SignedCertificateTimestamp({ stream: seqStream }));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Initial variables\n\t\tconst stream = new SeqStream();\n\t\t\n\t\tlet overallLength = 0;\n\t\t\n\t\tconst timestampsData = [];\n\t\t//endregion\n\t\t\n\t\t//region Get overall length\n\t\tfor(const timestamp of this.timestamps)\n\t\t{\n\t\t\tconst timestampStream = timestamp.toStream();\n\t\t\ttimestampsData.push(timestampStream);\n\t\t\toverallLength += timestampStream.stream.buffer.byteLength;\n\t\t}\n\t\t//endregion\n\t\t\n\t\tstream.appendUint16(overallLength);\n\t\t\n\t\t//region Set data from all timestamps\n\t\tfor(const timestamp of timestampsData)\n\t\t\tstream.appendView(timestamp.stream.view);\n\t\t//endregion\n\t\t\n\t\treturn new asn1js.OctetString({ valueHex: stream.stream.buffer.slice(0) });\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\ttimestamps: Array.from(this.timestamps, element => element.toJSON())\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Verify SignedCertificateTimestamp for specific certificate content\n * @param {Certificate} certificate Certificate for which verification would be performed\n * @param {Certificate} issuerCertificate Certificate of the issuer of target certificate\n * @param {Object[]} logs Array of objects with information about each CT Log (like here: https://ct.grahamedgecombe.com/logs.json)\n * @param {String} logs.log_id Identifier of the CT Log encoded in BASE-64 format\n * @param {String} logs.key Public key of the CT Log encoded in BASE-64 format\n * @param {Number} [index=-1] Index of SignedCertificateTimestamp inside SignedCertificateTimestampList (for -1 would verify all)\n * @return {Array} Array of verification results\n */\nexport async function verifySCTsForCertificate(certificate, issuerCertificate, logs, index = (-1))\n{\n\t//region Initial variables\n\tlet parsedValue = null;\n\tlet tbs;\n\tlet issuerId;\n\t\n\tconst stream = new SeqStream();\n\t\n\tlet preCert;\n\t//endregion\n\t\n\t//region Get a \"crypto\" extension\n\tconst crypto = getCrypto();\n\tif(typeof crypto === \"undefined\")\n\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\n\t//endregion\n\t\n\t//region Remove certificate extension\n\tfor(let i = 0; i < certificate.extensions.length; i++)\n\t{\n\t\tswitch(certificate.extensions[i].extnID)\n\t\t{\n\t\t\tcase \"1.3.6.1.4.1.11129.2.4.2\":\n\t\t\t\t{\n\t\t\t\t\tparsedValue = certificate.extensions[i].parsedValue;\n\t\t\t\t\t\n\t\t\t\t\tif(parsedValue.timestamps.length === 0)\n\t\t\t\t\t\tthrow new Error(\"Nothing to verify in the certificate\");\n\t\t\t\t\t\n\t\t\t\t\tcertificate.extensions.splice(i, 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t}\n\t//endregion\n\t\n\t//region Check we do have what to verify\n\tif(parsedValue === null)\n\t\tthrow new Error(\"No SignedCertificateTimestampList extension in the specified certificate\");\n\t//endregion\n\t\n\t//region Prepare modifier TBS value\n\ttbs = certificate.encodeTBS().toBER(false);\n\t//endregion\n\t\n\t//region Initialize \"issuer_key_hash\" value\n\tissuerId = await crypto.digest({ name: \"SHA-256\" }, new Uint8Array(issuerCertificate.subjectPublicKeyInfo.toSchema().toBER(false)));\n\t//endregion\n\t\n\t//region Make final \"PreCert\" value\n\tstream.appendView(new Uint8Array(issuerId));\n\tstream.appendUint24(tbs.byteLength);\n\tstream.appendView(new Uint8Array(tbs));\n\t\n\tpreCert = stream._stream._buffer.slice(0, stream._length);\n\t//endregion\n\t\n\t//region Call verification function for specified index\n\tif(index === (-1))\n\t{\n\t\tconst verifyArray = [];\n\t\t\n\t\tfor(const timestamp of parsedValue.timestamps)\n\t\t{\n\t\t\tconst verifyResult = await timestamp.verify(logs, preCert, 1);\n\t\t\tverifyArray.push(verifyResult);\n\t\t}\n\t\t\n\t\treturn verifyArray;\n\t}\n\t\n\tif(index >= parsedValue.timestamps.length)\n\t\tindex = (parsedValue.timestamps.length - 1);\n\t\n\treturn [await parsedValue.timestamps[index].verify(logs, preCert, 1)];\n\t//endregion\n}\n//**********************************************************************************\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\n//**************************************************************************************\n/**\n * Class from \"[MS-WCCE]: Windows Client Certificate Enrollment Protocol\"\n */\nexport default class CertificateTemplate\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for CertificateTemplate class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {string}\n\t\t * @desc templateID\n\t\t */\n\t\tthis.templateID = getParametersValue(parameters, \"templateID\", CertificateTemplate.defaultValues(\"templateID\"));\n\n\t\tif(\"templateMajorVersion\" in parameters)\n\t\t\t/**\n\t\t\t * @type {number}\n\t\t\t * @desc templateMajorVersion\n\t\t\t */\n\t\t\tthis.templateMajorVersion = getParametersValue(parameters, \"templateMajorVersion\", CertificateTemplate.defaultValues(\"templateMajorVersion\"));\n\n\t\tif(\"templateMinorVersion\" in parameters)\n\t\t\t/**\n\t\t\t * @type {number}\n\t\t\t * @desc templateMinorVersion\n\t\t\t */\n\t\t\tthis.templateMinorVersion = getParametersValue(parameters, \"templateMinorVersion\", CertificateTemplate.defaultValues(\"templateMinorVersion\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"templateID\":\n\t\t\t\treturn \"\";\n\t\t\tcase \"templateMajorVersion\":\n\t\t\tcase \"templateMinorVersion\":\n\t\t\t\treturn 0;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for CertificateTemplate class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * CertificateTemplateOID ::= SEQUENCE {\n * templateID OBJECT IDENTIFIER,\n * templateMajorVersion INTEGER (0..4294967295) OPTIONAL,\n * templateMinorVersion INTEGER (0..4294967295) OPTIONAL\n * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [templateID]\n\t\t * @property {string} [templateMajorVersion]\n\t\t * @property {string} [templateMinorVersion]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.templateID || \"\") }),\n\t\t\t\tnew asn1js.Integer({\n\t\t\t\t\tname: (names.templateMajorVersion || \"\"),\n\t\t\t\t\toptional: true\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Integer({\n\t\t\t\t\tname: (names.templateMinorVersion || \"\"),\n\t\t\t\t\toptional: true\n\t\t\t\t}),\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"templateID\",\n\t\t\t\"templateMajorVersion\",\n\t\t\t\"templateMinorVersion\"\n\t\t]);\n\t\t//endregion\n\n\t\t//region Check the schema is valid\n\t\tlet asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tCertificateTemplate.schema({\n\t\t\t\tnames: {\n\t\t\t\t\ttemplateID: \"templateID\",\n\t\t\t\t\ttemplateMajorVersion: \"templateMajorVersion\",\n\t\t\t\t\ttemplateMinorVersion: \"templateMinorVersion\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CertificateTemplate\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tthis.templateID = asn1.result.templateID.valueBlock.toString();\n\n\t\tif(\"templateMajorVersion\" in asn1.result)\n\t\t\tthis.templateMajorVersion = asn1.result.templateMajorVersion.valueBlock.valueDec;\n\n\t\tif(\"templateMinorVersion\" in asn1.result)\n\t\t\tthis.templateMinorVersion = asn1.result.templateMinorVersion.valueBlock.valueDec;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Create array for output sequence\n\t\tconst outputArray = [];\n\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.templateID }));\n\n\t\tif(\"templateMajorVersion\" in this)\n\t\t\toutputArray.push(new asn1js.Integer({ value: this.templateMajorVersion }));\n\n\t\tif(\"templateMinorVersion\" in this)\n\t\t\toutputArray.push(new asn1js.Integer({ value: this.templateMinorVersion }));\n\t\t//endregion\n\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: outputArray\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst object = {\n\t\t\textnID: this.templateID\n\t\t};\n\n\t\tif(\"templateMajorVersion\" in this)\n\t\t\tobject.templateMajorVersion = this.templateMajorVersion;\n\n\t\tif(\"templateMinorVersion\" in this)\n\t\t\tobject.templateMinorVersion = this.templateMinorVersion;\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, utilConcatBuf } from \"pvutils\";\n//**************************************************************************************\n/**\n * Class from https://docs.microsoft.com/en-us/windows/desktop/seccrypto/certification-authority-renewal\n */\nexport default class CAVersion\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for CAVersion class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {number}\n\t\t * @desc certificateIndex\n\t\t */\n\t\tthis.certificateIndex = getParametersValue(parameters, \"certificateIndex\", CAVersion.defaultValues(\"certificateIndex\"));\n\n\t\t/**\n\t\t * @type {number}\n\t\t * @desc keyIndex\n\t\t */\n\t\tthis.keyIndex = getParametersValue(parameters, \"keyIndex\", CAVersion.defaultValues(\"keyIndex\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"certificateIndex\":\n\t\t\tcase \"keyIndex\":\n\t\t\t\treturn 0;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for CAVersion class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * CAVersion ::= INTEGER\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\treturn (new asn1js.Integer());\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Check the schema is valid\n\t\tif(schema.constructor.blockName() !== asn1js.Integer.blockName())\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CAVersion\");\n\t\t//endregion\n\n\t\t//region Check length of the input value and correct it if needed\n\t\tlet value = schema.valueBlock.valueHex.slice(0);\n\t\tconst valueView = new Uint8Array(value);\n\n\t\tswitch(true)\n\t\t{\n\t\t\tcase (value.byteLength < 4):\n\t\t\t\t{\n\t\t\t\t\tconst tempValue = new ArrayBuffer(4);\n\t\t\t\t\tconst tempValueView = new Uint8Array(tempValue);\n\n\t\t\t\t\ttempValueView.set(valueView, 4 - value.byteLength);\n\n\t\t\t\t\tvalue = tempValue.slice(0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase (value.byteLength > 4):\n\t\t\t\t{\n\t\t\t\t\tconst tempValue = new ArrayBuffer(4);\n\t\t\t\t\tconst tempValueView = new Uint8Array(tempValue);\n\n\t\t\t\t\ttempValueView.set(valueView.slice(0, 4));\n\n\t\t\t\t\tvalue = tempValue.slice(0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tconst keyIndexBuffer = value.slice(0, 2);\n\t\tconst keyIndexView8 = new Uint8Array(keyIndexBuffer);\n\t\tlet temp = keyIndexView8[0];\n\t\tkeyIndexView8[0] = keyIndexView8[1];\n\t\tkeyIndexView8[1] = temp;\n\n\t\tconst keyIndexView16 = new Uint16Array(keyIndexBuffer);\n\n\t\tthis.keyIndex = keyIndexView16[0];\n\n\t\tconst certificateIndexBuffer = value.slice(2);\n\t\tconst certificateIndexView8 = new Uint8Array(certificateIndexBuffer);\n\t\ttemp = certificateIndexView8[0];\n\t\tcertificateIndexView8[0] = certificateIndexView8[1];\n\t\tcertificateIndexView8[1] = temp;\n\n\t\tconst certificateIndexView16 = new Uint16Array(certificateIndexBuffer);\n\n\t\tthis.certificateIndex = certificateIndexView16[0];\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Create raw values\n\t\tconst certificateIndexBuffer = new ArrayBuffer(2);\n\t\tconst certificateIndexView = new Uint16Array(certificateIndexBuffer);\n\n\t\tcertificateIndexView[0] = this.certificateIndex;\n\n\t\tconst certificateIndexView8 = new Uint8Array(certificateIndexBuffer);\n\t\tlet temp = certificateIndexView8[0];\n\t\tcertificateIndexView8[0] = certificateIndexView8[1];\n\t\tcertificateIndexView8[1] = temp;\n\n\t\tconst keyIndexBuffer = new ArrayBuffer(2);\n\t\tconst keyIndexView = new Uint16Array(keyIndexBuffer);\n\n\t\tkeyIndexView[0] = this.keyIndex;\n\n\t\tconst keyIndexView8 = new Uint8Array(keyIndexBuffer);\n\t\ttemp = keyIndexView8[0];\n\t\tkeyIndexView8[0] = keyIndexView8[1];\n\t\tkeyIndexView8[1] = temp;\n\t\t//endregion\n\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Integer({\n\t\t\tvalueHex: utilConcatBuf(keyIndexBuffer, certificateIndexBuffer)\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\tcertificateIndex: this.certificateIndex,\n\t\t\tkeyIndex: this.keyIndex\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\n//**************************************************************************************\n/**\n * Class from RFC3739\n */\nexport class QCStatement\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for QCStatement class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {string}\n\t\t */\n\t\tthis.id = getParametersValue(parameters, \"id\", QCStatement.defaultValues(\"id\"));\n\n\t\tif(\"type\" in parameters)\n\t\t{\n\t\t\t/**\n\t\t\t * @type {*} Any data described by \"id\"\n\t\t\t */\n\t\t\tthis.type = getParametersValue(parameters, \"type\", QCStatement.defaultValues(\"type\"));\n\t\t}\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"id\":\n\t\t\t\treturn \"\";\n\t\t\tcase \"type\":\n\t\t\t\treturn new asn1js.Null();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for QCStatement class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Compare values with default values for all class members\n\t * @param {string} memberName String name for a class member\n\t * @param {*} memberValue Value to compare with default value\n\t */\n\tstatic compareWithDefault(memberName, memberValue)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"id\":\n\t\t\t\treturn (memberValue === \"\");\n\t\t\tcase \"type\":\n\t\t\t\treturn (memberValue instanceof asn1js.Null);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for QCStatement class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n \t *\t QCStatement ::= SEQUENCE {\n\t * statementId QC-STATEMENT.&id({SupportedStatements}),\n\t * statementInfo QC-STATEMENT.&Type({SupportedStatements}{@statementId}) OPTIONAL\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [id]\n\t\t * @property {string} [type]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.id || \"\") }),\n\t\t\t\tnew asn1js.Any({\n\t\t\t\t\tname: (names.type || \"\"),\n\t\t\t\t\toptional: true\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"id\",\n\t\t\t\"type\"\n\t\t]);\n\t\t//endregion\n\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tQCStatement.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tid: \"id\",\n\t\t\t\t\ttype: \"type\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for QCStatement\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tthis.id = asn1.result.id.valueBlock.toString();\n\n\t\tif(\"type\" in asn1.result)\n\t\t\tthis.type = asn1.result.type;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst value = [\n\t\t\tnew asn1js.ObjectIdentifier({ value: this.id })\n\t\t];\n\n\t\tif(\"type\" in this)\n\t\t\tvalue.push(this.type);\n\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst object = {\n\t\t\tid: this.id\n\t\t};\n\n\t\tif(\"type\" in this)\n\t\t\tobject.type = this.type.toJSON();\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC3739\n */\nexport default class QCStatements\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for QCStatements class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {Array}\n\t\t */\n\t\tthis.values = getParametersValue(parameters, \"values\", QCStatements.defaultValues(\"values\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"values\":\n\t\t\t\treturn [];\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for QCStatements class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Compare values with default values for all class members\n\t * @param {string} memberName String name for a class member\n\t * @param {*} memberValue Value to compare with default value\n\t */\n\tstatic compareWithDefault(memberName, memberValue)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"values\":\n\t\t\t\treturn (memberValue.length === 0);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for QCStatements class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * QCStatements ::= SEQUENCE OF QCStatement\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [values]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\tname: (names.values || \"\"),\n\t\t\t\t\tvalue: QCStatement.schema(names.value || {})\n\t\t\t\t}),\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"values\"\n\t\t]);\n\t\t//endregion\n\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tQCStatements.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tvalues: \"values\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for QCStatements\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tthis.values = Array.from(asn1.result.values, element => new QCStatement({ schema: element }));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: Array.from(this.values, element => element.toSchema())\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\textensions: Array.from(this.values, element => element.toJSON())\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport SubjectDirectoryAttributes from \"./SubjectDirectoryAttributes.js\";\nimport PrivateKeyUsagePeriod from \"./PrivateKeyUsagePeriod.js\";\nimport AltName from \"./AltName.js\";\nimport BasicConstraints from \"./BasicConstraints.js\";\nimport IssuingDistributionPoint from \"./IssuingDistributionPoint.js\";\nimport GeneralNames from \"./GeneralNames.js\";\nimport NameConstraints from \"./NameConstraints.js\";\nimport CRLDistributionPoints from \"./CRLDistributionPoints.js\";\nimport CertificatePolicies from \"./CertificatePolicies.js\";\nimport PolicyMappings from \"./PolicyMappings.js\";\nimport AuthorityKeyIdentifier from \"./AuthorityKeyIdentifier.js\";\nimport PolicyConstraints from \"./PolicyConstraints.js\";\nimport ExtKeyUsage from \"./ExtKeyUsage.js\";\nimport InfoAccess from \"./InfoAccess.js\";\nimport SignedCertificateTimestampList from \"./SignedCertificateTimestampList.js\";\nimport CertificateTemplate from \"./CertificateTemplate.js\";\nimport CAVersion from \"./CAVersion.js\";\nimport QCStatements from \"./QCStatements.js\";\n//**************************************************************************************\n/**\n * Class from RFC5280\n */\nexport default class Extension\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for Extension class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {string}\n\t\t * @desc extnID\n\t\t */\n\t\tthis.extnID = getParametersValue(parameters, \"extnID\", Extension.defaultValues(\"extnID\"));\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @desc critical\n\t\t */\n\t\tthis.critical = getParametersValue(parameters, \"critical\", Extension.defaultValues(\"critical\"));\n\t\t/**\n\t\t * @type {OctetString}\n\t\t * @desc extnValue\n\t\t */\n\t\tif(\"extnValue\" in parameters)\n\t\t\tthis.extnValue = new asn1js.OctetString({ valueHex: parameters.extnValue });\n\t\telse\n\t\t\tthis.extnValue = Extension.defaultValues(\"extnValue\");\n\n\t\tif(\"parsedValue\" in parameters)\n\t\t\t/**\n\t\t\t * @type {Object}\n\t\t\t * @desc parsedValue\n\t\t\t */\n\t\t\tthis.parsedValue = getParametersValue(parameters, \"parsedValue\", Extension.defaultValues(\"parsedValue\"));\n\t\t//endregion\n\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"extnID\":\n\t\t\t\treturn \"\";\n\t\t\tcase \"critical\":\n\t\t\t\treturn false;\n\t\t\tcase \"extnValue\":\n\t\t\t\treturn new asn1js.OctetString();\n\t\t\tcase \"parsedValue\":\n\t\t\t\treturn {};\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for Extension class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * Extension ::= SEQUENCE {\n\t * extnID OBJECT IDENTIFIER,\n\t * critical BOOLEAN DEFAULT FALSE,\n\t * extnValue OCTET STRING\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [extnID]\n\t\t * @property {string} [critical]\n\t\t * @property {string} [extnValue]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.extnID || \"\") }),\n\t\t\t\tnew asn1js.Boolean({\n\t\t\t\t\tname: (names.critical || \"\"),\n\t\t\t\t\toptional: true\n\t\t\t\t}),\n\t\t\t\tnew asn1js.OctetString({ name: (names.extnValue || \"\") })\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"extnID\",\n\t\t\t\"critical\",\n\t\t\t\"extnValue\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tlet asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tExtension.schema({\n\t\t\t\tnames: {\n\t\t\t\t\textnID: \"extnID\",\n\t\t\t\t\tcritical: \"critical\",\n\t\t\t\t\textnValue: \"extnValue\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Extension\");\n\t\t//endregion\n\n\t\t//region Get internal properties from parsed schema\n\t\tthis.extnID = asn1.result.extnID.valueBlock.toString();\n\t\tif(\"critical\" in asn1.result)\n\t\t\tthis.critical = asn1.result.critical.valueBlock.value;\n\t\tthis.extnValue = asn1.result.extnValue;\n\n\t\t//region Get \"parsedValue\" for well-known extensions\n\t\tasn1 = asn1js.fromBER(this.extnValue.valueBlock.valueHex);\n\t\tif(asn1.offset === (-1))\n\t\t\treturn;\n\n\t\tswitch(this.extnID)\n\t\t{\n\t\t\tcase \"2.5.29.9\": // SubjectDirectoryAttributes\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new SubjectDirectoryAttributes({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new SubjectDirectoryAttributes();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated SubjectDirectoryAttributes\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.14\": // SubjectKeyIdentifier\n\t\t\t\tthis.parsedValue = asn1.result; // Should be just a simple OCTETSTRING\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.15\": // KeyUsage\n\t\t\t\tthis.parsedValue = asn1.result; // Should be just a simple BITSTRING\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.16\": // PrivateKeyUsagePeriod\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new PrivateKeyUsagePeriod({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new PrivateKeyUsagePeriod();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated PrivateKeyUsagePeriod\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.17\": // SubjectAltName\n\t\t\tcase \"2.5.29.18\": // IssuerAltName\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new AltName({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new AltName();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated AltName\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.19\": // BasicConstraints\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new BasicConstraints({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new BasicConstraints();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated BasicConstraints\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.20\": // CRLNumber\n\t\t\tcase \"2.5.29.27\": // BaseCRLNumber (delta CRL indicator)\n\t\t\t\tthis.parsedValue = asn1.result; // Should be just a simple INTEGER\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.21\": // CRLReason\n\t\t\t\tthis.parsedValue = asn1.result; // Should be just a simple ENUMERATED\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.24\": // InvalidityDate\n\t\t\t\tthis.parsedValue = asn1.result; // Should be just a simple GeneralizedTime\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.28\": // IssuingDistributionPoint\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new IssuingDistributionPoint({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new IssuingDistributionPoint();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated IssuingDistributionPoint\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.29\": // CertificateIssuer\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new GeneralNames({ schema: asn1.result }); // Should be just a simple\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new GeneralNames();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated GeneralNames\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.30\": // NameConstraints\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new NameConstraints({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new NameConstraints();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated NameConstraints\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.31\": // CRLDistributionPoints\n\t\t\tcase \"2.5.29.46\": // FreshestCRL\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CRLDistributionPoints({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CRLDistributionPoints();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated CRLDistributionPoints\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.32\": // CertificatePolicies\n\t\t\tcase \"1.3.6.1.4.1.311.21.10\": // szOID_APPLICATION_CERT_POLICIES - Microsoft-specific OID\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CertificatePolicies({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CertificatePolicies();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated CertificatePolicies\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.33\": // PolicyMappings\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new PolicyMappings({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new PolicyMappings();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated CertificatePolicies\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.35\": // AuthorityKeyIdentifier\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new AuthorityKeyIdentifier({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new AuthorityKeyIdentifier();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated AuthorityKeyIdentifier\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.36\": // PolicyConstraints\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new PolicyConstraints({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new PolicyConstraints();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated PolicyConstraints\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.37\": // ExtKeyUsage\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new ExtKeyUsage({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new ExtKeyUsage();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated ExtKeyUsage\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"2.5.29.54\": // InhibitAnyPolicy\n\t\t\t\tthis.parsedValue = asn1.result; // Should be just a simple INTEGER\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.5.5.7.1.1\": // AuthorityInfoAccess\n\t\t\tcase \"1.3.6.1.5.5.7.1.11\": // SubjectInfoAccess\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new InfoAccess({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new InfoAccess();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated InfoAccess\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.4.1.11129.2.4.2\": // SignedCertificateTimestampList\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new SignedCertificateTimestampList({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new SignedCertificateTimestampList();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated SignedCertificateTimestampList\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.4.1.311.20.2\": // szOID_ENROLL_CERTTYPE_EXTENSION - Microsoft-specific extension\n\t\t\t\tthis.parsedValue = asn1.result; // Used to be simple Unicode string\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.4.1.311.21.2\": // szOID_CERTSRV_PREVIOUS_CERT_HASH - Microsoft-specific extension\n\t\t\t\tthis.parsedValue = asn1.result; // Used to be simple OctetString\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.4.1.311.21.7\": // szOID_CERTIFICATE_TEMPLATE - Microsoft-specific extension\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CertificateTemplate({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CertificateTemplate();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated CertificateTemplate\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.4.1.311.21.1\": // szOID_CERTSRV_CA_VERSION - Microsoft-specific extension\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CAVersion({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new CAVersion();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated CAVersion\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"1.3.6.1.5.5.7.1.3\": // QCStatements\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new QCStatements({ schema: asn1.result });\n\t\t\t\t}\n\t\t\t\tcatch(ex)\n\t\t\t\t{\n\t\t\t\t\tthis.parsedValue = new QCStatements();\n\t\t\t\t\tthis.parsedValue.parsingError = \"Incorrectly formated QCStatements\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t}\n\t\t//endregion\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Create array for output sequence\n\t\tconst outputArray = [];\n\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.extnID }));\n\n\t\tif(this.critical !== Extension.defaultValues(\"critical\"))\n\t\t\toutputArray.push(new asn1js.Boolean({ value: this.critical }));\n\n\t\toutputArray.push(this.extnValue);\n\t\t//endregion\n\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: outputArray\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst object = {\n\t\t\textnID: this.extnID,\n\t\t\textnValue: this.extnValue.toJSON()\n\t\t};\n\n\t\tif(this.critical !== Extension.defaultValues(\"critical\"))\n\t\t\tobject.critical = this.critical;\n\n\t\tif(\"parsedValue\" in this)\n\t\t{\n\t\t\tif(\"toJSON\" in this.parsedValue)\n\t\t\t\tobject.parsedValue = this.parsedValue.toJSON();\n\t\t}\n\n\t\treturn object;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport Extension from \"./Extension.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class Extensions\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for Extensions class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc type\r\n\t\t */\r\n\t\tthis.extensions = getParametersValue(parameters, \"extensions\", Extensions.defaultValues(\"extensions\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"extensions\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Extensions class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @param {boolean} optional Flag that current schema should be optional\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {}, optional = false)\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [extensions]\r\n\t\t * @property {string} [extension]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\toptional,\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.extensions || \"\"),\r\n\t\t\t\t\tvalue: Extension.schema(names.extension || {})\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"extensions\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tExtensions.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\textensions: \"extensions\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Extensions\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.extensions = Array.from(asn1.result.extensions, element => new Extension({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: Array.from(this.extensions, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\textensions: Array.from(this.extensions, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, bufferToHexCodes, clearProps } from \"pvutils\";\r\nimport { getCrypto, getEngine } from \"./common.js\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\r\nimport Time from \"./Time.js\";\r\nimport PublicKeyInfo from \"./PublicKeyInfo.js\";\r\nimport Extension from \"./Extension.js\";\r\nimport Extensions from \"./Extensions.js\";\r\n//**************************************************************************************\r\nfunction tbsCertificate(parameters = {})\r\n{\r\n\t//TBSCertificate ::= SEQUENCE {\r\n\t// version [0] EXPLICIT Version DEFAULT v1,\r\n\t// serialNumber CertificateSerialNumber,\r\n\t// signature AlgorithmIdentifier,\r\n\t// issuer Name,\r\n\t// validity Validity,\r\n\t// subject Name,\r\n\t// subjectPublicKeyInfo SubjectPublicKeyInfo,\r\n\t// issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,\r\n\t// -- If present, version MUST be v2 or v3\r\n\t// subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,\r\n\t// -- If present, version MUST be v2 or v3\r\n\t// extensions [3] EXPLICIT Extensions OPTIONAL\r\n\t// -- If present, version MUST be v3\r\n\t//}\r\n\t\r\n\t/**\r\n\t * @type {Object}\r\n\t * @property {string} [blockName]\r\n\t * @property {string} [tbsCertificateVersion]\r\n\t * @property {string} [tbsCertificateSerialNumber]\r\n\t * @property {string} [signature]\r\n\t * @property {string} [issuer]\r\n\t * @property {string} [tbsCertificateValidity]\r\n\t * @property {string} [notBefore]\r\n\t * @property {string} [notAfter]\r\n\t * @property {string} [subject]\r\n\t * @property {string} [subjectPublicKeyInfo]\r\n\t * @property {string} [tbsCertificateIssuerUniqueID]\r\n\t * @property {string} [tbsCertificateSubjectUniqueID]\r\n\t * @property {string} [extensions]\r\n\t */\r\n\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\r\n\treturn (new asn1js.Sequence({\r\n\t\tname: (names.blockName || \"tbsCertificate\"),\r\n\t\tvalue: [\r\n\t\t\tnew asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tnew asn1js.Integer({ name: (names.tbsCertificateVersion || \"tbsCertificate.version\") }) // EXPLICIT integer value\r\n\t\t\t\t]\r\n\t\t\t}),\r\n\t\t\tnew asn1js.Integer({ name: (names.tbsCertificateSerialNumber || \"tbsCertificate.serialNumber\") }),\r\n\t\t\tAlgorithmIdentifier.schema(names.signature || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"tbsCertificate.signature\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tRelativeDistinguishedNames.schema(names.issuer || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"tbsCertificate.issuer\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew asn1js.Sequence({\r\n\t\t\t\tname: (names.tbsCertificateValidity || \"tbsCertificate.validity\"),\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tTime.schema(names.notBefore || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tutcTimeName: \"tbsCertificate.notBefore\",\r\n\t\t\t\t\t\t\tgeneralTimeName: \"tbsCertificate.notBefore\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tTime.schema(names.notAfter || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tutcTimeName: \"tbsCertificate.notAfter\",\r\n\t\t\t\t\t\t\tgeneralTimeName: \"tbsCertificate.notAfter\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t]\r\n\t\t\t}),\r\n\t\t\tRelativeDistinguishedNames.schema(names.subject || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"tbsCertificate.subject\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tPublicKeyInfo.schema(names.subjectPublicKeyInfo || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"tbsCertificate.subjectPublicKeyInfo\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tnew asn1js.Primitive({\r\n\t\t\t\tname: (names.tbsCertificateIssuerUniqueID || \"tbsCertificate.issuerUniqueID\"),\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t}\r\n\t\t\t}), // IMPLICIT bistring value\r\n\t\t\tnew asn1js.Primitive({\r\n\t\t\t\tname: (names.tbsCertificateSubjectUniqueID || \"tbsCertificate.subjectUniqueID\"),\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t}\r\n\t\t\t}), // IMPLICIT bistring value\r\n\t\t\tnew asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 3 // [3]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [Extensions.schema(names.extensions || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"tbsCertificate.extensions\"\r\n\t\t\t\t\t}\r\n\t\t\t\t})]\r\n\t\t\t}) // EXPLICIT SEQUENCE value\r\n\t\t]\r\n\t}));\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class Certificate\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for Certificate class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc ToBeSigned (TBS) part of the certificate\r\n\t\t */\r\n\t\tthis.tbs = getParametersValue(parameters, \"tbs\", Certificate.defaultValues(\"tbs\"));\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc Version number\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", Certificate.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc Serial number of the certificate\r\n\t\t */\r\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", Certificate.defaultValues(\"serialNumber\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc This field contains the algorithm identifier for the algorithm used by the CA to sign the certificate\r\n\t\t */\r\n\t\tthis.signature = getParametersValue(parameters, \"signature\", Certificate.defaultValues(\"signature\"));\r\n\t\t/**\r\n\t\t * @type {RelativeDistinguishedNames}\r\n\t\t * @desc The issuer field identifies the entity that has signed and issued the certificate\r\n\t\t */\r\n\t\tthis.issuer = getParametersValue(parameters, \"issuer\", Certificate.defaultValues(\"issuer\"));\r\n\t\t/**\r\n\t\t * @type {Time}\r\n\t\t * @desc The date on which the certificate validity period begins\r\n\t\t */\r\n\t\tthis.notBefore = getParametersValue(parameters, \"notBefore\", Certificate.defaultValues(\"notBefore\"));\r\n\t\t/**\r\n\t\t * @type {Time}\r\n\t\t * @desc The date on which the certificate validity period ends\r\n\t\t */\r\n\t\tthis.notAfter = getParametersValue(parameters, \"notAfter\", Certificate.defaultValues(\"notAfter\"));\r\n\t\t/**\r\n\t\t * @type {RelativeDistinguishedNames}\r\n\t\t * @desc The subject field identifies the entity associated with the public key stored in the subject public key field\r\n\t\t */\r\n\t\tthis.subject = getParametersValue(parameters, \"subject\", Certificate.defaultValues(\"subject\"));\r\n\t\t/**\r\n\t\t * @type {PublicKeyInfo}\r\n\t\t * @desc This field is used to carry the public key and identify the algorithm with which the key is used\r\n\t\t */\r\n\t\tthis.subjectPublicKeyInfo = getParametersValue(parameters, \"subjectPublicKeyInfo\", Certificate.defaultValues(\"subjectPublicKeyInfo\"));\r\n\t\t\r\n\t\tif(\"issuerUniqueID\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {ArrayBuffer}\r\n\t\t\t * @desc The subject and issuer unique identifiers are present in the certificate to handle the possibility of reuse of subject and/or issuer names over time\r\n\t\t\t */\r\n\t\t\tthis.issuerUniqueID = getParametersValue(parameters, \"issuerUniqueID\", Certificate.defaultValues(\"issuerUniqueID\"));\r\n\t\t\r\n\t\tif(\"subjectUniqueID\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {ArrayBuffer}\r\n\t\t\t * @desc The subject and issuer unique identifiers are present in the certificate to handle the possibility of reuse of subject and/or issuer names over time\r\n\t\t\t */\r\n\t\t\tthis.subjectUniqueID = getParametersValue(parameters, \"subjectUniqueID\", Certificate.defaultValues(\"subjectUniqueID\"));\r\n\t\t\r\n\t\tif(\"extensions\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array}\r\n\t\t\t * @desc If present, this field is a SEQUENCE of one or more certificate extensions\r\n\t\t\t */\r\n\t\t\tthis.extensions = getParametersValue(parameters, \"extensions\", Certificate.defaultValues(\"extensions\"));\r\n\t\t\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc The signatureAlgorithm field contains the identifier for the cryptographic algorithm used by the CA to sign this certificate\r\n\t\t */\r\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", Certificate.defaultValues(\"signatureAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {BitString}\r\n\t\t * @desc The signatureValue field contains a digital signature computed upon the ASN.1 DER encoded tbsCertificate\r\n\t\t */\r\n\t\tthis.signatureValue = getParametersValue(parameters, \"signatureValue\", Certificate.defaultValues(\"signatureValue\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"tbs\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"serialNumber\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"signature\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"issuer\":\r\n\t\t\t\treturn new RelativeDistinguishedNames();\r\n\t\t\tcase \"notBefore\":\r\n\t\t\t\treturn new Time();\r\n\t\t\tcase \"notAfter\":\r\n\t\t\t\treturn new Time();\r\n\t\t\tcase \"subject\":\r\n\t\t\t\treturn new RelativeDistinguishedNames();\r\n\t\t\tcase \"subjectPublicKeyInfo\":\r\n\t\t\t\treturn new PublicKeyInfo();\r\n\t\t\tcase \"issuerUniqueID\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tcase \"subjectUniqueID\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tcase \"extensions\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"signatureAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"signatureValue\":\r\n\t\t\t\treturn new asn1js.BitString();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Certificate class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * Certificate ::= SEQUENCE {\r\n\t * tbsCertificate TBSCertificate,\r\n\t * signatureAlgorithm AlgorithmIdentifier,\r\n\t * signatureValue BIT STRING }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [tbsCertificate]\r\n\t\t * @property {string} [signatureAlgorithm]\r\n\t\t * @property {string} [signatureValue]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\ttbsCertificate(names.tbsCertificate),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.signatureAlgorithm || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"signatureAlgorithm\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.BitString({ name: (names.signatureValue || \"signatureValue\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"tbsCertificate\",\r\n\t\t\t\"tbsCertificate.extensions\",\r\n\t\t\t\"tbsCertificate.version\",\r\n\t\t\t\"tbsCertificate.serialNumber\",\r\n\t\t\t\"tbsCertificate.signature\",\r\n\t\t\t\"tbsCertificate.issuer\",\r\n\t\t\t\"tbsCertificate.notBefore\",\r\n\t\t\t\"tbsCertificate.notAfter\",\r\n\t\t\t\"tbsCertificate.subject\",\r\n\t\t\t\"tbsCertificate.subjectPublicKeyInfo\",\r\n\t\t\t\"tbsCertificate.issuerUniqueID\",\r\n\t\t\t\"tbsCertificate.subjectUniqueID\",\r\n\t\t\t\"signatureAlgorithm\",\r\n\t\t\t\"signatureValue\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tCertificate.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\ttbsCertificate: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\textensions: {\r\n\t\t\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\t\t\textensions: \"tbsCertificate.extensions\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Certificate\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.tbs = asn1.result.tbsCertificate.valueBeforeDecode;\r\n\t\t\r\n\t\tif(\"tbsCertificate.version\" in asn1.result)\r\n\t\t\tthis.version = asn1.result[\"tbsCertificate.version\"].valueBlock.valueDec;\r\n\t\tthis.serialNumber = asn1.result[\"tbsCertificate.serialNumber\"];\r\n\t\tthis.signature = new AlgorithmIdentifier({ schema: asn1.result[\"tbsCertificate.signature\"] });\r\n\t\tthis.issuer = new RelativeDistinguishedNames({ schema: asn1.result[\"tbsCertificate.issuer\"] });\r\n\t\tthis.notBefore = new Time({ schema: asn1.result[\"tbsCertificate.notBefore\"] });\r\n\t\tthis.notAfter = new Time({ schema: asn1.result[\"tbsCertificate.notAfter\"] });\r\n\t\tthis.subject = new RelativeDistinguishedNames({ schema: asn1.result[\"tbsCertificate.subject\"] });\r\n\t\tthis.subjectPublicKeyInfo = new PublicKeyInfo({ schema: asn1.result[\"tbsCertificate.subjectPublicKeyInfo\"] });\r\n\t\tif(\"tbsCertificate.issuerUniqueID\" in asn1.result)\r\n\t\t\tthis.issuerUniqueID = asn1.result[\"tbsCertificate.issuerUniqueID\"].valueBlock.valueHex;\r\n\t\tif(\"tbsCertificate.subjectUniqueID\" in asn1.result)\r\n\t\t\tthis.subjectUniqueID = asn1.result[\"tbsCertificate.subjectUniqueID\"].valueBlock.valueHex;\r\n\t\tif(\"tbsCertificate.extensions\" in asn1.result)\r\n\t\t\tthis.extensions = Array.from(asn1.result[\"tbsCertificate.extensions\"], element => new Extension({ schema: element }));\r\n\t\t\r\n\t\tthis.signatureAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.signatureAlgorithm });\r\n\t\tthis.signatureValue = asn1.result.signatureValue;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Create ASN.1 schema for existing values of TBS part for the certificate\r\n\t */\r\n\tencodeTBS()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif((\"version\" in this) && (this.version !== Certificate.defaultValues(\"version\")))\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tnew asn1js.Integer({ value: this.version }) // EXPLICIT integer value\r\n\t\t\t\t]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\toutputArray.push(this.serialNumber);\r\n\t\toutputArray.push(this.signature.toSchema());\r\n\t\toutputArray.push(this.issuer.toSchema());\r\n\t\t\r\n\t\toutputArray.push(new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.notBefore.toSchema(),\r\n\t\t\t\tthis.notAfter.toSchema()\r\n\t\t\t]\r\n\t\t}));\r\n\t\t\r\n\t\toutputArray.push(this.subject.toSchema());\r\n\t\toutputArray.push(this.subjectPublicKeyInfo.toSchema());\r\n\t\t\r\n\t\tif(\"issuerUniqueID\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: this.issuerUniqueID\r\n\t\t\t}));\r\n\t\t}\r\n\t\tif(\"subjectUniqueID\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Primitive({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t},\r\n\t\t\t\tvalueHex: this.subjectUniqueID\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"extensions\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 3 // [3]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [new asn1js.Sequence({\r\n\t\t\t\t\tvalue: Array.from(this.extensions, element => element.toSchema())\r\n\t\t\t\t})]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create and return output sequence\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema(encodeFlag = false)\r\n\t{\r\n\t\tlet tbsSchema = {};\r\n\t\t\r\n\t\t//region Decode stored TBS value\r\n\t\tif(encodeFlag === false)\r\n\t\t{\r\n\t\t\tif(this.tbs.length === 0) // No stored certificate TBS part\r\n\t\t\t\treturn Certificate.schema().value[0];\r\n\t\t\t\r\n\t\t\ttbsSchema = asn1js.fromBER(this.tbs).result;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t//region Create TBS schema via assembling from TBS parts\r\n\t\telse\r\n\t\t\ttbsSchema = this.encodeTBS();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\ttbsSchema,\r\n\t\t\t\tthis.signatureAlgorithm.toSchema(),\r\n\t\t\t\tthis.signatureValue\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\ttbs: bufferToHexCodes(this.tbs, 0, this.tbs.byteLength),\r\n\t\t\tserialNumber: this.serialNumber.toJSON(),\r\n\t\t\tsignature: this.signature.toJSON(),\r\n\t\t\tissuer: this.issuer.toJSON(),\r\n\t\t\tnotBefore: this.notBefore.toJSON(),\r\n\t\t\tnotAfter: this.notAfter.toJSON(),\r\n\t\t\tsubject: this.subject.toJSON(),\r\n\t\t\tsubjectPublicKeyInfo: this.subjectPublicKeyInfo.toJSON(),\r\n\t\t\tsignatureAlgorithm: this.signatureAlgorithm.toJSON(),\r\n\t\t\tsignatureValue: this.signatureValue.toJSON()\r\n\t\t};\r\n\t\t\r\n\t\tif((\"version\" in this) && (this.version !== Certificate.defaultValues(\"version\")))\r\n\t\t\tobject.version = this.version;\r\n\t\t\r\n\t\tif(\"issuerUniqueID\" in this)\r\n\t\t\tobject.issuerUniqueID = bufferToHexCodes(this.issuerUniqueID, 0, this.issuerUniqueID.byteLength);\r\n\t\t\r\n\t\tif(\"subjectUniqueID\" in this)\r\n\t\t\tobject.subjectUniqueID = bufferToHexCodes(this.subjectUniqueID, 0, this.subjectUniqueID.byteLength);\r\n\t\t\r\n\t\tif(\"extensions\" in this)\r\n\t\t\tobject.extensions = Array.from(this.extensions, element => element.toJSON());\r\n\t\t\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Importing public key for current certificate\r\n\t */\r\n\tgetPublicKey(parameters = null)\r\n\t{\r\n\t\treturn getEngine().subtle.getPublicKey(this.subjectPublicKeyInfo, this.signatureAlgorithm, parameters);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Get hash value for subject public key (default SHA-1)\r\n\t * @param {String} [hashAlgorithm=SHA-1] Hashing algorithm name\r\n\t */\r\n\tgetKeyHash(hashAlgorithm = \"SHA-1\")\r\n\t{\r\n\t\t//region Get a \"crypto\" extension\r\n\t\tconst crypto = getCrypto();\r\n\t\tif(typeof crypto === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn crypto.digest({ name: hashAlgorithm }, new Uint8Array(this.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHex));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Make a signature for current value from TBS section\r\n\t * @param {Object} privateKey Private key for \"subjectPublicKeyInfo\" structure\r\n\t * @param {string} [hashAlgorithm=\"SHA-1\"] Hashing algorithm\r\n\t */\r\n\tsign(privateKey, hashAlgorithm = \"SHA-1\")\r\n\t{\r\n\t\t//region Initial checking\r\n\t\t//region Check private key\r\n\t\tif(typeof privateKey === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Need to provide a private key for signing\");\r\n\t\t//endregion\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\tlet parameters;\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"default parameters\" for current algorithm and set correct signature algorithm\r\n\t\tsequence = sequence.then(() => engine.subtle.getSignatureParameters(privateKey, hashAlgorithm));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tparameters = result.parameters;\r\n\t\t\tthis.signature = result.signatureAlgorithm;\r\n\t\t\tthis.signatureAlgorithm = result.signatureAlgorithm;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create TBS data for signing\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tthis.tbs = this.encodeTBS().toBER(false);\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Signing TBS data on provided private key\r\n\t\tsequence = sequence.then(() => engine.subtle.signWithPrivateKey(this.tbs, privateKey, parameters));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tthis.signatureValue = new asn1js.BitString({ valueHex: result });\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\tverify(issuerCertificate = null)\r\n\t{\r\n\t\t//region Global variables\r\n\t\tlet subjectPublicKeyInfo = {};\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Set correct \"subjectPublicKeyInfo\" value\r\n\t\tif(issuerCertificate !== null)\r\n\t\t\tsubjectPublicKeyInfo = issuerCertificate.subjectPublicKeyInfo;\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(this.issuer.isEqual(this.subject)) // Self-signed certificate\r\n\t\t\t\tsubjectPublicKeyInfo = this.subjectPublicKeyInfo;\r\n\t\t}\r\n\t\t\r\n\t\tif((subjectPublicKeyInfo instanceof PublicKeyInfo) === false)\r\n\t\t\treturn Promise.reject(\"Please provide issuer certificate as a parameter\");\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn getEngine().subtle.verifyWithPublicKey(this.tbs, this.signatureValue, subjectPublicKeyInfo, this.signatureAlgorithm);\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport GeneralNames from \"./GeneralNames.js\";\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\nimport Attribute from \"./Attribute.js\";\nimport Extensions from \"./Extensions.js\";\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class AttCertValidityPeriod\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for AttCertValidityPeriod class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {GeneralizedTime}\n\t\t * @desc notBeforeTime\n\t\t */\n\t\tthis.notBeforeTime = getParametersValue(parameters, \"notBeforeTime\", AttCertValidityPeriod.defaultValues(\"notBeforeTime\"));\n\t\t/**\n\t\t * @type {GeneralizedTime}\n\t\t * @desc notAfterTime\n\t\t */\n\t\tthis.notAfterTime = getParametersValue(parameters, \"notAfterTime\", AttCertValidityPeriod.defaultValues(\"notAfterTime\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"notBeforeTime\":\n\t\t\tcase \"notAfterTime\":\n\t\t\t\treturn new Date(0, 0, 0);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for AttCertValidityPeriod class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * AttCertValidityPeriod ::= SEQUENCE {\n\t * notBeforeTime GeneralizedTime,\n\t * notAfterTime GeneralizedTime\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [notBeforeTime]\n\t\t * @property {string} [notAfterTime]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.GeneralizedTime({ name: (names.notBeforeTime || \"\") }),\n\t\t\t\tnew asn1js.GeneralizedTime({ name: (names.notAfterTime || \"\") })\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"notBeforeTime\",\n\t\t\t\"notAfterTime\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tAttCertValidityPeriod.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tnotBeforeTime: \"notBeforeTime\",\n\t\t\t\t\tnotAfterTime: \"notAfterTime\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AttCertValidityPeriod\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.notBeforeTime = asn1.result.notBeforeTime.toDate();\n\t\tthis.notAfterTime = asn1.result.notAfterTime.toDate();\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.GeneralizedTime({ valueDate: this.notBeforeTime }),\n\t\t\t\tnew asn1js.GeneralizedTime({ valueDate: this.notAfterTime }),\n\t\t\t]\n\t\t}));\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\tnotBeforeTime: this.notBeforeTime,\n\t\t\tnotAfterTime: this.notAfterTime\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class IssuerSerial\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for IssuerSerial class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {RelativeDistinguishedNames}\n\t\t * @desc issuer\n\t\t */\n\t\tthis.issuer = getParametersValue(parameters, \"issuer\", IssuerSerial.defaultValues(\"issuer\"));\n\t\t/**\n\t\t * @type {Integer}\n\t\t * @desc serialNumber\n\t\t */\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", IssuerSerial.defaultValues(\"serialNumber\"));\n\t\t\n\t\tif(\"issuerUID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {BitString}\n\t\t\t * @desc issuerUID\n\t\t\t */\n\t\t\tthis.issuerUID = getParametersValue(parameters, \"issuerUID\", IssuerSerial.defaultValues(\"issuerUID\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"issuer\":\n\t\t\t\treturn new GeneralNames();\n\t\t\tcase \"serialNumber\":\n\t\t\t\treturn new asn1js.Integer();\n\t\t\tcase \"issuerUID\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for IssuerSerial class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * IssuerSerial ::= SEQUENCE {\n\t * \tissuer GeneralNames,\n\t * \t\tserial CertificateSerialNumber,\n\t * \t\tissuerUID UniqueIdentifier OPTIONAL\n\t * }\n\t *\n\t * CertificateSerialNumber ::= INTEGER\n\t * UniqueIdentifier ::= BIT STRING\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [issuer]\n\t\t * @property {string} [serialNumber]\n\t\t * @property {string} [issuerUID]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tGeneralNames.schema(names.issuer || {}),\n\t\t\t\tnew asn1js.Integer({ name: (names.serialNumber || \"\") }),\n\t\t\t\tnew asn1js.BitString({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.issuerUID || \"\")\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"issuer\",\n\t\t\t\"serialNumber\",\n\t\t\t\"issuerUID\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tIssuerSerial.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tissuer: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"issuer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tserialNumber: \"serialNumber\",\n\t\t\t\t\tissuerUID: \"issuerUID\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for IssuerSerial\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.issuer = new GeneralNames({ schema: asn1.result.issuer });\n\t\tthis.serialNumber = asn1.result.serialNumber;\n\t\t\n\t\tif(\"issuerUID\" in asn1.result)\n\t\t\tthis.issuerUID = asn1.result.issuerUID;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst result = new asn1js.Sequence({\n\t\t\tvalue: [\n\t\t\t\tthis.issuer.toSchema(),\n\t\t\t\tthis.serialNumber\n\t\t\t]\n\t\t});\n\t\t\n\t\tif(\"issuerUID\" in this)\n\t\t\tresult.valueBlock.value.push(this.issuerUID);\n\t\t\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn result;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst result = {\n\t\t\tissuer: this.issuer.toJSON(),\n\t\t\tserialNumber: this.serialNumber.toJSON()\n\t\t};\n\t\t\n\t\tif(\"issuerUID\" in this)\n\t\t\tresult.issuerUID = this.issuerUID.toJSON();\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class AttributeCertificateInfoV1\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for AttributeCertificateInfoV1 class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {Number}\n\t\t * @desc version\n\t\t */\n\t\tthis.version = getParametersValue(parameters, \"version\", AttributeCertificateInfoV1.defaultValues(\"version\"));\n\t\t\n\t\tif(\"baseCertificateID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {IssuerSerial}\n\t\t\t * @desc baseCertificateID\n\t\t\t */\n\t\t\tthis.baseCertificateID = getParametersValue(parameters, \"baseCertificateID\", AttributeCertificateInfoV1.defaultValues(\"baseCertificateID\"));\n\t\t\n\t\tif(\"subjectName\" in parameters)\n\t\t\t/**\n\t\t\t * @type {GeneralNames}\n\t\t\t * @desc subjectName\n\t\t\t */\n\t\t\tthis.subjectName = getParametersValue(parameters, \"subjectName\", AttributeCertificateInfoV1.defaultValues(\"subjectName\"));\n\n\t\t/**\n\t\t * @type {GeneralNames}\n\t\t * @desc issuer\n\t\t */\n\t\tthis.issuer = getParametersValue(parameters, \"issuer\", AttributeCertificateInfoV1.defaultValues(\"issuer\"));\n\t\t/**\n\t\t * @type {AlgorithmIdentifier}\n\t\t * @desc signature\n\t\t */\n\t\tthis.signature = getParametersValue(parameters, \"signature\", AttributeCertificateInfoV1.defaultValues(\"signature\"));\n\t\t/**\n\t\t * @type {Integer}\n\t\t * @desc serialNumber\n\t\t */\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", AttributeCertificateInfoV1.defaultValues(\"serialNumber\"));\n\t\t/**\n\t\t * @type {AttCertValidityPeriod}\n\t\t * @desc attrCertValidityPeriod\n\t\t */\n\t\tthis.attrCertValidityPeriod = getParametersValue(parameters, \"attrCertValidityPeriod\", AttributeCertificateInfoV1.defaultValues(\"attrCertValidityPeriod\"));\n\t\t/**\n\t\t * @type {Array.}\n\t\t * @desc attributes\n\t\t */\n\t\tthis.attributes = getParametersValue(parameters, \"attributes\", AttributeCertificateInfoV1.defaultValues(\"attributes\"));\n\t\t\n\t\tif(\"issuerUniqueID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {BitString}\n\t\t\t * @desc issuerUniqueID\n\t\t\t */\n\t\t\tthis.issuerUniqueID = getParametersValue(parameters, \"issuerUniqueID\", AttributeCertificateInfoV1.defaultValues(\"issuerUniqueID\"));\n\t\t\t\n\t\tif(\"extensions\" in parameters)\n\t\t\t/**\n\t\t\t * @type {Extensions}\n\t\t\t * @desc extensions\n\t\t\t */\n\t\t\tthis.extensions = getParametersValue(parameters, \"extensions\", AttributeCertificateInfoV1.defaultValues(\"extensions\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"version\":\n\t\t\t\treturn 0;\n\t\t\tcase \"baseCertificateID\":\n\t\t\t\treturn new IssuerSerial();\n\t\t\tcase \"subjectName\":\n\t\t\t\treturn new GeneralNames();\n\t\t\tcase \"issuer\":\n\t\t\t\treturn {};\n\t\t\tcase \"signature\":\n\t\t\t\treturn new AlgorithmIdentifier();\n\t\t\tcase \"serialNumber\":\n\t\t\t\treturn new asn1js.Integer();\n\t\t\tcase \"attrCertValidityPeriod\":\n\t\t\t\treturn new AttCertValidityPeriod();\n\t\t\tcase \"attributes\":\n\t\t\t\treturn [];\n\t\t\tcase \"issuerUniqueID\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tcase \"extensions\":\n\t\t\t\treturn new Extensions();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for AttributeCertificateInfoV1 class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * AttributeCertificateInfo ::= SEQUENCE {\n\t * \tversion Version DEFAULT v1,\n\t * \tsubject CHOICE {\n\t * \t\tbaseCertificateID [0] IssuerSerial, -- associated with a Public Key Certificate\n\t * \t\tsubjectName [1] GeneralNames }, -- associated with a name\n\t * \tissuer GeneralNames, -- CA issuing the attribute certificate\n\t * \tsignature AlgorithmIdentifier,\n\t * \tserialNumber CertificateSerialNumber,\n\t * \tattrCertValidityPeriod AttCertValidityPeriod,\n\t * \tattributes SEQUENCE OF Attribute,\n\t * \tissuerUniqueID UniqueIdentifier OPTIONAL,\n\t * \textensions Extensions OPTIONAL\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [issuer]\n\t\t * @property {string} [serialNumber]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"\") }),\n\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\tname: (names.baseCertificateID || \"\"),\n\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: IssuerSerial.schema().valueBlock.value\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\tname: (names.subjectName || \"\"),\n\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\t\t\ttagNumber: 1 // [2]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: GeneralNames.schema().valueBlock.value\n\t\t\t\t\t\t}),\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tGeneralNames.schema({\n\t\t\t\t\tnames: {\n\t\t\t\t\t\tblockName: (names.issuer || \"\")\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tAlgorithmIdentifier.schema(names.signature || {}),\n\t\t\t\tnew asn1js.Integer({ name: (names.serialNumber || \"\") }),\n\t\t\t\tAttCertValidityPeriod.schema(names.attrCertValidityPeriod || {}),\n\t\t\t\tnew asn1js.Sequence({\n\t\t\t\t\tname: (names.attributes || \"\"),\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\t\t\tvalue: Attribute.schema()\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.BitString({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.issuerUniqueID || \"\")\n\t\t\t\t}),\n\t\t\t\tExtensions.schema(names.extensions || {}, true)\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"version\",\n\t\t\t\"baseCertificateID\",\n\t\t\t\"subjectName\",\n\t\t\t\"issuer\",\n\t\t\t\"signature\",\n\t\t\t\"serialNumber\",\n\t\t\t\"attrCertValidityPeriod\",\n\t\t\t\"attributes\",\n\t\t\t\"issuerUniqueID\",\n\t\t\t\"extensions\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tAttributeCertificateInfoV1.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tversion: \"version\",\n\t\t\t\t\tbaseCertificateID: \"baseCertificateID\",\n\t\t\t\t\tsubjectName: \"subjectName\",\n\t\t\t\t\tissuer: \"issuer\",\n\t\t\t\t\tsignature: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tserialNumber: \"serialNumber\",\n\t\t\t\t\tattrCertValidityPeriod: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"attrCertValidityPeriod\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tattributes: \"attributes\",\n\t\t\t\t\tissuerUniqueID: \"issuerUniqueID\",\n\t\t\t\t\textensions: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"extensions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AttributeCertificateInfoV1\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.version = asn1.result.version.valueBlock.valueDec;\n\t\t\n\t\tif(\"baseCertificateID\" in asn1.result)\n\t\t{\n\t\t\tthis.baseCertificateID = new IssuerSerial({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.baseCertificateID.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(\"subjectName\" in asn1.result)\n\t\t{\n\t\t\tthis.subjectName = new GeneralNames({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.subjectName.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t\n\t\tthis.issuer = asn1.result.issuer;\n\t\tthis.signature = new AlgorithmIdentifier({ schema: asn1.result.signature });\n\t\tthis.serialNumber = asn1.result.serialNumber;\n\t\tthis.attrCertValidityPeriod = new AttCertValidityPeriod({ schema: asn1.result.attrCertValidityPeriod });\n\t\tthis.attributes = Array.from(asn1.result.attributes.valueBlock.value, element => new Attribute({ schema: element }));\n\t\t\n\t\tif(\"issuerUniqueID\" in asn1.result)\n\t\t\tthis.issuerUniqueID = asn1.result.issuerUniqueID;\n\t\t\n\t\tif(\"extensions\" in asn1.result)\n\t\t\tthis.extensions = new Extensions({ schema: asn1.result.extensions });\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst result = new asn1js.Sequence({\n\t\t\tvalue: [new asn1js.Integer({ value: this.version })]\n\t\t});\n\t\t\n\t\tif(\"baseCertificateID\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tvalue: this.baseCertificateID.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(\"subjectName\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalue: this.subjectName.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\tresult.valueBlock.value.push(this.issuer.toSchema());\n\t\tresult.valueBlock.value.push(this.signature.toSchema());\n\t\tresult.valueBlock.value.push(this.serialNumber);\n\t\tresult.valueBlock.value.push(this.attrCertValidityPeriod.toSchema());\n\t\tresult.valueBlock.value.push(new asn1js.Sequence({\n\t\t\tvalue: Array.from(this.attributes, element => element.toSchema())\n\t\t}));\n\t\t\n\t\tif(\"issuerUniqueID\" in this)\n\t\t\tresult.valueBlock.value.push(this.issuerUniqueID);\n\t\t\n\t\tif(\"extensions\" in this)\n\t\t\tresult.valueBlock.value.push(this.extensions.toSchema());\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst result = {\n\t\t\tversion: this.version\n\t\t};\n\t\t\n\t\tif(\"baseCertificateID\" in this)\n\t\t\tresult.baseCertificateID = this.baseCertificateID.toJSON();\n\t\t\n\t\tif(\"subjectName\" in this)\n\t\t\tresult.subjectName = this.subjectName.toJSON();\n\n\t\tresult.issuer = this.issuer.toJSON();\n\t\tresult.signature = this.signature.toJSON();\n\t\tresult.serialNumber = this.serialNumber.toJSON();\n\t\tresult.attrCertValidityPeriod = this.attrCertValidityPeriod.toJSON();\n\t\tresult.attributes = Array.from(this.attributes, element => element.toJSON());\n\t\t\n\t\tif(\"issuerUniqueID\" in this)\n\t\t\tresult.issuerUniqueID = this.issuerUniqueID.toJSON();\n\t\t\n\t\tif(\"extensions\" in this)\n\t\t\tresult.extensions = this.extensions.toJSON();\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from X.509:1997\n */\nexport default class AttributeCertificateV1\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for AttributeCertificateV1 class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {AttributeCertificateInfoV1}\n\t\t * @desc acinfo\n\t\t */\n\t\tthis.acinfo = getParametersValue(parameters, \"acinfo\", AttributeCertificateV1.defaultValues(\"acinfo\"));\n\t\t/**\n\t\t * @type {AlgorithmIdentifier}\n\t\t * @desc signatureAlgorithm\n\t\t */\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", AttributeCertificateV1.defaultValues(\"signatureAlgorithm\"));\n\t\t/**\n\t\t * @type {BitString}\n\t\t * @desc signatureValue\n\t\t */\n\t\tthis.signatureValue = getParametersValue(parameters, \"signatureValue\", AttributeCertificateV1.defaultValues(\"signatureValue\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"acinfo\":\n\t\t\t\treturn new AttributeCertificateInfoV1();\n\t\t\tcase \"signatureAlgorithm\":\n\t\t\t\treturn new AlgorithmIdentifier();\n\t\t\tcase \"signatureValue\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for AttributeCertificateV1 class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * AttributeCertificate ::= SEQUENCE {\n\t * acinfo AttributeCertificateInfoV1,\n\t * signatureAlgorithm AlgorithmIdentifier,\n\t * signatureValue BIT STRING\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {Object} [acinfo]\n\t\t * @property {Object} [signatureAlgorithm]\n\t\t * @property {string} [signatureValue]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tAttributeCertificateInfoV1.schema(names.acinfo || {}),\n\t\t\t\tAlgorithmIdentifier.schema(names.signatureAlgorithm || {}),\n\t\t\t\tnew asn1js.BitString({ name: (names.signatureValue || \"\") })\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"acinfo\",\n\t\t\t\"signatureValue\",\n\t\t\t\"signatureAlgorithm\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tAttributeCertificateV1.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tacinfo: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"acinfo\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsignatureAlgorithm: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"signatureAlgorithm\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsignatureValue: \"signatureValue\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AttributeCertificateV1\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.acinfo = new AttributeCertificateInfoV1({ schema: asn1.result.acinfo });\n\t\tthis.signatureAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.signatureAlgorithm });\n\t\tthis.signatureValue = asn1.result.signatureValue;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: [\n\t\t\t\tthis.acinfo.toSchema(),\n\t\t\t\tthis.signatureAlgorithm.toSchema(),\n\t\t\t\tthis.signatureValue\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\tacinfo: this.acinfo.toJSON(),\n\t\t\tsignatureAlgorithm: this.signatureAlgorithm.toJSON(),\n\t\t\tsignatureValue: this.signatureValue.toJSON()\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\nimport { getParametersValue, clearProps } from \"pvutils\";\nimport GeneralNames from \"./GeneralNames.js\";\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\nimport Attribute from \"./Attribute.js\";\nimport Extensions from \"./Extensions.js\";\nimport { AttCertValidityPeriod, IssuerSerial } from \"./AttributeCertificateV1.js\";\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class ObjectDigestInfo\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for ObjectDigestInfo class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {Enumerated}\n\t\t * @desc digestedObjectType\n\t\t */\n\t\tthis.digestedObjectType = getParametersValue(parameters, \"digestedObjectType\", ObjectDigestInfo.defaultValues(\"digestedObjectType\"));\n\t\t\n\t\tif(\"otherObjectTypeID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {ObjectIdentifier}\n\t\t\t * @desc otherObjectTypeID\n\t\t\t */\n\t\t\tthis.otherObjectTypeID = getParametersValue(parameters, \"otherObjectTypeID\", ObjectDigestInfo.defaultValues(\"otherObjectTypeID\"));\n\t\t\n\t\t/**\n\t\t * @type {AlgorithmIdentifier}\n\t\t * @desc digestAlgorithm\n\t\t */\n\t\tthis.digestAlgorithm = getParametersValue(parameters, \"digestAlgorithm\", ObjectDigestInfo.defaultValues(\"digestAlgorithm\"));\n\t\t/**\n\t\t * @type {BitString}\n\t\t * @desc objectDigest\n\t\t */\n\t\tthis.objectDigest = getParametersValue(parameters, \"objectDigest\", ObjectDigestInfo.defaultValues(\"objectDigest\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"digestedObjectType\":\n\t\t\t\treturn new asn1js.Enumerated();\n\t\t\tcase \"otherObjectTypeID\":\n\t\t\t\treturn new asn1js.ObjectIdentifier();\n\t\t\tcase \"digestAlgorithm\":\n\t\t\t\treturn new AlgorithmIdentifier();\n\t\t\tcase \"objectDigest\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for ObjectDigestInfo class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * ObjectDigestInfo ::= SEQUENCE {\n\t * digestedObjectType ENUMERATED {\n\t * publicKey (0),\n\t * publicKeyCert (1),\n\t * otherObjectTypes (2) },\n\t * -- otherObjectTypes MUST NOT\n\t * -- be used in this profile\n\t * otherObjectTypeID OBJECT IDENTIFIER OPTIONAL,\n\t * digestAlgorithm AlgorithmIdentifier,\n\t * objectDigest BIT STRING\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [digestedObjectType]\n\t\t * @property {string} [otherObjectTypeID]\n\t\t * @property {string} [digestAlgorithm]\n\t\t * @property {string} [objectDigest]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Enumerated({ name: (names.digestedObjectType || \"\") }),\n\t\t\t\tnew asn1js.ObjectIdentifier({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.otherObjectTypeID || \"\")\n\t\t\t\t}),\n\t\t\t\tAlgorithmIdentifier.schema(names.digestAlgorithm || {}),\n\t\t\t\tnew asn1js.BitString({ name: (names.objectDigest || \"\") }),\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"digestedObjectType\",\n\t\t\t\"otherObjectTypeID\",\n\t\t\t\"digestAlgorithm\",\n\t\t\t\"objectDigest\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tObjectDigestInfo.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tdigestedObjectType: \"digestedObjectType\",\n\t\t\t\t\totherObjectTypeID: \"otherObjectTypeID\",\n\t\t\t\t\tdigestAlgorithm: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"digestAlgorithm\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tobjectDigest: \"objectDigest\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ObjectDigestInfo\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.digestedObjectType = asn1.result.digestedObjectType;\n\t\t\n\t\tif(\"otherObjectTypeID\" in asn1.result)\n\t\t\tthis.otherObjectTypeID = asn1.result.otherObjectTypeID;\n\t\t\n\t\tthis.digestAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.digestAlgorithm });\n\t\tthis.objectDigest = asn1.result.objectDigest;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst result = new asn1js.Sequence({\n\t\t\tvalue: [this.digestedObjectType]\n\t\t});\n\t\t\n\t\tif(\"otherObjectTypeID\" in this)\n\t\t\tresult.valueBlock.value.push(this.otherObjectTypeID);\n\t\t\n\t\tresult.valueBlock.value.push(this.digestAlgorithm.toSchema());\n\t\tresult.valueBlock.value.push(this.objectDigest);\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst result = {\n\t\t\tdigestedObjectType: this.digestedObjectType.toJSON()\n\t\t};\n\t\t\n\t\tif(\"otherObjectTypeID\" in this)\n\t\t\tresult.otherObjectTypeID = this.otherObjectTypeID.toJSON();\n\t\t\n\t\tresult.digestAlgorithm = this.digestAlgorithm.toJSON();\n\t\tresult.objectDigest = this.objectDigest.toJSON();\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class V2Form\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for V2Form class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\tif(\"issuerName\" in parameters)\n\t\t\t/**\n\t\t\t * @type {GeneralNames}\n\t\t\t * @desc issuerName\n\t\t\t */\n\t\t\tthis.issuerName = getParametersValue(parameters, \"issuerName\", V2Form.defaultValues(\"issuerName\"));\n\t\t\n\t\tif(\"baseCertificateID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {IssuerSerial}\n\t\t\t * @desc baseCertificateID\n\t\t\t */\n\t\t\tthis.baseCertificateID = getParametersValue(parameters, \"baseCertificateID\", V2Form.defaultValues(\"baseCertificateID\"));\n\t\t\n\t\tif(\"objectDigestInfo\" in parameters)\n\t\t\t/**\n\t\t\t * @type {ObjectDigestInfo}\n\t\t\t * @desc objectDigestInfo\n\t\t\t */\n\t\t\tthis.objectDigestInfo = getParametersValue(parameters, \"objectDigestInfo\", V2Form.defaultValues(\"objectDigestInfo\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"issuerName\":\n\t\t\t\treturn new GeneralNames();\n\t\t\tcase \"baseCertificateID\":\n\t\t\t\treturn new IssuerSerial();\n\t\t\tcase \"objectDigestInfo\":\n\t\t\t\treturn new ObjectDigestInfo();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for V2Form class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * V2Form ::= SEQUENCE {\n\t * issuerName GeneralNames OPTIONAL,\n\t * baseCertificateID [0] IssuerSerial OPTIONAL,\n\t * objectDigestInfo [1] ObjectDigestInfo OPTIONAL\n\t * -- issuerName MUST be present in this profile\n\t * -- baseCertificateID and objectDigestInfo MUST NOT\n\t * -- be present in this profile\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [issuerName]\n\t\t * @property {string} [baseCertificateID]\n\t\t * @property {string} [objectDigestInfo]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tGeneralNames.schema({\n\t\t\t\t\tnames: {\n\t\t\t\t\t\tblockName: names.issuerName\n\t\t\t\t\t}\n\t\t\t\t}, true),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.baseCertificateID || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: IssuerSerial.schema().valueBlock.value\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.objectDigestInfo || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: ObjectDigestInfo.schema().valueBlock.value\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"issuerName\",\n\t\t\t\"baseCertificateID\",\n\t\t\t\"objectDigestInfo\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tV2Form.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tissuerName: \"issuerName\",\n\t\t\t\t\tbaseCertificateID: \"baseCertificateID\",\n\t\t\t\t\tobjectDigestInfo: \"objectDigestInfo\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for V2Form\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tif(\"issuerName\" in asn1.result)\n\t\t\tthis.issuerName = new GeneralNames({ schema: asn1.result.issuerName });\n\t\t\n\t\tif(\"baseCertificateID\" in asn1.result)\n\t\t{\n\t\t\tthis.baseCertificateID = new IssuerSerial({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.baseCertificateID.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(\"objectDigestInfo\" in asn1.result)\n\t\t{\n\t\t\tthis.objectDigestInfo = new ObjectDigestInfo({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.objectDigestInfo.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst result = new asn1js.Sequence();\n\t\t\n\t\tif(\"issuerName\" in this)\n\t\t\tresult.valueBlock.value.push(this.issuerName.toSchema());\n\t\t\n\t\tif(\"baseCertificateID\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tvalue: this.baseCertificateID.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(\"objectDigestInfo\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalue: this.objectDigestInfo.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\t//region Construct and return new ASN.1 schema for this object\n\t\treturn result;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst result = {};\n\t\t\n\t\tif(\"issuerName\" in this)\n\t\t\tresult.issuerName = this.issuerName.toJSON();\n\t\t\n\t\tif(\"baseCertificateID\" in this)\n\t\t\tresult.baseCertificateID = this.baseCertificateID.toJSON();\n\t\t\n\t\tif(\"objectDigestInfo\" in this)\n\t\t\tresult.objectDigestInfo = this.objectDigestInfo.toJSON();\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class Holder\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for Holder class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\tif(\"baseCertificateID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {IssuerSerial}\n\t\t\t * @desc baseCertificateID\n\t\t\t */\n\t\t\tthis.baseCertificateID = getParametersValue(parameters, \"baseCertificateID\", Holder.defaultValues(\"baseCertificateID\"));\n\t\t\n\t\tif(\"entityName\" in parameters)\n\t\t\t/**\n\t\t\t * @type {GeneralNames}\n\t\t\t * @desc entityName\n\t\t\t */\n\t\t\tthis.entityName = getParametersValue(parameters, \"entityName\", Holder.defaultValues(\"entityName\"));\n\t\t\n\t\tif(\"objectDigestInfo\" in parameters)\n\t\t\t/**\n\t\t\t * @type {ObjectDigestInfo}\n\t\t\t * @desc objectDigestInfo\n\t\t\t */\n\t\t\tthis.objectDigestInfo = getParametersValue(parameters, \"objectDigestInfo\", Holder.defaultValues(\"objectDigestInfo\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"baseCertificateID\":\n\t\t\t\treturn new IssuerSerial();\n\t\t\tcase \"entityName\":\n\t\t\t\treturn new GeneralNames();\n\t\t\tcase \"objectDigestInfo\":\n\t\t\t\treturn new ObjectDigestInfo();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for Holder class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * Holder ::= SEQUENCE {\n\t * baseCertificateID [0] IssuerSerial OPTIONAL,\n\t * -- the issuer and serial number of\n\t * -- the holder's Public Key Certificate\n\t * entityName [1] GeneralNames OPTIONAL,\n\t * -- the name of the claimant or role\n\t * objectDigestInfo [2] ObjectDigestInfo OPTIONAL\n\t * -- used to directly authenticate the holder,\n\t * -- for example, an executable\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [baseCertificateID]\n\t\t * @property {string} [entityName]\n\t\t * @property {string} [objectDigestInfo]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.baseCertificateID || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: IssuerSerial.schema().valueBlock.value\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.entityName || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\ttagNumber: 1 // [2]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: GeneralNames.schema().valueBlock.value\n\t\t\t\t}),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.objectDigestInfo || \"\"),\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3,\n\t\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: ObjectDigestInfo.schema().valueBlock.value\n\t\t\t\t})\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"baseCertificateID\",\n\t\t\t\"entityName\",\n\t\t\t\"objectDigestInfo\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tHolder.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tbaseCertificateID: \"baseCertificateID\",\n\t\t\t\t\tentityName: \"entityName\",\n\t\t\t\t\tobjectDigestInfo: \"objectDigestInfo\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for Holder\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tif(\"baseCertificateID\" in asn1.result)\n\t\t{\n\t\t\tthis.baseCertificateID = new IssuerSerial({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.baseCertificateID.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(\"entityName\" in asn1.result)\n\t\t{\n\t\t\tthis.entityName = new GeneralNames({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.entityName.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(\"objectDigestInfo\" in asn1.result)\n\t\t{\n\t\t\tthis.objectDigestInfo = new ObjectDigestInfo({\n\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\tvalue: asn1.result.objectDigestInfo.valueBlock.value\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst result = new asn1js.Sequence();\n\t\t\n\t\tif(\"baseCertificateID\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t},\n\t\t\t\tvalue: this.baseCertificateID.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(\"entityName\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 1 // [1]\n\t\t\t\t},\n\t\t\t\tvalue: this.entityName.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\tif(\"objectDigestInfo\" in this)\n\t\t{\n\t\t\tresult.valueBlock.value.push(new asn1js.Constructed({\n\t\t\t\tidBlock: {\n\t\t\t\t\ttagClass: 3,\n\t\t\t\t\ttagNumber: 2 // [2]\n\t\t\t\t},\n\t\t\t\tvalue: this.objectDigestInfo.toSchema().valueBlock.value\n\t\t\t}));\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst result = {};\n\t\t\n\t\tif(\"baseCertificateID\" in this)\n\t\t\tresult.baseCertificateID = this.baseCertificateID.toJSON();\n\t\t\n\t\tif(\"entityName\" in this)\n\t\t\tresult.entityName = this.entityName.toJSON();\n\t\t\n\t\tif(\"objectDigestInfo\" in this)\n\t\t\tresult.objectDigestInfo = this.objectDigestInfo.toJSON();\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport class AttributeCertificateInfoV2\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for AttributeCertificateInfoV2 class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {Number}\n\t\t * @desc version\n\t\t */\n\t\tthis.version = getParametersValue(parameters, \"version\", AttributeCertificateInfoV2.defaultValues(\"version\"));\n\t\t/**\n\t\t * @type {Holder}\n\t\t * @desc holder\n\t\t */\n\t\tthis.holder = getParametersValue(parameters, \"holder\", AttributeCertificateInfoV2.defaultValues(\"holder\"));\n\t\t/**\n\t\t * @type {GeneralNames|V2Form}\n\t\t * @desc issuer\n\t\t */\n\t\tthis.issuer = getParametersValue(parameters, \"issuer\", AttributeCertificateInfoV2.defaultValues(\"issuer\"));\n\t\t/**\n\t\t * @type {AlgorithmIdentifier}\n\t\t * @desc signature\n\t\t */\n\t\tthis.signature = getParametersValue(parameters, \"signature\", AttributeCertificateInfoV2.defaultValues(\"signature\"));\n\t\t/**\n\t\t * @type {Integer}\n\t\t * @desc serialNumber\n\t\t */\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", AttributeCertificateInfoV2.defaultValues(\"serialNumber\"));\n\t\t/**\n\t\t * @type {AttCertValidityPeriod}\n\t\t * @desc attrCertValidityPeriod\n\t\t */\n\t\tthis.attrCertValidityPeriod = getParametersValue(parameters, \"attrCertValidityPeriod\", AttributeCertificateInfoV2.defaultValues(\"attrCertValidityPeriod\"));\n\t\t/**\n\t\t * @type {Array.}\n\t\t * @desc attributes\n\t\t */\n\t\tthis.attributes = getParametersValue(parameters, \"attributes\", AttributeCertificateInfoV2.defaultValues(\"attributes\"));\n\t\t\n\t\tif(\"issuerUniqueID\" in parameters)\n\t\t\t/**\n\t\t\t * @type {BitString}\n\t\t\t * @desc issuerUniqueID\n\t\t\t */\n\t\t\tthis.issuerUniqueID = getParametersValue(parameters, \"issuerUniqueID\", AttributeCertificateInfoV2.defaultValues(\"issuerUniqueID\"));\n\t\t\n\t\tif(\"extensions\" in parameters)\n\t\t\t/**\n\t\t\t * @type {Extensions}\n\t\t\t * @desc extensions\n\t\t\t */\n\t\t\tthis.extensions = getParametersValue(parameters, \"extensions\", AttributeCertificateInfoV2.defaultValues(\"extensions\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"version\":\n\t\t\t\treturn 1;\n\t\t\tcase \"holder\":\n\t\t\t\treturn new Holder();\n\t\t\tcase \"issuer\":\n\t\t\t\treturn {};\n\t\t\tcase \"signature\":\n\t\t\t\treturn new AlgorithmIdentifier();\n\t\t\tcase \"serialNumber\":\n\t\t\t\treturn new asn1js.Integer();\n\t\t\tcase \"attrCertValidityPeriod\":\n\t\t\t\treturn new AttCertValidityPeriod();\n\t\t\tcase \"attributes\":\n\t\t\t\treturn [];\n\t\t\tcase \"issuerUniqueID\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tcase \"extensions\":\n\t\t\t\treturn new Extensions();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for AttributeCertificateInfoV2 class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * AttributeCertificateInfoV2 ::= SEQUENCE {\n\t * version AttCertVersion, -- version is v2\n\t * holder Holder,\n\t * issuer AttCertIssuer,\n\t * signature AlgorithmIdentifier,\n\t * serialNumber CertificateSerialNumber,\n\t * attrCertValidityPeriod AttCertValidityPeriod,\n\t * attributes SEQUENCE OF Attribute,\n\t * issuerUniqueID UniqueIdentifier OPTIONAL,\n\t * extensions Extensions OPTIONAL\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {string} [issuer]\n\t\t * @property {string} [serialNumber]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"\") }),\n\t\t\t\tHolder.schema(names.holder || {}),\n\t\t\t\tnew asn1js.Choice({\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tGeneralNames.schema({\n\t\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\t\tblockName: (names.issuer || \"\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\t\t\tname: (names.issuer || \"\"),\n\t\t\t\t\t\t\tidBlock: {\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: V2Form.schema().valueBlock.value\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tAlgorithmIdentifier.schema(names.signature || {}),\n\t\t\t\tnew asn1js.Integer({ name: (names.serialNumber || \"\") }),\n\t\t\t\tAttCertValidityPeriod.schema(names.attrCertValidityPeriod || {}),\n\t\t\t\tnew asn1js.Sequence({\n\t\t\t\t\tname: (names.attributes || \"\"),\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tnew asn1js.Repeated({\n\t\t\t\t\t\t\tvalue: Attribute.schema()\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t}),\n\t\t\t\tnew asn1js.BitString({\n\t\t\t\t\toptional: true,\n\t\t\t\t\tname: (names.issuerUniqueID || \"\")\n\t\t\t\t}),\n\t\t\t\tExtensions.schema(names.extensions || {}, true)\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"version\",\n\t\t\t\"holder\",\n\t\t\t\"issuer\",\n\t\t\t\"signature\",\n\t\t\t\"serialNumber\",\n\t\t\t\"attrCertValidityPeriod\",\n\t\t\t\"attributes\",\n\t\t\t\"issuerUniqueID\",\n\t\t\t\"extensions\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tAttributeCertificateInfoV2.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tversion: \"version\",\n\t\t\t\t\tholder: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"holder\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tissuer: \"issuer\",\n\t\t\t\t\tsignature: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"signature\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tserialNumber: \"serialNumber\",\n\t\t\t\t\tattrCertValidityPeriod: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"attrCertValidityPeriod\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tattributes: \"attributes\",\n\t\t\t\t\tissuerUniqueID: \"issuerUniqueID\",\n\t\t\t\t\textensions: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"extensions\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AttributeCertificateInfoV2\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.version = asn1.result.version.valueBlock.valueDec;\n\t\tthis.holder = new Holder({ schema: asn1.result.holder });\n\t\t\n\t\tswitch(asn1.result.issuer.idBlock.tagClass)\n\t\t{\n\t\t\tcase 3: // V2Form\n\t\t\t\tthis.issuer = new V2Form({\n\t\t\t\t\tschema: new asn1js.Sequence({\n\t\t\t\t\t\tvalue: asn1.result.issuer.valueBlock.value\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 1: // GeneralNames (should not be used)\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Incorect value for 'issuer' in AttributeCertificateInfoV2\");\n\t\t}\n\t\t\n\t\tthis.signature = new AlgorithmIdentifier({ schema: asn1.result.signature });\n\t\tthis.serialNumber = asn1.result.serialNumber;\n\t\tthis.attrCertValidityPeriod = new AttCertValidityPeriod({ schema: asn1.result.attrCertValidityPeriod });\n\t\tthis.attributes = Array.from(asn1.result.attributes.valueBlock.value, element => new Attribute({ schema: element }));\n\t\t\n\t\tif(\"issuerUniqueID\" in asn1.result)\n\t\t\tthis.issuerUniqueID = asn1.result.issuerUniqueID;\n\t\t\n\t\tif(\"extensions\" in asn1.result)\n\t\t\tthis.extensions = new Extensions({ schema: asn1.result.extensions });\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\tconst result = new asn1js.Sequence({\n\t\t\tvalue: [\n\t\t\t\tnew asn1js.Integer({ value: this.version }),\n\t\t\t\tthis.holder.toSchema(),\n\t\t\t\tnew asn1js.Constructed({\n\t\t\t\t\tidBlock: {\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\n\t\t\t\t\t\ttagNumber: 0 // [0]\n\t\t\t\t\t},\n\t\t\t\t\tvalue: this.issuer.toSchema().valueBlock.value\n\t\t\t\t}),\n\t\t\t\tthis.signature.toSchema(),\n\t\t\t\tthis.serialNumber,\n\t\t\t\tthis.attrCertValidityPeriod.toSchema(),\n\t\t\t\tnew asn1js.Sequence({\n\t\t\t\t\tvalue: Array.from(this.attributes, element => element.toSchema())\n\t\t\t\t})\n\t\t\t]\n\t\t});\n\t\t\n\t\tif(\"issuerUniqueID\" in this)\n\t\t\tresult.valueBlock.value.push(this.issuerUniqueID);\n\t\t\n\t\tif(\"extensions\" in this)\n\t\t\tresult.valueBlock.value.push(this.extensions.toSchema());\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\tconst result = {\n\t\t\tversion: this.version,\n\t\t\tholder: this.holder.toJSON(),\n\t\t\tissuer: this.issuer.toJSON(),\n\t\t\tsignature: this.signature.toJSON(),\n\t\t\tserialNumber: this.serialNumber.toJSON(),\n\t\t\tattrCertValidityPeriod: this.attrCertValidityPeriod.toJSON(),\n\t\t\tattributes: Array.from(this.attributes, element => element.toJSON())\n\t\t};\n\t\t\n\t\tif(\"issuerUniqueID\" in this)\n\t\t\tresult.issuerUniqueID = this.issuerUniqueID.toJSON();\n\t\t\n\t\tif(\"extensions\" in this)\n\t\t\tresult.extensions = this.extensions.toJSON();\n\t\t\n\t\treturn result;\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n/**\n * Class from RFC5755\n */\nexport default class AttributeCertificateV2\n{\n\t//**********************************************************************************\n\t/**\n\t * Constructor for AttributeCertificateV2 class\n\t * @param {Object} [parameters={}]\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\n\t */\n\tconstructor(parameters = {})\n\t{\n\t\t//region Internal properties of the object\n\t\t/**\n\t\t * @type {AttributeCertificateInfoV2}\n\t\t * @desc acinfo\n\t\t */\n\t\tthis.acinfo = getParametersValue(parameters, \"acinfo\", AttributeCertificateV2.defaultValues(\"acinfo\"));\n\t\t/**\n\t\t * @type {AlgorithmIdentifier}\n\t\t * @desc signatureAlgorithm\n\t\t */\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", AttributeCertificateV2.defaultValues(\"signatureAlgorithm\"));\n\t\t/**\n\t\t * @type {BitString}\n\t\t * @desc signatureValue\n\t\t */\n\t\tthis.signatureValue = getParametersValue(parameters, \"signatureValue\", AttributeCertificateV2.defaultValues(\"signatureValue\"));\n\t\t//endregion\n\t\t\n\t\t//region If input argument array contains \"schema\" for this object\n\t\tif(\"schema\" in parameters)\n\t\t\tthis.fromSchema(parameters.schema);\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return default values for all class members\n\t * @param {string} memberName String name for a class member\n\t */\n\tstatic defaultValues(memberName)\n\t{\n\t\tswitch(memberName)\n\t\t{\n\t\t\tcase \"acinfo\":\n\t\t\t\treturn new AttributeCertificateInfoV2();\n\t\t\tcase \"signatureAlgorithm\":\n\t\t\t\treturn new AlgorithmIdentifier();\n\t\t\tcase \"signatureValue\":\n\t\t\t\treturn new asn1js.BitString();\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid member name for AttributeCertificateV2 class: ${memberName}`);\n\t\t}\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Return value of pre-defined ASN.1 schema for current class\n\t *\n\t * ASN.1 schema:\n\t * ```asn1\n\t * AttributeCertificate ::= SEQUENCE {\n\t * acinfo AttributeCertificateInfoV2,\n\t * signatureAlgorithm AlgorithmIdentifier,\n\t * signatureValue BIT STRING\n\t * }\n\t * ```\n\t *\n\t * @param {Object} parameters Input parameters for the schema\n\t * @returns {Object} asn1js schema object\n\t */\n\tstatic schema(parameters = {})\n\t{\n\t\t/**\n\t\t * @type {Object}\n\t\t * @property {string} [blockName]\n\t\t * @property {Object} [acinfo]\n\t\t * @property {Object} [signatureAlgorithm]\n\t\t * @property {string} [signatureValue]\n\t\t */\n\t\tconst names = getParametersValue(parameters, \"names\", {});\n\t\t\n\t\treturn (new asn1js.Sequence({\n\t\t\tname: (names.blockName || \"\"),\n\t\t\tvalue: [\n\t\t\t\tAttributeCertificateInfoV2.schema(names.acinfo || {}),\n\t\t\t\tAlgorithmIdentifier.schema(names.signatureAlgorithm || {}),\n\t\t\t\tnew asn1js.BitString({ name: (names.signatureValue || \"\") })\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert parsed asn1js object into current class\n\t * @param {!Object} schema\n\t */\n\tfromSchema(schema)\n\t{\n\t\t//region Clear input data first\n\t\tclearProps(schema, [\n\t\t\t\"acinfo\",\n\t\t\t\"signatureAlgorithm\",\n\t\t\t\"signatureValue\"\n\t\t]);\n\t\t//endregion\n\t\t\n\t\t//region Check the schema is valid\n\t\tconst asn1 = asn1js.compareSchema(schema,\n\t\t\tschema,\n\t\t\tAttributeCertificateV2.schema({\n\t\t\t\tnames: {\n\t\t\t\t\tacinfo: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"acinfo\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsignatureAlgorithm: {\n\t\t\t\t\t\tnames: {\n\t\t\t\t\t\t\tblockName: \"signatureAlgorithm\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsignatureValue: \"signatureValue\"\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t\t\n\t\tif(asn1.verified === false)\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for AttributeCertificateV2\");\n\t\t//endregion\n\t\t\n\t\t//region Get internal properties from parsed schema\n\t\tthis.acinfo = new AttributeCertificateInfoV2({ schema: asn1.result.acinfo });\n\t\tthis.signatureAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.signatureAlgorithm });\n\t\tthis.signatureValue = asn1.result.signatureValue;\n\t\t//endregion\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convert current object to asn1js object and set correct values\n\t * @returns {Object} asn1js object\n\t */\n\ttoSchema()\n\t{\n\t\treturn (new asn1js.Sequence({\n\t\t\tvalue: [\n\t\t\t\tthis.acinfo.toSchema(),\n\t\t\t\tthis.signatureAlgorithm.toSchema(),\n\t\t\t\tthis.signatureValue\n\t\t\t]\n\t\t}));\n\t}\n\t//**********************************************************************************\n\t/**\n\t * Convertion for the class to JSON object\n\t * @returns {Object}\n\t */\n\ttoJSON()\n\t{\n\t\treturn {\n\t\t\tacinfo: this.acinfo.toJSON(),\n\t\t\tsignatureAlgorithm: this.signatureAlgorithm.toJSON(),\n\t\t\tsignatureValue: this.signatureValue.toJSON()\n\t\t};\n\t}\n\t//**********************************************************************************\n}\n//**************************************************************************************\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport Time from \"./Time.js\";\r\nimport Extensions from \"./Extensions.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class RevokedCertificate\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for RevokedCertificate class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc userCertificate\r\n\t\t */\r\n\t\tthis.userCertificate = getParametersValue(parameters, \"userCertificate\", RevokedCertificate.defaultValues(\"userCertificate\"));\r\n\t\t/**\r\n\t\t * @type {Time}\r\n\t\t * @desc revocationDate\r\n\t\t */\r\n\t\tthis.revocationDate = getParametersValue(parameters, \"revocationDate\", RevokedCertificate.defaultValues(\"revocationDate\"));\r\n\r\n\t\tif(\"crlEntryExtensions\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Extensions}\r\n\t\t\t * @desc crlEntryExtensions\r\n\t\t\t */\r\n\t\t\tthis.crlEntryExtensions = getParametersValue(parameters, \"crlEntryExtensions\", RevokedCertificate.defaultValues(\"crlEntryExtensions\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"userCertificate\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"revocationDate\":\r\n\t\t\t\treturn new Time();\r\n\t\t\tcase \"crlEntryExtensions\":\r\n\t\t\t\treturn new Extensions();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RevokedCertificate class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * revokedCertificates SEQUENCE OF SEQUENCE {\r\n * userCertificate CertificateSerialNumber,\r\n * revocationDate Time,\r\n * crlEntryExtensions Extensions OPTIONAL\r\n * -- if present, version MUST be v2\r\n * } OPTIONAL,\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [userCertificate]\r\n\t\t * @property {string} [revocationDate]\r\n\t\t * @property {string} [crlEntryExtensions]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.userCertificate || \"userCertificate\") }),\r\n\t\t\t\tTime.schema({\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tutcTimeName: (names.revocationDate || \"revocationDate\"),\r\n\t\t\t\t\t\tgeneralTimeName: (names.revocationDate || \"revocationDate\")\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tExtensions.schema({\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: (names.crlEntryExtensions || \"crlEntryExtensions\")\r\n\t\t\t\t\t}\r\n\t\t\t\t}, true)\r\n\t\t\t]\r\n\t\t});\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"userCertificate\",\r\n\t\t\t\"revocationDate\",\r\n\t\t\t\"crlEntryExtensions\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tRevokedCertificate.schema()\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for RevokedCertificate\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.userCertificate = asn1.result.userCertificate;\r\n\t\tthis.revocationDate = new Time({ schema: asn1.result.revocationDate });\r\n\r\n\t\tif(\"crlEntryExtensions\" in asn1.result)\r\n\t\t\tthis.crlEntryExtensions = new Extensions({ schema: asn1.result.crlEntryExtensions });\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [\r\n\t\t\tthis.userCertificate,\r\n\t\t\tthis.revocationDate.toSchema()\r\n\t\t];\r\n\r\n\t\tif(\"crlEntryExtensions\" in this)\r\n\t\t\toutputArray.push(this.crlEntryExtensions.toSchema());\r\n\t\t//endregion\r\n\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\tuserCertificate: this.userCertificate.toJSON(),\r\n\t\t\trevocationDate: this.revocationDate.toJSON\r\n\t\t};\r\n\r\n\t\tif(\"crlEntryExtensions\" in this)\r\n\t\t\tobject.crlEntryExtensions = this.crlEntryExtensions.toJSON();\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, bufferToHexCodes, clearProps } from \"pvutils\";\r\nimport { getEngine } from \"./common.js\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\r\nimport Time from \"./Time.js\";\r\nimport RevokedCertificate from \"./RevokedCertificate.js\";\r\nimport Extensions from \"./Extensions.js\";\r\n//**************************************************************************************\r\nfunction tbsCertList(parameters = {})\r\n{\r\n\t//TBSCertList ::= SEQUENCE {\r\n\t// version Version OPTIONAL,\r\n\t// -- if present, MUST be v2\r\n\t// signature AlgorithmIdentifier,\r\n\t// issuer Name,\r\n\t// thisUpdate Time,\r\n\t// nextUpdate Time OPTIONAL,\r\n\t// revokedCertificates SEQUENCE OF SEQUENCE {\r\n\t// userCertificate CertificateSerialNumber,\r\n\t// revocationDate Time,\r\n\t// crlEntryExtensions Extensions OPTIONAL\r\n\t// -- if present, version MUST be v2\r\n\t// } OPTIONAL,\r\n\t// crlExtensions [0] EXPLICIT Extensions OPTIONAL\r\n\t// -- if present, version MUST be v2\r\n\t//}\r\n\t\r\n\t/**\r\n\t * @type {Object}\r\n\t * @property {string} [blockName]\r\n\t * @property {string} [tbsCertListVersion]\r\n\t * @property {string} [signature]\r\n\t * @property {string} [issuer]\r\n\t * @property {string} [tbsCertListThisUpdate]\r\n\t * @property {string} [tbsCertListNextUpdate]\r\n\t * @property {string} [tbsCertListRevokedCertificates]\r\n\t * @property {string} [crlExtensions]\r\n\t */\r\n\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\r\n\treturn (new asn1js.Sequence({\r\n\t\tname: (names.blockName || \"tbsCertList\"),\r\n\t\tvalue: [\r\n\t\t\tnew asn1js.Integer({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tname: (names.tbsCertListVersion || \"tbsCertList.version\"),\r\n\t\t\t\tvalue: 2\r\n\t\t\t}), // EXPLICIT integer value (v2)\r\n\t\t\tAlgorithmIdentifier.schema(names.signature || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"tbsCertList.signature\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tRelativeDistinguishedNames.schema(names.issuer || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tblockName: \"tbsCertList.issuer\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tTime.schema(names.tbsCertListThisUpdate || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tutcTimeName: \"tbsCertList.thisUpdate\",\r\n\t\t\t\t\tgeneralTimeName: \"tbsCertList.thisUpdate\"\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tTime.schema(names.tbsCertListNextUpdate || {\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tutcTimeName: \"tbsCertList.nextUpdate\",\r\n\t\t\t\t\tgeneralTimeName: \"tbsCertList.nextUpdate\"\r\n\t\t\t\t}\r\n\t\t\t}, true),\r\n\t\t\tnew asn1js.Sequence({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\tname: (names.tbsCertListRevokedCertificates || \"tbsCertList.revokedCertificates\"),\r\n\t\t\t\t\t\tvalue: new asn1js.Sequence({\r\n\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\tnew asn1js.Integer(),\r\n\t\t\t\t\t\t\t\tTime.schema(),\r\n\t\t\t\t\t\t\t\tExtensions.schema({}, true)\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t})\r\n\t\t\t\t]\r\n\t\t\t}),\r\n\t\t\tnew asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [Extensions.schema(names.crlExtensions || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"tbsCertList.extensions\"\r\n\t\t\t\t\t}\r\n\t\t\t\t})]\r\n\t\t\t}) // EXPLICIT SEQUENCE value\r\n\t\t]\r\n\t}));\r\n}\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5280\r\n */\r\nexport default class CertificateRevocationList {\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for Attribute class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc tbs\r\n\t\t */\r\n\t\tthis.tbs = getParametersValue(parameters, \"tbs\", CertificateRevocationList.defaultValues(\"tbs\"));\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc version\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", CertificateRevocationList.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc signature\r\n\t\t */\r\n\t\tthis.signature = getParametersValue(parameters, \"signature\", CertificateRevocationList.defaultValues(\"signature\"));\r\n\t\t/**\r\n\t\t * @type {RelativeDistinguishedNames}\r\n\t\t * @desc issuer\r\n\t\t */\r\n\t\tthis.issuer = getParametersValue(parameters, \"issuer\", CertificateRevocationList.defaultValues(\"issuer\"));\r\n\t\t/**\r\n\t\t * @type {Time}\r\n\t\t * @desc thisUpdate\r\n\t\t */\r\n\t\tthis.thisUpdate = getParametersValue(parameters, \"thisUpdate\", CertificateRevocationList.defaultValues(\"thisUpdate\"));\r\n\t\t\r\n\t\tif(\"nextUpdate\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Time}\r\n\t\t\t * @desc nextUpdate\r\n\t\t\t */\r\n\t\t\tthis.nextUpdate = getParametersValue(parameters, \"nextUpdate\", CertificateRevocationList.defaultValues(\"nextUpdate\"));\r\n\t\t\r\n\t\tif(\"revokedCertificates\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc revokedCertificates\r\n\t\t\t */\r\n\t\t\tthis.revokedCertificates = getParametersValue(parameters, \"revokedCertificates\", CertificateRevocationList.defaultValues(\"revokedCertificates\"));\r\n\t\t\r\n\t\tif(\"crlExtensions\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Extensions}\r\n\t\t\t * @desc crlExtensions\r\n\t\t\t */\r\n\t\t\tthis.crlExtensions = getParametersValue(parameters, \"crlExtensions\", CertificateRevocationList.defaultValues(\"crlExtensions\"));\r\n\t\t\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc signatureAlgorithm\r\n\t\t */\r\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", CertificateRevocationList.defaultValues(\"signatureAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {BitString}\r\n\t\t * @desc signatureValue\r\n\t\t */\r\n\t\tthis.signatureValue = getParametersValue(parameters, \"signatureValue\", CertificateRevocationList.defaultValues(\"signatureValue\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"tbs\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 1;\r\n\t\t\tcase \"signature\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"issuer\":\r\n\t\t\t\treturn new RelativeDistinguishedNames();\r\n\t\t\tcase \"thisUpdate\":\r\n\t\t\t\treturn new Time();\r\n\t\t\tcase \"nextUpdate\":\r\n\t\t\t\treturn new Time();\r\n\t\t\tcase \"revokedCertificates\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"crlExtensions\":\r\n\t\t\t\treturn new Extensions();\r\n\t\t\tcase \"signatureAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"signatureValue\":\r\n\t\t\t\treturn new asn1js.BitString();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for CertificateRevocationList class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * CertificateList ::= SEQUENCE {\r\n\t * tbsCertList TBSCertList,\r\n\t * signatureAlgorithm AlgorithmIdentifier,\r\n\t * signatureValue BIT STRING }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [signatureAlgorithm]\r\n\t\t * @property {string} [signatureValue]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"CertificateList\"),\r\n\t\t\tvalue: [\r\n\t\t\t\ttbsCertList(parameters),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.signatureAlgorithm || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"signatureAlgorithm\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.BitString({ name: (names.signatureValue || \"signatureValue\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"tbsCertList\",\r\n\t\t\t\"tbsCertList.version\",\r\n\t\t\t\"tbsCertList.signature\",\r\n\t\t\t\"tbsCertList.issuer\",\r\n\t\t\t\"tbsCertList.thisUpdate\",\r\n\t\t\t\"tbsCertList.nextUpdate\",\r\n\t\t\t\"tbsCertList.revokedCertificates\",\r\n\t\t\t\"tbsCertList.extensions\",\r\n\t\t\t\"signatureAlgorithm\",\r\n\t\t\t\"signatureValue\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tCertificateRevocationList.schema()\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CertificateRevocationList\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\t// noinspection JSUnresolvedVariable\r\n\t\tthis.tbs = asn1.result.tbsCertList.valueBeforeDecode;\r\n\t\t\r\n\t\tif(\"tbsCertList.version\" in asn1.result)\r\n\t\t\tthis.version = asn1.result[\"tbsCertList.version\"].valueBlock.valueDec;\r\n\t\tthis.signature = new AlgorithmIdentifier({ schema: asn1.result[\"tbsCertList.signature\"] });\r\n\t\tthis.issuer = new RelativeDistinguishedNames({ schema: asn1.result[\"tbsCertList.issuer\"] });\r\n\t\tthis.thisUpdate = new Time({ schema: asn1.result[\"tbsCertList.thisUpdate\"] });\r\n\t\tif(\"tbsCertList.nextUpdate\" in asn1.result)\r\n\t\t\tthis.nextUpdate = new Time({ schema: asn1.result[\"tbsCertList.nextUpdate\"] });\r\n\t\tif(\"tbsCertList.revokedCertificates\" in asn1.result)\r\n\t\t\tthis.revokedCertificates = Array.from(asn1.result[\"tbsCertList.revokedCertificates\"], element => new RevokedCertificate({ schema: element }));\r\n\t\tif(\"tbsCertList.extensions\" in asn1.result)\r\n\t\t\tthis.crlExtensions = new Extensions({ schema: asn1.result[\"tbsCertList.extensions\"] });\r\n\t\t\r\n\t\tthis.signatureAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.signatureAlgorithm });\r\n\t\tthis.signatureValue = asn1.result.signatureValue;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\tencodeTBS()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\tif(this.version !== CertificateRevocationList.defaultValues(\"version\"))\r\n\t\t\toutputArray.push(new asn1js.Integer({ value: this.version }));\r\n\t\t\r\n\t\toutputArray.push(this.signature.toSchema());\r\n\t\toutputArray.push(this.issuer.toSchema());\r\n\t\toutputArray.push(this.thisUpdate.toSchema());\r\n\t\t\r\n\t\tif(\"nextUpdate\" in this)\r\n\t\t\toutputArray.push(this.nextUpdate.toSchema());\r\n\t\t\r\n\t\tif(\"revokedCertificates\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Sequence({\r\n\t\t\t\tvalue: Array.from(this.revokedCertificates, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"crlExtensions\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tthis.crlExtensions.toSchema()\r\n\t\t\t\t]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema(encodeFlag = false)\r\n\t{\r\n\t\t//region Decode stored TBS value\r\n\t\tlet tbsSchema;\r\n\t\t\r\n\t\tif(encodeFlag === false)\r\n\t\t{\r\n\t\t\tif(this.tbs.length === 0) // No stored TBS part\r\n\t\t\t\treturn CertificateRevocationList.schema();\r\n\t\t\t\r\n\t\t\ttbsSchema = asn1js.fromBER(this.tbs).result;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t//region Create TBS schema via assembling from TBS parts\r\n\t\telse\r\n\t\t\ttbsSchema = this.encodeTBS();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\ttbsSchema,\r\n\t\t\t\tthis.signatureAlgorithm.toSchema(),\r\n\t\t\t\tthis.signatureValue\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\ttbs: bufferToHexCodes(this.tbs, 0, this.tbs.byteLength),\r\n\t\t\tsignature: this.signature.toJSON(),\r\n\t\t\tissuer: this.issuer.toJSON(),\r\n\t\t\tthisUpdate: this.thisUpdate.toJSON(),\r\n\t\t\tsignatureAlgorithm: this.signatureAlgorithm.toJSON(),\r\n\t\t\tsignatureValue: this.signatureValue.toJSON()\r\n\t\t};\r\n\t\t\r\n\t\tif(this.version !== CertificateRevocationList.defaultValues(\"version\"))\r\n\t\t\tobject.version = this.version;\r\n\t\t\r\n\t\tif(\"nextUpdate\" in this)\r\n\t\t\tobject.nextUpdate = this.nextUpdate.toJSON();\r\n\t\t\r\n\t\tif(\"revokedCertificates\" in this)\r\n\t\t\tobject.revokedCertificates = Array.from(this.revokedCertificates, element => element.toJSON());\r\n\t\t\r\n\t\tif(\"crlExtensions\" in this)\r\n\t\t\tobject.crlExtensions = this.crlExtensions.toJSON();\r\n\t\t\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n\tisCertificateRevoked(certificate)\r\n\t{\r\n\t\t//region Check that issuer of the input certificate is the same with issuer of this CRL\r\n\t\tif(this.issuer.isEqual(certificate.issuer) === false)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check that there are revoked certificates in this CRL\r\n\t\tif((\"revokedCertificates\" in this) === false)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Search for input certificate in revoked certificates array\r\n\t\tfor(const revokedCertificate of this.revokedCertificates)\r\n\t\t{\r\n\t\t\tif(revokedCertificate.userCertificate.isEqual(certificate.serialNumber))\r\n\t\t\t\treturn true;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Make a signature for existing CRL data\r\n\t * @param {Object} privateKey Private key for \"subjectPublicKeyInfo\" structure\r\n\t * @param {string} [hashAlgorithm] Hashing algorithm. Default SHA-1\r\n\t */\r\n\tsign(privateKey, hashAlgorithm = \"SHA-1\")\r\n\t{\r\n\t\t//region Initial checking\r\n\t\t//region Get a private key from function parameter\r\n\t\tif(typeof privateKey === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Need to provide a private key for signing\");\r\n\t\t//endregion\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\tlet parameters;\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"default parameters\" for current algorithm and set correct signature algorithm\r\n\t\tsequence = sequence.then(() => engine.subtle.getSignatureParameters(privateKey, hashAlgorithm));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tparameters = result.parameters;\r\n\t\t\tthis.signature = result.signatureAlgorithm;\r\n\t\t\tthis.signatureAlgorithm = result.signatureAlgorithm;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create TBS data for signing\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tthis.tbs = this.encodeTBS().toBER(false);\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Signing TBS data on provided private key\r\n\t\tsequence = sequence.then(() => engine.subtle.signWithPrivateKey(this.tbs, privateKey, parameters));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tthis.signatureValue = new asn1js.BitString({ valueHex: result });\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Verify existing signature\r\n\t * @param {{[issuerCertificate]: Object, [publicKeyInfo]: Object}} parameters\r\n\t * @returns {*}\r\n\t */\r\n\tverify(parameters = {})\r\n\t{\r\n\t\t//region Global variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tlet subjectPublicKeyInfo = -1;\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get information about CRL issuer certificate\r\n\t\tif(\"issuerCertificate\" in parameters) // \"issuerCertificate\" must be of type \"Certificate\"\r\n\t\t{\r\n\t\t\tsubjectPublicKeyInfo = parameters.issuerCertificate.subjectPublicKeyInfo;\r\n\t\t\t\r\n\t\t\t// The CRL issuer name and \"issuerCertificate\" subject name are not equal\r\n\t\t\tif(this.issuer.isEqual(parameters.issuerCertificate.subject) === false)\r\n\t\t\t\treturn Promise.resolve(false);\r\n\t\t}\r\n\t\t\r\n\t\t//region In case if there is only public key during verification\r\n\t\tif(\"publicKeyInfo\" in parameters)\r\n\t\t\tsubjectPublicKeyInfo = parameters.publicKeyInfo; // Must be of type \"PublicKeyInfo\"\r\n\t\t//endregion\r\n\t\t\r\n\t\tif((\"subjectPublicKey\" in subjectPublicKeyInfo) === false)\r\n\t\t\treturn Promise.reject(\"Issuer's certificate must be provided as an input parameter\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the CRL for unknown critical extensions\r\n\t\tif(\"crlExtensions\" in this)\r\n\t\t{\r\n\t\t\tfor(const extension of this.crlExtensions.extensions)\r\n\t\t\t{\r\n\t\t\t\tif(extension.critical)\r\n\t\t\t\t{\r\n\t\t\t\t\t// We can not be sure that unknown extension has no value for CRL signature\r\n\t\t\t\t\tif((\"parsedValue\" in extension) === false)\r\n\t\t\t\t\t\treturn Promise.resolve(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\tsequence = sequence.then(() => engine.subtle.verifyWithPublicKey(this.tbs, this.signatureValue, subjectPublicKeyInfo, this.signatureAlgorithm));\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class OtherCertificateFormat\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for OtherCertificateFormat class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc otherCertFormat\r\n\t\t */\r\n\t\tthis.otherCertFormat = getParametersValue(parameters, \"otherCertFormat\", OtherCertificateFormat.defaultValues(\"otherCertFormat\"));\r\n\t\t/**\r\n\t\t * @type {Any}\r\n\t\t * @desc otherCert\r\n\t\t */\r\n\t\tthis.otherCert = getParametersValue(parameters, \"otherCert\", OtherCertificateFormat.defaultValues(\"otherCert\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"otherCertFormat\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"otherCert\":\r\n\t\t\t\treturn new asn1js.Any();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for OtherCertificateFormat class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * OtherCertificateFormat ::= SEQUENCE {\r\n\t * otherCertFormat OBJECT IDENTIFIER,\r\n\t * otherCert ANY DEFINED BY otherCertFormat }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [otherCertFormat]\r\n\t\t * @property {string} [otherCert]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.otherCertFormat || \"otherCertFormat\") }),\r\n\t\t\t\tnew asn1js.Any({ name: (names.otherCert || \"otherCert\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"otherCertFormat\",\r\n\t\t\t\"otherCert\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tOtherCertificateFormat.schema()\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for OtherCertificateFormat\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.otherCertFormat = asn1.result.otherCertFormat.valueBlock.toString();\r\n\t\tthis.otherCert = asn1.result.otherCert;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.otherCertFormat }),\r\n\t\t\t\tthis.otherCert\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\totherCertFormat: this.otherCertFormat\r\n\t\t};\r\n\r\n\t\tif(!(this.otherCert instanceof asn1js.Any))\r\n\t\t\tobject.otherCert = this.otherCert.toJSON();\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport Certificate from \"./Certificate.js\";\r\nimport AttributeCertificateV1 from \"./AttributeCertificateV1.js\";\r\nimport AttributeCertificateV2 from \"./AttributeCertificateV2.js\";\r\nimport OtherCertificateFormat from \"./OtherCertificateFormat.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class CertificateSet\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for CertificateSet class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array}\r\n\t\t * @desc certificates\r\n\t\t */\r\n\t\tthis.certificates = getParametersValue(parameters, \"certificates\", CertificateSet.defaultValues(\"certificates\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"certificates\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for Attribute class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * CertificateSet ::= SET OF CertificateChoices\r\n\t *\r\n\t * CertificateChoices ::= CHOICE {\r\n\t * certificate Certificate,\r\n\t * extendedCertificate [0] IMPLICIT ExtendedCertificate, -- Obsolete\r\n\t * v1AttrCert [1] IMPLICIT AttributeCertificateV1, -- Obsolete\r\n\t * v2AttrCert [2] IMPLICIT AttributeCertificateV2,\r\n\t * other [3] IMPLICIT OtherCertificateFormat }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (\r\n\t\t\tnew asn1js.Set({\r\n\t\t\t\tname: (names.blockName || \"\"),\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\tname: (names.certificates || \"certificates\"),\r\n\t\t\t\t\t\tvalue: new asn1js.Choice({\r\n\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\tCertificate.schema(),\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\t\t\tnew asn1js.Any()\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}), // JUST A STUB\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\t\t\tnew asn1js.Sequence\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: AttributeCertificateV2.schema().valueBlock.value\r\n\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 3 // [3]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: OtherCertificateFormat.schema().valueBlock.value\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t})\r\n\t\t\t\t]\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"certificates\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tCertificateSet.schema()\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CertificateSet\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.certificates = Array.from(asn1.result.certificates || [], element =>\r\n\t\t{\r\n\t\t\tconst initialTagNumber = element.idBlock.tagNumber;\r\n\r\n\t\t\tif(element.idBlock.tagClass === 1)\r\n\t\t\t\treturn new Certificate({ schema: element });\r\n\t\t\t\r\n\t\t\t//region Making \"Sequence\" from \"Constructed\" value\r\n\t\t\tconst elementSequence = new asn1js.Sequence({\r\n\t\t\t\tvalue: element.valueBlock.value\r\n\t\t\t});\r\n\t\t\t//endregion\r\n\r\n\t\t\tswitch(initialTagNumber)\r\n\t\t\t{\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\t// WARN: It's possible that CMS contains AttributeCertificateV2 instead of AttributeCertificateV1\r\n\t\t\t\t\t// Check the certificate version\r\n\t\t\t\t\tif (elementSequence.valueBlock.value[0].valueBlock.value[0].valueBlock.valueDec === 1) {\r\n\t\t\t\t\t\treturn new AttributeCertificateV2({ schema: elementSequence });\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn new AttributeCertificateV1({ schema: elementSequence });\r\n\t\t\t\t\t}\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\treturn new AttributeCertificateV2({ schema: elementSequence });\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\treturn new OtherCertificateFormat({ schema: elementSequence });\r\n\t\t\t\tcase 0:\r\n\t\t\t\tdefault:\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn element;\r\n\t\t});\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Set({\r\n\t\t\tvalue: Array.from(this.certificates, element =>\r\n\t\t\t{\r\n\t\t\t\tswitch(true)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase (element instanceof Certificate):\r\n\t\t\t\t\t\treturn element.toSchema();\r\n\t\t\t\t\tcase (element instanceof AttributeCertificateV1):\r\n\t\t\t\t\t\treturn new asn1js.Constructed({\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3,\r\n\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: element.toSchema().valueBlock.value\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tcase (element instanceof AttributeCertificateV2):\r\n\t\t\t\t\t\treturn new asn1js.Constructed({\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3,\r\n\t\t\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: element.toSchema().valueBlock.value\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tcase (element instanceof OtherCertificateFormat):\r\n\t\t\t\t\t\treturn new asn1js.Constructed({\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3,\r\n\t\t\t\t\t\t\t\ttagNumber: 3 // [3]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: element.toSchema().valueBlock.value\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn element;\r\n\t\t\t})\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tcertificates: Array.from(this.certificates, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class OtherRevocationInfoFormat\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for OtherRevocationInfoFormat class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc otherRevInfoFormat\r\n\t\t */\r\n\t\tthis.otherRevInfoFormat = getParametersValue(parameters, \"otherRevInfoFormat\", OtherRevocationInfoFormat.defaultValues(\"otherRevInfoFormat\"));\r\n\t\t/**\r\n\t\t * @type {Any}\r\n\t\t * @desc otherRevInfo\r\n\t\t */\r\n\t\tthis.otherRevInfo = getParametersValue(parameters, \"otherRevInfo\", OtherRevocationInfoFormat.defaultValues(\"otherRevInfo\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"otherRevInfoFormat\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"otherRevInfo\":\r\n\t\t\t\treturn new asn1js.Any();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for OtherRevocationInfoFormat class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * OtherCertificateFormat ::= SEQUENCE {\r\n\t * otherRevInfoFormat OBJECT IDENTIFIER,\r\n\t * otherRevInfo ANY DEFINED BY otherCertFormat }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [otherRevInfoFormat]\r\n\t\t * @property {string} [otherRevInfo]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.otherRevInfoFormat || \"otherRevInfoFormat\") }),\r\n\t\t\t\tnew asn1js.Any({ name: (names.otherRevInfo || \"otherRevInfo\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"otherRevInfoFormat\",\r\n\t\t\t\"otherRevInfo\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tOtherRevocationInfoFormat.schema()\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for OtherRevocationInfoFormat\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.otherRevInfoFormat = asn1.result.otherRevInfoFormat.valueBlock.toString();\r\n\t\tthis.otherRevInfo = asn1.result.otherRevInfo;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ value: this.otherRevInfoFormat }),\r\n\t\t\t\tthis.otherRevInfo\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst object = {\r\n\t\t\totherRevInfoFormat: this.otherRevInfoFormat\r\n\t\t};\r\n\r\n\t\tif(!(this.otherRevInfo instanceof asn1js.Any))\r\n\t\t\tobject.otherRevInfo = this.otherRevInfo.toJSON();\r\n\r\n\t\treturn object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport CertificateRevocationList from \"./CertificateRevocationList.js\";\r\nimport OtherRevocationInfoFormat from \"./OtherRevocationInfoFormat.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class RevocationInfoChoices \r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for RevocationInfoChoices class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc crls\r\n\t\t */\r\n\t\tthis.crls = getParametersValue(parameters, \"crls\", RevocationInfoChoices.defaultValues(\"crls\"));\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc otherRevocationInfos\r\n\t\t */\r\n\t\tthis.otherRevocationInfos = getParametersValue(parameters, \"otherRevocationInfos\", RevocationInfoChoices.defaultValues(\"otherRevocationInfos\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"crls\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"otherRevocationInfos\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for RevocationInfoChoices class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * RevocationInfoChoices ::= SET OF RevocationInfoChoice\r\n\t *\r\n\t * RevocationInfoChoice ::= CHOICE {\r\n\t * crl CertificateList,\r\n\t * other [1] IMPLICIT OtherRevocationInfoFormat }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [crls]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Set({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.crls || \"\"),\r\n\t\t\t\t\tvalue: new asn1js.Choice({\r\n\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\tCertificateRevocationList.schema(),\r\n\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\t\tnew asn1js.ObjectIdentifier(),\r\n\t\t\t\t\t\t\t\t\tnew asn1js.Any()\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"crls\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tRevocationInfoChoices.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tcrls: \"crls\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for RevocationInfoChoices\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tfor(const element of asn1.result.crls)\r\n\t\t{\r\n\t\t\tif(element.idBlock.tagClass === 1)\r\n\t\t\t\tthis.crls.push(new CertificateRevocationList({ schema: element }));\r\n\t\t\telse\r\n\t\t\t\tthis.otherRevocationInfos.push(new OtherRevocationInfoFormat({ schema: element }));\r\n\t\t}\r\n\t\t\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output set\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(...Array.from(this.crls, element => element.toSchema()));\r\n\t\t\r\n\t\toutputArray.push(...Array.from(this.otherRevocationInfos, element =>\r\n\t\t{\r\n\t\t\tconst schema = element.toSchema();\r\n\t\t\t\r\n\t\t\tschema.idBlock.tagClass = 3;\r\n\t\t\tschema.idBlock.tagNumber = 1;\r\n\t\t\t\r\n\t\t\treturn schema;\r\n\t\t}));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Set({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tcrls: Array.from(this.crls, element => element.toJSON()),\r\n\t\t\totherRevocationInfos: Array.from(this.otherRevocationInfos, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class IssuerAndSerialNumber\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for IssuerAndSerialNumber class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {RelativeDistinguishedNames}\r\n\t\t * @desc issuer\r\n\t\t */\r\n\t\tthis.issuer = getParametersValue(parameters, \"issuer\", IssuerAndSerialNumber.defaultValues(\"issuer\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc serialNumber\r\n\t\t */\r\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", IssuerAndSerialNumber.defaultValues(\"serialNumber\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"issuer\":\r\n\t\t\t\treturn new RelativeDistinguishedNames();\r\n\t\t\tcase \"serialNumber\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for IssuerAndSerialNumber class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * IssuerAndSerialNumber ::= SEQUENCE {\r\n\t * issuer Name,\r\n\t * serialNumber CertificateSerialNumber }\r\n\t *\r\n\t * CertificateSerialNumber ::= INTEGER\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [issuer]\r\n\t\t * @property {string} [serialNumber]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tRelativeDistinguishedNames.schema(names.issuer || {}),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.serialNumber || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"issuer\",\r\n\t\t\t\"serialNumber\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tIssuerAndSerialNumber.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tissuer: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"issuer\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tserialNumber: \"serialNumber\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for IssuerAndSerialNumber\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.issuer = new RelativeDistinguishedNames({ schema: asn1.result.issuer });\r\n\t\tthis.serialNumber = asn1.result.serialNumber;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.issuer.toSchema(),\r\n\t\t\t\tthis.serialNumber\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\tissuer: this.issuer.toJSON(),\r\n\t\t\tserialNumber: this.serialNumber.toJSON()\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, isEqualBuffer, clearProps } from \"pvutils\";\r\nimport { getCrypto, getOIDByAlgorithm } from \"./common.js\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC6960\r\n */\r\nexport default class CertID \r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for CertID class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc hashAlgorithm\r\n\t\t */\r\n\t\tthis.hashAlgorithm = getParametersValue(parameters, \"hashAlgorithm\", CertID.defaultValues(\"hashAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {OctetString}\r\n\t\t * @desc issuerNameHash\r\n\t\t */\r\n\t\tthis.issuerNameHash = getParametersValue(parameters, \"issuerNameHash\", CertID.defaultValues(\"issuerNameHash\"));\r\n\t\t/**\r\n\t\t * @type {OctetString}\r\n\t\t * @desc issuerKeyHash\r\n\t\t */\r\n\t\tthis.issuerKeyHash = getParametersValue(parameters, \"issuerKeyHash\", CertID.defaultValues(\"issuerKeyHash\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc serialNumber\r\n\t\t */\r\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", CertID.defaultValues(\"serialNumber\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"hashAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"issuerNameHash\":\r\n\t\t\tcase \"issuerKeyHash\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tcase \"serialNumber\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for CertID class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"hashAlgorithm\":\r\n\t\t\t\treturn ((memberValue.algorithmId === \"\") && ((\"algorithmParams\" in memberValue) === false));\r\n\t\t\tcase \"issuerNameHash\":\r\n\t\t\tcase \"issuerKeyHash\":\r\n\t\t\tcase \"serialNumber\":\r\n\t\t\t\treturn (memberValue.isEqual(CertID.defaultValues(memberName)));\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for CertID class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * CertID ::= SEQUENCE {\r\n\t * hashAlgorithm AlgorithmIdentifier,\r\n\t * issuerNameHash OCTET STRING, -- Hash of issuer's DN\r\n\t * issuerKeyHash OCTET STRING, -- Hash of issuer's public key\r\n\t * serialNumber CertificateSerialNumber }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [hashAlgorithm]\r\n\t\t * @property {string} [hashAlgorithmObject]\r\n\t\t * @property {string} [issuerNameHash]\r\n\t\t * @property {string} [issuerKeyHash]\r\n\t\t * @property {string} [serialNumber]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tAlgorithmIdentifier.schema(names.hashAlgorithmObject || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: (names.hashAlgorithm || \"\")\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.OctetString({ name: (names.issuerNameHash || \"\") }),\r\n\t\t\t\tnew asn1js.OctetString({ name: (names.issuerKeyHash || \"\") }),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.serialNumber || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"hashAlgorithm\",\r\n\t\t\t\"issuerNameHash\",\r\n\t\t\t\"issuerKeyHash\",\r\n\t\t\t\"serialNumber\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tCertID.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\thashAlgorithm: \"hashAlgorithm\",\r\n\t\t\t\t\tissuerNameHash: \"issuerNameHash\",\r\n\t\t\t\t\tissuerKeyHash: \"issuerKeyHash\",\r\n\t\t\t\t\tserialNumber: \"serialNumber\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for CertID\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.hashAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.hashAlgorithm });\r\n\t\tthis.issuerNameHash = asn1.result.issuerNameHash;\r\n\t\tthis.issuerKeyHash = asn1.result.issuerKeyHash;\r\n\t\tthis.serialNumber = asn1.result.serialNumber;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.hashAlgorithm.toSchema(),\r\n\t\t\t\tthis.issuerNameHash,\r\n\t\t\t\tthis.issuerKeyHash,\r\n\t\t\t\tthis.serialNumber\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\thashAlgorithm: this.hashAlgorithm.toJSON(),\r\n\t\t\tissuerNameHash: this.issuerNameHash.toJSON(),\r\n\t\t\tissuerKeyHash: this.issuerKeyHash.toJSON(),\r\n\t\t\tserialNumber: this.serialNumber.toJSON()\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Check that two \"CertIDs\" are equal\r\n\t * @param {CertID} certificateID Identifier of the certificate to be checked\r\n\t * @returns {boolean}\r\n\t */\r\n\tisEqual(certificateID)\r\n\t{\r\n\t\t//region Check \"hashAlgorithm\"\r\n\t\tif(!this.hashAlgorithm.algorithmId === certificateID.hashAlgorithm.algorithmId)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check \"issuerNameHash\"\r\n\t\tif(isEqualBuffer(this.issuerNameHash.valueBlock.valueHex, certificateID.issuerNameHash.valueBlock.valueHex) === false)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check \"issuerKeyHash\"\r\n\t\tif(isEqualBuffer(this.issuerKeyHash.valueBlock.valueHex, certificateID.issuerKeyHash.valueBlock.valueHex) === false)\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check \"serialNumber\"\r\n\t\tif(!this.serialNumber.isEqual(certificateID.serialNumber))\r\n\t\t\treturn false;\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn true;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Making OCSP certificate identifier for specific certificate\r\n\t * @param {Certificate} certificate Certificate making OCSP Request for\r\n\t * @param {Object} parameters Additional parameters\r\n\t * @returns {Promise}\r\n\t */\r\n\tcreateForCertificate(certificate, parameters)\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tlet issuerCertificate;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"crypto\" extension\r\n\t\tconst crypto = getCrypto();\r\n\t\tif(typeof crypto === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check input parameters\r\n\t\tif((\"hashAlgorithm\" in parameters) === false)\r\n\t\t\treturn Promise.reject(\"Parameter \\\"hashAlgorithm\\\" is mandatory for \\\"OCSP_REQUEST.createForCertificate\\\"\");\r\n\t\t\r\n\t\tconst hashOID = getOIDByAlgorithm({ name: parameters.hashAlgorithm });\r\n\t\tif(hashOID === \"\")\r\n\t\t\treturn Promise.reject(`Incorrect \"hashAlgorithm\": ${this.hashAlgorithm}`);\r\n\t\t\r\n\t\tthis.hashAlgorithm = new AlgorithmIdentifier({\r\n\t\t\talgorithmId: hashOID,\r\n\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t});\r\n\t\t\r\n\t\tif(\"issuerCertificate\" in parameters)\r\n\t\t\tissuerCertificate = parameters.issuerCertificate;\r\n\t\telse\r\n\t\t\treturn Promise.reject(\"Parameter \\\"issuerCertificate\\\" is mandatory for \\\"OCSP_REQUEST.createForCertificate\\\"\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initialize \"serialNumber\" field\r\n\t\tthis.serialNumber = certificate.serialNumber;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create \"issuerNameHash\"\r\n\t\tsequence = sequence.then(() =>\r\n\t\t\tcrypto.digest({ name: parameters.hashAlgorithm }, issuerCertificate.subject.toSchema().toBER(false)),\r\n\t\terror =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create \"issuerKeyHash\"\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tthis.issuerNameHash = new asn1js.OctetString({ valueHex: result });\r\n\t\t\t\r\n\t\t\tconst issuerKeyBuffer = issuerCertificate.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHex;\r\n\t\t\t\r\n\t\t\treturn crypto.digest({ name: parameters.hashAlgorithm }, issuerKeyBuffer);\r\n\t\t}, error =>\r\n\t\t\tPromise.reject(error)\r\n\t\t).then(result =>\r\n\t\t{\r\n\t\t\tthis.issuerKeyHash = new asn1js.OctetString({ valueHex: result });\r\n\t\t}, error =>\r\n\t\t\tPromise.reject(error)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport CertID from \"./CertID.js\";\r\nimport Extension from \"./Extension.js\";\r\nimport Extensions from \"./Extensions.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC6960\r\n */\r\nexport default class SingleResponse\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for SingleResponse class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {CertID}\r\n\t\t * @desc certID\r\n\t\t */\r\n\t\tthis.certID = getParametersValue(parameters, \"certID\", SingleResponse.defaultValues(\"certID\"));\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc certStatus\r\n\t\t */\r\n\t\tthis.certStatus = getParametersValue(parameters, \"certStatus\", SingleResponse.defaultValues(\"certStatus\"));\r\n\t\t/**\r\n\t\t * @type {Date}\r\n\t\t * @desc thisUpdate\r\n\t\t */\r\n\t\tthis.thisUpdate = getParametersValue(parameters, \"thisUpdate\", SingleResponse.defaultValues(\"thisUpdate\"));\r\n\r\n\t\tif(\"nextUpdate\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Date}\r\n\t\t\t * @desc nextUpdate\r\n\t\t\t */\r\n\t\t\tthis.nextUpdate = getParametersValue(parameters, \"nextUpdate\", SingleResponse.defaultValues(\"nextUpdate\"));\r\n\r\n\t\tif(\"singleExtensions\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc singleExtensions\r\n\t\t\t */\r\n\t\t\tthis.singleExtensions = getParametersValue(parameters, \"singleExtensions\", SingleResponse.defaultValues(\"singleExtensions\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"certID\":\r\n\t\t\t\treturn new CertID();\r\n\t\t\tcase \"certStatus\":\r\n\t\t\t\treturn {};\r\n\t\t\tcase \"thisUpdate\":\r\n\t\t\tcase \"nextUpdate\":\r\n\t\t\t\treturn new Date(0, 0, 0);\r\n\t\t\tcase \"singleExtensions\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SingleResponse class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"certID\":\r\n\t\t\t\t// noinspection OverlyComplexBooleanExpressionJS\r\n\t\t\t\treturn ((CertID.compareWithDefault(\"hashAlgorithm\", memberValue.hashAlgorithm)) &&\r\n\t\t\t\t\t\t(CertID.compareWithDefault(\"issuerNameHash\", memberValue.issuerNameHash)) &&\r\n\t\t\t\t\t\t(CertID.compareWithDefault(\"issuerKeyHash\", memberValue.issuerKeyHash)) &&\r\n\t\t\t\t\t\t(CertID.compareWithDefault(\"serialNumber\", memberValue.serialNumber)));\r\n\t\t\tcase \"certStatus\":\r\n\t\t\t\treturn (Object.keys(memberValue).length === 0);\r\n\t\t\tcase \"thisUpdate\":\r\n\t\t\tcase \"nextUpdate\":\r\n\t\t\t\treturn (memberValue === SingleResponse.defaultValues(memberName));\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SingleResponse class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * SingleResponse ::= SEQUENCE {\r\n\t * certID CertID,\r\n\t * certStatus CertStatus,\r\n\t * thisUpdate GeneralizedTime,\r\n\t * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL,\r\n\t * singleExtensions [1] EXPLICIT Extensions OPTIONAL }\r\n\t *\r\n\t * CertStatus ::= CHOICE {\r\n\t * good [0] IMPLICIT NULL,\r\n\t * revoked [1] IMPLICIT RevokedInfo,\r\n\t * unknown [2] IMPLICIT UnknownInfo }\r\n\t *\r\n\t * RevokedInfo ::= SEQUENCE {\r\n\t * revocationTime GeneralizedTime,\r\n\t * revocationReason [0] EXPLICIT CRLReason OPTIONAL }\r\n\t *\r\n\t * UnknownInfo ::= NULL\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [certID]\r\n\t\t * @property {string} [certStatus]\r\n\t\t * @property {string} [thisUpdate]\r\n\t\t * @property {string} [nextUpdate]\r\n\t\t * @property {string} [singleExtensions]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tCertID.schema(names.certID || {}),\r\n\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\t\t\tname: (names.certStatus || \"\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tlenBlockLength: 1 // The length contains one byte 0x00\r\n\t\t\t\t\t\t}), // IMPLICIT NULL (no \"valueBlock\")\r\n\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\tname: (names.certStatus || \"\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\tnew asn1js.GeneralizedTime(),\r\n\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\toptional: true,\r\n\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tvalue: [new asn1js.Enumerated()]\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\t\t\tname: (names.certStatus || \"\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tlenBlock: { length: 1 }\r\n\t\t\t\t\t\t}) // IMPLICIT NULL (no \"valueBlock\")\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.GeneralizedTime({ name: (names.thisUpdate || \"\") }),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [new asn1js.GeneralizedTime({ name: (names.nextUpdate || \"\") })]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [Extensions.schema(names.singleExtensions || {})]\r\n\t\t\t\t}) // EXPLICIT SEQUENCE value\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"certID\",\r\n\t\t\t\"certStatus\",\r\n\t\t\t\"thisUpdate\",\r\n\t\t\t\"nextUpdate\",\r\n\t\t\t\"singleExtensions\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tSingleResponse.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\tcertID: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"certID\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcertStatus: \"certStatus\",\r\n\t\t\t\t\tthisUpdate: \"thisUpdate\",\r\n\t\t\t\t\tnextUpdate: \"nextUpdate\",\r\n\t\t\t\t\tsingleExtensions: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName:\r\n\t\t\t\t\t\t\t\t\"singleExtensions\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SingleResponse\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.certID = new CertID({ schema: asn1.result.certID });\r\n\t\tthis.certStatus = asn1.result.certStatus;\r\n\t\tthis.thisUpdate = asn1.result.thisUpdate.toDate();\r\n\t\tif(\"nextUpdate\" in asn1.result)\r\n\t\t\tthis.nextUpdate = asn1.result.nextUpdate.toDate();\r\n\r\n\t\tif(\"singleExtensions\" in asn1.result)\r\n\t\t\tthis.singleExtensions = Array.from(asn1.result.singleExtensions.valueBlock.value, element => new Extension({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create value array for output sequence\r\n\t\tconst outputArray = [];\r\n\r\n\t\toutputArray.push(this.certID.toSchema());\r\n\t\toutputArray.push(this.certStatus);\r\n\t\toutputArray.push(new asn1js.GeneralizedTime({ valueDate: this.thisUpdate }));\r\n\t\tif(\"nextUpdate\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [new asn1js.GeneralizedTime({ valueDate: this.nextUpdate })]\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\tif(\"singleExtensions\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Sequence({\r\n\t\t\t\tvalue: Array.from(this.singleExtensions, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\tcertID: this.certID.toJSON(),\r\n\t\t\tcertStatus: this.certStatus.toJSON(),\r\n\t\t\tthisUpdate: this.thisUpdate\r\n\t\t};\r\n\r\n\t\tif(\"nextUpdate\" in this)\r\n\t\t\t_object.nextUpdate = this.nextUpdate;\r\n\r\n\t\tif(\"singleExtensions\" in this)\r\n\t\t\t_object.singleExtensions = Array.from(this.singleExtensions, element => element.toJSON());\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\r\nimport SingleResponse from \"./SingleResponse.js\";\r\nimport Extension from \"./Extension.js\";\r\nimport Extensions from \"./Extensions.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC6960\r\n */\r\nexport default class ResponseData\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for ResponseData class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc tbs\r\n\t\t */\r\n\t\tthis.tbs = getParametersValue(parameters, \"tbs\", ResponseData.defaultValues(\"tbs\"));\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc responderID\r\n\t\t */\r\n\t\tthis.responderID = getParametersValue(parameters, \"responderID\", ResponseData.defaultValues(\"responderID\"));\r\n\t\t/**\r\n\t\t * @type {Date}\r\n\t\t * @desc producedAt\r\n\t\t */\r\n\t\tthis.producedAt = getParametersValue(parameters, \"producedAt\", ResponseData.defaultValues(\"producedAt\"));\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc responses\r\n\t\t */\r\n\t\tthis.responses = getParametersValue(parameters, \"responses\", ResponseData.defaultValues(\"responses\"));\r\n\r\n\t\tif(\"responseExtensions\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc responseExtensions\r\n\t\t\t */\r\n\t\t\tthis.responseExtensions = getParametersValue(parameters, \"responseExtensions\", ResponseData.defaultValues(\"responseExtensions\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"tbs\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tcase \"responderID\":\r\n\t\t\t\treturn {};\r\n\t\t\tcase \"producedAt\":\r\n\t\t\t\treturn new Date(0, 0, 0);\r\n\t\t\tcase \"responses\":\r\n\t\t\tcase \"responseExtensions\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for ResponseData class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"tbs\":\r\n\t\t\t\treturn (memberValue.byteLength === 0);\r\n\t\t\tcase \"responderID\":\r\n\t\t\t\treturn (Object.keys(memberValue).length === 0);\r\n\t\t\tcase \"producedAt\":\r\n\t\t\t\treturn (memberValue === ResponseData.defaultValues(memberName));\r\n\t\t\tcase \"responses\":\r\n\t\t\tcase \"responseExtensions\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for ResponseData class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * ResponseData ::= SEQUENCE {\r\n\t * version [0] EXPLICIT Version DEFAULT v1,\r\n\t * responderID ResponderID,\r\n\t * producedAt GeneralizedTime,\r\n\t * responses SEQUENCE OF SingleResponse,\r\n\t * responseExtensions [1] EXPLICIT Extensions OPTIONAL }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [version]\r\n\t\t * @property {string} [ResponseDataByName]\r\n\t\t * @property {string} [ResponseDataByKey]\r\n\t\t * @property {string} [producedAt]\r\n\t\t * @property {string} [response]\r\n\t\t * @property {string} [extensions]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"ResponseData\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [new asn1js.Integer({ name: (names.version || \"ResponseData.version\") })]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\tname: (names.responderID || \"ResponseData.responderID\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: [RelativeDistinguishedNames.schema(names.ResponseDataByName || {\r\n\t\t\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\t\t\tblockName: \"ResponseData.byName\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})]\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\tname: (names.responderID || \"ResponseData.responderID\"),\r\n\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tvalue: [new asn1js.OctetString({ name: (names.ResponseDataByKey || \"ResponseData.byKey\") })]\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.GeneralizedTime({ name: (names.producedAt || \"ResponseData.producedAt\") }),\r\n\t\t\t\tnew asn1js.Sequence({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: \"ResponseData.responses\",\r\n\t\t\t\t\t\t\tvalue: SingleResponse.schema(names.response || {})\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [Extensions.schema(names.extensions || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"ResponseData.responseExtensions\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})]\r\n\t\t\t\t}) // EXPLICIT SEQUENCE value\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"ResponseData\",\r\n\t\t\t\"ResponseData.version\",\r\n\t\t\t\"ResponseData.responderID\",\r\n\t\t\t\"ResponseData.producedAt\",\r\n\t\t\t\"ResponseData.responses\",\r\n\t\t\t\"ResponseData.responseExtensions\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tResponseData.schema()\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for ResponseData\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.tbs = asn1.result.ResponseData.valueBeforeDecode;\r\n\r\n\t\tif(\"ResponseData.version\" in asn1.result)\r\n\t\t\tthis.version = asn1.result[\"ResponseData.version\"].valueBlock.valueDec;\r\n\r\n\t\tif(asn1.result[\"ResponseData.responderID\"].idBlock.tagNumber === 1)\r\n\t\t\tthis.responderID = new RelativeDistinguishedNames({ schema: asn1.result[\"ResponseData.responderID\"].valueBlock.value[0] });\r\n\t\telse\r\n\t\t\tthis.responderID = asn1.result[\"ResponseData.responderID\"].valueBlock.value[0]; // OCTETSTRING\r\n\r\n\t\tthis.producedAt = asn1.result[\"ResponseData.producedAt\"].toDate();\r\n\t\tthis.responses = Array.from(asn1.result[\"ResponseData.responses\"], element => new SingleResponse({ schema: element }));\r\n\r\n\t\tif(\"ResponseData.responseExtensions\" in asn1.result)\r\n\t\t\tthis.responseExtensions = Array.from(asn1.result[\"ResponseData.responseExtensions\"].valueBlock.value, element => new Extension({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @param {boolean} encodeFlag If param equal to false then create TBS schema via decoding stored value. In othe case create TBS schema via assembling from TBS parts.\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema(encodeFlag = false)\r\n\t{\r\n\t\t//region Decode stored TBS value \r\n\t\tlet tbsSchema;\r\n\t\t\r\n\t\tif(encodeFlag === false)\r\n\t\t{\r\n\t\t\tif(this.tbs.length === 0) // No stored certificate TBS part\r\n\t\t\t\treturn ResponseData.schema();\r\n\t\t\t\r\n\t\t\ttbsSchema = asn1js.fromBER(this.tbs).result;\r\n\t\t}\r\n\t\t//endregion \r\n\t\t//region Create TBS schema via assembling from TBS parts\r\n\t\telse\r\n\t\t{\r\n\t\t\tconst outputArray = [];\r\n\t\t\t\r\n\t\t\tif(\"version\" in this)\r\n\t\t\t{\r\n\t\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [new asn1js.Integer({ value: this.version })]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.responderID instanceof RelativeDistinguishedNames)\r\n\t\t\t{\r\n\t\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [this.responderID.toSchema()]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 2 // [2]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [this.responderID]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\toutputArray.push(new asn1js.GeneralizedTime({ valueDate: this.producedAt }));\r\n\r\n\t\t\toutputArray.push(new asn1js.Sequence({\r\n\t\t\t\tvalue: Array.from(this.responses, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t\t\r\n\t\t\tif(\"responseExtensions\" in this)\r\n\t\t\t{\r\n\t\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [new asn1js.Sequence({\r\n\t\t\t\t\t\tvalue: Array.from(this.responseExtensions, element => element.toSchema())\r\n\t\t\t\t\t})]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\ttbsSchema = new asn1js.Sequence({\r\n\t\t\t\tvalue: outputArray\r\n\t\t\t});\r\n\t\t}\r\n\t\t//endregion \r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object \r\n\t\treturn tbsSchema;\r\n\t\t//endregion \r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {};\r\n\r\n\t\tif(\"version\" in this)\r\n\t\t\t_object.version = this.version;\r\n\r\n\t\tif(\"responderID\" in this)\r\n\t\t\t_object.responderID = this.responderID;\r\n\r\n\t\tif(\"producedAt\" in this)\r\n\t\t\t_object.producedAt = this.producedAt;\r\n\r\n\t\tif(\"responses\" in this)\r\n\t\t\t_object.responses = Array.from(this.responses, element => element.toJSON());\r\n\r\n\t\tif(\"responseExtensions\" in this)\r\n\t\t\t_object.responseExtensions = Array.from(this.responseExtensions, element => element.toJSON());\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import { getParametersValue, isEqualBuffer } from \"pvutils\";\r\nimport { getAlgorithmByOID, stringPrep } from \"./common.js\";\r\n//**************************************************************************************\r\nexport default class CertificateChainValidationEngine\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for CertificateChainValidationEngine class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc Array of pre-defined trusted (by user) certificates\r\n\t\t */\r\n\t\tthis.trustedCerts = getParametersValue(parameters, \"trustedCerts\", this.defaultValues(\"trustedCerts\"));\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc Array with certificate chain. Could be only one end-user certificate in there!\r\n\t\t */\r\n\t\tthis.certs = getParametersValue(parameters, \"certs\", this.defaultValues(\"certs\"));\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc Array of all CRLs for all certificates from certificate chain\r\n\t\t */\r\n\t\tthis.crls = getParametersValue(parameters, \"crls\", this.defaultValues(\"crls\"));\r\n\t\t/**\r\n\t\t * @type {Array}\r\n\t\t * @desc Array of all OCSP responses\r\n\t\t */\r\n\t\tthis.ocsps = getParametersValue(parameters, \"ocsps\", this.defaultValues(\"ocsps\"));\r\n\t\t/**\r\n\t\t * @type {Date}\r\n\t\t * @desc The date at which the check would be\r\n\t\t */\r\n\t\tthis.checkDate = getParametersValue(parameters, \"checkDate\", this.defaultValues(\"checkDate\"));\r\n\t\t/**\r\n\t\t * @type {Function}\r\n\t\t * @desc The date at which the check would be\r\n\t\t */\r\n\t\tthis.findOrigin = getParametersValue(parameters, \"findOrigin\", this.defaultValues(\"findOrigin\"));\r\n\t\t/**\r\n\t\t * @type {Function}\r\n\t\t * @desc The date at which the check would be\r\n\t\t */\r\n\t\tthis.findIssuer = getParametersValue(parameters, \"findIssuer\", this.defaultValues(\"findIssuer\"));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\tstatic defaultFindOrigin(certificate, validationEngine)\r\n\t{\r\n\t\t//region Firstly encode TBS for certificate\r\n\t\tif(certificate.tbs.byteLength === 0)\r\n\t\t\tcertificate.tbs = certificate.encodeTBS();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Search in Intermediate Certificates\r\n\t\tfor(const localCert of validationEngine.certs)\r\n\t\t{\r\n\t\t\t//region Firstly encode TBS for certificate\r\n\t\t\tif(localCert.tbs.byteLength === 0)\r\n\t\t\t\tlocalCert.tbs = localCert.encodeTBS();\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(isEqualBuffer(certificate.tbs, localCert.tbs))\r\n\t\t\t\treturn \"Intermediate Certificates\";\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Search in Trusted Certificates\r\n\t\tfor(const trustedCert of validationEngine.trustedCerts)\r\n\t\t{\r\n\t\t\t//region Firstly encode TBS for certificate\r\n\t\t\tif(trustedCert.tbs.byteLength === 0)\r\n\t\t\t\ttrustedCert.tbs = trustedCert.encodeTBS();\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(isEqualBuffer(certificate.tbs, trustedCert.tbs))\r\n\t\t\t\treturn \"Trusted Certificates\";\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn \"Unknown\";\r\n\t}\r\n\t//**********************************************************************************\r\n\tasync defaultFindIssuer(certificate, validationEngine)\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet result = [];\r\n\t\t\r\n\t\tlet keyIdentifier = null;\r\n\t\t\r\n\t\tlet authorityCertIssuer = null;\r\n\t\tlet authorityCertSerialNumber = null;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Speed-up searching in case of self-signed certificates\r\n\t\tif(certificate.subject.isEqual(certificate.issuer))\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tconst verificationResult = await certificate.verify();\r\n\t\t\t\tif(verificationResult === true)\r\n\t\t\t\t\treturn [certificate];\r\n\t\t\t}\r\n\t\t\tcatch(ex)\r\n\t\t\t{\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find values to speed-up search\r\n\t\tif(\"extensions\" in certificate)\r\n\t\t{\r\n\t\t\tfor(const extension of certificate.extensions)\r\n\t\t\t{\r\n\t\t\t\tif(extension.extnID === \"2.5.29.35\") // AuthorityKeyIdentifier\r\n\t\t\t\t{\r\n\t\t\t\t\tif(\"keyIdentifier\" in extension.parsedValue)\r\n\t\t\t\t\t\tkeyIdentifier = extension.parsedValue.keyIdentifier;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(\"authorityCertIssuer\" in extension.parsedValue)\r\n\t\t\t\t\t\t\tauthorityCertIssuer = extension.parsedValue.authorityCertIssuer;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(\"authorityCertSerialNumber\" in extension.parsedValue)\r\n\t\t\t\t\t\t\tauthorityCertSerialNumber = extension.parsedValue.authorityCertSerialNumber;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Aux function\r\n\t\tfunction checkCertificate(possibleIssuer)\r\n\t\t{\r\n\t\t\t//region Firstly search for appropriate extensions\r\n\t\t\tif(keyIdentifier !== null)\r\n\t\t\t{\r\n\t\t\t\tif(\"extensions\" in possibleIssuer)\r\n\t\t\t\t{\r\n\t\t\t\t\tlet extensionFound = false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(const extension of possibleIssuer.extensions)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(extension.extnID === \"2.5.29.14\") // SubjectKeyIdentifier\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\textensionFound = true;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(isEqualBuffer(extension.parsedValue.valueBlock.valueHex, keyIdentifier.valueBlock.valueHex))\r\n\t\t\t\t\t\t\t\tresult.push(possibleIssuer);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(extensionFound)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Now search for authorityCertSerialNumber\r\n\t\t\tlet authorityCertSerialNumberEqual = false;\r\n\t\t\t\r\n\t\t\tif(authorityCertSerialNumber !== null)\r\n\t\t\t\tauthorityCertSerialNumberEqual = possibleIssuer.serialNumber.isEqual(authorityCertSerialNumber);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region And at least search for Issuer data\r\n\t\t\tif(authorityCertIssuer !== null)\r\n\t\t\t{\r\n\t\t\t\tif(possibleIssuer.subject.isEqual(authorityCertIssuer))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(authorityCertSerialNumberEqual)\r\n\t\t\t\t\t\tresult.push(possibleIssuer);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif(certificate.issuer.isEqual(possibleIssuer.subject))\r\n\t\t\t\t\tresult.push(possibleIssuer);\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Search in Trusted Certificates\r\n\t\tfor(const trustedCert of validationEngine.trustedCerts)\r\n\t\t\tcheckCertificate(trustedCert);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Search in Intermediate Certificates\r\n\t\tfor(const intermediateCert of validationEngine.certs)\r\n\t\t\tcheckCertificate(intermediateCert);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Now perform certificate verification checking\r\n\t\tfor(let i = 0; i < result.length; i++)\r\n\t\t{\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tconst verificationResult = await certificate.verify(result[i]);\r\n\t\t\t\tif(verificationResult === false)\r\n\t\t\t\t\tresult.splice(i, 1);\r\n\t\t\t}\r\n\t\t\tcatch(ex)\r\n\t\t\t{\r\n\t\t\t\tresult.splice(i, 1); // Something wrong, remove the certificate\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn result;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tdefaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"trustedCerts\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"certs\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"crls\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"ocsps\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"checkDate\":\r\n\t\t\t\treturn new Date();\r\n\t\t\tcase \"findOrigin\":\r\n\t\t\t\treturn CertificateChainValidationEngine.defaultFindOrigin;\r\n\t\t\tcase \"findIssuer\":\r\n\t\t\t\treturn this.defaultFindIssuer;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for CertificateChainValidationEngine class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\tasync sort(passedWhenNotRevValues = false)\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tconst localCerts = [];\r\n\t\tconst _this = this;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Building certificate path\r\n\t\tasync function buildPath(certificate)\r\n\t\t{\r\n\t\t\tconst result = [];\r\n\t\t\t\r\n\t\t\t//region Aux function checking array for unique elements\r\n\t\t\tfunction checkUnique(array)\r\n\t\t\t{\r\n\t\t\t\tlet unique = true;\r\n\t\t\t\t\r\n\t\t\t\tfor(let i = 0; i < array.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(let j = 0; j < array.length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(j === i)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(array[i] === array[j])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tunique = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!unique)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn unique;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tconst findIssuerResult = await _this.findIssuer(certificate, _this);\r\n\t\t\tif(findIssuerResult.length === 0)\r\n\t\t\t\tthrow new Error(\"No valid certificate paths found\");\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < findIssuerResult.length; i++)\r\n\t\t\t{\r\n\t\t\t\tif(isEqualBuffer(findIssuerResult[i].tbs, certificate.tbs))\r\n\t\t\t\t{\r\n\t\t\t\t\tresult.push([findIssuerResult[i]]);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst buildPathResult = await buildPath(findIssuerResult[i]);\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = 0; j < buildPathResult.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst copy = buildPathResult[j].slice();\r\n\t\t\t\t\tcopy.splice(0, 0, findIssuerResult[i]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(checkUnique(copy))\r\n\t\t\t\t\t\tresult.push(copy);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tresult.push(buildPathResult[j]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn result;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find CRL for specific certificate\r\n\t\tasync function findCRL(certificate)\r\n\t\t{\r\n\t\t\t//region Initial variables\r\n\t\t\tconst issuerCertificates = [];\r\n\t\t\tconst crls = [];\r\n\t\t\tconst crlsAndCertificates = [];\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Find all possible CRL issuers\r\n\t\t\tissuerCertificates.push(...localCerts.filter(element => certificate.issuer.isEqual(element.subject)));\r\n\t\t\tif(issuerCertificates.length === 0)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tstatus: 1,\r\n\t\t\t\t\tstatusMessage: \"No certificate's issuers\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Find all CRLs for certificate's issuer\r\n\t\t\tcrls.push(..._this.crls.filter(element => element.issuer.isEqual(certificate.issuer)));\r\n\t\t\tif(crls.length === 0)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tstatus: 2,\r\n\t\t\t\t\tstatusMessage: \"No CRLs for specific certificate issuer\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Find specific certificate of issuer for each CRL\r\n\t\t\tfor(let i = 0; i < crls.length; i++)\r\n\t\t\t{\r\n\t\t\t\t//region Check \"nextUpdate\" for the CRL\r\n\t\t\t\t// The \"nextUpdate\" is older than \"checkDate\".\r\n\t\t\t\t// Thus we should do have another, updated CRL.\r\n\t\t\t\t// Thus the CRL assumed to be invalid.\r\n\t\t\t\tif(crls[i].nextUpdate.value < _this.checkDate)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = 0; j < issuerCertificates.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\ttry\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst result = await crls[i].verify({ issuerCertificate: issuerCertificates[j] });\r\n\t\t\t\t\t\tif(result)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcrlsAndCertificates.push({\r\n\t\t\t\t\t\t\t\tcrl: crls[i],\r\n\t\t\t\t\t\t\t\tcertificate: issuerCertificates[j]\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(crlsAndCertificates.length)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tstatus: 0,\r\n\t\t\t\t\tstatusMessage: \"\",\r\n\t\t\t\t\tresult: crlsAndCertificates\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn {\r\n\t\t\t\tstatus: 3,\r\n\t\t\t\tstatusMessage: \"No valid CRLs found\"\r\n\t\t\t};\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find OCSP for specific certificate\r\n\t\tasync function findOCSP(certificate, issuerCertificate)\r\n\t\t{\r\n\t\t\t//region Get hash algorithm from certificate\r\n\t\t\tconst hashAlgorithm = getAlgorithmByOID(certificate.signatureAlgorithm.algorithmId);\r\n\t\t\tif((\"name\" in hashAlgorithm) === false)\r\n\t\t\t\treturn 1;\r\n\t\t\tif((\"hash\" in hashAlgorithm) === false)\r\n\t\t\t\treturn 1;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Search for OCSP response for the certificate\r\n\t\t\tfor(let i = 0; i < _this.ocsps.length; i++)\r\n\t\t\t{\r\n\t\t\t\tconst result = await _this.ocsps[i].getCertificateStatus(certificate, issuerCertificate);\r\n\t\t\t\tif(result.isForCertificate)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(result.status === 0)\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn 2;\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check for certificate to be CA\r\n\t\tasync function checkForCA(certificate, needToCheckCRL = false)\r\n\t\t{\r\n\t\t\t//region Initial variables\r\n\t\t\tlet isCA = false;\r\n\t\t\tlet mustBeCA = false;\r\n\t\t\tlet keyUsagePresent = false;\r\n\t\t\tlet cRLSign = false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(\"extensions\" in certificate)\r\n\t\t\t{\r\n\t\t\t\tfor(let j = 0; j < certificate.extensions.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif((certificate.extensions[j].critical === true) &&\r\n\t\t\t\t\t\t((\"parsedValue\" in certificate.extensions[j]) === false))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\tresultCode: 6,\r\n\t\t\t\t\t\t\tresultMessage: `Unable to parse critical certificate extension: ${certificate.extensions[j].extnID}`\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(certificate.extensions[j].extnID === \"2.5.29.15\") // KeyUsage\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tkeyUsagePresent = true;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tconst view = new Uint8Array(certificate.extensions[j].parsedValue.valueBlock.valueHex);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif((view[0] & 0x04) === 0x04) // Set flag \"keyCertSign\"\r\n\t\t\t\t\t\t\tmustBeCA = true;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif((view[0] & 0x02) === 0x02) // Set flag \"cRLSign\"\r\n\t\t\t\t\t\t\tcRLSign = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(certificate.extensions[j].extnID === \"2.5.29.19\") // BasicConstraints\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(\"cA\" in certificate.extensions[j].parsedValue)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(certificate.extensions[j].parsedValue.cA === true)\r\n\t\t\t\t\t\t\t\tisCA = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((mustBeCA === true) && (isCA === false))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\tresultCode: 3,\r\n\t\t\t\t\t\tresultMessage: \"Unable to build certificate chain - using \\\"keyCertSign\\\" flag set without BasicConstaints\"\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((keyUsagePresent === true) && (isCA === true) && (mustBeCA === false))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\tresultCode: 4,\r\n\t\t\t\t\t\tresultMessage: \"Unable to build certificate chain - \\\"keyCertSign\\\" flag was not set\"\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// noinspection OverlyComplexBooleanExpressionJS\r\n\t\t\t\tif((isCA === true) && (keyUsagePresent === true) && ((needToCheckCRL) && (cRLSign === false)))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\tresultCode: 5,\r\n\t\t\t\t\t\tresultMessage: \"Unable to build certificate chain - intermediate certificate must have \\\"cRLSign\\\" key usage flag\"\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(isCA === false)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tresult: false,\r\n\t\t\t\t\tresultCode: 7,\r\n\t\t\t\t\tresultMessage: \"Unable to build certificate chain - more than one possible end-user certificate\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn {\r\n\t\t\t\tresult: true,\r\n\t\t\t\tresultCode: 0,\r\n\t\t\t\tresultMessage: \"\"\r\n\t\t\t};\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Basic check for certificate path\r\n\t\tasync function basicCheck(path, checkDate)\r\n\t\t{\r\n\t\t\t//region Check that all dates are valid\r\n\t\t\tfor(let i = 0; i < path.length; i++)\r\n\t\t\t{\r\n\t\t\t\tif((path[i].notBefore.value > checkDate) ||\r\n\t\t\t\t\t(path[i].notAfter.value < checkDate))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\tresultCode: 8,\r\n\t\t\t\t\t\tresultMessage: \"The certificate is either not yet valid or expired\"\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check certificate name chain\r\n\t\t\t\r\n\t\t\t// We should have at least two certificates: end entity and trusted root\r\n\t\t\tif(path.length < 2)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tresult: false,\r\n\t\t\t\t\tresultCode: 9,\r\n\t\t\t\t\tresultMessage: \"Too short certificate path\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tfor(let i = (path.length - 2); i >= 0; i--)\r\n\t\t\t{\r\n\t\t\t\t//region Check that we do not have a \"self-signed\" certificate\r\n\t\t\t\tif(path[i].issuer.isEqual(path[i].subject) === false)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(path[i].issuer.isEqual(path[i + 1].subject) === false)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\tresultCode: 10,\r\n\t\t\t\t\t\t\tresultMessage: \"Incorrect name chaining\"\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check each certificate (except \"trusted root\") to be non-revoked\r\n\t\t\tif((_this.crls.length !== 0) || (_this.ocsps.length !== 0)) // If CRLs and OCSPs are empty then we consider all certificates to be valid\r\n\t\t\t{\r\n\t\t\t\tfor(let i = 0; i < (path.length - 1); i++)\r\n\t\t\t\t{\r\n\t\t\t\t\t//region Initial variables\r\n\t\t\t\t\tlet ocspResult = 2;\r\n\t\t\t\t\tlet crlResult = {\r\n\t\t\t\t\t\tstatus: 0,\r\n\t\t\t\t\t\tstatusMessage: \"\"\r\n\t\t\t\t\t};\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Check OCSPs first\r\n\t\t\t\t\tif(_this.ocsps.length !== 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tocspResult = await findOCSP(path[i], path[i + 1]);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tswitch(ocspResult)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\t\tresultCode: 12,\r\n\t\t\t\t\t\t\t\t\tresultMessage: \"One of certificates was revoked via OCSP response\"\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tcase 2: // continue to check the certificate with CRL\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Check CRLs\r\n\t\t\t\t\tif(_this.crls.length !== 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcrlResult = await findCRL(path[i]);\r\n\r\n\t\t\t\t\t\tif(crlResult.status === 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfor(let j = 0; j < crlResult.result.length; j++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region Check that the CRL issuer certificate have not been revoked\r\n\t\t\t\t\t\t\t\tconst isCertificateRevoked = crlResult.result[j].crl.isCertificateRevoked(path[i]);\r\n\t\t\t\t\t\t\t\tif(isCertificateRevoked)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\t\t\tresultCode: 12,\r\n\t\t\t\t\t\t\t\t\t\tresultMessage: \"One of certificates had been revoked\"\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t\t\t\t//region Check that the CRL issuer certificate is a CA certificate\r\n\t\t\t\t\t\t\t\tconst isCertificateCA = await checkForCA(crlResult.result[j].certificate, true);\r\n\t\t\t\t\t\t\t\tif(isCertificateCA.result === false)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\t\t\tresultCode: 13,\r\n\t\t\t\t\t\t\t\t\t\tresultMessage: \"CRL issuer certificate is not a CA certificate or does not have crlSign flag\"\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(passedWhenNotRevValues === false)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthrow {\r\n\t\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\t\tresultCode: 11,\r\n\t\t\t\t\t\t\t\t\tresultMessage: `No revocation values found for one of certificates: ${crlResult.statusMessage}`\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(ocspResult === 2)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\tresultCode: 11,\r\n\t\t\t\t\t\t\t\tresultMessage: \"No revocation values found for one of certificates\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\r\n\t\t\t\t\t//region Check we do have links to revocation values inside issuer's certificate\r\n\t\t\t\t\tif((ocspResult === 2) && (crlResult.status === 2) && passedWhenNotRevValues)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst issuerCertificate = path[i + 1];\r\n\t\t\t\t\t\tlet extensionFound = false;\r\n\r\n\t\t\t\t\t\tif(\"extensions\" in issuerCertificate)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfor(const extension of issuerCertificate.extensions)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tswitch(extension.extnID)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tcase \"2.5.29.31\": // CRLDistributionPoints\r\n\t\t\t\t\t\t\t\t\tcase \"2.5.29.46\": // FreshestCRL\r\n\t\t\t\t\t\t\t\t\tcase \"1.3.6.1.5.5.7.1.1\": // AuthorityInfoAccess\r\n\t\t\t\t\t\t\t\t\t\textensionFound = true;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(extensionFound)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow {\r\n\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\tresultCode: 11,\r\n\t\t\t\t\t\t\t\tresultMessage: `No revocation values found for one of certificates: ${crlResult.statusMessage}`\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check each certificate (except \"end entity\") in the path to be a CA certificate\r\n\t\t\tfor(let i = 1; i < path.length; i++)\r\n\t\t\t{\r\n\t\t\t\tconst result = await checkForCA(path[i]);\r\n\t\t\t\tif(result.result === false)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\tresultCode: 14,\r\n\t\t\t\t\t\tresultMessage: \"One of intermediate certificates is not a CA certificate\"\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn {\r\n\t\t\t\tresult: true\r\n\t\t\t};\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Do main work\r\n\t\t//region Initialize \"localCerts\" by value of \"_this.certs\" + \"_this.trustedCerts\" arrays\r\n\t\tlocalCerts.push(..._this.trustedCerts);\r\n\t\tlocalCerts.push(..._this.certs);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check all certificates for been unique\r\n\t\tfor(let i = 0; i < localCerts.length; i++)\r\n\t\t{\r\n\t\t\tfor(let j = 0; j < localCerts.length; j++)\r\n\t\t\t{\r\n\t\t\t\tif(i === j)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t\r\n\t\t\t\tif(isEqualBuffer(localCerts[i].tbs, localCerts[j].tbs))\r\n\t\t\t\t{\r\n\t\t\t\t\tlocalCerts.splice(j, 1);\r\n\t\t\t\t\ti = 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet result;\r\n\t\tconst certificatePath = [localCerts[localCerts.length - 1]]; // The \"end entity\" certificate must be the least in \"certs\" array\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Build path for \"end entity\" certificate\r\n\t\tresult = await buildPath(localCerts[localCerts.length - 1]);\r\n\t\tif(result.length === 0)\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tresult: false,\r\n\t\t\t\tresultCode: 60,\r\n\t\t\t\tresultMessage: \"Unable to find certificate path\"\r\n\t\t\t};\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Exclude certificate paths not ended with \"trusted roots\"\r\n\t\tfor(let i = 0; i < result.length; i++)\r\n\t\t{\r\n\t\t\tlet found = false;\r\n\t\t\t\r\n\t\t\tfor(let j = 0; j < (result[i]).length; j++)\r\n\t\t\t{\r\n\t\t\t\tconst certificate = (result[i])[j];\r\n\t\t\t\t\r\n\t\t\t\tfor(let k = 0; k < _this.trustedCerts.length; k++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(isEqualBuffer(certificate.tbs, _this.trustedCerts[k].tbs))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(found)\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(!found)\r\n\t\t\t{\r\n\t\t\t\tresult.splice(i, 1);\r\n\t\t\t\ti = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(result.length === 0)\r\n\t\t{\r\n\t\t\tthrow {\r\n\t\t\t\tresult: false,\r\n\t\t\t\tresultCode: 97,\r\n\t\t\t\tresultMessage: \"No valid certificate paths found\"\r\n\t\t\t};\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find shortest certificate path (for the moment it is the only criteria)\r\n\t\tlet shortestLength = result[0].length;\r\n\t\tlet shortestIndex = 0;\r\n\t\t\r\n\t\tfor(let i = 0; i < result.length; i++)\r\n\t\t{\r\n\t\t\tif(result[i].length < shortestLength)\r\n\t\t\t{\r\n\t\t\t\tshortestLength = result[i].length;\r\n\t\t\t\tshortestIndex = i;\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create certificate path for basic check\r\n\t\tfor(let i = 0; i < result[shortestIndex].length; i++)\r\n\t\t\tcertificatePath.push((result[shortestIndex])[i]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Perform basic checking for all certificates in the path\r\n\t\tresult = await basicCheck(certificatePath, _this.checkDate);\r\n\t\tif(result.result === false)\r\n\t\t\tthrow result;\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn certificatePath;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Major verification function for certificate chain.\r\n\t * @param {{initialPolicySet, initialExplicitPolicy, initialPolicyMappingInhibit, initialInhibitPolicy, initialPermittedSubtreesSet, initialExcludedSubtreesSet, initialRequiredNameForms}} [parameters]\r\n\t * @returns {Promise}\r\n\t */\r\n\tasync verify(parameters = {})\r\n\t{\r\n\t\t//region Auxiliary functions for name constraints checking\r\n\t\tfunction compareDNSName(name, constraint)\r\n\t\t{\r\n\t\t\t/// Compare two dNSName values\r\n\t\t\t/// DNS from name\r\n\t\t\t/// Constraint for DNS from name\r\n\t\t\t/// Boolean result - valid or invalid the \"name\" against the \"constraint\"\r\n\t\t\t\r\n\t\t\t//region Make a \"string preparation\" for both name and constrain\r\n\t\t\tconst namePrepared = stringPrep(name);\r\n\t\t\tconst constraintPrepared = stringPrep(constraint);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Make a \"splitted\" versions of \"constraint\" and \"name\"\r\n\t\t\tconst nameSplitted = namePrepared.split(\".\");\r\n\t\t\tconst constraintSplitted = constraintPrepared.split(\".\");\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Length calculation and additional check\r\n\t\t\tconst nameLen = nameSplitted.length;\r\n\t\t\tconst constrLen = constraintSplitted.length;\r\n\t\t\t\r\n\t\t\tif((nameLen === 0) || (constrLen === 0) || (nameLen < constrLen))\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check that no part of \"name\" has zero length\r\n\t\t\tfor(let i = 0; i < nameLen; i++)\r\n\t\t\t{\r\n\t\t\t\tif(nameSplitted[i].length === 0)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check that no part of \"constraint\" has zero length\r\n\t\t\tfor(let i = 0; i < constrLen; i++)\r\n\t\t\t{\r\n\t\t\t\tif(constraintSplitted[i].length === 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(i === 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(constrLen === 1)\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check that \"name\" has a tail as \"constraint\"\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < constrLen; i++)\r\n\t\t\t{\r\n\t\t\t\tif(constraintSplitted[constrLen - 1 - i].length === 0)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t\r\n\t\t\t\tif(nameSplitted[nameLen - 1 - i].localeCompare(constraintSplitted[constrLen - 1 - i]) !== 0)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\tfunction compareRFC822Name(name, constraint)\r\n\t\t{\r\n\t\t\t/// Compare two rfc822Name values\r\n\t\t\t/// E-mail address from name\r\n\t\t\t/// Constraint for e-mail address from name\r\n\t\t\t/// Boolean result - valid or invalid the \"name\" against the \"constraint\"\r\n\t\t\t\r\n\t\t\t//region Make a \"string preparation\" for both name and constrain\r\n\t\t\tconst namePrepared = stringPrep(name);\r\n\t\t\tconst constraintPrepared = stringPrep(constraint);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Make a \"splitted\" versions of \"constraint\" and \"name\"\r\n\t\t\tconst nameSplitted = namePrepared.split(\"@\");\r\n\t\t\tconst constraintSplitted = constraintPrepared.split(\"@\");\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Splitted array length checking\r\n\t\t\tif((nameSplitted.length === 0) || (constraintSplitted.length === 0) || (nameSplitted.length < constraintSplitted.length))\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(constraintSplitted.length === 1)\r\n\t\t\t{\r\n\t\t\t\tconst result = compareDNSName(nameSplitted[1], constraintSplitted[0]);\r\n\t\t\t\t\r\n\t\t\t\tif(result)\r\n\t\t\t\t{\r\n\t\t\t\t\t//region Make a \"splitted\" versions of domain name from \"constraint\" and \"name\"\r\n\t\t\t\t\tconst ns = nameSplitted[1].split(\".\");\r\n\t\t\t\t\tconst cs = constraintSplitted[0].split(\".\");\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(cs[0].length === 0)\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn ns.length === cs.length;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn (namePrepared.localeCompare(constraintPrepared) === 0);\r\n\t\t}\r\n\t\t\r\n\t\tfunction compareUniformResourceIdentifier(name, constraint)\r\n\t\t{\r\n\t\t\t/// Compare two uniformResourceIdentifier values\r\n\t\t\t/// uniformResourceIdentifier from name\r\n\t\t\t/// Constraint for uniformResourceIdentifier from name\r\n\t\t\t/// Boolean result - valid or invalid the \"name\" against the \"constraint\"\r\n\t\t\t\r\n\t\t\t//region Make a \"string preparation\" for both name and constrain\r\n\t\t\tlet namePrepared = stringPrep(name);\r\n\t\t\tconst constraintPrepared = stringPrep(constraint);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Find out a major URI part to compare with\r\n\t\t\tconst ns = namePrepared.split(\"/\");\r\n\t\t\tconst cs = constraintPrepared.split(\"/\");\r\n\t\t\t\r\n\t\t\tif(cs.length > 1) // Malformed constraint\r\n\t\t\t\treturn false;\r\n\t\t\t\r\n\t\t\tif(ns.length > 1) // Full URI string\r\n\t\t\t{\r\n\t\t\t\tfor(let i = 0; i < ns.length; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif((ns[i].length > 0) && (ns[i].charAt(ns[i].length - 1) !== \":\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst nsPort = ns[i].split(\":\");\r\n\t\t\t\t\t\tnamePrepared = nsPort[0];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tconst result = compareDNSName(namePrepared, constraintPrepared);\r\n\t\t\t\r\n\t\t\tif(result)\r\n\t\t\t{\r\n\t\t\t\t//region Make a \"splitted\" versions of \"constraint\" and \"name\"\r\n\t\t\t\tconst nameSplitted = namePrepared.split(\".\");\r\n\t\t\t\tconst constraintSplitted = constraintPrepared.split(\".\");\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\tif(constraintSplitted[0].length === 0)\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t\r\n\t\t\t\treturn nameSplitted.length === constraintSplitted.length;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n\t\tfunction compareIPAddress(name, constraint)\r\n\t\t{\r\n\t\t\t/// Compare two iPAddress values\r\n\t\t\t/// iPAddress from name\r\n\t\t\t/// Constraint for iPAddress from name\r\n\t\t\t/// Boolean result - valid or invalid the \"name\" against the \"constraint\"\r\n\t\t\t\r\n\t\t\t//region Common variables\r\n\t\t\tconst nameView = new Uint8Array(name.valueBlock.valueHex);\r\n\t\t\tconst constraintView = new Uint8Array(constraint.valueBlock.valueHex);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Work with IPv4 addresses\r\n\t\t\tif((nameView.length === 4) && (constraintView.length === 8))\r\n\t\t\t{\r\n\t\t\t\tfor(let i = 0; i < 4; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif((nameView[i] ^ constraintView[i]) & constraintView[i + 4])\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Work with IPv6 addresses\r\n\t\t\tif((nameView.length === 16) && (constraintView.length === 32))\r\n\t\t\t{\r\n\t\t\t\tfor(let i = 0; i < 16; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif((nameView[i] ^ constraintView[i]) & constraintView[i + 16])\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n\t\tfunction compareDirectoryName(name, constraint)\r\n\t\t{\r\n\t\t\t/// Compare two directoryName values\r\n\t\t\t/// directoryName from name\r\n\t\t\t/// Constraint for directoryName from name\r\n\t\t\t/// Boolean flag - should be comparision interrupted after first match or we need to match all \"constraints\" parts\r\n\t\t\t/// Boolean result - valid or invalid the \"name\" against the \"constraint\"\r\n\t\t\t\r\n\t\t\t//region Initial check\r\n\t\t\tif((name.typesAndValues.length === 0) || (constraint.typesAndValues.length === 0))\r\n\t\t\t\treturn true;\r\n\t\t\t\r\n\t\t\tif(name.typesAndValues.length < constraint.typesAndValues.length)\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Initial variables\r\n\t\t\tlet result = true;\r\n\t\t\tlet nameStart = 0;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < constraint.typesAndValues.length; i++)\r\n\t\t\t{\r\n\t\t\t\tlet localResult = false;\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = nameStart; j < name.typesAndValues.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tlocalResult = name.typesAndValues[j].isEqual(constraint.typesAndValues[i]);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(name.typesAndValues[j].type === constraint.typesAndValues[i].type)\r\n\t\t\t\t\t\tresult = result && localResult;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(localResult === true)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif((nameStart === 0) || (nameStart === j))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tnameStart = j + 1;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse // Structure of \"name\" must be the same with \"constraint\"\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(localResult === false)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn (nameStart === 0) ? false : result;\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\t//region Initial checks\r\n\t\t\tif(this.certs.length === 0)\r\n\t\t\t\tthrow \"Empty certificate array\";\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Get input variables\r\n\t\t\tlet passedWhenNotRevValues = false;\r\n\r\n\t\t\tif(\"passedWhenNotRevValues\" in parameters)\r\n\t\t\t\tpassedWhenNotRevValues = parameters.passedWhenNotRevValues;\r\n\r\n\t\t\tlet initialPolicySet = [];\r\n\t\t\tinitialPolicySet.push(\"2.5.29.32.0\"); // \"anyPolicy\"\r\n\t\t\t\r\n\t\t\tlet initialExplicitPolicy = false;\r\n\t\t\tlet initialPolicyMappingInhibit = false;\r\n\t\t\tlet initialInhibitPolicy = false;\r\n\t\t\t\r\n\t\t\tlet initialPermittedSubtreesSet = []; // Array of \"simpl.x509.GeneralSubtree\"\r\n\t\t\tlet initialExcludedSubtreesSet = []; // Array of \"simpl.x509.GeneralSubtree\"\r\n\t\t\tlet initialRequiredNameForms = []; // Array of \"simpl.x509.GeneralSubtree\"\r\n\t\t\t\r\n\t\t\tif(\"initialPolicySet\" in parameters)\r\n\t\t\t\tinitialPolicySet = parameters.initialPolicySet;\r\n\t\t\t\r\n\t\t\tif(\"initialExplicitPolicy\" in parameters)\r\n\t\t\t\tinitialExplicitPolicy = parameters.initialExplicitPolicy;\r\n\t\t\t\r\n\t\t\tif(\"initialPolicyMappingInhibit\" in parameters)\r\n\t\t\t\tinitialPolicyMappingInhibit = parameters.initialPolicyMappingInhibit;\r\n\t\t\t\r\n\t\t\tif(\"initialInhibitPolicy\" in parameters)\r\n\t\t\t\tinitialInhibitPolicy = parameters.initialInhibitPolicy;\r\n\t\t\t\r\n\t\t\tif(\"initialPermittedSubtreesSet\" in parameters)\r\n\t\t\t\tinitialPermittedSubtreesSet = parameters.initialPermittedSubtreesSet;\r\n\t\t\t\r\n\t\t\tif(\"initialExcludedSubtreesSet\" in parameters)\r\n\t\t\t\tinitialExcludedSubtreesSet = parameters.initialExcludedSubtreesSet;\r\n\t\t\t\r\n\t\t\tif(\"initialRequiredNameForms\" in parameters)\r\n\t\t\t\tinitialRequiredNameForms = parameters.initialRequiredNameForms;\r\n\t\t\t\r\n\t\t\tlet explicitPolicyIndicator = initialExplicitPolicy;\r\n\t\t\tlet policyMappingInhibitIndicator = initialPolicyMappingInhibit;\r\n\t\t\tlet inhibitAnyPolicyIndicator = initialInhibitPolicy;\r\n\t\t\t\r\n\t\t\tconst pendingConstraints = new Array(3);\r\n\t\t\tpendingConstraints[0] = false; // For \"explicitPolicyPending\"\r\n\t\t\tpendingConstraints[1] = false; // For \"policyMappingInhibitPending\"\r\n\t\t\tpendingConstraints[2] = false; // For \"inhibitAnyPolicyPending\"\r\n\t\t\t\r\n\t\t\tlet explicitPolicyPending = 0;\r\n\t\t\tlet policyMappingInhibitPending = 0;\r\n\t\t\tlet inhibitAnyPolicyPending = 0;\r\n\t\t\t\r\n\t\t\tlet permittedSubtrees = initialPermittedSubtreesSet;\r\n\t\t\tlet excludedSubtrees = initialExcludedSubtreesSet;\r\n\t\t\tconst requiredNameForms = initialRequiredNameForms;\r\n\t\t\t\r\n\t\t\tlet pathDepth = 1;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Sorting certificates in the chain array\r\n\t\t\tthis.certs = await this.sort(passedWhenNotRevValues);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Work with policies\r\n\t\t\t//region Support variables\r\n\t\t\tconst allPolicies = []; // Array of all policies (string values)\r\n\t\t\tallPolicies.push(\"2.5.29.32.0\"); // Put \"anyPolicy\" at first place\r\n\t\t\t\r\n\t\t\tconst policiesAndCerts = []; // In fact \"array of array\" where rows are for each specific policy, column for each certificate and value is \"true/false\"\r\n\t\t\t\r\n\t\t\tconst anyPolicyArray = new Array(this.certs.length - 1); // Minus \"trusted anchor\"\r\n\t\t\tfor(let ii = 0; ii < (this.certs.length - 1); ii++)\r\n\t\t\t\tanyPolicyArray[ii] = true;\r\n\t\t\t\r\n\t\t\tpoliciesAndCerts.push(anyPolicyArray);\r\n\t\t\t\r\n\t\t\tconst policyMappings = new Array(this.certs.length - 1); // Array of \"PolicyMappings\" for each certificate\r\n\t\t\tconst certPolicies = new Array(this.certs.length - 1); // Array of \"CertificatePolicies\" for each certificate\r\n\t\t\t\r\n\t\t\tlet explicitPolicyStart = (explicitPolicyIndicator) ? (this.certs.length - 1) : (-1);\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Gather all neccessary information from certificate chain\r\n\t\t\tfor(let i = (this.certs.length - 2); i >= 0; i--, pathDepth++)\r\n\t\t\t{\r\n\t\t\t\tif(\"extensions\" in this.certs[i])\r\n\t\t\t\t{\r\n\t\t\t\t\t//region Get information about certificate extensions\r\n\t\t\t\t\tfor(let j = 0; j < this.certs[i].extensions.length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//region CertificatePolicies\r\n\t\t\t\t\t\tif(this.certs[i].extensions[j].extnID === \"2.5.29.32\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcertPolicies[i] = this.certs[i].extensions[j].parsedValue;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t//region Remove entry from \"anyPolicies\" for the certificate\r\n\t\t\t\t\t\t\tfor(let s = 0; s < allPolicies.length; s++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(allPolicies[s] === \"2.5.29.32.0\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tdelete (policiesAndCerts[s])[i];\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tfor(let k = 0; k < this.certs[i].extensions[j].parsedValue.certificatePolicies.length; k++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlet policyIndex = (-1);\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t//region Try to find extension in \"allPolicies\" array\r\n\t\t\t\t\t\t\t\tfor(let s = 0; s < allPolicies.length; s++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(this.certs[i].extensions[j].parsedValue.certificatePolicies[k].policyIdentifier === allPolicies[s])\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tpolicyIndex = s;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif(policyIndex === (-1))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tallPolicies.push(this.certs[i].extensions[j].parsedValue.certificatePolicies[k].policyIdentifier);\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tconst certArray = new Array(this.certs.length - 1);\r\n\t\t\t\t\t\t\t\t\tcertArray[i] = true;\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tpoliciesAndCerts.push(certArray);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t(policiesAndCerts[policyIndex])[i] = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region PolicyMappings\r\n\t\t\t\t\t\tif(this.certs[i].extensions[j].extnID === \"2.5.29.33\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(policyMappingInhibitIndicator)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\t\tresultCode: 98,\r\n\t\t\t\t\t\t\t\t\tresultMessage: \"Policy mapping prohibited\"\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tpolicyMappings[i] = this.certs[i].extensions[j].parsedValue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region PolicyConstraints\r\n\t\t\t\t\t\tif(this.certs[i].extensions[j].extnID === \"2.5.29.36\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(explicitPolicyIndicator === false)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region requireExplicitPolicy\r\n\t\t\t\t\t\t\t\tif(this.certs[i].extensions[j].parsedValue.requireExplicitPolicy === 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\texplicitPolicyIndicator = true;\r\n\t\t\t\t\t\t\t\t\texplicitPolicyStart = i;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(pendingConstraints[0] === false)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tpendingConstraints[0] = true;\r\n\t\t\t\t\t\t\t\t\t\texplicitPolicyPending = this.certs[i].extensions[j].parsedValue.requireExplicitPolicy;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\texplicitPolicyPending = (explicitPolicyPending > this.certs[i].extensions[j].parsedValue.requireExplicitPolicy) ? this.certs[i].extensions[j].parsedValue.requireExplicitPolicy : explicitPolicyPending;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t//region inhibitPolicyMapping\r\n\t\t\t\t\t\t\t\tif(this.certs[i].extensions[j].parsedValue.inhibitPolicyMapping === 0)\r\n\t\t\t\t\t\t\t\t\tpolicyMappingInhibitIndicator = true;\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(pendingConstraints[1] === false)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tpendingConstraints[1] = true;\r\n\t\t\t\t\t\t\t\t\t\tpolicyMappingInhibitPending = this.certs[i].extensions[j].parsedValue.inhibitPolicyMapping + 1;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\tpolicyMappingInhibitPending = (policyMappingInhibitPending > (this.certs[i].extensions[j].parsedValue.inhibitPolicyMapping + 1)) ? (this.certs[i].extensions[j].parsedValue.inhibitPolicyMapping + 1) : policyMappingInhibitPending;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region InhibitAnyPolicy\r\n\t\t\t\t\t\tif(this.certs[i].extensions[j].extnID === \"2.5.29.54\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(inhibitAnyPolicyIndicator === false)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(this.certs[i].extensions[j].parsedValue.valueBlock.valueDec === 0)\r\n\t\t\t\t\t\t\t\t\tinhibitAnyPolicyIndicator = true;\r\n\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(pendingConstraints[2] === false)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tpendingConstraints[2] = true;\r\n\t\t\t\t\t\t\t\t\t\tinhibitAnyPolicyPending = this.certs[i].extensions[j].parsedValue.valueBlock.valueDec;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\tinhibitAnyPolicyPending = (inhibitAnyPolicyPending > this.certs[i].extensions[j].parsedValue.valueBlock.valueDec) ? this.certs[i].extensions[j].parsedValue.valueBlock.valueDec : inhibitAnyPolicyPending;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Check \"inhibitAnyPolicyIndicator\"\r\n\t\t\t\t\tif(inhibitAnyPolicyIndicator === true)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlet policyIndex = (-1);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region Find \"anyPolicy\" index\r\n\t\t\t\t\t\tfor(let searchAnyPolicy = 0; searchAnyPolicy < allPolicies.length; searchAnyPolicy++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(allPolicies[searchAnyPolicy] === \"2.5.29.32.0\")\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tpolicyIndex = searchAnyPolicy;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(policyIndex !== (-1))\r\n\t\t\t\t\t\t\tdelete (policiesAndCerts[0])[i]; // Unset value to \"undefined\" for \"anyPolicies\" value for current certificate\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Process with \"pending constraints\"\r\n\t\t\t\t\tif(explicitPolicyIndicator === false)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(pendingConstraints[0] === true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\texplicitPolicyPending--;\r\n\t\t\t\t\t\t\tif(explicitPolicyPending === 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\texplicitPolicyIndicator = true;\r\n\t\t\t\t\t\t\t\texplicitPolicyStart = i;\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tpendingConstraints[0] = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(policyMappingInhibitIndicator === false)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(pendingConstraints[1] === true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpolicyMappingInhibitPending--;\r\n\t\t\t\t\t\t\tif(policyMappingInhibitPending === 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tpolicyMappingInhibitIndicator = true;\r\n\t\t\t\t\t\t\t\tpendingConstraints[1] = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(inhibitAnyPolicyIndicator === false)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(pendingConstraints[2] === true)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tinhibitAnyPolicyPending--;\r\n\t\t\t\t\t\t\tif(inhibitAnyPolicyPending === 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tinhibitAnyPolicyIndicator = true;\r\n\t\t\t\t\t\t\t\tpendingConstraints[2] = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Working with policy mappings\r\n\t\t\tfor(let i = 0; i < (this.certs.length - 1); i++)\r\n\t\t\t{\r\n\t\t\t\t//region Check that there is \"policy mapping\" for level \"i + 1\"\r\n\t\t\t\tif((i < (this.certs.length - 2)) && (typeof policyMappings[i + 1] !== \"undefined\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(let k = 0; k < policyMappings[i + 1].mappings.length; k++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//region Check that we do not have \"anyPolicy\" in current mapping\r\n\t\t\t\t\t\tif((policyMappings[i + 1].mappings[k].issuerDomainPolicy === \"2.5.29.32.0\") || (policyMappings[i + 1].mappings[k].subjectDomainPolicy === \"2.5.29.32.0\"))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\t\t\tresultCode: 99,\r\n\t\t\t\t\t\t\t\tresultMessage: \"The \\\"anyPolicy\\\" should not be a part of policy mapping scheme\"\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region Initial variables\r\n\t\t\t\t\t\tlet issuerDomainPolicyIndex = (-1);\r\n\t\t\t\t\t\tlet subjectDomainPolicyIndex = (-1);\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region Search for index of policies indedes\r\n\t\t\t\t\t\tfor(let n = 0; n < allPolicies.length; n++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(allPolicies[n] === policyMappings[i + 1].mappings[k].issuerDomainPolicy)\r\n\t\t\t\t\t\t\t\tissuerDomainPolicyIndex = n;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(allPolicies[n] === policyMappings[i + 1].mappings[k].subjectDomainPolicy)\r\n\t\t\t\t\t\t\t\tsubjectDomainPolicyIndex = n;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region Delete existing \"issuerDomainPolicy\" because on the level we mapped the policy to another one\r\n\t\t\t\t\t\tif(typeof (policiesAndCerts[issuerDomainPolicyIndex])[i] !== \"undefined\")\r\n\t\t\t\t\t\t\tdelete (policiesAndCerts[issuerDomainPolicyIndex])[i];\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region Check all policies for the certificate\r\n\t\t\t\t\t\tfor(let j = 0; j < certPolicies[i].certificatePolicies.length; j++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(policyMappings[i + 1].mappings[k].subjectDomainPolicy === certPolicies[i].certificatePolicies[j].policyIdentifier)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t//region Set mapped policy for current certificate\r\n\t\t\t\t\t\t\t\tif((issuerDomainPolicyIndex !== (-1)) && (subjectDomainPolicyIndex !== (-1)))\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tfor(let m = 0; m <= i; m++)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(typeof (policiesAndCerts[subjectDomainPolicyIndex])[m] !== \"undefined\")\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t(policiesAndCerts[issuerDomainPolicyIndex])[m] = true;\r\n\t\t\t\t\t\t\t\t\t\t\tdelete (policiesAndCerts[subjectDomainPolicyIndex])[m];\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Working with \"explicitPolicyIndicator\" and \"anyPolicy\"\r\n\t\t\tfor(let i = 0; i < allPolicies.length; i++)\r\n\t\t\t{\r\n\t\t\t\tif(allPolicies[i] === \"2.5.29.32.0\")\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(let j = 0; j < explicitPolicyStart; j++)\r\n\t\t\t\t\t\tdelete (policiesAndCerts[i])[j];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Create \"set of authorities-constrained policies\"\r\n\t\t\tconst authConstrPolicies = [];\r\n\t\t\t\r\n\t\t\tfor(let i = 0; i < policiesAndCerts.length; i++)\r\n\t\t\t{\r\n\t\t\t\tlet found = true;\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = 0; j < (this.certs.length - 1); j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tlet anyPolicyFound = false;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif((j < explicitPolicyStart) && (allPolicies[i] === \"2.5.29.32.0\") && (allPolicies.length > 1))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfound = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(typeof (policiesAndCerts[i])[j] === \"undefined\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(j >= explicitPolicyStart)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//region Search for \"anyPolicy\" in the policy set\r\n\t\t\t\t\t\t\tfor(let k = 0; k < allPolicies.length; k++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(allPolicies[k] === \"2.5.29.32.0\")\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif((policiesAndCerts[k])[j] === true)\r\n\t\t\t\t\t\t\t\t\t\tanyPolicyFound = true;\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(!anyPolicyFound)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfound = false;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(found === true)\r\n\t\t\t\t\tauthConstrPolicies.push(allPolicies[i]);\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Create \"set of user-constrained policies\"\r\n\t\t\tlet userConstrPolicies = [];\r\n\t\t\t\r\n\t\t\tif((initialPolicySet.length === 1) && (initialPolicySet[0] === \"2.5.29.32.0\") && (explicitPolicyIndicator === false))\r\n\t\t\t\tuserConstrPolicies = initialPolicySet;\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif((authConstrPolicies.length === 1) && (authConstrPolicies[0] === \"2.5.29.32.0\"))\r\n\t\t\t\t\tuserConstrPolicies = initialPolicySet;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(let i = 0; i < authConstrPolicies.length; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor(let j = 0; j < initialPolicySet.length; j++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif((initialPolicySet[j] === authConstrPolicies[i]) || (initialPolicySet[j] === \"2.5.29.32.0\"))\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tuserConstrPolicies.push(authConstrPolicies[i]);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Combine output object\r\n\t\t\tconst policyResult = {\r\n\t\t\t\tresult: (userConstrPolicies.length > 0),\r\n\t\t\t\tresultCode: 0,\r\n\t\t\t\tresultMessage: (userConstrPolicies.length > 0) ? \"\" : \"Zero \\\"userConstrPolicies\\\" array, no intersections with \\\"authConstrPolicies\\\"\",\r\n\t\t\t\tauthConstrPolicies,\r\n\t\t\t\tuserConstrPolicies,\r\n\t\t\t\texplicitPolicyIndicator,\r\n\t\t\t\tpolicyMappings,\r\n\t\t\t\tcertificatePath: this.certs\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tif(userConstrPolicies.length === 0)\r\n\t\t\t\treturn policyResult;\r\n\t\t\t//endregion\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Work with name constraints\r\n\t\t\t//region Check a result from \"policy checking\" part\r\n\t\t\tif(policyResult.result === false)\r\n\t\t\t\treturn policyResult;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\t//region Check all certificates, excluding \"trust anchor\"\r\n\t\t\tpathDepth = 1;\r\n\t\t\t\r\n\t\t\tfor(let i = (this.certs.length - 2); i >= 0; i--, pathDepth++)\r\n\t\t\t{\r\n\t\t\t\t//region Support variables\r\n\t\t\t\tlet subjectAltNames = [];\r\n\t\t\t\t\r\n\t\t\t\tlet certPermittedSubtrees = [];\r\n\t\t\t\tlet certExcludedSubtrees = [];\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\tif(\"extensions\" in this.certs[i])\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(let j = 0; j < this.certs[i].extensions.length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//region NameConstraints\r\n\t\t\t\t\t\tif(this.certs[i].extensions[j].extnID === \"2.5.29.30\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(\"permittedSubtrees\" in this.certs[i].extensions[j].parsedValue)\r\n\t\t\t\t\t\t\t\tcertPermittedSubtrees = certPermittedSubtrees.concat(this.certs[i].extensions[j].parsedValue.permittedSubtrees);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(\"excludedSubtrees\" in this.certs[i].extensions[j].parsedValue)\r\n\t\t\t\t\t\t\t\tcertExcludedSubtrees = certExcludedSubtrees.concat(this.certs[i].extensions[j].parsedValue.excludedSubtrees);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t//region SubjectAltName\r\n\t\t\t\t\t\tif(this.certs[i].extensions[j].extnID === \"2.5.29.17\")\r\n\t\t\t\t\t\t\tsubjectAltNames = subjectAltNames.concat(this.certs[i].extensions[j].parsedValue.altNames);\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t//region Checking for \"required name forms\"\r\n\t\t\t\tlet formFound = (requiredNameForms.length <= 0);\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = 0; j < requiredNameForms.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch(requiredNameForms[j].base.type)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase 4: // directoryName\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(requiredNameForms[j].base.value.typesAndValues.length !== this.certs[i].subject.typesAndValues.length)\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tformFound = true;\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tfor(let k = 0; k < this.certs[i].subject.typesAndValues.length; k++)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif(this.certs[i].subject.typesAndValues[k].type !== requiredNameForms[j].base.value.typesAndValues[k].type)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tformFound = false;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(formFound === true)\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault: // ??? Probably here we should reject the certificate ???\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(formFound === false)\r\n\t\t\t\t{\r\n\t\t\t\t\tpolicyResult.result = false;\r\n\t\t\t\t\tpolicyResult.resultCode = 21;\r\n\t\t\t\t\tpolicyResult.resultMessage = \"No neccessary name form found\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tthrow policyResult;\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Checking for \"permited sub-trees\"\r\n\t\t\t\t//region Make groups for all types of constraints\r\n\t\t\t\tconst constrGroups = []; // Array of array for groupped constraints\r\n\t\t\t\tconstrGroups[0] = []; // rfc822Name\r\n\t\t\t\tconstrGroups[1] = []; // dNSName\r\n\t\t\t\tconstrGroups[2] = []; // directoryName\r\n\t\t\t\tconstrGroups[3] = []; // uniformResourceIdentifier\r\n\t\t\t\tconstrGroups[4] = []; // iPAddress\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = 0; j < permittedSubtrees.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch(permittedSubtrees[j].base.type)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//region rfc822Name\r\n\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\tconstrGroups[0].push(permittedSubtrees[j]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region dNSName\r\n\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\tconstrGroups[1].push(permittedSubtrees[j]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region directoryName\r\n\t\t\t\t\t\tcase 4:\r\n\t\t\t\t\t\t\tconstrGroups[2].push(permittedSubtrees[j]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region uniformResourceIdentifier\r\n\t\t\t\t\t\tcase 6:\r\n\t\t\t\t\t\t\tconstrGroups[3].push(permittedSubtrees[j]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region iPAddress\r\n\t\t\t\t\t\tcase 7:\r\n\t\t\t\t\t\t\tconstrGroups[4].push(permittedSubtrees[j]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region default\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Check name constraints groupped by type, one-by-one\r\n\t\t\t\tfor(let p = 0; p < 5; p++)\r\n\t\t\t\t{\r\n\t\t\t\t\tlet groupPermitted = false;\r\n\t\t\t\t\tlet valueExists = false;\r\n\t\t\t\t\tconst group = constrGroups[p];\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor(let j = 0; j < group.length; j++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tswitch(p)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//region rfc822Name\r\n\t\t\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 1) // rfc822Name\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tvalueExists = true;\r\n\t\t\t\t\t\t\t\t\t\t\tgroupPermitted = groupPermitted || compareRFC822Name(subjectAltNames[k].value, group[j].base.value);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse // Try to find out \"emailAddress\" inside \"subject\"\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tfor(let k = 0; k < this.certs[i].subject.typesAndValues.length; k++)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif((this.certs[i].subject.typesAndValues[k].type === \"1.2.840.113549.1.9.1\") || // PKCS#9 e-mail address\r\n\t\t\t\t\t\t\t\t\t\t\t(this.certs[i].subject.typesAndValues[k].type === \"0.9.2342.19200300.100.1.3\")) // RFC1274 \"rfc822Mailbox\" e-mail address\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tvalueExists = true;\r\n\t\t\t\t\t\t\t\t\t\t\tgroupPermitted = groupPermitted || compareRFC822Name(this.certs[i].subject.typesAndValues[k].value.valueBlock.value, group[j].base.value);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t//region dNSName\r\n\t\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 2) // dNSName\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tvalueExists = true;\r\n\t\t\t\t\t\t\t\t\t\t\tgroupPermitted = groupPermitted || compareDNSName(subjectAltNames[k].value, group[j].base.value);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t//region directoryName\r\n\t\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\t\tvalueExists = true;\r\n\t\t\t\t\t\t\t\tgroupPermitted = compareDirectoryName(this.certs[i].subject, group[j].base.value);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t//region uniformResourceIdentifier\r\n\t\t\t\t\t\t\tcase 3:\r\n\t\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 6) // uniformResourceIdentifier\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tvalueExists = true;\r\n\t\t\t\t\t\t\t\t\t\t\tgroupPermitted = groupPermitted || compareUniformResourceIdentifier(subjectAltNames[k].value, group[j].base.value);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t//region iPAddress\r\n\t\t\t\t\t\t\tcase 4:\r\n\t\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 7) // iPAddress\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tvalueExists = true;\r\n\t\t\t\t\t\t\t\t\t\t\tgroupPermitted = groupPermitted || compareIPAddress(subjectAltNames[k].value, group[j].base.value);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t\t//region default\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(groupPermitted)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif((groupPermitted === false) && (group.length > 0) && valueExists)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpolicyResult.result = false;\r\n\t\t\t\t\t\tpolicyResult.resultCode = 41;\r\n\t\t\t\t\t\tpolicyResult.resultMessage = \"Failed to meet \\\"permitted sub-trees\\\" name constraint\";\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthrow policyResult;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Checking for \"excluded sub-trees\"\r\n\t\t\t\tlet excluded = false;\r\n\t\t\t\t\r\n\t\t\t\tfor(let j = 0; j < excludedSubtrees.length; j++)\r\n\t\t\t\t{\r\n\t\t\t\t\tswitch(excludedSubtrees[j].base.type)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//region rfc822Name\r\n\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\tif(subjectAltNames.length >= 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 1) // rfc822Name\r\n\t\t\t\t\t\t\t\t\t\texcluded = excluded || compareRFC822Name(subjectAltNames[k].value, excludedSubtrees[j].base.value);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse // Try to find out \"emailAddress\" inside \"subject\"\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tfor(let k = 0; k < this.certs[i].subject.typesAndValues.length; k++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif((this.certs[i].subject.typesAndValues[k].type === \"1.2.840.113549.1.9.1\") || // PKCS#9 e-mail address\r\n\t\t\t\t\t\t\t\t\t\t(this.certs[i].subject.typesAndValues[k].type === \"0.9.2342.19200300.100.1.3\")) // RFC1274 \"rfc822Mailbox\" e-mail address\r\n\t\t\t\t\t\t\t\t\t\texcluded = excluded || compareRFC822Name(this.certs[i].subject.typesAndValues[k].value.valueBlock.value, excludedSubtrees[j].base.value);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region dNSName\r\n\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 2) // dNSName\r\n\t\t\t\t\t\t\t\t\t\texcluded = excluded || compareDNSName(subjectAltNames[k].value, excludedSubtrees[j].base.value);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region directoryName\r\n\t\t\t\t\t\tcase 4:\r\n\t\t\t\t\t\t\texcluded = excluded || compareDirectoryName(this.certs[i].subject, excludedSubtrees[j].base.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region uniformResourceIdentifier\r\n\t\t\t\t\t\tcase 6:\r\n\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 6) // uniformResourceIdentifier\r\n\t\t\t\t\t\t\t\t\t\texcluded = excluded || compareUniformResourceIdentifier(subjectAltNames[k].value, excludedSubtrees[j].base.value);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region iPAddress\r\n\t\t\t\t\t\tcase 7:\r\n\t\t\t\t\t\t\tif(subjectAltNames.length > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tfor(let k = 0; k < subjectAltNames.length; k++)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tif(subjectAltNames[k].type === 7) // iPAddress\r\n\t\t\t\t\t\t\t\t\t\texcluded = excluded || compareIPAddress(subjectAltNames[k].value, excludedSubtrees[j].base.value);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t\t//region default\r\n\t\t\t\t\t\tdefault: // No action, but probably here we need to create a warning for \"malformed constraint\"\r\n\t\t\t\t\t\t//endregion\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(excluded)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(excluded === true)\r\n\t\t\t\t{\r\n\t\t\t\t\tpolicyResult.result = false;\r\n\t\t\t\t\tpolicyResult.resultCode = 42;\r\n\t\t\t\t\tpolicyResult.resultMessage = \"Failed to meet \\\"excluded sub-trees\\\" name constraint\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tthrow policyResult;\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Append \"cert_..._subtrees\" to \"..._subtrees\"\r\n\t\t\t\tpermittedSubtrees = permittedSubtrees.concat(certPermittedSubtrees);\r\n\t\t\t\texcludedSubtrees = excludedSubtrees.concat(certExcludedSubtrees);\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn policyResult;\r\n\t\t\t//endregion\r\n\t\t}\r\n\t\tcatch(error)\r\n\t\t{\r\n\t\t\tif(error instanceof Object)\r\n\t\t\t{\r\n\t\t\t\tif(\"resultMessage\" in error)\r\n\t\t\t\t\treturn error;\r\n\t\t\t\t\r\n\t\t\t\tif(\"message\" in error)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tresult: false,\r\n\t\t\t\t\t\tresultCode: -1,\r\n\t\t\t\t\t\tresultMessage: error.message\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn {\r\n\t\t\t\tresult: false,\r\n\t\t\t\tresultCode: -1,\r\n\t\t\t\tresultMessage: error\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, isEqualBuffer, clearProps } from \"pvutils\";\r\nimport { getAlgorithmByOID, getCrypto, getEngine } from \"./common.js\";\r\nimport ResponseData from \"./ResponseData.js\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport Certificate from \"./Certificate.js\";\r\nimport CertID from \"./CertID.js\";\r\nimport RelativeDistinguishedNames from \"./RelativeDistinguishedNames.js\";\r\nimport CertificateChainValidationEngine from \"./CertificateChainValidationEngine.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC6960\r\n */\r\nexport default class BasicOCSPResponse\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for BasicOCSPResponse class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {ResponseData}\r\n\t\t * @desc tbsResponseData\r\n\t\t */\r\n\t\tthis.tbsResponseData = getParametersValue(parameters, \"tbsResponseData\", BasicOCSPResponse.defaultValues(\"tbsResponseData\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc signatureAlgorithm\r\n\t\t */\r\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", BasicOCSPResponse.defaultValues(\"signatureAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {BitString}\r\n\t\t * @desc signature\r\n\t\t */\r\n\t\tthis.signature = getParametersValue(parameters, \"signature\", BasicOCSPResponse.defaultValues(\"signature\"));\r\n\t\t\r\n\t\tif(\"certs\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc certs\r\n\t\t\t */\r\n\t\t\tthis.certs = getParametersValue(parameters, \"certs\", BasicOCSPResponse.defaultValues(\"certs\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"tbsResponseData\":\r\n\t\t\t\treturn new ResponseData();\r\n\t\t\tcase \"signatureAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"signature\":\r\n\t\t\t\treturn new asn1js.BitString();\r\n\t\t\tcase \"certs\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for BasicOCSPResponse class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\t{\r\n\t\t\t\t\t// noinspection OverlyComplexBooleanExpressionJS\r\n\t\t\t\t\tlet comparisonResult = ((ResponseData.compareWithDefault(\"tbs\", memberValue.tbs)) &&\r\n\t\t\t\t\t(ResponseData.compareWithDefault(\"responderID\", memberValue.responderID)) &&\r\n\t\t\t\t\t(ResponseData.compareWithDefault(\"producedAt\", memberValue.producedAt)) &&\r\n\t\t\t\t\t(ResponseData.compareWithDefault(\"responses\", memberValue.responses)));\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(\"responseExtensions\" in memberValue)\r\n\t\t\t\t\t\tcomparisonResult = comparisonResult && (ResponseData.compareWithDefault(\"responseExtensions\", memberValue.responseExtensions));\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn comparisonResult;\r\n\t\t\t\t}\r\n\t\t\tcase \"signatureAlgorithm\":\r\n\t\t\t\treturn ((memberValue.algorithmId === \"\") && ((\"algorithmParams\" in memberValue) === false));\r\n\t\t\tcase \"signature\":\r\n\t\t\t\treturn (memberValue.isEqual(BasicOCSPResponse.defaultValues(memberName)));\r\n\t\t\tcase \"certs\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for BasicOCSPResponse class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * BasicOCSPResponse ::= SEQUENCE {\r\n\t * tbsResponseData ResponseData,\r\n\t * signatureAlgorithm AlgorithmIdentifier,\r\n\t * signature BIT STRING,\r\n\t * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [tbsResponseData]\r\n\t\t * @property {string} [signatureAlgorithm]\r\n\t\t * @property {string} [signature]\r\n\t\t * @property {string} [certs]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"BasicOCSPResponse\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tResponseData.schema(names.tbsResponseData || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"BasicOCSPResponse.tbsResponseData\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tAlgorithmIdentifier.schema(names.signatureAlgorithm || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"BasicOCSPResponse.signatureAlgorithm\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.BitString({ name: (names.signature || \"BasicOCSPResponse.signature\") }),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Sequence({\r\n\t\t\t\t\t\t\tvalue: [new asn1js.Repeated({\r\n\t\t\t\t\t\t\t\tname: \"BasicOCSPResponse.certs\",\r\n\t\t\t\t\t\t\t\tvalue: Certificate.schema(names.certs || {})\r\n\t\t\t\t\t\t\t})]\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"BasicOCSPResponse.tbsResponseData\",\r\n\t\t\t\"BasicOCSPResponse.signatureAlgorithm\",\r\n\t\t\t\"BasicOCSPResponse.signature\",\r\n\t\t\t\"BasicOCSPResponse.certs\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tBasicOCSPResponse.schema()\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for BasicOCSPResponse\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.tbsResponseData = new ResponseData({ schema: asn1.result[\"BasicOCSPResponse.tbsResponseData\"] });\r\n\t\tthis.signatureAlgorithm = new AlgorithmIdentifier({ schema: asn1.result[\"BasicOCSPResponse.signatureAlgorithm\"] });\r\n\t\tthis.signature = asn1.result[\"BasicOCSPResponse.signature\"];\r\n\t\t\r\n\t\tif(\"BasicOCSPResponse.certs\" in asn1.result)\r\n\t\t\tthis.certs = Array.from(asn1.result[\"BasicOCSPResponse.certs\"], element => new Certificate({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(this.tbsResponseData.toSchema());\r\n\t\toutputArray.push(this.signatureAlgorithm.toSchema());\r\n\t\toutputArray.push(this.signature);\r\n\t\t\r\n\t\t//region Create array of certificates\r\n\t\tif(\"certs\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tnew asn1js.Sequence({\r\n\t\t\t\t\t\tvalue: Array.from(this.certs, element => element.toSchema())\r\n\t\t\t\t\t})\r\n\t\t\t\t]\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\ttbsResponseData: this.tbsResponseData.toJSON(),\r\n\t\t\tsignatureAlgorithm: this.signatureAlgorithm.toJSON(),\r\n\t\t\tsignature: this.signature.toJSON()\r\n\t\t};\r\n\t\t\r\n\t\tif(\"certs\" in this)\r\n\t\t\t_object.certs = Array.from(this.certs, element => element.toJSON());\r\n\t\t\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Get OCSP response status for specific certificate\r\n\t * @param {Certificate} certificate Certificate to be checked\r\n\t * @param {Certificate} issuerCertificate Certificate of issuer for certificate to be checked\r\n\t * @returns {Promise}\r\n\t */\r\n\tgetCertificateStatus(certificate, issuerCertificate)\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tconst result = {\r\n\t\t\tisForCertificate: false,\r\n\t\t\tstatus: 2 // 0 = good, 1 = revoked, 2 = unknown\r\n\t\t};\r\n\t\t\r\n\t\tconst hashesObject = {};\r\n\t\t\r\n\t\tconst certIDs = [];\r\n\t\tconst certIDPromises = [];\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create all \"certIDs\" for input certificates\r\n\t\tfor(const response of this.tbsResponseData.responses)\r\n\t\t{\r\n\t\t\tconst hashAlgorithm = getAlgorithmByOID(response.certID.hashAlgorithm.algorithmId);\r\n\t\t\tif((\"name\" in hashAlgorithm) === false)\r\n\t\t\t\treturn Promise.reject(`Wrong CertID hashing algorithm: ${response.certID.hashAlgorithm.algorithmId}`);\r\n\t\t\t\r\n\t\t\tif((hashAlgorithm.name in hashesObject) === false)\r\n\t\t\t{\r\n\t\t\t\thashesObject[hashAlgorithm.name] = 1;\r\n\t\t\t\t\r\n\t\t\t\tconst certID = new CertID();\r\n\t\t\t\t\r\n\t\t\t\tcertIDs.push(certID);\r\n\t\t\t\tcertIDPromises.push(certID.createForCertificate(certificate, {\r\n\t\t\t\t\thashAlgorithm: hashAlgorithm.name,\r\n\t\t\t\t\tissuerCertificate\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tsequence = sequence.then(() =>\r\n\t\t\tPromise.all(certIDPromises)\r\n\t\t);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Compare all response's \"certIDs\" with identifiers for input certificate\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tfor(const response of this.tbsResponseData.responses)\r\n\t\t\t{\r\n\t\t\t\tfor(const id of certIDs)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(response.certID.isEqual(id))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tresult.isForCertificate = true;\r\n\r\n\t\t\t\t\t\ttry\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tswitch(response.certStatus.idBlock.isConstructed)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase true:\r\n\t\t\t\t\t\t\t\t\tif(response.certStatus.idBlock.tagNumber === 1)\r\n\t\t\t\t\t\t\t\t\t\tresult.status = 1; // revoked\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase false:\r\n\t\t\t\t\t\t\t\t\tswitch(response.certStatus.idBlock.tagNumber)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tcase 0: // good\r\n\t\t\t\t\t\t\t\t\t\t\tresult.status = 0;\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase 2: // unknown\r\n\t\t\t\t\t\t\t\t\t\t\tresult.status = 2;\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch(ex)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn result;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Make signature for current OCSP Basic Response\r\n\t * @param {Object} privateKey Private key for \"subjectPublicKeyInfo\" structure\r\n\t * @param {string} [hashAlgorithm=\"SHA-1\"] Hashing algorithm. Default SHA-1\r\n\t * @returns {Promise}\r\n\t */\r\n\tsign(privateKey, hashAlgorithm = \"SHA-1\")\r\n\t{\r\n\t\t//region Initial checking\r\n\t\t//region Get a private key from function parameter\r\n\t\tif(typeof privateKey === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Need to provide a private key for signing\");\r\n\t\t//endregion\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\tlet parameters;\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"default parameters\" for current algorithm and set correct signature algorithm\r\n\t\tsequence = sequence.then(() => engine.subtle.getSignatureParameters(privateKey, hashAlgorithm));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tparameters = result.parameters;\r\n\t\t\tthis.signatureAlgorithm = result.signatureAlgorithm;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create TBS data for signing\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tthis.tbsResponseData.tbs = this.tbsResponseData.toSchema(true).toBER(false);\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Signing TBS data on provided private key\r\n\t\tsequence = sequence.then(() => engine.subtle.signWithPrivateKey(this.tbsResponseData.tbs, privateKey, parameters));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tthis.signature = new asn1js.BitString({ valueHex: result });\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Verify existing OCSP Basic Response\r\n\t * @param {Object} parameters Additional parameters\r\n\t * @returns {Promise}\r\n\t */\r\n\tverify(parameters = {})\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet signerCert = null;\r\n\t\t\r\n\t\tlet certIndex = -1;\r\n\t\t\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tlet trustedCerts = [];\r\n\t\t\r\n\t\tconst _this = this;\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check amount of certificates\r\n\t\tif((\"certs\" in this) === false)\r\n\t\t\treturn Promise.reject(\"No certificates attached to the BasicOCSPResponce\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get input values\r\n\t\tif(\"trustedCerts\" in parameters)\r\n\t\t\ttrustedCerts = parameters.trustedCerts;\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Aux functions\r\n\t\t/**\r\n\t\t * Check CA flag for the certificate\r\n\t\t * @param {Certificate} cert Certificate to find CA flag for\r\n\t\t * @returns {*}\r\n\t\t */\r\n\t\tfunction checkCA(cert)\r\n\t\t{\r\n\t\t\t//region Do not include signer's certificate\r\n\t\t\tif((cert.issuer.isEqual(signerCert.issuer) === true) && (cert.serialNumber.isEqual(signerCert.serialNumber) === true))\r\n\t\t\t\treturn null;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tlet isCA = false;\r\n\t\t\t\r\n\t\t\tfor(const extension of cert.extensions)\r\n\t\t\t{\r\n\t\t\t\tif(extension.extnID === \"2.5.29.19\") // BasicConstraints\r\n\t\t\t\t{\r\n\t\t\t\t\tif(\"cA\" in extension.parsedValue)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(extension.parsedValue.cA === true)\r\n\t\t\t\t\t\t\tisCA = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(isCA)\r\n\t\t\t\treturn cert;\r\n\t\t\t\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region Get a \"crypto\" extension\r\n\t\tconst crypto = getCrypto();\r\n\t\tif(typeof crypto === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find correct value for \"responderID\"\r\n\t\tswitch(true)\r\n\t\t{\r\n\t\t\tcase (this.tbsResponseData.responderID instanceof RelativeDistinguishedNames): // [1] Name\r\n\t\t\t\tsequence = sequence.then(() =>\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(const [index, certificate] of _this.certs.entries())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(certificate.subject.isEqual(_this.tbsResponseData.responderID))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcertIndex = index;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase (this.tbsResponseData.responderID instanceof asn1js.OctetString): // [2] KeyHash\r\n\t\t\t\tsequence = sequence.then(() => Promise.all(Array.from(_this.certs, element =>\r\n\t\t\t\t\tcrypto.digest({ name: \"sha-1\" }, new Uint8Array(element.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHex)))).then(results =>\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(const [index, ] of _this.certs.entries())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(isEqualBuffer(results[index], _this.tbsResponseData.responderID.valueBlock.valueHex))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcertIndex = index;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn Promise.reject(\"Wrong value for responderID\");\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Make additional verification for signer's certificate\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tif(certIndex === (-1))\r\n\t\t\t\treturn Promise.reject(\"Correct certificate was not found in OCSP response\");\r\n\t\t\t\r\n\t\t\tsignerCert = this.certs[certIndex];\r\n\t\t\t\r\n\t\t\treturn Promise.all(Array.from(_this.certs, element => checkCA(element))).then(promiseResults =>\r\n\t\t\t{\r\n\t\t\t\tconst additionalCerts = [];\r\n\t\t\t\tadditionalCerts.push(signerCert);\r\n\t\t\t\t\r\n\t\t\t\tfor(const promiseResult of promiseResults)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(promiseResult !== null)\r\n\t\t\t\t\t\tadditionalCerts.push(promiseResult);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst certChain = new CertificateChainValidationEngine({\r\n\t\t\t\t\tcerts: additionalCerts,\r\n\t\t\t\t\ttrustedCerts\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\treturn certChain.verify().then(verificationResult =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(verificationResult.result === true)\r\n\t\t\t\t\t\treturn Promise.resolve();\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(\"Validation of signer's certificate failed\");\r\n\t\t\t\t}, error =>\r\n\t\t\t\t\tPromise.reject(`Validation of signer's certificate failed with error: ${((error instanceof Object) ? error.resultMessage : error)}`)\r\n\t\t\t\t);\r\n\t\t\t}, promiseError =>\r\n\t\t\t\tPromise.reject(`Error during checking certificates for CA flag: ${promiseError}`)\r\n\t\t\t);\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\tsequence = sequence.then(() => engine.subtle.verifyWithPublicKey(this.tbsResponseData.tbs, this.signature, this.certs[certIndex].subjectPublicKeyInfo, this.signatureAlgorithm));\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class EncapsulatedContentInfo\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for EncapsulatedContentInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc eContentType\r\n\t\t */\r\n\t\tthis.eContentType = getParametersValue(parameters, \"eContentType\", EncapsulatedContentInfo.defaultValues(\"eContentType\"));\r\n\r\n\t\tif(\"eContent\" in parameters)\r\n\t\t{\r\n\t\t\t/**\r\n\t\t\t * @type {OctetString}\r\n\t\t\t * @desc eContent\r\n\t\t\t */\r\n\t\t\tthis.eContent = getParametersValue(parameters, \"eContent\", EncapsulatedContentInfo.defaultValues(\"eContent\"));\r\n\t\t\tif((this.eContent.idBlock.tagClass === 1) &&\r\n\t\t\t\t(this.eContent.idBlock.tagNumber === 4))\r\n\t\t\t{\r\n\t\t\t\t//region Divide OCTETSTRING value down to small pieces\r\n\t\t\t\tif(this.eContent.idBlock.isConstructed === false)\r\n\t\t\t\t{\r\n\t\t\t\t\tconst constrString = new asn1js.OctetString({\r\n\t\t\t\t\t\tidBlock: { isConstructed: true },\r\n\t\t\t\t\t\tisConstructed: true\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet offset = 0;\r\n\t\t\t\t\tlet length = this.eContent.valueBlock.valueHex.byteLength;\r\n\t\t\t\t\t\r\n\t\t\t\t\twhile(length > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst pieceView = new Uint8Array(this.eContent.valueBlock.valueHex, offset, ((offset + 65536) > this.eContent.valueBlock.valueHex.byteLength) ? (this.eContent.valueBlock.valueHex.byteLength - offset) : 65536);\r\n\t\t\t\t\t\tconst _array = new ArrayBuffer(pieceView.length);\r\n\t\t\t\t\t\tconst _view = new Uint8Array(_array);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(let i = 0; i < _view.length; i++)\r\n\t\t\t\t\t\t\t_view[i] = pieceView[i];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tconstrString.valueBlock.value.push(new asn1js.OctetString({ valueHex: _array }));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tlength -= pieceView.length;\r\n\t\t\t\t\t\toffset += pieceView.length;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.eContent = constrString;\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"eContentType\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"eContent\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for EncapsulatedContentInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"eContentType\":\r\n\t\t\t\treturn (memberValue === \"\");\r\n\t\t\tcase \"eContent\":\r\n\t\t\t\t{\r\n\t\t\t\t\tif((memberValue.idBlock.tagClass === 1) && (memberValue.idBlock.tagNumber === 4))\r\n\t\t\t\t\t\treturn (memberValue.isEqual(EncapsulatedContentInfo.defaultValues(\"eContent\")));\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for EncapsulatedContentInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * EncapsulatedContentInfo ::= SEQUENCE {\r\n\t * eContentType ContentType,\r\n\t * eContent [0] EXPLICIT OCTET STRING OPTIONAL } * Changed it to ANY, as in PKCS#7\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [type]\r\n\t\t * @property {string} [setName]\r\n\t\t * @property {string} [values]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.eContentType || \"\") }),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Any({ name: (names.eContent || \"\") }) // In order to aling this with PKCS#7 and CMS as well\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"eContentType\",\r\n\t\t\t\"eContent\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tEncapsulatedContentInfo.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\teContentType: \"eContentType\",\r\n\t\t\t\t\teContent: \"eContent\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for EncapsulatedContentInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.eContentType = asn1.result.eContentType.valueBlock.toString();\r\n\t\tif(\"eContent\" in asn1.result)\r\n\t\t\tthis.eContent = asn1.result.eContent;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence \r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.eContentType }));\r\n\t\tif(\"eContent\" in this)\r\n\t\t{\r\n\t\t\tif(EncapsulatedContentInfo.compareWithDefault(\"eContent\", this.eContent) === false)\r\n\t\t\t{\r\n\t\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [this.eContent]\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\t\t//endregion \r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object \r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion \r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\teContentType: this.eContentType\r\n\t\t};\r\n\r\n\t\tif(\"eContent\" in this)\r\n\t\t{\r\n\t\t\tif(EncapsulatedContentInfo.compareWithDefault(\"eContent\", this.eContent) === false)\r\n\t\t\t\t_object.eContent = this.eContent.toJSON();\r\n\t\t}\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC3161\r\n */\r\nexport default class MessageImprint\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for MessageImprint class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc hashAlgorithm\r\n\t\t */\r\n\t\tthis.hashAlgorithm = getParametersValue(parameters, \"hashAlgorithm\", MessageImprint.defaultValues(\"hashAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {OctetString}\r\n\t\t * @desc hashedMessage\r\n\t\t */\r\n\t\tthis.hashedMessage = getParametersValue(parameters, \"hashedMessage\", MessageImprint.defaultValues(\"hashedMessage\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"hashAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"hashedMessage\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for MessageImprint class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"hashAlgorithm\":\r\n\t\t\t\treturn ((memberValue.algorithmId === \"\") && ((\"algorithmParams\" in memberValue) === false));\r\n\t\t\tcase \"hashedMessage\":\r\n\t\t\t\treturn (memberValue.isEqual(MessageImprint.defaultValues(memberName)) === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for MessageImprint class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * MessageImprint ::= SEQUENCE {\r\n\t * hashAlgorithm AlgorithmIdentifier,\r\n\t * hashedMessage OCTET STRING }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [hashAlgorithm]\r\n\t\t * @property {string} [hashedMessage]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tAlgorithmIdentifier.schema(names.hashAlgorithm || {}),\r\n\t\t\t\tnew asn1js.OctetString({ name: (names.hashedMessage || \"\") })\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"hashAlgorithm\",\r\n\t\t\t\"hashedMessage\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tMessageImprint.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\thashAlgorithm: {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"hashAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\thashedMessage: \"hashedMessage\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for MessageImprint\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.hashAlgorithm = new AlgorithmIdentifier({ schema: asn1.result.hashAlgorithm });\r\n\t\tthis.hashedMessage = asn1.result.hashedMessage;\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: [\r\n\t\t\t\tthis.hashAlgorithm.toSchema(),\r\n\t\t\t\tthis.hashedMessage\r\n\t\t\t]\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\treturn {\r\n\t\t\thashAlgorithm: this.hashAlgorithm.toJSON(),\r\n\t\t\thashedMessage: this.hashedMessage.toJSON()\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport Attribute from \"./Attribute.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class SignedAndUnsignedAttributes\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for SignedAndUnsignedAttributes class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc type\r\n\t\t */\r\n\t\tthis.type = getParametersValue(parameters, \"type\", SignedAndUnsignedAttributes.defaultValues(\"type\"));\r\n\t\t/**\r\n\t\t * @type {Array}\r\n\t\t * @desc attributes\r\n\t\t */\r\n\t\tthis.attributes = getParametersValue(parameters, \"attributes\", SignedAndUnsignedAttributes.defaultValues(\"attributes\"));\r\n\t\t/**\r\n\t\t * @type {ArrayBuffer}\r\n\t\t * @desc encodedValue Need to have it in order to successfully process with signature verification\r\n\t\t */\r\n\t\tthis.encodedValue = getParametersValue(parameters, \"encodedValue\", SignedAndUnsignedAttributes.defaultValues(\"encodedValue\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\treturn (-1);\r\n\t\t\tcase \"attributes\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"encodedValue\":\r\n\t\t\t\treturn new ArrayBuffer(0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SignedAndUnsignedAttributes class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"type\":\r\n\t\t\t\treturn (memberValue === SignedAndUnsignedAttributes.defaultValues(\"type\"));\r\n\t\t\tcase \"attributes\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tcase \"encodedValue\":\r\n\t\t\t\treturn (memberValue.byteLength === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SignedAndUnsignedAttributes class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * SignedAttributes ::= SET SIZE (1..MAX) OF Attribute\r\n\t *\r\n\t * UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {number} [tagNumber]\r\n\t\t * @property {string} [attributes]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (new asn1js.Constructed({\r\n\t\t\tname: (names.blockName || \"\"),\r\n\t\t\toptional: true,\r\n\t\t\tidBlock: {\r\n\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\ttagNumber: names.tagNumber // \"SignedAttributes\" = 0, \"UnsignedAttributes\" = 1\r\n\t\t\t},\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\tname: (names.attributes || \"\"),\r\n\t\t\t\t\tvalue: Attribute.schema()\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"attributes\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tSignedAndUnsignedAttributes.schema({\r\n\t\t\t\tnames: {\r\n\t\t\t\t\ttagNumber: this.type,\r\n\t\t\t\t\tattributes: \"attributes\"\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SignedAndUnsignedAttributes\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.type = asn1.result.idBlock.tagNumber;\r\n\t\tthis.encodedValue = asn1.result.valueBeforeDecode;\r\n\r\n\t\t//region Change type from \"[0]\" to \"SET\" accordingly to standard\r\n\t\tconst encodedView = new Uint8Array(this.encodedValue);\r\n\t\tencodedView[0] = 0x31;\r\n\t\t//endregion\r\n\r\n\t\tif((\"attributes\" in asn1.result) === false)\r\n\t\t{\r\n\t\t\tif(this.type === 0)\r\n\t\t\t\tthrow new Error(\"Wrong structure of SignedUnsignedAttributes\");\r\n\t\t\telse\r\n\t\t\t\treturn; // Not so important in case of \"UnsignedAttributes\"\r\n\t\t}\r\n\r\n\t\tthis.attributes = Array.from(asn1.result.attributes, element => new Attribute({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\tif(SignedAndUnsignedAttributes.compareWithDefault(\"type\", this.type) || SignedAndUnsignedAttributes.compareWithDefault(\"attributes\", this.attributes))\r\n\t\t\tthrow new Error(\"Incorrectly initialized \\\"SignedAndUnsignedAttributes\\\" class\");\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Constructed({\r\n\t\t\toptional: true,\r\n\t\t\tidBlock: {\r\n\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\ttagNumber: this.type // \"SignedAttributes\" = 0, \"UnsignedAttributes\" = 1\r\n\t\t\t},\r\n\t\t\tvalue: Array.from(this.attributes, element => element.toSchema())\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tif(SignedAndUnsignedAttributes.compareWithDefault(\"type\", this.type) || SignedAndUnsignedAttributes.compareWithDefault(\"attributes\", this.attributes))\r\n\t\t\tthrow new Error(\"Incorrectly initialized \\\"SignedAndUnsignedAttributes\\\" class\");\r\n\t\t\r\n\t\treturn {\r\n\t\t\ttype: this.type,\r\n\t\t\tattributes: Array.from(this.attributes, element => element.toJSON())\r\n\t\t};\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, clearProps } from \"pvutils\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport SignedAndUnsignedAttributes from \"./SignedAndUnsignedAttributes.js\";\r\nimport IssuerAndSerialNumber from \"./IssuerAndSerialNumber.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class SignerInfo \r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for SignerInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc version\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", SignerInfo.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @desc sid\r\n\t\t */\r\n\t\tthis.sid = getParametersValue(parameters, \"sid\", SignerInfo.defaultValues(\"sid\"));\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc digestAlgorithm\r\n\t\t */\r\n\t\tthis.digestAlgorithm = getParametersValue(parameters, \"digestAlgorithm\", SignerInfo.defaultValues(\"digestAlgorithm\"));\r\n\t\t\r\n\t\tif(\"signedAttrs\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {SignedAndUnsignedAttributes}\r\n\t\t\t * @desc signedAttrs\r\n\t\t\t */\r\n\t\t\tthis.signedAttrs = getParametersValue(parameters, \"signedAttrs\", SignerInfo.defaultValues(\"signedAttrs\"));\r\n\t\t\r\n\t\t/**\r\n\t\t * @type {AlgorithmIdentifier}\r\n\t\t * @desc digestAlgorithm\r\n\t\t */\r\n\t\tthis.signatureAlgorithm = getParametersValue(parameters, \"signatureAlgorithm\", SignerInfo.defaultValues(\"signatureAlgorithm\"));\r\n\t\t/**\r\n\t\t * @type {OctetString}\r\n\t\t * @desc signature\r\n\t\t */\r\n\t\tthis.signature = getParametersValue(parameters, \"signature\", SignerInfo.defaultValues(\"signature\"));\r\n\t\t\r\n\t\tif(\"unsignedAttrs\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {SignedAndUnsignedAttributes}\r\n\t\t\t * @desc unsignedAttrs\r\n\t\t\t */\r\n\t\t\tthis.unsignedAttrs = getParametersValue(parameters, \"unsignedAttrs\", SignerInfo.defaultValues(\"unsignedAttrs\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"sid\":\r\n\t\t\t\treturn new asn1js.Any();\r\n\t\t\tcase \"digestAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"signedAttrs\":\r\n\t\t\t\treturn new SignedAndUnsignedAttributes({ type: 0 });\r\n\t\t\tcase \"signatureAlgorithm\":\r\n\t\t\t\treturn new AlgorithmIdentifier();\r\n\t\t\tcase \"signature\":\r\n\t\t\t\treturn new asn1js.OctetString();\r\n\t\t\tcase \"unsignedAttrs\":\r\n\t\t\t\treturn new SignedAndUnsignedAttributes({ type: 1 });\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SignerInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn (SignerInfo.defaultValues(\"version\") === memberValue);\r\n\t\t\tcase \"sid\":\r\n\t\t\t\treturn (memberValue instanceof asn1js.Any);\r\n\t\t\tcase \"digestAlgorithm\":\r\n\t\t\t\tif((memberValue instanceof AlgorithmIdentifier) === false)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\treturn memberValue.isEqual(SignerInfo.defaultValues(\"digestAlgorithm\"));\r\n\t\t\tcase \"signedAttrs\":\r\n\t\t\t\treturn ((SignedAndUnsignedAttributes.compareWithDefault(\"type\", memberValue.type))\r\n\t\t\t\t&& (SignedAndUnsignedAttributes.compareWithDefault(\"attributes\", memberValue.attributes))\r\n\t\t\t\t&& (SignedAndUnsignedAttributes.compareWithDefault(\"encodedValue\", memberValue.encodedValue)));\r\n\t\t\tcase \"signatureAlgorithm\":\r\n\t\t\t\tif((memberValue instanceof AlgorithmIdentifier) === false)\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\treturn memberValue.isEqual(SignerInfo.defaultValues(\"signatureAlgorithm\"));\r\n\t\t\tcase \"signature\":\r\n\t\t\tcase \"unsignedAttrs\":\r\n\t\t\t\treturn ((SignedAndUnsignedAttributes.compareWithDefault(\"type\", memberValue.type))\r\n\t\t\t\t&& (SignedAndUnsignedAttributes.compareWithDefault(\"attributes\", memberValue.attributes))\r\n\t\t\t\t&& (SignedAndUnsignedAttributes.compareWithDefault(\"encodedValue\", memberValue.encodedValue)));\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SignerInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * SignerInfo ::= SEQUENCE {\r\n\t * version CMSVersion,\r\n\t * sid SignerIdentifier,\r\n\t * digestAlgorithm DigestAlgorithmIdentifier,\r\n\t * signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,\r\n\t * signatureAlgorithm SignatureAlgorithmIdentifier,\r\n\t * signature SignatureValue,\r\n\t * unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }\r\n\t *\r\n\t * SignerIdentifier ::= CHOICE {\r\n\t * issuerAndSerialNumber IssuerAndSerialNumber,\r\n\t * subjectKeyIdentifier [0] SubjectKeyIdentifier }\r\n\t *\r\n\t * SubjectKeyIdentifier ::= OCTET STRING\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [version]\r\n\t\t * @property {string} [sid]\r\n\t\t * @property {string} [digestAlgorithm]\r\n\t\t * @property {string} [signedAttrs]\r\n\t\t * @property {string} [signatureAlgorithm]\r\n\t\t * @property {string} [signature]\r\n\t\t * @property {string} [unsignedAttrs]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\treturn (\r\n\t\t\tnew asn1js.Sequence({\r\n\t\t\t\tname: \"SignerInfo\",\r\n\t\t\t\tvalue: [\r\n\t\t\t\t\tnew asn1js.Integer({ name: (names.version || \"SignerInfo.version\") }),\r\n\t\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\tIssuerAndSerialNumber.schema(names.sid || {\r\n\t\t\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\t\t\tblockName: \"SignerInfo.sid\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\tnew asn1js.Choice({\r\n\t\t\t\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\t\t\t\t\t\toptional: true,\r\n\t\t\t\t\t\t\t\t\t\tname: (names.sid || \"SignerInfo.sid\"),\r\n\t\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tvalue: [new asn1js.OctetString()]\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\tnew asn1js.Primitive({\r\n\t\t\t\t\t\t\t\t\t\toptional: true,\r\n\t\t\t\t\t\t\t\t\t\tname: (names.sid || \"SignerInfo.sid\"),\r\n\t\t\t\t\t\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tvalue: [new asn1js.OctetString()]\r\n\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tAlgorithmIdentifier.schema(names.digestAlgorithm || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"SignerInfo.digestAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tSignedAndUnsignedAttributes.schema(names.signedAttrs || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"SignerInfo.signedAttrs\",\r\n\t\t\t\t\t\t\ttagNumber: 0\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tAlgorithmIdentifier.schema(names.signatureAlgorithm || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"SignerInfo.signatureAlgorithm\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tnew asn1js.OctetString({ name: (names.signature || \"SignerInfo.signature\") }),\r\n\t\t\t\t\tSignedAndUnsignedAttributes.schema(names.unsignedAttrs || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"SignerInfo.unsignedAttrs\",\r\n\t\t\t\t\t\t\ttagNumber: 1\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t]\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"SignerInfo.version\",\r\n\t\t\t\"SignerInfo.sid\",\r\n\t\t\t\"SignerInfo.digestAlgorithm\",\r\n\t\t\t\"SignerInfo.signedAttrs\",\r\n\t\t\t\"SignerInfo.signatureAlgorithm\",\r\n\t\t\t\"SignerInfo.signature\",\r\n\t\t\t\"SignerInfo.unsignedAttrs\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tSignerInfo.schema()\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SignerInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.version = asn1.result[\"SignerInfo.version\"].valueBlock.valueDec;\r\n\r\n\t\tconst currentSid = asn1.result[\"SignerInfo.sid\"];\r\n\t\tif(currentSid.idBlock.tagClass === 1)\r\n\t\t\tthis.sid = new IssuerAndSerialNumber({ schema: currentSid });\r\n\t\telse\r\n\t\t\tthis.sid = currentSid;\r\n\r\n\t\tthis.digestAlgorithm = new AlgorithmIdentifier({ schema: asn1.result[\"SignerInfo.digestAlgorithm\"] });\r\n\t\tif(\"SignerInfo.signedAttrs\" in asn1.result)\r\n\t\t\tthis.signedAttrs = new SignedAndUnsignedAttributes({ type: 0, schema: asn1.result[\"SignerInfo.signedAttrs\"] });\r\n\t\t\r\n\t\tthis.signatureAlgorithm = new AlgorithmIdentifier({ schema: asn1.result[\"SignerInfo.signatureAlgorithm\"] });\r\n\t\tthis.signature = asn1.result[\"SignerInfo.signature\"];\r\n\t\tif(\"SignerInfo.unsignedAttrs\" in asn1.result)\r\n\t\t\tthis.unsignedAttrs = new SignedAndUnsignedAttributes({ type: 1, schema: asn1.result[\"SignerInfo.unsignedAttrs\"] });\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\tif(SignerInfo.compareWithDefault(\"sid\", this.sid))\r\n\t\t\tthrow new Error(\"Incorrectly initialized \\\"SignerInfo\\\" class\");\r\n\t\t\r\n\t\t//region Create array for output sequence \r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\toutputArray.push(new asn1js.Integer({ value: this.version }));\r\n\t\t\r\n\t\tif(this.sid instanceof IssuerAndSerialNumber)\r\n\t\t\toutputArray.push(this.sid.toSchema());\r\n\t\telse\r\n\t\t\toutputArray.push(this.sid);\r\n\t\t\r\n\t\toutputArray.push(this.digestAlgorithm.toSchema());\r\n\t\t\r\n\t\tif(\"signedAttrs\" in this)\r\n\t\t{\r\n\t\t\tif(SignerInfo.compareWithDefault(\"signedAttrs\", this.signedAttrs) === false)\r\n\t\t\t\toutputArray.push(this.signedAttrs.toSchema());\r\n\t\t}\r\n\t\t\r\n\t\toutputArray.push(this.signatureAlgorithm.toSchema());\r\n\t\toutputArray.push(this.signature);\r\n\t\t\r\n\t\tif(\"unsignedAttrs\" in this)\r\n\t\t{\r\n\t\t\tif(SignerInfo.compareWithDefault(\"unsignedAttrs\", this.unsignedAttrs) === false)\r\n\t\t\t\toutputArray.push(this.unsignedAttrs.toSchema());\r\n\t\t}\r\n\t\t//endregion \r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object \r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion \r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tif(SignerInfo.compareWithDefault(\"sid\", this.sid))\r\n\t\t\tthrow new Error(\"Incorrectly initialized \\\"SignerInfo\\\" class\");\r\n\t\t\r\n\t\tconst _object = {\r\n\t\t\tversion: this.version\r\n\t\t};\r\n\r\n\t\tif(!(this.sid instanceof asn1js.Any))\r\n\t\t\t_object.sid = this.sid.toJSON();\r\n\r\n\t\t_object.digestAlgorithm = this.digestAlgorithm.toJSON();\r\n\r\n\t\tif(SignerInfo.compareWithDefault(\"signedAttrs\", this.signedAttrs) === false)\r\n\t\t\t_object.signedAttrs = this.signedAttrs.toJSON();\r\n\r\n\t\t_object.signatureAlgorithm = this.signatureAlgorithm.toJSON();\r\n\t\t_object.signature = this.signature.toJSON();\r\n\r\n\t\tif(SignerInfo.compareWithDefault(\"unsignedAttrs\", this.unsignedAttrs) === false)\r\n\t\t\t_object.unsignedAttrs = this.unsignedAttrs.toJSON();\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, isEqualBuffer, clearProps } from \"pvutils\";\r\nimport { getCrypto, getAlgorithmByOID } from \"./common.js\";\r\nimport MessageImprint from \"./MessageImprint.js\";\r\nimport Accuracy from \"./Accuracy.js\";\r\nimport GeneralName from \"./GeneralName.js\";\r\nimport Extension from \"./Extension.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC3161\r\n */\r\nexport default class TSTInfo\r\n{\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for TSTInfo class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc version\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", TSTInfo.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {string}\r\n\t\t * @desc policy\r\n\t\t */\r\n\t\tthis.policy = getParametersValue(parameters, \"policy\", TSTInfo.defaultValues(\"policy\"));\r\n\t\t/**\r\n\t\t * @type {MessageImprint}\r\n\t\t * @desc messageImprint\r\n\t\t */\r\n\t\tthis.messageImprint = getParametersValue(parameters, \"messageImprint\", TSTInfo.defaultValues(\"messageImprint\"));\r\n\t\t/**\r\n\t\t * @type {Integer}\r\n\t\t * @desc serialNumber\r\n\t\t */\r\n\t\tthis.serialNumber = getParametersValue(parameters, \"serialNumber\", TSTInfo.defaultValues(\"serialNumber\"));\r\n\t\t/**\r\n\t\t * @type {Date}\r\n\t\t * @desc genTime\r\n\t\t */\r\n\t\tthis.genTime = getParametersValue(parameters, \"genTime\", TSTInfo.defaultValues(\"genTime\"));\r\n\r\n\t\tif(\"accuracy\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Accuracy}\r\n\t\t\t * @desc accuracy\r\n\t\t\t */\r\n\t\t\tthis.accuracy = getParametersValue(parameters, \"accuracy\", TSTInfo.defaultValues(\"accuracy\"));\r\n\r\n\t\tif(\"ordering\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {boolean}\r\n\t\t\t * @desc ordering\r\n\t\t\t */\r\n\t\t\tthis.ordering = getParametersValue(parameters, \"ordering\", TSTInfo.defaultValues(\"ordering\"));\r\n\r\n\t\tif(\"nonce\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Integer}\r\n\t\t\t * @desc nonce\r\n\t\t\t */\r\n\t\t\tthis.nonce = getParametersValue(parameters, \"nonce\", TSTInfo.defaultValues(\"nonce\"));\r\n\r\n\t\tif(\"tsa\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {GeneralName}\r\n\t\t\t * @desc tsa\r\n\t\t\t */\r\n\t\t\tthis.tsa = getParametersValue(parameters, \"tsa\", TSTInfo.defaultValues(\"tsa\"));\r\n\r\n\t\tif(\"extensions\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc extensions\r\n\t\t\t */\r\n\t\t\tthis.extensions = getParametersValue(parameters, \"extensions\", TSTInfo.defaultValues(\"extensions\"));\r\n\t\t//endregion\r\n\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"policy\":\r\n\t\t\t\treturn \"\";\r\n\t\t\tcase \"messageImprint\":\r\n\t\t\t\treturn new MessageImprint();\r\n\t\t\tcase \"serialNumber\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"genTime\":\r\n\t\t\t\treturn new Date(0, 0, 0);\r\n\t\t\tcase \"accuracy\":\r\n\t\t\t\treturn new Accuracy();\r\n\t\t\tcase \"ordering\":\r\n\t\t\t\treturn false;\r\n\t\t\tcase \"nonce\":\r\n\t\t\t\treturn new asn1js.Integer();\r\n\t\t\tcase \"tsa\":\r\n\t\t\t\treturn new GeneralName();\r\n\t\t\tcase \"extensions\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for TSTInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\tcase \"policy\":\r\n\t\t\tcase \"genTime\":\r\n\t\t\tcase \"ordering\":\r\n\t\t\t\treturn (memberValue === TSTInfo.defaultValues(memberName));\r\n\t\t\tcase \"messageImprint\":\r\n\t\t\t\treturn ((MessageImprint.compareWithDefault(\"hashAlgorithm\", memberValue.hashAlgorithm)) &&\r\n\t\t\t\t\t\t(MessageImprint.compareWithDefault(\"hashedMessage\", memberValue.hashedMessage)));\r\n\t\t\tcase \"serialNumber\":\r\n\t\t\tcase \"nonce\":\r\n\t\t\t\treturn (memberValue.isEqual(TSTInfo.defaultValues(memberName)));\r\n\t\t\tcase \"accuracy\":\r\n\t\t\t\treturn ((Accuracy.compareWithDefault(\"seconds\", memberValue.seconds)) &&\r\n\t\t\t\t\t\t(Accuracy.compareWithDefault(\"millis\", memberValue.millis)) &&\r\n\t\t\t\t\t\t(Accuracy.compareWithDefault(\"micros\", memberValue.micros)));\r\n\t\t\tcase \"tsa\":\r\n\t\t\t\treturn ((GeneralName.compareWithDefault(\"type\", memberValue.type)) &&\r\n\t\t\t\t\t\t(GeneralName.compareWithDefault(\"value\", memberValue.value)));\r\n\t\t\tcase \"extensions\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for TSTInfo class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * TSTInfo ::= SEQUENCE {\r\n\t * version INTEGER { v1(1) },\r\n\t * policy TSAPolicyId,\r\n\t * messageImprint MessageImprint,\r\n\t * serialNumber INTEGER,\r\n\t * genTime GeneralizedTime,\r\n\t * accuracy Accuracy OPTIONAL,\r\n\t * ordering BOOLEAN DEFAULT FALSE,\r\n\t * nonce INTEGER OPTIONAL,\r\n\t * tsa [0] GeneralName OPTIONAL,\r\n\t * extensions [1] IMPLICIT Extensions OPTIONAL }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [version]\r\n\t\t * @property {string} [policy]\r\n\t\t * @property {string} [messageImprint]\r\n\t\t * @property {string} [serialNumber]\r\n\t\t * @property {string} [genTime]\r\n\t\t * @property {string} [accuracy]\r\n\t\t * @property {string} [ordering]\r\n\t\t * @property {string} [nonce]\r\n\t\t * @property {string} [tsa]\r\n\t\t * @property {string} [extensions]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"TSTInfo\"),\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"TSTInfo.version\") }),\r\n\t\t\t\tnew asn1js.ObjectIdentifier({ name: (names.policy || \"TSTInfo.policy\") }),\r\n\t\t\t\tMessageImprint.schema(names.messageImprint || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"TSTInfo.messageImprint\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Integer({ name: (names.serialNumber || \"TSTInfo.serialNumber\") }),\r\n\t\t\t\tnew asn1js.GeneralizedTime({ name: (names.genTime || \"TSTInfo.genTime\") }),\r\n\t\t\t\tAccuracy.schema(names.accuracy || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"TSTInfo.accuracy\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Boolean({\r\n\t\t\t\t\tname: (names.ordering || \"TSTInfo.ordering\"),\r\n\t\t\t\t\toptional: true\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Integer({\r\n\t\t\t\t\tname: (names.nonce || \"TSTInfo.nonce\"),\r\n\t\t\t\t\toptional: true\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [GeneralName.schema(names.tsa || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tblockName: \"TSTInfo.tsa\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})]\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.extensions || \"TSTInfo.extensions\"),\r\n\t\t\t\t\t\t\tvalue: Extension.schema(names.extension || {})\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}) // IMPLICIT Extensions\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"TSTInfo.version\",\r\n\t\t\t\"TSTInfo.policy\",\r\n\t\t\t\"TSTInfo.messageImprint\",\r\n\t\t\t\"TSTInfo.serialNumber\",\r\n\t\t\t\"TSTInfo.genTime\",\r\n\t\t\t\"TSTInfo.accuracy\",\r\n\t\t\t\"TSTInfo.ordering\",\r\n\t\t\t\"TSTInfo.nonce\",\r\n\t\t\t\"TSTInfo.tsa\",\r\n\t\t\t\"TSTInfo.extensions\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tTSTInfo.schema()\r\n\t\t);\r\n\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for TSTInfo\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.version = asn1.result[\"TSTInfo.version\"].valueBlock.valueDec;\r\n\t\tthis.policy = asn1.result[\"TSTInfo.policy\"].valueBlock.toString();\r\n\t\tthis.messageImprint = new MessageImprint({ schema: asn1.result[\"TSTInfo.messageImprint\"] });\r\n\t\tthis.serialNumber = asn1.result[\"TSTInfo.serialNumber\"];\r\n\t\tthis.genTime = asn1.result[\"TSTInfo.genTime\"].toDate();\r\n\t\tif(\"TSTInfo.accuracy\" in asn1.result)\r\n\t\t\tthis.accuracy = new Accuracy({ schema: asn1.result[\"TSTInfo.accuracy\"] });\r\n\t\tif(\"TSTInfo.ordering\" in asn1.result)\r\n\t\t\tthis.ordering = asn1.result[\"TSTInfo.ordering\"].valueBlock.value;\r\n\t\tif(\"TSTInfo.nonce\" in asn1.result)\r\n\t\t\tthis.nonce = asn1.result[\"TSTInfo.nonce\"];\r\n\t\tif(\"TSTInfo.tsa\" in asn1.result)\r\n\t\t\tthis.tsa = new GeneralName({ schema: asn1.result[\"TSTInfo.tsa\"] });\r\n\t\tif(\"TSTInfo.extensions\" in asn1.result)\r\n\t\t\tthis.extensions = Array.from(asn1.result[\"TSTInfo.extensions\"], element => new Extension({ schema: element }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema()\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\r\n\t\toutputArray.push(new asn1js.Integer({ value: this.version }));\r\n\t\toutputArray.push(new asn1js.ObjectIdentifier({ value: this.policy }));\r\n\t\toutputArray.push(this.messageImprint.toSchema());\r\n\t\toutputArray.push(this.serialNumber);\r\n\t\toutputArray.push(new asn1js.GeneralizedTime({ valueDate: this.genTime }));\r\n\t\tif(\"accuracy\" in this)\r\n\t\t\toutputArray.push(this.accuracy.toSchema());\r\n\t\tif(\"ordering\" in this)\r\n\t\t\toutputArray.push(new asn1js.Boolean({ value: this.ordering }));\r\n\t\tif(\"nonce\" in this)\r\n\t\t\toutputArray.push(this.nonce);\r\n\t\tif(\"tsa\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: [this.tsa.toSchema()]\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\t//region Create array of extensions\r\n\t\tif(\"extensions\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\toptional: true,\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: Array.from(this.extensions, element => element.toSchema())\r\n\t\t\t}));\r\n\t\t}\r\n\t\t//endregion\r\n\t\t//endregion\r\n\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\tversion: this.version,\r\n\t\t\tpolicy: this.policy,\r\n\t\t\tmessageImprint: this.messageImprint.toJSON(),\r\n\t\t\tserialNumber: this.serialNumber.toJSON(),\r\n\t\t\tgenTime: this.genTime\r\n\t\t};\r\n\r\n\t\tif(\"accuracy\" in this)\r\n\t\t\t_object.accuracy = this.accuracy.toJSON();\r\n\r\n\t\tif(\"ordering\" in this)\r\n\t\t\t_object.ordering = this.ordering;\r\n\r\n\t\tif(\"nonce\" in this)\r\n\t\t\t_object.nonce = this.nonce.toJSON();\r\n\r\n\t\tif(\"tsa\" in this)\r\n\t\t\t_object.tsa = this.tsa.toJSON();\r\n\r\n\t\tif(\"extensions\" in this)\r\n\t\t\t_object.extensions = Array.from(this.extensions, element => element.toJSON());\r\n\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Verify current TST Info value\r\n\t * @param {{data: ArrayBuffer, notBefore: Date, notAfter: Date}} parameters Input parameters\r\n\t * @returns {Promise}\r\n\t */\r\n\tverify(parameters = {})\r\n\t{\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\r\n\t\tlet data;\r\n\r\n\t\tlet notBefore = null;\r\n\t\tlet notAfter = null;\r\n\t\t//endregion\r\n\r\n\t\t//region Get a \"crypto\" extension\r\n\t\tconst crypto = getCrypto();\r\n\t\tif(typeof crypto === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\r\n\t\t//endregion\r\n\r\n\t\t//region Get initial parameters\r\n\t\tif(\"data\" in parameters)\r\n\t\t\tdata = parameters.data;\r\n\t\telse\r\n\t\t\treturn Promise.reject(\"\\\"data\\\" is a mandatory attribute for TST_INFO verification\");\r\n\r\n\t\tif(\"notBefore\" in parameters)\r\n\t\t\tnotBefore = parameters.notBefore;\r\n\r\n\t\tif(\"notAfter\" in parameters)\r\n\t\t\tnotAfter = parameters.notAfter;\r\n\t\t//endregion\r\n\r\n\t\t//region Check date\r\n\t\tif(notBefore !== null)\r\n\t\t{\r\n\t\t\tif(this.genTime < notBefore)\r\n\t\t\t\treturn Promise.reject(\"Generation time for TSTInfo object is less than notBefore value\");\r\n\t\t}\r\n\t\t\r\n\t\tif(notAfter !== null)\r\n\t\t{\r\n\t\t\tif(this.genTime > notAfter)\r\n\t\t\t\treturn Promise.reject(\"Generation time for TSTInfo object is more than notAfter value\");\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find hashing algorithm\r\n\t\tconst shaAlgorithm = getAlgorithmByOID(this.messageImprint.hashAlgorithm.algorithmId);\r\n\t\tif((\"name\" in shaAlgorithm) === false)\r\n\t\t\treturn Promise.reject(`Unsupported signature algorithm: ${this.messageImprint.hashAlgorithm.algorithmId}`);\r\n\t\t//endregion\r\n\r\n\t\t//region Calculate message digest for input \"data\" buffer\r\n\t\t// noinspection JSCheckFunctionSignatures\r\n\t\tsequence = sequence.then(() =>\r\n\t\t\tcrypto.digest(shaAlgorithm.name, new Uint8Array(data))\r\n\t\t).then(\r\n\t\t\tresult => isEqualBuffer(result, this.messageImprint.hashedMessage.valueBlock.valueHex)\r\n\t\t);\r\n\t\t//endregion\r\n\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n//**************************************************************************************\r\n","import * as asn1js from \"asn1js\";\r\nimport { getParametersValue, utilConcatBuf, isEqualBuffer, clearProps } from \"pvutils\";\r\nimport { getCrypto, getEngine, getOIDByAlgorithm, getAlgorithmByOID } from \"./common.js\";\r\nimport AlgorithmIdentifier from \"./AlgorithmIdentifier.js\";\r\nimport EncapsulatedContentInfo from \"./EncapsulatedContentInfo.js\";\r\nimport Certificate from \"./Certificate.js\";\r\nimport CertificateRevocationList from \"./CertificateRevocationList.js\";\r\nimport OtherRevocationInfoFormat from \"./OtherRevocationInfoFormat.js\";\r\nimport SignerInfo from \"./SignerInfo.js\";\r\nimport CertificateSet from \"./CertificateSet.js\";\r\nimport RevocationInfoChoices from \"./RevocationInfoChoices.js\";\r\nimport IssuerAndSerialNumber from \"./IssuerAndSerialNumber.js\";\r\nimport TSTInfo from \"./TSTInfo.js\";\r\nimport CertificateChainValidationEngine from \"./CertificateChainValidationEngine.js\";\r\nimport BasicOCSPResponse from \"./BasicOCSPResponse.js\";\r\nimport OtherCertificateFormat from \"./OtherCertificateFormat.js\";\r\nimport AttributeCertificateV1 from \"./AttributeCertificateV1.js\";\r\nimport AttributeCertificateV2 from \"./AttributeCertificateV2.js\";\r\n//**************************************************************************************\r\n/**\r\n * Class from RFC5652\r\n */\r\nexport default class SignedData \r\n{\r\n\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Constructor for SignedData class\r\n\t * @param {Object} [parameters={}]\r\n\t * @param {Object} [parameters.schema] asn1js parsed value to initialize the class from\r\n\t */\r\n\tconstructor(parameters = {})\r\n\t{\r\n\t\t//region Internal properties of the object\r\n\t\t/**\r\n\t\t * @type {number}\r\n\t\t * @desc version\r\n\t\t */\r\n\t\tthis.version = getParametersValue(parameters, \"version\", SignedData.defaultValues(\"version\"));\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc digestAlgorithms\r\n\t\t */\r\n\t\tthis.digestAlgorithms = getParametersValue(parameters, \"digestAlgorithms\", SignedData.defaultValues(\"digestAlgorithms\"));\r\n\t\t/**\r\n\t\t * @type {EncapsulatedContentInfo}\r\n\t\t * @desc encapContentInfo\r\n\t\t */\r\n\t\tthis.encapContentInfo = getParametersValue(parameters, \"encapContentInfo\", SignedData.defaultValues(\"encapContentInfo\"));\r\n\t\t\r\n\t\tif(\"certificates\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc certificates\r\n\t\t\t */\r\n\t\t\tthis.certificates = getParametersValue(parameters, \"certificates\", SignedData.defaultValues(\"certificates\"));\r\n\t\t\r\n\t\tif(\"crls\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc crls\r\n\t\t\t */\r\n\t\t\tthis.crls = getParametersValue(parameters, \"crls\", SignedData.defaultValues(\"crls\"));\r\n\t\t\r\n\t\tif(\"ocsps\" in parameters)\r\n\t\t\t/**\r\n\t\t\t * @type {Array.}\r\n\t\t\t * @desc crls\r\n\t\t\t */\r\n\t\t\tthis.ocsps = getParametersValue(parameters, \"ocsps\", SignedData.defaultValues(\"ocsps\"));\r\n\r\n\t\t/**\r\n\t\t * @type {Array.}\r\n\t\t * @desc signerInfos\r\n\t\t */\r\n\t\tthis.signerInfos = getParametersValue(parameters, \"signerInfos\", SignedData.defaultValues(\"signerInfos\"));\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region If input argument array contains \"schema\" for this object\r\n\t\tif(\"schema\" in parameters)\r\n\t\t\tthis.fromSchema(parameters.schema);\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t */\r\n\tstatic defaultValues(memberName)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn 0;\r\n\t\t\tcase \"digestAlgorithms\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"encapContentInfo\":\r\n\t\t\t\treturn new EncapsulatedContentInfo();\r\n\t\t\tcase \"certificates\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"crls\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"ocsps\":\r\n\t\t\t\treturn [];\r\n\t\t\tcase \"signerInfos\":\r\n\t\t\t\treturn [];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SignedData class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Compare values with default values for all class members\r\n\t * @param {string} memberName String name for a class member\r\n\t * @param {*} memberValue Value to compare with default value\r\n\t */\r\n\tstatic compareWithDefault(memberName, memberValue)\r\n\t{\r\n\t\tswitch(memberName)\r\n\t\t{\r\n\t\t\tcase \"version\":\r\n\t\t\t\treturn (memberValue === SignedData.defaultValues(\"version\"));\r\n\t\t\tcase \"encapContentInfo\":\r\n\t\t\t\treturn new EncapsulatedContentInfo();\r\n\t\t\tcase \"digestAlgorithms\":\r\n\t\t\tcase \"certificates\":\r\n\t\t\tcase \"crls\":\r\n\t\t\tcase \"ocsps\":\r\n\t\t\tcase \"signerInfos\":\r\n\t\t\t\treturn (memberValue.length === 0);\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Invalid member name for SignedData class: ${memberName}`);\r\n\t\t}\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Return value of pre-defined ASN.1 schema for current class\r\n\t *\r\n\t * ASN.1 schema:\r\n\t * ```asn1\r\n\t * SignedData ::= SEQUENCE {\r\n\t * version CMSVersion,\r\n\t * digestAlgorithms DigestAlgorithmIdentifiers,\r\n\t * encapContentInfo EncapsulatedContentInfo,\r\n\t * certificates [0] IMPLICIT CertificateSet OPTIONAL,\r\n\t * crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,\r\n\t * signerInfos SignerInfos }\r\n\t * ```\r\n\t *\r\n\t * @param {Object} parameters Input parameters for the schema\r\n\t * @returns {Object} asn1js schema object\r\n\t */\r\n\tstatic schema(parameters = {})\r\n\t{\r\n\t\t/**\r\n\t\t * @type {Object}\r\n\t\t * @property {string} [blockName]\r\n\t\t * @property {string} [optional]\r\n\t\t * @property {string} [digestAlgorithms]\r\n\t\t * @property {string} [encapContentInfo]\r\n\t\t * @property {string} [certificates]\r\n\t\t * @property {string} [crls]\r\n\t\t * @property {string} [signerInfos]\r\n\t\t */\r\n\t\tconst names = getParametersValue(parameters, \"names\", {});\r\n\r\n\t\tif((\"optional\" in names) === false)\r\n\t\t\tnames.optional = false;\r\n\t\t\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tname: (names.blockName || \"SignedData\"),\r\n\t\t\toptional: names.optional,\r\n\t\t\tvalue: [\r\n\t\t\t\tnew asn1js.Integer({ name: (names.version || \"SignedData.version\") }),\r\n\t\t\t\tnew asn1js.Set({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.digestAlgorithms || \"SignedData.digestAlgorithms\"),\r\n\t\t\t\t\t\t\tvalue: AlgorithmIdentifier.schema()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t}),\r\n\t\t\t\tEncapsulatedContentInfo.schema(names.encapContentInfo || {\r\n\t\t\t\t\tnames: {\r\n\t\t\t\t\t\tblockName: \"SignedData.encapContentInfo\"\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\tname: (names.certificates || \"SignedData.certificates\"),\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 0 // [0]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: CertificateSet.schema().valueBlock.value\r\n\t\t\t\t}), // IMPLICIT CertificateSet\r\n\t\t\t\tnew asn1js.Constructed({\r\n\t\t\t\t\toptional: true,\r\n\t\t\t\t\tidBlock: {\r\n\t\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t\t},\r\n\t\t\t\t\tvalue: RevocationInfoChoices.schema(names.crls || {\r\n\t\t\t\t\t\tnames: {\r\n\t\t\t\t\t\t\tcrls: \"SignedData.crls\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).valueBlock.value\r\n\t\t\t\t}), // IMPLICIT RevocationInfoChoices\r\n\t\t\t\tnew asn1js.Set({\r\n\t\t\t\t\tvalue: [\r\n\t\t\t\t\t\tnew asn1js.Repeated({\r\n\t\t\t\t\t\t\tname: (names.signerInfos || \"SignedData.signerInfos\"),\r\n\t\t\t\t\t\t\tvalue: SignerInfo.schema()\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t}));\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert parsed asn1js object into current class\r\n\t * @param {!Object} schema\r\n\t */\r\n\tfromSchema(schema)\r\n\t{\r\n\t\t//region Clear input data first\r\n\t\tclearProps(schema, [\r\n\t\t\t\"SignedData.version\",\r\n\t\t\t\"SignedData.digestAlgorithms\",\r\n\t\t\t\"SignedData.encapContentInfo\",\r\n\t\t\t\"SignedData.certificates\",\r\n\t\t\t\"SignedData.crls\",\r\n\t\t\t\"SignedData.signerInfos\"\r\n\t\t]);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check the schema is valid\r\n\t\tconst asn1 = asn1js.compareSchema(schema,\r\n\t\t\tschema,\r\n\t\t\tSignedData.schema()\r\n\t\t);\r\n\t\t\r\n\t\tif(asn1.verified === false)\r\n\t\t\tthrow new Error(\"Object's schema was not verified against input data for SignedData\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get internal properties from parsed schema\r\n\t\tthis.version = asn1.result[\"SignedData.version\"].valueBlock.valueDec;\r\n\t\t\r\n\t\tif(\"SignedData.digestAlgorithms\" in asn1.result) // Could be empty SET of digest algorithms\r\n\t\t\tthis.digestAlgorithms = Array.from(asn1.result[\"SignedData.digestAlgorithms\"], algorithm => new AlgorithmIdentifier({ schema: algorithm }));\r\n\t\t\r\n\t\tthis.encapContentInfo = new EncapsulatedContentInfo({ schema: asn1.result[\"SignedData.encapContentInfo\"] });\r\n\t\t\r\n\t\tif(\"SignedData.certificates\" in asn1.result)\r\n\t\t{\r\n\t\t\tconst certificateSet = new CertificateSet({\r\n\t\t\t\tschema: new asn1js.Set({\r\n\t\t\t\t\tvalue: asn1.result[\"SignedData.certificates\"].valueBlock.value\r\n\t\t\t\t})\r\n\t\t\t});\r\n\t\t\tthis.certificates = certificateSet.certificates.slice(0); // Copy all just for making comfortable access\r\n\t\t}\r\n\t\t\r\n\t\tif(\"SignedData.crls\" in asn1.result)\r\n\t\t{\r\n\t\t\tthis.crls = Array.from(asn1.result[\"SignedData.crls\"], crl =>\r\n\t\t\t{\r\n\t\t\t\tif(crl.idBlock.tagClass === 1)\r\n\t\t\t\t\treturn new CertificateRevocationList({ schema: crl });\r\n\t\t\t\t\r\n\t\t\t\t//region Create SEQUENCE from [1]\r\n\t\t\t\tcrl.idBlock.tagClass = 1; // UNIVERSAL\r\n\t\t\t\tcrl.idBlock.tagNumber = 16; // SEQUENCE\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\treturn new OtherRevocationInfoFormat({ schema: crl });\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tif(\"SignedData.signerInfos\" in asn1.result) // Could be empty SET SignerInfos\r\n\t\t\tthis.signerInfos = Array.from(asn1.result[\"SignedData.signerInfos\"], signerInfoSchema => new SignerInfo({ schema: signerInfoSchema }));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convert current object to asn1js object and set correct values\r\n\t * @returns {Object} asn1js object\r\n\t */\r\n\ttoSchema(encodeFlag = false)\r\n\t{\r\n\t\t//region Create array for output sequence\r\n\t\tconst outputArray = [];\r\n\t\t\r\n\t\t// IF ((certificates is present) AND\r\n\t\t// \t(any certificates with a type of other are present)) OR\r\n\t\t// \t((crls is present) AND\r\n\t\t// \t(any crls with a type of other are present))\r\n\t\t// THEN version MUST be 5\r\n\t\t// ELSE\r\n\t\t// \tIF (certificates is present) AND\r\n\t\t// \t\t\t(any version 2 attribute certificates are present)\r\n\t\t// \tTHEN version MUST be 4\r\n\t\t// \tELSE\r\n\t\t// \t\t\tIF ((certificates is present) AND\r\n\t\t// \t\t\t\t(any version 1 attribute certificates are present)) OR\r\n\t\t// \t\t\t\t(any SignerInfo structures are version 3) OR\r\n\t\t// \t\t\t\t(encapContentInfo eContentType is other than id-data)\r\n\t\t// \t\t\tTHEN version MUST be 3\r\n\t\t// \t\t\tELSE version MUST be 1\r\n\t\tif ((this.certificates && this.certificates.length && this.certificates.some(o => o instanceof OtherCertificateFormat))\r\n\t\t\t|| (this.crls && this.crls.length && this.crls.some(o => o instanceof OtherRevocationInfoFormat))) {\r\n\t\t\tthis.version = 5;\r\n\t\t} else if (this.certificates && this.certificates.length && this.certificates.some(o => o instanceof AttributeCertificateV2)) {\r\n\t\t\tthis.version = 4;\r\n\t\t} else if ((this.certificates && this.certificates.length && this.certificates.some(o => o instanceof AttributeCertificateV1))\r\n\t\t\t|| this.signerInfos.some(o => o.version === 3)\r\n\t\t\t|| this.encapContentInfo.eContentType !== SignedData.ID_DATA) {\r\n\t\t\tthis.version = 3;\r\n\t\t} else {\r\n\t\t\tthis.version = 1;\r\n\t\t}\r\n\r\n\t\toutputArray.push(new asn1js.Integer({ value: this.version }));\r\n\t\t\r\n\t\t//region Create array of digest algorithms\r\n\t\toutputArray.push(new asn1js.Set({\r\n\t\t\tvalue: Array.from(this.digestAlgorithms, algorithm => algorithm.toSchema(encodeFlag))\r\n\t\t}));\r\n\t\t//endregion\r\n\t\t\r\n\t\toutputArray.push(this.encapContentInfo.toSchema());\r\n\t\t\r\n\t\tif(\"certificates\" in this)\r\n\t\t{\r\n\t\t\tconst certificateSet = new CertificateSet({ certificates: this.certificates });\r\n\t\t\tconst certificateSetSchema = certificateSet.toSchema();\r\n\t\t\t\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3,\r\n\t\t\t\t\ttagNumber: 0\r\n\t\t\t\t},\r\n\t\t\t\tvalue: certificateSetSchema.valueBlock.value\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tif(\"crls\" in this)\r\n\t\t{\r\n\t\t\toutputArray.push(new asn1js.Constructed({\r\n\t\t\t\tidBlock: {\r\n\t\t\t\t\ttagClass: 3, // CONTEXT-SPECIFIC\r\n\t\t\t\t\ttagNumber: 1 // [1]\r\n\t\t\t\t},\r\n\t\t\t\tvalue: Array.from(this.crls, crl =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(crl instanceof OtherRevocationInfoFormat)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst crlSchema = crl.toSchema(encodeFlag);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcrlSchema.idBlock.tagClass = 3;\r\n\t\t\t\t\t\tcrlSchema.idBlock.tagNumber = 1;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\treturn crlSchema;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn crl.toSchema(encodeFlag);\r\n\t\t\t\t})\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\t//region Create array of signer infos\r\n\t\toutputArray.push(new asn1js.Set({\r\n\t\t\tvalue: Array.from(this.signerInfos, signerInfo => signerInfo.toSchema(encodeFlag))\r\n\t\t}));\r\n\t\t//endregion\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Construct and return new ASN.1 schema for this object\r\n\t\treturn (new asn1js.Sequence({\r\n\t\t\tvalue: outputArray\r\n\t\t}));\r\n\t\t//endregion\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Convertion for the class to JSON object\r\n\t * @returns {Object}\r\n\t */\r\n\ttoJSON()\r\n\t{\r\n\t\tconst _object = {\r\n\t\t\tversion: this.version,\r\n\t\t\tdigestAlgorithms: Array.from(this.digestAlgorithms, algorithm => algorithm.toJSON()),\r\n\t\t\tencapContentInfo: this.encapContentInfo.toJSON()\r\n\t\t};\r\n\t\t\r\n\t\tif(\"certificates\" in this)\r\n\t\t\t_object.certificates = Array.from(this.certificates, certificate => certificate.toJSON());\r\n\t\t\r\n\t\tif(\"crls\" in this)\r\n\t\t\t_object.crls = Array.from(this.crls, crl => crl.toJSON());\r\n\t\t\r\n\t\t_object.signerInfos = Array.from(this.signerInfos, signerInfo => signerInfo.toJSON());\r\n\t\t\r\n\t\treturn _object;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Verify current SignedData value\r\n\t * @param {Object} [param={}]\r\n\t * @param {Number} [param.signer = -1] Index of the signer which information we need to verify\r\n\t * @param {ArrayBuffer} [param.data=new ArrayBuffer(0)]\r\n\t * @param {Array.} [param.trustedCerts=[]]\r\n\t * @param {Date} [param.checkDate=new Date()]\r\n\t * @param {Boolean} [param.checkChain=false]\r\n\t * @param {Boolean} [param.extendedMode=false]\r\n\t * @param {?Function} [findOrigin=null]\r\n\t * @param {?Function} [findIssuer=null]\r\n\t */\r\n\tverify({\r\n\t\tsigner = (-1),\r\n\t\tdata = (new ArrayBuffer(0)),\r\n\t\ttrustedCerts = [],\r\n\t\tcheckDate = (new Date()),\r\n\t\tcheckChain = false,\r\n\t\textendedMode = false,\r\n\t\tpassedWhenNotRevValues = false,\r\n\t\tfindOrigin = null,\r\n\t\tfindIssuer = null\r\n\t} = {})\r\n\t{\r\n\t\t//region Global variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\t\r\n\t\tlet messageDigestValue = new ArrayBuffer(0);\r\n\t\t\r\n\t\tlet shaAlgorithm = \"\";\r\n\t\t\r\n\t\tlet signerCertificate = {};\r\n\t\t\r\n\t\tlet timestampSerial = null;\r\n\t\t\r\n\t\tlet certificatePath = [];\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"crypto\" extension\r\n\t\tconst crypto = getCrypto();\r\n\t\tif(typeof crypto === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Unable to create WebCrypto object\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a signer number\r\n\t\tif(signer === (-1))\r\n\t\t{\r\n\t\t\tif(extendedMode)\r\n\t\t\t{\r\n\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\tcode: 1,\r\n\t\t\t\t\tmessage: \"Unable to get signer index from input parameters\",\r\n\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\tsignerCertificate: null,\r\n\t\t\t\t\tsignerCertificateVerified: null\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Promise.reject(\"Unable to get signer index from input parameters\");\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Check that certificates field was included in signed data\r\n\t\tif((\"certificates\" in this) === false)\r\n\t\t{\r\n\t\t\tif(extendedMode)\r\n\t\t\t{\r\n\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\tcode: 2,\r\n\t\t\t\t\tmessage: \"No certificates attached to this signed data\",\r\n\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\tsignerCertificate: null,\r\n\t\t\t\t\tsignerCertificateVerified: null\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Promise.reject(\"No certificates attached to this signed data\");\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find a certificate for specified signer\r\n\t\tif(this.signerInfos[signer].sid instanceof IssuerAndSerialNumber)\r\n\t\t{\r\n\t\t\tsequence = sequence.then(() =>\r\n\t\t\t{\r\n\t\t\t\tfor(const certificate of this.certificates)\r\n\t\t\t\t{\r\n\t\t\t\t\tif((certificate instanceof Certificate) === false)\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif((certificate.issuer.isEqual(this.signerInfos[signer].sid.issuer)) &&\r\n\t\t\t\t\t\t(certificate.serialNumber.isEqual(this.signerInfos[signer].sid.serialNumber)))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsignerCertificate = certificate;\r\n\t\t\t\t\t\treturn Promise.resolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(extendedMode)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\tcode: 3,\r\n\t\t\t\t\t\tmessage: \"Unable to find signer certificate\",\r\n\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\tsignerCertificate: null,\r\n\t\t\t\t\t\tsignerCertificateVerified: null\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn Promise.reject(\"Unable to find signer certificate\");\r\n\t\t\t});\r\n\t\t}\r\n\t\telse // Find by SubjectKeyIdentifier\r\n\t\t{\r\n\t\t\tsequence = (async () => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst sid = this.signerInfos[signer].sid;\r\n\t\t\t\t\tconst keyId = sid.idBlock.isConstructed\r\n\t\t\t\t\t\t? sid.valueBlock.value[0].valueBlock.valueHex // EXPLICIT OCTET STRING\r\n\t\t\t\t\t\t: sid.valueBlock.valueHex; // IMPLICIT OCTET STRING\r\n\r\n\t\t\t\t\tfor (const certificate of this.certificates) {\r\n\t\t\t\t\t\tif (!(certificate instanceof Certificate)) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tconst digest = await crypto.digest({ name: \"sha-1\" }, new Uint8Array(certificate.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHex));\r\n\t\t\t\t\t\tif(isEqualBuffer(digest, keyId))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsignerCertificate = certificate;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (!signerCertificate) {\r\n\t\t\t\t\t\tthrow new Error(\"Signing certificate not found\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e) {\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 3,\r\n\t\t\t\t\t\t\tmessage: \"Unable to find signer certificate\",\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate: null,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: null\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthrow \"Unable to find signer certificate\";\r\n\t\t\t\t}\r\n\t\t\t})();\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Verify internal digest in case of \"tSTInfo\" content type\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tif(this.encapContentInfo.eContentType === \"1.2.840.113549.1.9.16.1.4\")\r\n\t\t\t{\r\n\t\t\t\t//region Check \"eContent\" precense\r\n\t\t\t\tif((\"eContent\" in this.encapContentInfo) === false)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Initialize TST_INFO value\r\n\t\t\t\tconst asn1 = asn1js.fromBER(this.encapContentInfo.eContent.valueBlock.valueHex);\r\n\t\t\t\tlet tstInfo;\r\n\t\t\t\t\r\n\t\t\t\ttry\r\n\t\t\t\t{\r\n\t\t\t\t\ttstInfo = new TSTInfo({ schema: asn1.result });\r\n\t\t\t\t}\r\n\t\t\t\tcatch(ex)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Change \"checkDate\" and append \"timestampSerial\"\r\n\t\t\t\tcheckDate = tstInfo.genTime;\r\n\t\t\t\ttimestampSerial = tstInfo.serialNumber.valueBlock.valueHex;\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\t//region Check that we do have detached data content\r\n\t\t\t\tif(data.byteLength === 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 4,\r\n\t\t\t\t\t\t\tmessage: \"Missed detached data input array\",\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: null\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(\"Missed detached data input array\");\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\treturn tstInfo.verify({ data });\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Make additional verification for signer's certificate\r\n\t\tfunction checkCA(cert)\r\n\t\t{\r\n\t\t\t/// Certificate to find CA flag for\r\n\t\t\t\r\n\t\t\t//region Do not include signer's certificate\r\n\t\t\tif((cert.issuer.isEqual(signerCertificate.issuer) === true) && (cert.serialNumber.isEqual(signerCertificate.serialNumber) === true))\r\n\t\t\t\treturn null;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tlet isCA = false;\r\n\t\t\t\r\n\t\t\tif(\"extensions\" in cert)\r\n\t\t\t{\r\n\t\t\t\tfor(const extension of cert.extensions)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(extension.extnID === \"2.5.29.19\") // BasicConstraints\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(\"cA\" in extension.parsedValue)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(extension.parsedValue.cA === true)\r\n\t\t\t\t\t\t\t\tisCA = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(isCA)\r\n\t\t\t\treturn cert;\r\n\t\t\t\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t\r\n\t\tif(checkChain)\r\n\t\t{\r\n\t\t\tsequence = sequence.then(result =>\r\n\t\t\t{\r\n\t\t\t\t//region Verify result of previous operation\r\n\t\t\t\tif(result === false)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\tconst promiseResults = Array.from(this.certificates.filter(certificate => (certificate instanceof Certificate)), certificate => checkCA(certificate));\r\n\t\t\t\t\r\n\t\t\t\tconst certificateChainValidationEngineParameters = {\r\n\t\t\t\t\tcheckDate,\r\n\t\t\t\t\tcerts: Array.from(promiseResults.filter(_result => (_result !== null))),\r\n\t\t\t\t\ttrustedCerts\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tif(findIssuer !== null)\r\n\t\t\t\t\tcertificateChainValidationEngineParameters.findIssuer = findIssuer;\r\n\t\t\t\t\r\n\t\t\t\tif(findOrigin !== null)\r\n\t\t\t\t\tcertificateChainValidationEngineParameters.findOrigin = findOrigin;\r\n\t\t\t\t\r\n\t\t\t\tconst certificateChainEngine = new CertificateChainValidationEngine(certificateChainValidationEngineParameters);\r\n\t\t\t\t\r\n\t\t\t\tcertificateChainEngine.certs.push(signerCertificate);\r\n\t\t\t\t\r\n\t\t\t\tif(\"crls\" in this)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(const crl of this.crls)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(\"thisUpdate\" in crl)\r\n\t\t\t\t\t\t\tcertificateChainEngine.crls.push(crl);\r\n\t\t\t\t\t\telse // Assumed \"revocation value\" has \"OtherRevocationInfoFormat\"\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(crl.otherRevInfoFormat === \"1.3.6.1.5.5.7.48.1.1\") // Basic OCSP response\r\n\t\t\t\t\t\t\t\tcertificateChainEngine.ocsps.push(new BasicOCSPResponse({ schema: crl.otherRevInfo }));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(\"ocsps\" in this)\r\n\t\t\t\t\tcertificateChainEngine.ocsps.push(...(this.ocsps));\r\n\t\t\t\t\r\n\t\t\t\treturn certificateChainEngine.verify({ passedWhenNotRevValues }).then(verificationResult =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(\"certificatePath\" in verificationResult)\r\n\t\t\t\t\t\tcertificatePath = verificationResult.certificatePath;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(verificationResult.result === true)\r\n\t\t\t\t\t\treturn Promise.resolve(true);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 5,\r\n\t\t\t\t\t\t\tmessage: `Validation of signer's certificate failed: ${verificationResult.resultMessage}`,\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: false\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(\"Validation of signer's certificate failed\");\r\n\t\t\t\t}, error =>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 5,\r\n\t\t\t\t\t\t\tmessage: `Validation of signer's certificate failed with error: ${((error instanceof Object) ? error.resultMessage : error)}`,\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: false\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(`Validation of signer's certificate failed with error: ${((error instanceof Object) ? error.resultMessage : error)}`);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Find signer's hashing algorithm\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\t//region Verify result of previous operation\r\n\t\t\tif(result === false)\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tconst signerInfoHashAlgorithm = getAlgorithmByOID(this.signerInfos[signer].digestAlgorithm.algorithmId);\r\n\t\t\tif((\"name\" in signerInfoHashAlgorithm) === false)\r\n\t\t\t{\r\n\t\t\t\tif(extendedMode)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\tcode: 7,\r\n\t\t\t\t\t\tmessage: `Unsupported signature algorithm: ${this.signerInfos[signer].digestAlgorithm.algorithmId}`,\r\n\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\tsignerCertificateVerified: true\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn Promise.reject(`Unsupported signature algorithm: ${this.signerInfos[signer].digestAlgorithm.algorithmId}`);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tshaAlgorithm = signerInfoHashAlgorithm.name;\r\n\t\t\t\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create correct data block for verification\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\t//region Verify result of previous operation\r\n\t\t\tif(result === false)\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(\"eContent\" in this.encapContentInfo) // Attached data\r\n\t\t\t{\r\n\t\t\t\tif((this.encapContentInfo.eContent.idBlock.tagClass === 1) &&\r\n\t\t\t\t\t(this.encapContentInfo.eContent.idBlock.tagNumber === 4))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.encapContentInfo.eContent.idBlock.isConstructed === false)\r\n\t\t\t\t\t\tdata = this.encapContentInfo.eContent.valueBlock.valueHex;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor(const contentValue of this.encapContentInfo.eContent.valueBlock.value)\r\n\t\t\t\t\t\t\tdata = utilConcatBuf(data, contentValue.valueBlock.valueHex);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tdata = this.encapContentInfo.eContent.valueBlock.valueBeforeDecode;\r\n\t\t\t}\r\n\t\t\telse // Detached data\r\n\t\t\t{\r\n\t\t\t\tif(data.byteLength === 0) // Check that \"data\" already provided by function parameter\r\n\t\t\t\t{\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 8,\r\n\t\t\t\t\t\t\tmessage: \"Missed detached data input array\",\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: true\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(\"Missed detached data input array\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(\"signedAttrs\" in this.signerInfos[signer])\r\n\t\t\t{\r\n\t\t\t\t//region Check mandatory attributes\r\n\t\t\t\tlet foundContentType = false;\r\n\t\t\t\tlet foundMessageDigest = false;\r\n\t\t\t\t\r\n\t\t\t\tfor(const attribute of this.signerInfos[signer].signedAttrs.attributes)\r\n\t\t\t\t{\r\n\t\t\t\t\t//region Check that \"content-type\" attribute exists\r\n\t\t\t\t\tif(attribute.type === \"1.2.840.113549.1.9.3\")\r\n\t\t\t\t\t\tfoundContentType = true;\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Check that \"message-digest\" attribute exists\r\n\t\t\t\t\tif(attribute.type === \"1.2.840.113549.1.9.4\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfoundMessageDigest = true;\r\n\t\t\t\t\t\tmessageDigestValue = attribute.values[0].valueBlock.valueHex;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Speed-up searching\r\n\t\t\t\t\tif(foundContentType && foundMessageDigest)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(foundContentType === false)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 9,\r\n\t\t\t\t\t\t\tmessage: \"Attribute \\\"content-type\\\" is a mandatory attribute for \\\"signed attributes\\\"\",\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: true\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(\"Attribute \\\"content-type\\\" is a mandatory attribute for \\\"signed attributes\\\"\");\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(foundMessageDigest === false)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(extendedMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\t\t\tcode: 10,\r\n\t\t\t\t\t\t\tmessage: \"Attribute \\\"message-digest\\\" is a mandatory attribute for \\\"signed attributes\\\"\",\r\n\t\t\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\t\t\tsignerCertificateVerified: true\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn Promise.reject(\"Attribute \\\"message-digest\\\" is a mandatory attribute for \\\"signed attributes\\\"\");\r\n\t\t\t\t}\r\n\t\t\t\t//endregion\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn true;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Verify \"message-digest\" attribute in case of \"signedAttrs\"\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\t//region Verify result of previous operation\r\n\t\t\tif(result === false)\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\tif(\"signedAttrs\" in this.signerInfos[signer])\r\n\t\t\t\treturn crypto.digest(shaAlgorithm, new Uint8Array(data));\r\n\t\t\t\r\n\t\t\treturn true;\r\n\t\t}).then(\r\n\t\t\t/**\r\n\t\t\t * @param {ArrayBuffer} result\r\n\t\t\t */\r\n\t\t\tresult =>\r\n\t\t\t{\r\n\t\t\t\t//region Verify result of previous operation\r\n\t\t\t\tif(result === false)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t//endregion\r\n\t\t\t\t\r\n\t\t\t\tif(\"signedAttrs\" in this.signerInfos[signer])\r\n\t\t\t\t{\r\n\t\t\t\t\tif(isEqualBuffer(result, messageDigestValue))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdata = this.signerInfos[signer].signedAttrs.encodedValue;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\t//region Verify result of previous operation\r\n\t\t\tif(result === false)\r\n\t\t\t\treturn false;\r\n\t\t\t//endregion\r\n\t\t\t\r\n\t\t\treturn engine.subtle.verifyWithPublicKey(data, this.signerInfos[signer].signature, signerCertificate.subjectPublicKeyInfo, signerCertificate.signatureAlgorithm, shaAlgorithm);\r\n\t\t});\r\n\t\t\r\n\t\t//region Make a final result\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tif(extendedMode)\r\n\t\t\t{\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\tcode: 14,\r\n\t\t\t\t\tmessage: \"\",\r\n\t\t\t\t\tsignatureVerified: result,\r\n\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\ttimestampSerial,\r\n\t\t\t\t\tsignerCertificateVerified: true,\r\n\t\t\t\t\tcertificatePath\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn result;\r\n\t\t}, error =>\r\n\t\t{\r\n\t\t\tif(extendedMode)\r\n\t\t\t{\r\n\t\t\t\tif(\"code\" in error)\r\n\t\t\t\t\treturn Promise.reject(error);\r\n\t\t\t\t\r\n\t\t\t\treturn Promise.reject({\r\n\t\t\t\t\tdate: checkDate,\r\n\t\t\t\t\tcode: 15,\r\n\t\t\t\t\tmessage: `Error during verification: ${error.message}`,\r\n\t\t\t\t\tsignatureVerified: null,\r\n\t\t\t\t\tsignerCertificate,\r\n\t\t\t\t\ttimestampSerial,\r\n\t\t\t\t\tsignerCertificateVerified: true\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Promise.reject(error);\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n\t/**\r\n\t * Signing current SignedData\r\n\t * @param {key} privateKey Private key for \"subjectPublicKeyInfo\" structure\r\n\t * @param {number} signerIndex Index number (starting from 0) of signer index to make signature for\r\n\t * @param {string} [hashAlgorithm=\"SHA-1\"] Hashing algorithm. Default SHA-1\r\n\t * @param {ArrayBuffer} [data] Detached data\r\n\t * @returns {*}\r\n\t */\r\n\tsign(privateKey, signerIndex, hashAlgorithm = \"SHA-1\", data = (new ArrayBuffer(0)))\r\n\t{\r\n\t\t//region Initial checking\r\n\t\tif(typeof privateKey === \"undefined\")\r\n\t\t\treturn Promise.reject(\"Need to provide a private key for signing\");\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Initial variables\r\n\t\tlet sequence = Promise.resolve();\r\n\t\tlet parameters;\r\n\t\t\r\n\t\tconst engine = getEngine();\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Simple check for supported algorithm\r\n\t\tconst hashAlgorithmOID = getOIDByAlgorithm({ name: hashAlgorithm });\r\n\t\tif(hashAlgorithmOID === \"\")\r\n\t\t\treturn Promise.reject(`Unsupported hash algorithm: ${hashAlgorithm}`);\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Append information about hash algorithm\r\n\t\tif((this.digestAlgorithms.filter(algorithm => algorithm.algorithmId === hashAlgorithmOID)).length === 0)\r\n\t\t{\r\n\t\t\tthis.digestAlgorithms.push(new AlgorithmIdentifier({\r\n\t\t\t\talgorithmId: hashAlgorithmOID,\r\n\t\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t\t}));\r\n\t\t}\r\n\t\t\r\n\t\tthis.signerInfos[signerIndex].digestAlgorithm = new AlgorithmIdentifier({\r\n\t\t\talgorithmId: hashAlgorithmOID,\r\n\t\t\talgorithmParams: new asn1js.Null()\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Get a \"default parameters\" for current algorithm and set correct signature algorithm\r\n\t\tsequence = sequence.then(() => engine.subtle.getSignatureParameters(privateKey, hashAlgorithm));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tparameters = result.parameters;\r\n\t\t\tthis.signerInfos[signerIndex].signatureAlgorithm = result.signatureAlgorithm;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Create TBS data for signing\r\n\t\tsequence = sequence.then(() =>\r\n\t\t{\r\n\t\t\tif(\"signedAttrs\" in this.signerInfos[signerIndex])\r\n\t\t\t{\r\n\t\t\t\tif(this.signerInfos[signerIndex].signedAttrs.encodedValue.byteLength !== 0)\r\n\t\t\t\t\tdata = this.signerInfos[signerIndex].signedAttrs.encodedValue;\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tdata = this.signerInfos[signerIndex].signedAttrs.toSchema(true).toBER(false);\r\n\t\t\t\t\t\r\n\t\t\t\t\t//region Change type from \"[0]\" to \"SET\" acordingly to standard\r\n\t\t\t\t\tconst view = new Uint8Array(data);\r\n\t\t\t\t\tview[0] = 0x31;\r\n\t\t\t\t\t//endregion\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif(\"eContent\" in this.encapContentInfo) // Attached data\r\n\t\t\t\t{\r\n\t\t\t\t\tif((this.encapContentInfo.eContent.idBlock.tagClass === 1) &&\r\n\t\t\t\t\t\t(this.encapContentInfo.eContent.idBlock.tagNumber === 4))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(this.encapContentInfo.eContent.idBlock.isConstructed === false)\r\n\t\t\t\t\t\t\tdata = this.encapContentInfo.eContent.valueBlock.valueHex;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfor(const content of this.encapContentInfo.eContent.valueBlock.value)\r\n\t\t\t\t\t\t\t\tdata = utilConcatBuf(data, content.valueBlock.valueHex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tdata = this.encapContentInfo.eContent.valueBlock.valueBeforeDecode;\r\n\t\t\t\t}\r\n\t\t\t\telse // Detached data\r\n\t\t\t\t{\r\n\t\t\t\t\tif(data.byteLength === 0) // Check that \"data\" already provided by function parameter\r\n\t\t\t\t\t\treturn Promise.reject(\"Missed detached data input array\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn Promise.resolve();\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\t//region Signing TBS data on provided private key\r\n\t\tsequence = sequence.then(() => engine.subtle.signWithPrivateKey(data, privateKey, parameters));\r\n\t\t\r\n\t\tsequence = sequence.then(result =>\r\n\t\t{\r\n\t\t\tthis.signerInfos[signerIndex].signature = new asn1js.OctetString({ valueHex: result });\r\n\t\t\t\r\n\t\t\treturn result;\r\n\t\t});\r\n\t\t//endregion\r\n\t\t\r\n\t\treturn sequence;\r\n\t}\r\n\t//**********************************************************************************\r\n}\r\n\r\nSignedData.ID_DATA = \"1.2.840.113549.1.7.1\";\r\n//**************************************************************************************\r\n","/**\n * @file Web Cryptography API shim\n * @author Artem S Vybornov \n * @license MIT\n */\n(function (global, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], function () {\n return factory(global);\n });\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS-like environments that support module.exports\n module.exports = factory(global);\n } else {\n factory(global);\n }\n}(typeof self !== 'undefined' ? self : this, function (global) {\n 'use strict';\n\n if ( typeof Promise !== 'function' )\n throw \"Promise support required\";\n\n var _crypto = global.crypto || global.msCrypto;\n if ( !_crypto ) return;\n\n var _subtle = _crypto.subtle || _crypto.webkitSubtle;\n if ( !_subtle ) return;\n\n var _Crypto = global.Crypto || _crypto.constructor || Object,\n _SubtleCrypto = global.SubtleCrypto || _subtle.constructor || Object,\n _CryptoKey = global.CryptoKey || global.Key || Object;\n\n var isEdge = global.navigator.userAgent.indexOf('Edge/') > -1;\n var isIE = !!global.msCrypto && !isEdge;\n var isWebkit = !_crypto.subtle && !!_crypto.webkitSubtle;\n if ( !isIE && !isWebkit ) return;\n\n function s2a ( s ) {\n return btoa(s).replace(/\\=+$/, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n }\n\n function a2s ( s ) {\n s += '===', s = s.slice( 0, -s.length % 4 );\n return atob( s.replace(/-/g, '+').replace(/_/g, '/') );\n }\n\n function s2b ( s ) {\n var b = new Uint8Array(s.length);\n for ( var i = 0; i < s.length; i++ ) b[i] = s.charCodeAt(i);\n return b;\n }\n\n function b2s ( b ) {\n if ( b instanceof ArrayBuffer ) b = new Uint8Array(b);\n return String.fromCharCode.apply( String, b );\n }\n\n function alg ( a ) {\n var r = { 'name': (a.name || a || '').toUpperCase().replace('V','v') };\n switch ( r.name ) {\n case 'SHA-1':\n case 'SHA-256':\n case 'SHA-384':\n case 'SHA-512':\n break;\n case 'AES-CBC':\n case 'AES-GCM':\n case 'AES-KW':\n if ( a.length ) r['length'] = a.length;\n break;\n case 'HMAC':\n if ( a.hash ) r['hash'] = alg(a.hash);\n if ( a.length ) r['length'] = a.length;\n break;\n case 'RSAES-PKCS1-v1_5':\n if ( a.publicExponent ) r['publicExponent'] = new Uint8Array(a.publicExponent);\n if ( a.modulusLength ) r['modulusLength'] = a.modulusLength;\n break;\n case 'RSASSA-PKCS1-v1_5':\n case 'RSA-OAEP':\n if ( a.hash ) r['hash'] = alg(a.hash);\n if ( a.publicExponent ) r['publicExponent'] = new Uint8Array(a.publicExponent);\n if ( a.modulusLength ) r['modulusLength'] = a.modulusLength;\n break;\n default:\n throw new SyntaxError(\"Bad algorithm name\");\n }\n return r;\n };\n\n function jwkAlg ( a ) {\n return {\n 'HMAC': {\n 'SHA-1': 'HS1',\n 'SHA-256': 'HS256',\n 'SHA-384': 'HS384',\n 'SHA-512': 'HS512',\n },\n 'RSASSA-PKCS1-v1_5': {\n 'SHA-1': 'RS1',\n 'SHA-256': 'RS256',\n 'SHA-384': 'RS384',\n 'SHA-512': 'RS512',\n },\n 'RSAES-PKCS1-v1_5': {\n '': 'RSA1_5',\n },\n 'RSA-OAEP': {\n 'SHA-1': 'RSA-OAEP',\n 'SHA-256': 'RSA-OAEP-256',\n },\n 'AES-KW': {\n '128': 'A128KW',\n '192': 'A192KW',\n '256': 'A256KW',\n },\n 'AES-GCM': {\n '128': 'A128GCM',\n '192': 'A192GCM',\n '256': 'A256GCM',\n },\n 'AES-CBC': {\n '128': 'A128CBC',\n '192': 'A192CBC',\n '256': 'A256CBC',\n },\n }[a.name][ ( a.hash || {} ).name || a.length || '' ];\n }\n\n function b2jwk ( k ) {\n if ( k instanceof ArrayBuffer || k instanceof Uint8Array ) k = JSON.parse( decodeURIComponent( escape( b2s(k) ) ) );\n var jwk = { 'kty': k.kty, 'alg': k.alg, 'ext': k.ext || k.extractable };\n switch ( jwk.kty ) {\n case 'oct':\n jwk.k = k.k;\n case 'RSA':\n [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi', 'oth' ].forEach( function ( x ) { if ( x in k ) jwk[x] = k[x] } );\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n return jwk;\n }\n\n function jwk2b ( k ) {\n var jwk = b2jwk(k);\n if ( isIE ) jwk['extractable'] = jwk.ext, delete jwk.ext;\n return s2b( unescape( encodeURIComponent( JSON.stringify(jwk) ) ) ).buffer;\n }\n\n function pkcs2jwk ( k ) {\n var info = b2der(k), prv = false;\n if ( info.length > 2 ) prv = true, info.shift(); // remove version from PKCS#8 PrivateKeyInfo structure\n var jwk = { 'ext': true };\n switch ( info[0][0] ) {\n case '1.2.840.113549.1.1.1':\n var rsaComp = [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ],\n rsaKey = b2der( info[1] );\n if ( prv ) rsaKey.shift(); // remove version from PKCS#1 RSAPrivateKey structure\n for ( var i = 0; i < rsaKey.length; i++ ) {\n if ( !rsaKey[i][0] ) rsaKey[i] = rsaKey[i].subarray(1);\n jwk[ rsaComp[i] ] = s2a( b2s( rsaKey[i] ) );\n }\n jwk['kty'] = 'RSA';\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n return jwk;\n }\n\n function jwk2pkcs ( k ) {\n var key, info = [ [ '', null ] ], prv = false;\n switch ( k.kty ) {\n case 'RSA':\n var rsaComp = [ 'n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi' ],\n rsaKey = [];\n for ( var i = 0; i < rsaComp.length; i++ ) {\n if ( !( rsaComp[i] in k ) ) break;\n var b = rsaKey[i] = s2b( a2s( k[ rsaComp[i] ] ) );\n if ( b[0] & 0x80 ) rsaKey[i] = new Uint8Array(b.length + 1), rsaKey[i].set( b, 1 );\n }\n if ( rsaKey.length > 2 ) prv = true, rsaKey.unshift( new Uint8Array([0]) ); // add version to PKCS#1 RSAPrivateKey structure\n info[0][0] = '1.2.840.113549.1.1.1';\n key = rsaKey;\n break;\n default:\n throw new TypeError(\"Unsupported key type\");\n }\n info.push( new Uint8Array( der2b(key) ).buffer );\n if ( !prv ) info[1] = { 'tag': 0x03, 'value': info[1] };\n else info.unshift( new Uint8Array([0]) ); // add version to PKCS#8 PrivateKeyInfo structure\n return new Uint8Array( der2b(info) ).buffer;\n }\n\n var oid2str = { 'KoZIhvcNAQEB': '1.2.840.113549.1.1.1' },\n str2oid = { '1.2.840.113549.1.1.1': 'KoZIhvcNAQEB' };\n\n function b2der ( buf, ctx ) {\n if ( buf instanceof ArrayBuffer ) buf = new Uint8Array(buf);\n if ( !ctx ) ctx = { pos: 0, end: buf.length };\n\n if ( ctx.end - ctx.pos < 2 || ctx.end > buf.length ) throw new RangeError(\"Malformed DER\");\n\n var tag = buf[ctx.pos++],\n len = buf[ctx.pos++];\n\n if ( len >= 0x80 ) {\n len &= 0x7f;\n if ( ctx.end - ctx.pos < len ) throw new RangeError(\"Malformed DER\");\n for ( var xlen = 0; len--; ) xlen <<= 8, xlen |= buf[ctx.pos++];\n len = xlen;\n }\n\n if ( ctx.end - ctx.pos < len ) throw new RangeError(\"Malformed DER\");\n\n var rv;\n\n switch ( tag ) {\n case 0x02: // Universal Primitive INTEGER\n rv = buf.subarray( ctx.pos, ctx.pos += len );\n break;\n case 0x03: // Universal Primitive BIT STRING\n if ( buf[ctx.pos++] ) throw new Error( \"Unsupported bit string\" );\n len--;\n case 0x04: // Universal Primitive OCTET STRING\n rv = new Uint8Array( buf.subarray( ctx.pos, ctx.pos += len ) ).buffer;\n break;\n case 0x05: // Universal Primitive NULL\n rv = null;\n break;\n case 0x06: // Universal Primitive OBJECT IDENTIFIER\n var oid = btoa( b2s( buf.subarray( ctx.pos, ctx.pos += len ) ) );\n if ( !( oid in oid2str ) ) throw new Error( \"Unsupported OBJECT ID \" + oid );\n rv = oid2str[oid];\n break;\n case 0x30: // Universal Constructed SEQUENCE\n rv = [];\n for ( var end = ctx.pos + len; ctx.pos < end; ) rv.push( b2der( buf, ctx ) );\n break;\n default:\n throw new Error( \"Unsupported DER tag 0x\" + tag.toString(16) );\n }\n\n return rv;\n }\n\n function der2b ( val, buf ) {\n if ( !buf ) buf = [];\n\n var tag = 0, len = 0,\n pos = buf.length + 2;\n\n buf.push( 0, 0 ); // placeholder\n\n if ( val instanceof Uint8Array ) { // Universal Primitive INTEGER\n tag = 0x02, len = val.length;\n for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n }\n else if ( val instanceof ArrayBuffer ) { // Universal Primitive OCTET STRING\n tag = 0x04, len = val.byteLength, val = new Uint8Array(val);\n for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n }\n else if ( val === null ) { // Universal Primitive NULL\n tag = 0x05, len = 0;\n }\n else if ( typeof val === 'string' && val in str2oid ) { // Universal Primitive OBJECT IDENTIFIER\n var oid = s2b( atob( str2oid[val] ) );\n tag = 0x06, len = oid.length;\n for ( var i = 0; i < len; i++ ) buf.push( oid[i] );\n }\n else if ( val instanceof Array ) { // Universal Constructed SEQUENCE\n for ( var i = 0; i < val.length; i++ ) der2b( val[i], buf );\n tag = 0x30, len = buf.length - pos;\n }\n else if ( typeof val === 'object' && val.tag === 0x03 && val.value instanceof ArrayBuffer ) { // Tag hint\n val = new Uint8Array(val.value), tag = 0x03, len = val.byteLength;\n buf.push(0); for ( var i = 0; i < len; i++ ) buf.push( val[i] );\n len++;\n }\n else {\n throw new Error( \"Unsupported DER value \" + val );\n }\n\n if ( len >= 0x80 ) {\n var xlen = len, len = 4;\n buf.splice( pos, 0, (xlen >> 24) & 0xff, (xlen >> 16) & 0xff, (xlen >> 8) & 0xff, xlen & 0xff );\n while ( len > 1 && !(xlen >> 24) ) xlen <<= 8, len--;\n if ( len < 4 ) buf.splice( pos, 4 - len );\n len |= 0x80;\n }\n\n buf.splice( pos - 2, 2, tag, len );\n\n return buf;\n }\n\n function CryptoKey ( key, alg, ext, use ) {\n Object.defineProperties( this, {\n _key: {\n value: key\n },\n type: {\n value: key.type,\n enumerable: true,\n },\n extractable: {\n value: (ext === undefined) ? key.extractable : ext,\n enumerable: true,\n },\n algorithm: {\n value: (alg === undefined) ? key.algorithm : alg,\n enumerable: true,\n },\n usages: {\n value: (use === undefined) ? key.usages : use,\n enumerable: true,\n },\n });\n }\n\n function isPubKeyUse ( u ) {\n return u === 'verify' || u === 'encrypt' || u === 'wrapKey';\n }\n\n function isPrvKeyUse ( u ) {\n return u === 'sign' || u === 'decrypt' || u === 'unwrapKey';\n }\n\n [ 'generateKey', 'importKey', 'unwrapKey' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c ) {\n var args = [].slice.call(arguments),\n ka, kx, ku;\n\n switch ( m ) {\n case 'generateKey':\n ka = alg(a), kx = b, ku = c;\n break;\n case 'importKey':\n ka = alg(c), kx = args[3], ku = args[4];\n if ( a === 'jwk' ) {\n b = b2jwk(b);\n if ( !b.alg ) b.alg = jwkAlg(ka);\n if ( !b.key_ops ) b.key_ops = ( b.kty !== 'oct' ) ? ( 'd' in b ) ? ku.filter(isPrvKeyUse) : ku.filter(isPubKeyUse) : ku.slice();\n args[1] = jwk2b(b);\n }\n break;\n case 'unwrapKey':\n ka = args[4], kx = args[5], ku = args[6];\n args[2] = c._key;\n break;\n }\n\n if ( m === 'generateKey' && ka.name === 'HMAC' && ka.hash ) {\n ka.length = ka.length || { 'SHA-1': 512, 'SHA-256': 512, 'SHA-384': 1024, 'SHA-512': 1024 }[ka.hash.name];\n return _subtle.importKey( 'raw', _crypto.getRandomValues( new Uint8Array( (ka.length+7)>>3 ) ), ka, kx, ku );\n }\n\n if ( isWebkit && m === 'generateKey' && ka.name === 'RSASSA-PKCS1-v1_5' && ( !ka.modulusLength || ka.modulusLength >= 2048 ) ) {\n a = alg(a), a.name = 'RSAES-PKCS1-v1_5', delete a.hash;\n return _subtle.generateKey( a, true, [ 'encrypt', 'decrypt' ] )\n .then( function ( k ) {\n return Promise.all([\n _subtle.exportKey( 'jwk', k.publicKey ),\n _subtle.exportKey( 'jwk', k.privateKey ),\n ]);\n })\n .then( function ( keys ) {\n keys[0].alg = keys[1].alg = jwkAlg(ka);\n keys[0].key_ops = ku.filter(isPubKeyUse), keys[1].key_ops = ku.filter(isPrvKeyUse);\n return Promise.all([\n _subtle.importKey( 'jwk', keys[0], ka, true, keys[0].key_ops ),\n _subtle.importKey( 'jwk', keys[1], ka, kx, keys[1].key_ops ),\n ]);\n })\n .then( function ( keys ) {\n return {\n publicKey: keys[0],\n privateKey: keys[1],\n };\n });\n }\n\n if ( ( isWebkit || ( isIE && ( ka.hash || {} ).name === 'SHA-1' ) )\n && m === 'importKey' && a === 'jwk' && ka.name === 'HMAC' && b.kty === 'oct' ) {\n return _subtle.importKey( 'raw', s2b( a2s(b.k) ), c, args[3], args[4] );\n }\n\n if ( isWebkit && m === 'importKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n return _subtle.importKey( 'jwk', pkcs2jwk(b), c, args[3], args[4] );\n }\n\n if ( isIE && m === 'unwrapKey' ) {\n return _subtle.decrypt( args[3], c, b )\n .then( function ( k ) {\n return _subtle.importKey( a, k, args[4], args[5], args[6] );\n });\n }\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n }\n\n op = op.then( function ( k ) {\n if ( ka.name === 'HMAC' ) {\n if ( !ka.length ) ka.length = 8 * k.algorithm.length;\n }\n if ( ka.name.search('RSA') == 0 ) {\n if ( !ka.modulusLength ) ka.modulusLength = (k.publicKey || k).algorithm.modulusLength;\n if ( !ka.publicExponent ) ka.publicExponent = (k.publicKey || k).algorithm.publicExponent;\n }\n if ( k.publicKey && k.privateKey ) {\n k = {\n publicKey: new CryptoKey( k.publicKey, ka, kx, ku.filter(isPubKeyUse) ),\n privateKey: new CryptoKey( k.privateKey, ka, kx, ku.filter(isPrvKeyUse) ),\n };\n }\n else {\n k = new CryptoKey( k, ka, kx, ku );\n }\n return k;\n });\n\n return op;\n }\n });\n\n [ 'exportKey', 'wrapKey' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c ) {\n var args = [].slice.call(arguments);\n\n switch ( m ) {\n case 'exportKey':\n args[1] = b._key;\n break;\n case 'wrapKey':\n args[1] = b._key, args[2] = c._key;\n break;\n }\n\n if ( ( isWebkit || ( isIE && ( b.algorithm.hash || {} ).name === 'SHA-1' ) )\n && m === 'exportKey' && a === 'jwk' && b.algorithm.name === 'HMAC' ) {\n args[0] = 'raw';\n }\n\n if ( isWebkit && m === 'exportKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n args[0] = 'jwk';\n }\n\n if ( isIE && m === 'wrapKey' ) {\n return _subtle.exportKey( a, b )\n .then( function ( k ) {\n if ( a === 'jwk' ) k = s2b( unescape( encodeURIComponent( JSON.stringify( b2jwk(k) ) ) ) );\n return _subtle.encrypt( args[3], c, k );\n });\n }\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n }\n\n if ( m === 'exportKey' && a === 'jwk' ) {\n op = op.then( function ( k ) {\n if ( ( isWebkit || ( isIE && ( b.algorithm.hash || {} ).name === 'SHA-1' ) )\n && b.algorithm.name === 'HMAC') {\n return { 'kty': 'oct', 'alg': jwkAlg(b.algorithm), 'key_ops': b.usages.slice(), 'ext': true, 'k': s2a( b2s(k) ) };\n }\n k = b2jwk(k);\n if ( !k.alg ) k['alg'] = jwkAlg(b.algorithm);\n if ( !k.key_ops ) k['key_ops'] = ( b.type === 'public' ) ? b.usages.filter(isPubKeyUse) : ( b.type === 'private' ) ? b.usages.filter(isPrvKeyUse) : b.usages.slice();\n return k;\n });\n }\n\n if ( isWebkit && m === 'exportKey' && ( a === 'spki' || a === 'pkcs8' ) ) {\n op = op.then( function ( k ) {\n k = jwk2pkcs( b2jwk(k) );\n return k;\n });\n }\n\n return op;\n }\n });\n\n [ 'encrypt', 'decrypt', 'sign', 'verify' ]\n .forEach( function ( m ) {\n var _fn = _subtle[m];\n\n _subtle[m] = function ( a, b, c, d ) {\n if ( isIE && ( !c.byteLength || ( d && !d.byteLength ) ) )\n throw new Error(\"Empy input is not allowed\");\n\n var args = [].slice.call(arguments),\n ka = alg(a);\n\n if ( isIE && m === 'decrypt' && ka.name === 'AES-GCM' ) {\n var tl = a.tagLength >> 3;\n args[2] = (c.buffer || c).slice( 0, c.byteLength - tl ),\n a.tag = (c.buffer || c).slice( c.byteLength - tl );\n }\n\n args[1] = b._key;\n\n var op;\n try {\n op = _fn.apply( _subtle, args );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n if ( isIE ) {\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) {\n rej(e);\n };\n\n op.oncomplete = function ( r ) {\n var r = r.target.result;\n\n if ( m === 'encrypt' && r instanceof AesGcmEncryptResult ) {\n var c = r.ciphertext, t = r.tag;\n r = new Uint8Array( c.byteLength + t.byteLength );\n r.set( new Uint8Array(c), 0 );\n r.set( new Uint8Array(t), c.byteLength );\n r = r.buffer;\n }\n\n res(r);\n };\n });\n }\n\n return op;\n }\n });\n\n if ( isIE ) {\n var _digest = _subtle.digest;\n\n _subtle['digest'] = function ( a, b ) {\n if ( !b.byteLength )\n throw new Error(\"Empy input is not allowed\");\n\n var op;\n try {\n op = _digest.call( _subtle, a, b );\n }\n catch ( e ) {\n return Promise.reject(e);\n }\n\n op = new Promise( function ( res, rej ) {\n op.onabort =\n op.onerror = function ( e ) { rej(e) };\n op.oncomplete = function ( r ) { res(r.target.result) };\n });\n\n return op;\n };\n\n global.crypto = Object.create( _crypto, {\n getRandomValues: { value: function ( a ) { return _crypto.getRandomValues(a) } },\n subtle: { value: _subtle },\n });\n\n global.CryptoKey = CryptoKey;\n }\n\n if ( isWebkit ) {\n _crypto.subtle = _subtle;\n\n global.Crypto = _Crypto;\n global.SubtleCrypto = _SubtleCrypto;\n global.CryptoKey = CryptoKey;\n }\n}));\n\n export default {} // section modified by isomorphic-webcrypto build \n","import './webcrypto-shim.mjs'\nexport default window.crypto\n","import {parse as parseUrl} from 'url';\n\nimport {isUri} from 'valid-url';\nimport {fromBER} from 'asn1js';\nimport {\n Certificate,\n RSAPublicKey,\n CertificateChainValidationEngine,\n CryptoEngine,\n setEngine,\n} from 'pkijs';\nimport {isArray} from 'lodash';\nimport jose from 'node-jose';\nimport crypto from 'isomorphic-webcrypto';\nimport {Buffer} from 'safe-buffer';\n\nsetEngine(\n 'newEngine',\n crypto,\n new CryptoEngine({\n name: '',\n crypto,\n subtle: crypto.subtle,\n })\n);\n\nconst VALID_KTY = 'RSA';\nconst VALID_KID_PROTOCOL = 'kms:';\n\nconst X509_COMMON_NAME_KEY = '2.5.4.3';\n\nexport const X509_SUBJECT_ALT_NAME_KEY = '2.5.29.17';\n\n/**\n * Customize Error so the SDK knows to quit retrying and notify\n * the user\n */\nexport class KMSError extends Error {\n /**\n * add kmsError field to notify\n * @param {string} message\n */\n constructor(message) {\n super(message);\n this.kmsError = true;\n }\n}\n\nconst throwError = (err) => {\n throw new KMSError(`INVALID KMS: ${err}`);\n};\n\n/**\n * Converts the PEM string to a pkijs certificate object\n * @param {string} pem PEM representation of a certificate\n * @returns {Certificate} pkijs object of the certificate\n */\nconst decodeCert = (pem) => {\n if (typeof pem !== 'string') {\n throwError('certificate needs to be a string');\n }\n\n const der = Buffer.from(pem, 'base64');\n const ber = new Uint8Array(der).buffer;\n\n const asn1 = fromBER(ber);\n\n return new Certificate({schema: asn1.result});\n};\n\n/**\n * Validate the 'kty' property of the KMS credentials\n * @param {Object} JWT KMS credentials\n * @param {string} JWT.kty type of certificate\n * @throws {KMSError} if kty is not a valid type\n * @returns {void}\n */\nconst validateKtyHeader = ({kty}) => {\n if (kty !== VALID_KTY) {\n throwError(`'kty' header must be '${VALID_KTY}'`);\n }\n};\n\nconst validateKidHeader = ({kid}) => {\n if (!isUri(kid)) {\n throwError(\"'kid' is not a valid URI\");\n }\n\n if (parseUrl(kid).protocol !== VALID_KID_PROTOCOL) {\n throwError(`'kid' protocol must be '${VALID_KID_PROTOCOL}'`);\n }\n};\n\n/**\n * Checks the first certificate matches the 'kid' in the JWT.\n * It first checks the Subject Alternative Name then it checks\n * the Common Name\n * @param {Certificate} certificate represents the KMS\n * @param {Object} JWT KMS credentials\n * @param {string} JWT.kid the uri of the KMS\n * @throws {KMSError} if unable to validate certificate against KMS credentials\n * @returns {void}\n */\nexport const validateCommonName = ([certificate], {kid}) => {\n const kidHostname = parseUrl(kid).hostname;\n let validationSuccessful = false;\n\n if (certificate.extensions) {\n // Subject Alt Names are in here\n for (const extension of certificate.extensions) {\n if (extension.extnID === X509_SUBJECT_ALT_NAME_KEY) {\n const {altNames} = extension.parsedValue;\n\n for (const entry of altNames) {\n const san = entry.value.toLowerCase();\n\n validationSuccessful = san === kidHostname;\n if (validationSuccessful) {\n break;\n }\n }\n\n if (validationSuccessful) {\n break;\n }\n }\n }\n }\n\n if (!validationSuccessful) {\n // Didn't match kid in the Subject Alt Names, checking the Common Name\n const subjectAttributes = certificate.subject.typesAndValues;\n\n for (const attribute of subjectAttributes) {\n if (attribute.type === X509_COMMON_NAME_KEY) {\n const commonName = attribute.value.valueBlock.value;\n\n validationSuccessful = commonName === kidHostname;\n if (validationSuccessful) {\n break;\n }\n }\n }\n }\n\n if (!validationSuccessful) {\n throwError(\"hostname of the 1st certificate does not match 'kid'\");\n }\n};\n\n/**\n * Validate the first KMS certificate against the information\n * provided in the JWT\n * @param {Certificate} certificate first certificate the identifies the KMS\n * @param {Object} JWT credentials of the KMS\n * @param {string} JWT.e Public exponent of the first certificate\n * @param {string} KWT.n Modulus of the first certificate\n * @throws {KMSError} if e or n doesn't match the first certificate\n * @returns {void}\n */\nconst validatePublicCertificate = ([certificate], {e: publicExponent, n: modulus}) => {\n const {encode} = jose.util.base64url;\n\n const publicKey = certificate.subjectPublicKeyInfo.subjectPublicKey;\n const asn1PublicCert = fromBER(publicKey.valueBlock.valueHex);\n const publicCert = new RSAPublicKey({schema: asn1PublicCert.result});\n const publicExponentHex = publicCert.publicExponent.valueBlock.valueHex;\n const modulusHex = publicCert.modulus.valueBlock.valueHex;\n\n if (publicExponent !== encode(publicExponentHex)) {\n throwError('Public exponent is invalid');\n }\n if (modulus !== encode(modulusHex)) {\n throwError('Modulus is invalid');\n }\n};\n\n/**\n * Validates the list of certificates against the CAs provided\n * @param {certificate[]} certificates list of certificates provided\n * by the KMS to certify itself\n * @param {string[]} [caroots=[]] list of Certificate Authorities used to\n * validate the KMS's certificates\n * @returns {Promise} rejects if unable to validate the certificates\n */\nconst validateCertificatesSignature = (certificates, caroots = []) => {\n const certificateEngine = new CertificateChainValidationEngine({\n trustedCerts: caroots.map(decodeCert),\n certs: certificates,\n });\n\n return certificateEngine.verify().then(({result, resultCode, resultMessage}) => {\n if (!result) {\n throwError(`Certificate Validation failed [${resultCode}]: ${resultMessage}`);\n }\n });\n};\n\n/**\n * Validates the information provided by the KMS. This is a curried function.\n * The first function takes the caroots param and returns a second function.\n * The second function takes the credentials of the KMS and validates it\n * @param {string[]} caroots PEM encoded certificates that will be used\n * as Certificate Authorities\n * @param {Object} jwt Object containing the fields necessary to\n * validate the KMS\n * @returns {Promise} when resolved will return the jwt\n */\nconst validateKMS =\n (caroots) =>\n (jwt = {}) =>\n Promise.resolve().then(() => {\n validateKtyHeader(jwt);\n validateKidHeader(jwt);\n\n if (!(isArray(jwt.x5c) && jwt.x5c.length > 0)) {\n throwError('JWK does not contain a list of certificates');\n }\n const certificates = jwt.x5c.map(decodeCert);\n\n validateCommonName(certificates, jwt);\n validatePublicCertificate(certificates, jwt);\n\n // Skip validating signatures if no CA roots were provided\n const promise = caroots\n ? validateCertificatesSignature(certificates, caroots)\n : Promise.resolve();\n\n return promise.then(() => jwt);\n });\n\nexport default validateKMS;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\nimport util from 'util';\n\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {oneFlight} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {Context, Request, Response} from 'node-kms';\nimport jose from 'node-jose';\nimport {omit} from 'lodash';\nimport uuid from 'uuid';\n\nimport KMSBatcher, {TIMEOUT_SYMBOL} from './kms-batcher';\nimport validateKMS, {KMSError} from './kms-certificate-validation';\n\nconst contexts = new WeakMap();\nconst kmsDetails = new WeakMap();\nconst partialContexts = new WeakMap();\n\nconst consoleDebug = require('debug')('kms');\n\n/**\n * @class\n */\nconst KMS = WebexPlugin.extend({\n namespace: 'Encryption',\n\n children: {\n batcher: KMSBatcher,\n },\n\n /**\n * Binds a key to a resource\n * @param {Object} options\n * @param {KMSResourceObject} options.kro\n * @param {string} options.kroUri\n * @param {Key} options.key\n * @param {string} options.keyUri\n * @returns {Promise}\n */\n bindKey({kro, kroUri, key, keyUri}) {\n kroUri = kroUri || kro.uri;\n keyUri = keyUri || key.uri;\n\n this.logger.info('kms: binding key to resource');\n\n /* istanbul ignore if */\n if (!kroUri) {\n return Promise.reject(new Error('`kro` or `kroUri` is required'));\n }\n\n /* istanbul ignore if */\n if (!keyUri) {\n return Promise.reject(new Error('`key` or `keyUri` is required'));\n }\n\n return this.request({\n method: 'update',\n resourceUri: kroUri,\n uri: keyUri,\n }).then((res) => {\n this.logger.info('kms: bound key to resource');\n\n return res.key;\n });\n },\n\n /**\n * Creates a new KMS Resource\n * @param {Object} options\n * @param {Array} options.userIds\n * @param {Array} options.keyUris\n * @param {Key} options.key\n * @param {Array} options.keys\n * @returns {Promise}\n */\n createResource({userIds, keyUris, key, keys}) {\n keyUris = keyUris || [];\n /* istanbul ignore if */\n if (keys) {\n keyUris = keys.reduce((uris, k) => {\n uris.push(k.uri);\n\n return uris;\n }, keyUris);\n }\n\n /* istanbul ignore else */\n if (key) {\n keyUris.push(key.uri);\n }\n\n /* istanbul ignore if */\n if (keyUris.length === 0) {\n return Promise.reject(new Error('Cannot create KMS Resource without at least one keyUri'));\n }\n\n this.logger.info('kms: creating resource');\n\n return this.request({\n method: 'create',\n uri: '/resources',\n userIds,\n keyUris,\n }).then((res) => {\n this.logger.info('kms: created resource');\n\n return res.resource;\n });\n },\n\n /**\n * Authorizes a user or KRO to a KRO\n * @param {Object} options\n * @param {Array} options.userIds\n * @param {Array} options.authIds interchangable with userIds\n * @param {KMSResourceObject} options.kro the target kro\n * @param {string} options.kroUri\n * @returns {Promise}\n */\n addAuthorization({userIds, authIds, kro, kroUri}) {\n userIds = userIds || [];\n kroUri = kroUri || kro.uri;\n\n if (authIds) {\n userIds = userIds.concat(authIds);\n }\n\n /* istanbul ignore if */\n if (userIds.length === 0) {\n return Promise.reject(new Error('Cannot add authorization without userIds or authIds'));\n }\n\n /* istanbul ignore if */\n if (!kroUri) {\n return Promise.reject(new Error('`kro` or `kroUri` is required'));\n }\n\n this.logger.info('kms: adding authorization to kms resource');\n\n return this.request({\n method: 'create',\n uri: '/authorizations',\n resourceUri: kroUri,\n userIds,\n }).then((res) => {\n this.logger.info('kms: added authorization');\n\n return res.authorizations;\n });\n },\n\n /**\n * Retrieve a list of users that have been authorized to the KRO\n * @param {Object} options\n * @param {KMSResourceObject} options.kro the target kro\n * @param {string} options.kroUri\n * @returns {Array}\n */\n listAuthorizations({kro, kroUri}) {\n kroUri = kroUri || kro.uri;\n /* istanbul ignore if */\n if (!kroUri) {\n return Promise.reject(new Error('`kro` or `kroUri` is required'));\n }\n\n return this.request({\n method: 'retrieve',\n uri: `${kroUri}/authorizations`,\n }).then((res) => {\n this.logger.info('kms: retrieved authorization list');\n\n return res.authorizations;\n });\n },\n\n /**\n * Deauthorizes a user or KRO from a KRO\n * @param {Object} options\n * @param {string} options.userId\n * @param {string} options.authId interchangable with userIds\n * @param {KMSResourceObject} options.kro the target kro\n * @param {string} options.kroUri\n * @returns {Promise}\n */\n removeAuthorization({authId, userId, kro, kroUri}) {\n authId = authId || userId;\n kroUri = kroUri || kro.uri;\n\n /* istanbul ignore if */\n if (!authId) {\n return Promise.reject(new Error('Cannot remove authorization without authId'));\n }\n\n /* istanbul ignore if */\n if (!kroUri) {\n return Promise.reject(new Error('`kro` or `kroUri` is required'));\n }\n\n this.logger.info('kms: removing authorization from kms resource');\n\n return this.request({\n method: 'delete',\n uri: `${kroUri}/authorizations?${querystring.stringify({authId})}`,\n }).then((res) => {\n this.logger.info('kms: removed authorization');\n\n return res.authorizations;\n });\n },\n\n /**\n * Requests `count` unbound keys from the kms\n * @param {Object} options\n * @param {Number} options.count\n * @returns {Array}\n */\n createUnboundKeys({count}) {\n this.logger.info(`kms: request ${count} unbound keys`);\n\n /* istanbul ignore if */\n if (!count) {\n return Promise.reject(new Error('`options.count` is required'));\n }\n\n return this.request({\n method: 'create',\n uri: '/keys',\n count,\n }).then((res) => {\n this.logger.info('kms: received unbound keys');\n\n return Promise.all(res.keys.map(this.asKey));\n });\n },\n\n /**\n * @typedef {Object} FetchPublicKeyResponse\n * @property {number} status 200,400(Bad Request: Request payload missing info),404(Not Found: HSM Public Key not found),501(Not Implemented: This KMS does not support BYOK),502(Bad Gateway: KMS could not communicate with HSM)\n * @property {UUID} requestId this is should be unique, used for debug.\n * @property {string} publicKey\n */\n /**\n * get public key from kms\n * @param {Object} options\n * @param {UUID} options.assignedOrgId the orgId\n * @returns {Promise.} response of get public key api\n */\n fetchPublicKey({assignedOrgId}) {\n this.logger.info('kms: fetch public key for byok');\n\n return this.request({\n method: 'retrieve',\n uri: '/publicKey',\n assignedOrgId,\n }).then((res) => {\n this.logger.info('kms: received public key');\n\n return res.publicKey;\n });\n },\n\n /**\n * @typedef {Object} UploadCmkResponse\n * @property {number} status\n * @property {UUID} requestId\n * @property {string} uri\n * @property {string} keysState\n */\n /**\n * upload master key for one org.\n * @param {Object} options\n * @param {UUID} options.assignedOrgId the orgId\n * @param {string} options.customerMasterKey the master key\n * @param {boolean} options.awsKms enable amazon aws keys\n * @returns {Promise.} response of upload CMK api\n */\n uploadCustomerMasterKey({assignedOrgId, customerMasterKey, awsKms = false}) {\n this.logger.info('kms: upload customer master key for byok');\n\n return this.request({\n method: 'create',\n uri: awsKms ? '/awsKmsCmk' : '/cmk',\n assignedOrgId,\n customerMasterKey,\n requestId: uuid.v4(),\n }).then((res) => {\n this.logger.info('kms: finish to upload customer master key');\n\n return res;\n });\n },\n\n /**\n * get all customer master keys for one org.\n * @param {Object} options\n * @param {UUID} options.assignedOrgId the orgId\n * @param {boolean} options.awsKms enable amazon aws keys\n * @returns {Promise.} response of list CMKs api\n */\n listAllCustomerMasterKey({assignedOrgId, awsKms = false}) {\n this.logger.info('kms: get all customer master keys for byok');\n\n return this.request({\n method: 'retrieve',\n uri: awsKms ? '/awsKmsCmk' : '/cmk',\n assignedOrgId,\n requestId: uuid.v4(),\n }).then((res) => {\n this.logger.info('kms: finish to get all customer master keys');\n\n return res;\n });\n },\n\n /**\n * @typedef {Object} ActivateCmkResponse\n * @property {number} status\n * @property {UUID} requestId\n * @property {Array} customerMasterKeys\n */\n /**\n *\n * @typedef {Object} CMK\n * @property {string} usageState\n * @property {UUID} assignedOrgId\n * @property {string} uri\n * @property {string} source\n * @property {Date | undefined} stateUpdatedOn\n * @property {Date | undefined} rotation\n */\n /**\n * change one customer master key state for one org.\n * delete pending key, then the keyState should be 'removedclean';\n * active pending key, then the keyState should be 'active';\n *\n * @param {Object} options\n * @param {string} options.keyId the id of one customer master key, it should be a url\n * @param {string} options.keyState one of the following: PENDING, RECOVERING,ACTIVE,REVOKED,DEACTIVATED,REENCRYPTING,RETIRED,DELETED,DISABLED,REMOVEDCLEAN,REMOVEDDIRTY;\n * @param {UUID} options.assignedOrgId the orgId\n * @returns {Promise.} response of list CMKs api\n */\n changeCustomerMasterKeyState({keyId, keyState, assignedOrgId}) {\n this.logger.info('kms: change one customer master key state for byok');\n\n return this.request({\n method: 'update',\n uri: keyId,\n keyState,\n assignedOrgId,\n requestId: uuid.v4(),\n }).then((res) => {\n this.logger.info('kms: finish to change the customer master key state to {}', keyState);\n\n return res;\n });\n },\n\n /**\n * this is for test case. it will delete all CMKs, no matter what their status is. This is mainly for test purpose\n * @param {Object} options\n * @param {UUID} options.assignedOrgId the orgId\n * @param {boolean} options.awsKms enable amazon aws keys\n * @returns {Promise.<{status, requestId}>}\n */\n deleteAllCustomerMasterKeys({assignedOrgId, awsKms = false}) {\n this.logger.info('kms: delete all customer master keys at the same time');\n\n return this.request({\n method: 'delete',\n uri: awsKms ? '/awsKmsCmk' : '/cmk',\n assignedOrgId,\n requestId: uuid.v4(),\n }).then((res) => {\n this.logger.info('kms: finish to delete all customer master keys');\n\n return res;\n });\n },\n\n /**\n * return to use global master key for one org.\n * @param {Object} options\n * @param {UUID} options.assignedOrgId the orgId\n * @returns {Promise.} response of activate CMK api\n */\n useGlobalMasterKey({assignedOrgId}) {\n this.logger.info('kms: return to use global master key');\n\n return this.request({\n method: 'update',\n uri: 'default',\n keyState: 'ACTIVE',\n assignedOrgId,\n requestId: uuid.v4(),\n }).then((res) => {\n this.logger.info('kms: finish to return to global master key');\n\n return res;\n });\n },\n\n /**\n * Fetches the specified key from the kms\n * @param {Object} options\n * @param {string} options.uri\n * @param {string} options.onBehalfOf The id of a user, upon whose behalf, the key is to be retrieved or undefined if retrieval is for the active user\n * @returns {Promise}\n */\n // Ideally, this would be done via the kms batcher, but other than request id,\n // there isn't any other userful key in a kms response to match it to a\n // request. as such, we need the batcher to group requests, but one flight to\n // make sure we don't make the same request multiple times.\n @oneFlight({\n keyFactory: ({uri, onBehalfOf}) => `${uri}/${onBehalfOf}`,\n })\n fetchKey({uri, onBehalfOf}) {\n /* istanbul ignore if */\n if (!uri) {\n return Promise.reject(new Error('`options.uri` is required'));\n }\n\n this.logger.info('kms: fetching key');\n\n return this.request(\n {\n method: 'retrieve',\n uri,\n },\n {onBehalfOf}\n ).then((res) => {\n this.logger.info('kms: fetched key');\n\n return this.asKey(res.key);\n });\n },\n\n /**\n * Pings the kms. Mostly for testing\n * @returns {Promise}\n */\n ping() {\n return this.request({\n method: 'update',\n uri: '/ping',\n });\n },\n\n /**\n * Ensures a key obect is Key instance\n * @param {Object} key\n * @returns {Promise}\n */\n asKey(key) {\n return jose.JWK.asKey(key.jwk).then((jwk) => {\n key.jwk = jwk;\n\n return key;\n });\n },\n\n /**\n * Adds appropriate metadata to the KMS request\n * @param {Object} payload\n * @param {Object} onBehalfOf Optional parameter to prepare the request on behalf of another user\n * @returns {Promise}\n */\n prepareRequest(payload, onBehalfOf) {\n const isECDHRequest = payload.method === 'create' && payload.uri.includes('/ecdhe');\n\n return Promise.resolve(isECDHRequest ? partialContexts.get(this) : this._getContext()).then(\n (context) => {\n this.logger.info(`kms: wrapping ${isECDHRequest ? 'ephemeral key' : 'kms'} request`);\n const req = new Request(payload);\n let requestContext = context;\n\n if (onBehalfOf) {\n requestContext = this._contextOnBehalfOf(context, onBehalfOf);\n }\n\n return req.wrap(requestContext, {serverKey: isECDHRequest}).then(() => {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n this.logger.info(\n 'kms: request payload',\n util.inspect(omit(JSON.parse(JSON.stringify(req)), 'wrapped'), {depth: null})\n );\n }\n\n return req;\n });\n }\n );\n },\n\n /**\n * Accepts a kms message event, decrypts it, and passes it to the batcher\n * @param {Object} event\n * @returns {Promise}\n */\n processKmsMessageEvent(event) {\n this.logger.info('kms: received kms message');\n\n return Promise.all(\n event.encryption.kmsMessages.map((kmsMessage, index) =>\n this._isECDHEMessage(kmsMessage).then((isECDHMessage) => {\n this.logger.info(`kms: received ${isECDHMessage ? 'ecdhe' : 'normal'} message`);\n const res = new Response(kmsMessage);\n\n return (\n Promise.resolve(isECDHMessage ? partialContexts.get(this) : contexts.get(this))\n // eslint-disable-next-line max-nested-callbacks\n .then((context) => res.unwrap(context))\n // eslint-disable-next-line max-nested-callbacks\n .then(() => {\n if (process.env.NODE_ENV !== 'production') {\n this.logger.info(\n 'kms: response payload',\n util.inspect(omit(JSON.parse(JSON.stringify(res)), 'wrapped'), {depth: null})\n );\n }\n })\n // eslint-disable-next-line max-nested-callbacks\n .then(() => {\n event.encryption.kmsMessages[index] = res;\n })\n // eslint-disable-next-line max-nested-callbacks\n .then(() => res)\n );\n })\n )\n )\n .then(() => this.batcher.processKmsMessageEvent(event))\n .catch((reason) => {\n this.logger.error('kms: decrypt failed', reason.stack);\n\n return Promise.reject(reason);\n })\n .then(() => event);\n },\n\n /**\n * Decrypts a kms message\n * @param {Object} kmsMessage\n * @returns {Promise}\n */\n decryptKmsMessage(kmsMessage) {\n const res = new Response(kmsMessage);\n\n return contexts\n .get(this)\n .then((context) => res.unwrap(context))\n .then(() => res.body);\n },\n\n /**\n * Determines if the kms message is an ecdhe message or a normal message\n * @param {Object} kmsMessage\n * @returns {Promise}\n */\n _isECDHEMessage(kmsMessage) {\n return this._getKMSStaticPubKey().then((kmsStaticPubKey) => {\n const fields = kmsMessage.split('.');\n\n if (fields.length !== 3) {\n return false;\n }\n\n const header = JSON.parse(jose.util.base64url.decode(fields[0]));\n\n return header.kid === kmsStaticPubKey.kid;\n });\n },\n\n /**\n * Sends a request to the kms\n * @param {Object} payload\n * @param {Object} options\n * @param {Number} options.timeout (internal)\n * @param {string} options.onBehalfOf Run the request on behalf of another user (UUID), used in compliance scenarios\n * @returns {Promise}\n */\n request(payload, {timeout, onBehalfOf} = {}) {\n timeout = timeout || this.config.kmsInitialTimeout;\n\n // Note: this should only happen when we're using the async kms batcher;\n // once we implement the sync batcher, this'll need to be smarter.\n return (\n this.webex.internal.mercury\n .connect()\n .then(() => this.prepareRequest(payload, onBehalfOf))\n .then((req) => {\n req[TIMEOUT_SYMBOL] = timeout;\n\n return this.batcher.request(req);\n })\n // High complexity is due to attempt at test mode resiliency\n // eslint-disable-next-line complexity\n .catch((reason) => {\n if (\n process.env.NODE_ENV === 'test' &&\n (reason.status === 403 || reason.statusCode === 403) &&\n reason.message.match(\n /Failed to resolve authorization token in KmsMessage request for user/\n )\n ) {\n this.logger.warn('kms: rerequested key due to test-mode kms auth failure');\n\n return this.request(payload, {onBehalfOf});\n }\n\n // KMS Error. Notify the user\n if (reason instanceof KMSError) {\n this.webex.trigger('client:InvalidRequestError');\n\n return Promise.reject(reason);\n }\n\n // Ideally, most or all of the code below would go in kms-batcher, but\n // but batching needs at least one more round of refactoring for that to\n // work.\n if (!reason.statusCode && !reason.status) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n /* istanbul ignore next: reason.stack vs stack difficult to control in test */\n this.logger.info('kms: request error', reason.stack || reason);\n }\n\n consoleDebug(`timeout ${timeout}`);\n timeout *= 2;\n\n if (timeout >= this.config.ecdhMaxTimeout) {\n this.logger.info('kms: exceeded maximum KMS request retries');\n\n return Promise.reject(reason);\n }\n\n // Peek ahead to make sure we don't reset the timeout if the next timeout\n // will exceed the maximum timeout for renegotiating ECDH keys.\n const nextTimeout = timeout * 2;\n\n if (timeout >= this.config.kmsMaxTimeout && nextTimeout < this.config.ecdhMaxTimeout) {\n this.logger.info(\n 'kms: exceeded maximum KMS request retries; negotiating new ecdh key'\n );\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n this.logger.info('kms: timeout/maxtimeout', timeout, this.config.kmsMaxTimeout);\n }\n\n contexts.delete(this);\n timeout = 0;\n }\n\n return this.request(payload, {timeout, onBehalfOf});\n }\n\n return Promise.reject(reason);\n })\n );\n },\n\n /**\n * @private\n * @returns {Promise}\n */\n _getAuthorization() {\n return this.webex.credentials.getUserToken('spark:kms').then((token) => token.access_token);\n },\n\n @oneFlight\n /**\n * @private\n * @param {String} onBehalfOf create context on behalf of another user, undefined when this is not necessary\n * @returns {Promise}\n */\n _getContext() {\n let promise = contexts.get(this);\n\n if (!promise) {\n promise = this._prepareContext();\n contexts.set(this, promise);\n promise.then((context) => {\n const expiresIn = context.ephemeralKey.expirationDate - Date.now() - 30000;\n\n safeSetTimeout(() => contexts.delete(this), expiresIn);\n });\n }\n\n return Promise.all([promise, this._getAuthorization()]).then(([context, authorization]) => {\n context.clientInfo.credential.bearer = authorization;\n\n return context;\n });\n },\n\n /**\n * @private\n * @returns {Promise}\n */\n _getKMSCluster() {\n this.logger.info('kms: retrieving KMS cluster');\n\n return this._getKMSDetails().then(({kmsCluster}) => kmsCluster);\n },\n\n /**\n * @private\n * @returns {Promise}\n */\n _getKMSDetails() {\n let details = kmsDetails.get(this);\n\n if (!details) {\n this.logger.info('kms: fetching KMS details');\n details = this.webex\n .request({\n service: 'encryption',\n resource: `/kms/${this.webex.internal.device.userId}`,\n })\n .then((res) => {\n this.logger.info('kms: fetched KMS details');\n const {body} = res;\n\n body.rsaPublicKey = JSON.parse(body.rsaPublicKey);\n\n return body;\n })\n .catch((reason) => {\n this.logger.error('kms: failed to fetch KMS details', reason);\n\n return Promise.reject(reason);\n });\n\n kmsDetails.set(this, details);\n }\n\n return details;\n },\n\n /**\n * @private\n * @returns {Promise}\n */\n _getKMSStaticPubKey() {\n this.logger.info('kms: retrieving KMS static public key');\n\n return this._getKMSDetails().then(({rsaPublicKey}) => rsaPublicKey);\n },\n\n /**\n * @private\n * @returns {Promise}\n */\n _prepareContext() {\n this.logger.info('kms: creating context');\n const context = new Context();\n\n return Promise.all([\n this._getKMSStaticPubKey().then(validateKMS(this.config.caroots)),\n this._getAuthorization(),\n ])\n .then(([kmsStaticPubKey, authorization]) => {\n context.clientInfo = {\n clientId: this.webex.internal.device.url,\n credential: {\n userId: this.webex.internal.device.userId,\n bearer: authorization,\n },\n };\n\n context.serverInfo = {\n key: kmsStaticPubKey,\n };\n\n this.logger.info('kms: creating local ephemeral key');\n\n return context.createECDHKey();\n })\n .then((localECDHKey) => {\n context.ephemeralKey = localECDHKey;\n partialContexts.set(this, context);\n\n return Promise.all([localECDHKey.asKey(), this._getKMSCluster()]);\n })\n .then(([localECDHKey, cluster]) => {\n this.logger.info('kms: submitting ephemeral key request');\n\n return this.request({\n uri: `${cluster}/ecdhe`,\n method: 'create',\n jwk: localECDHKey.toJSON(),\n });\n })\n .then((res) => {\n this.logger.info('kms: deriving final ephemeral key');\n\n return context.deriveEphemeralKey(res.key);\n })\n .then((key) => {\n context.ephemeralKey = key;\n partialContexts.delete(this);\n this.logger.info('kms: derived final ephemeral key');\n\n return context;\n })\n .catch((reason) => {\n this.logger.error('kms: failed to negotiate ephemeral key', reason);\n\n return Promise.reject(reason);\n });\n },\n\n /**\n * KMS 'retrieve' requests can be made on behalf of another user. This is useful\n * for scenarios such as eDiscovery. i.e. Where an authorized compliance officer is\n * entitled to retrieve content generated by any organisational user.\n * As the KMSContext is cached, updating it will affect separate requests. Hence when\n * making a request onBehalfOf another user create a new context for just this request.\n * However this context will be 'light' as it only needs to change one field.\n * @param {Object} originalContext - The base context to 'copy'\n * @param {String} onBehalfOf - The user specified in the new context\n * @returns {Context} A 'copy' of the existing context with a new user specified\n * @private\n */\n _contextOnBehalfOf(originalContext, onBehalfOf) {\n const context = new Context();\n\n context.clientInfo = context.clientInfo = {\n clientId: originalContext.clientInfo.clientId,\n credential: {\n userId: onBehalfOf,\n onBehalfOf, // Supports running onBehalfOf self. i.e. A CO which calls onBehalfOf with CO.id.\n bearer: originalContext.clientInfo.credential.bearer,\n },\n };\n context.serverInfo = originalContext.serverInfo;\n context.ephemeralKey = originalContext.ephemeralKey;\n\n return context;\n },\n});\n\nexport default KMS;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {proxyEvents, tap, transferEvents} from '@webex/common';\nimport jose from 'node-jose';\nimport SCR from 'node-scr';\n\nimport ensureBuffer from './ensure-buffer';\nimport KMS from './kms';\n\nconst Encryption = WebexPlugin.extend({\n children: {\n kms: KMS,\n },\n\n namespace: 'Encryption',\n\n processKmsMessageEvent(event) {\n return this.kms.processKmsMessageEvent(event);\n },\n\n decryptBinary(scr, buffer) {\n return ensureBuffer(buffer).then((b) => {\n /* istanbul ignore if */\n if (buffer.length === 0 || buffer.byteLength === 0) {\n return Promise.reject(new Error('Attempted to decrypt zero-length buffer'));\n }\n\n return scr.decrypt(b);\n });\n },\n\n /**\n * Decrypt a SCR (Secure Content Resource) using the supplied key uri.\n *\n * @param {string} key - The uri of a key stored in KMS\n * @param {Object} cipherScr - An encrypted SCR\n * @param {Object} options\n * @param {string} options.onBehalfOf - Fetch the KMS key on behalf of another user (using the user's UUID), active user requires the 'spark.kms_orgagent' role\n * @returns {Object} Decrypted SCR\n */\n decryptScr(key, cipherScr, options) {\n return this.getKey(key, options).then((k) => SCR.fromJWE(k.jwk, cipherScr));\n },\n\n /**\n * Decrypt text using the supplied key uri.\n *\n * @param {string} key - The uri of a key stored in KMS\n * @param {string} ciphertext - Encrypted text\n * @param {Object} options\n * @param {string} options.onBehalfOf - Fetch the KMS key on behalf of another user (using the user's UUID), active user requires the 'spark.kms_orgagent' role\n * @returns {string} Decrypted plaintext\n */\n decryptText(key, ciphertext, options) {\n return this.getKey(key, options).then((k) =>\n jose.JWE.createDecrypt(k.jwk)\n .decrypt(ciphertext)\n .then((result) => result.plaintext.toString())\n );\n },\n\n /**\n * Validate and initiate a Download request for requested file\n * @param {Object} fileUrl - Plaintext\n * @param {Object} scr - Plaintext\n * @param {Object} options - optional parameters to download a file\n * @returns {promise}\n */\n download(fileUrl, scr, options) {\n /* istanbul ignore if */\n if (!fileUrl || !scr) {\n return Promise.reject(new Error('`scr` and `fileUrl` are required'));\n }\n\n const shunt = new EventEmitter();\n const promise = this._fetchDownloadUrl(fileUrl, options)\n .then((uri) => {\n // eslint-disable-next-line no-shadow\n const options = {\n method: 'GET',\n uri,\n responseType: 'buffer',\n };\n\n const ret = this.request(options);\n\n transferEvents('progress', options.download, shunt);\n\n return ret;\n })\n .then((res) => this.decryptBinary(scr, res.body));\n\n proxyEvents(shunt, promise);\n\n return promise;\n },\n\n /**\n * Fetch Download URL for the requested file\n * @param {Object} fileUrl - Plaintext\n * @param {Object} options - optional parameters to download a file\n * @returns {promise} url of the downloadable file\n */\n _fetchDownloadUrl(fileUrl, options) {\n this.logger.info('encryption: retrieving download url for encrypted file');\n\n if (process.env.NODE_ENV !== 'production' && fileUrl.includes('localhost')) {\n this.logger.info(\n 'encryption: bypassing webex files because this looks to be a test file on localhost'\n );\n\n return Promise.resolve(fileUrl);\n }\n\n const inputBody = {\n endpoints: [fileUrl],\n };\n const endpointUrl = url.parse(fileUrl);\n\n // hardcode the url to use 'https' and the file service '/v1/download/endpoints' api\n endpointUrl.protocol = 'https';\n endpointUrl.pathname = '/v1/download/endpoints';\n\n return this.request({\n method: 'POST',\n uri: url.format(endpointUrl),\n body: options\n ? {\n ...inputBody,\n allow: options.params.allow,\n }\n : inputBody,\n })\n .then((res) => {\n // eslint-disable-next-line no-shadow\n const url = res.body.endpoints[fileUrl];\n\n if (!url) {\n this.logger.warn(\n 'encryption: could not determine download url for `fileUrl`; attempting to download `fileUrl` directly'\n );\n\n return fileUrl;\n }\n this.logger.info('encryption: retrieved download url for encrypted file');\n\n return url;\n })\n .catch((err) => {\n this.logger.warn(\n `encryption: ${err} could not determine download url for ${fileUrl}; attempting to download ${fileUrl} directly`\n );\n\n return fileUrl;\n });\n },\n\n encryptBinary(file) {\n return ensureBuffer(file).then((buffer) =>\n SCR.create().then((scr) =>\n scr\n .encrypt(buffer)\n .then(ensureBuffer)\n // eslint-disable-next-line max-nested-callbacks\n .then((cdata) => ({scr, cdata}))\n )\n );\n },\n\n /**\n * Encrypt a SCR (Secure Content Resource) using the supplied key uri.\n *\n * @param {string} key - The uri of a key stored in KMS\n * @param {Object} scr - Plaintext\n * @param {Object} options\n * @param {string} options.onBehalfOf - Fetch the KMS key on behalf of another user (using the user's UUID), active user requires the 'spark.kms_orgagent' role\n * @returns {string} Encrypted SCR\n */\n encryptScr(key, scr, options) {\n /* istanbul ignore if */\n if (!scr.loc) {\n return Promise.reject(new Error('Cannot encrypt `scr` without first setting `loc`'));\n }\n\n return this.getKey(key, options).then((k) => scr.toJWE(k.jwk));\n },\n\n /**\n * Encrypt plaintext using the supplied key uri.\n *\n * @param {string} key - The uri of a key stored in KMS\n * @param {string} plaintext\n * @param {Object} options\n * @param {string} options.onBehalfOf - Fetch the KMS key on behalf of another user (using the user's UUID), active user requires the 'spark.kms_orgagent' role\n * @returns {string} Encrypted text\n */\n encryptText(key, plaintext, options) {\n return this.getKey(key, options).then((k) =>\n jose.JWE.createEncrypt(this.config.joseOptions, {\n key: k.jwk,\n header: {\n alg: 'dir',\n },\n reference: null,\n }).final(plaintext, 'utf8')\n );\n },\n\n /**\n * Fetch the key associated with the supplied KMS uri.\n *\n * @param {string} uri - The uri of a key stored in KMS\n * @param {Object} options\n * @param {string} options.onBehalfOf - Fetch the KMS key on behalf of another user (using the user's UUID), active user requires the 'spark.kms_orgagent' role\n * @returns {string} Key\n */\n getKey(uri, {onBehalfOf} = {}) {\n if (uri.jwk) {\n return this.kms.asKey(uri);\n }\n\n let storageKey = uri;\n\n if (onBehalfOf) {\n storageKey += `/onBehalfOf/${onBehalfOf}`;\n }\n\n return this.unboundedStorage\n .get(storageKey)\n .then((keyString) => JSON.parse(keyString))\n .then((keyObject) => this.kms.asKey(keyObject))\n .catch(() =>\n this.kms\n .fetchKey({uri, onBehalfOf})\n .then(tap((key) => this.unboundedStorage.put(storageKey, JSON.stringify(key, replacer))))\n );\n },\n});\n\n/**\n * JSON.stringify replacer that ensures private key data is serialized.\n * @param {string} k\n * @param {mixed} v\n * @returns {mixed}\n */\nfunction replacer(k, v) {\n if (k === 'jwk') {\n // note: this[k] and v may be different representations of the same value\n // eslint-disable-next-line no-invalid-this\n const json = this[k].toJSON(true);\n\n return json;\n }\n\n return v;\n}\n\nexport default Encryption;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Note: There's a bug where if bind gets replayed because of a timeout in which\n// the original request eventually completed, there'll be an error indicating\n// the key can't be bound (because it already has been). This could be mitigated\n// by using Promise.race to resolve replays (as more requests get enqueue for a\n// specific action, accept whichever one completes first).\n\nimport '@webex/internal-plugin-device';\n\nimport '@webex/internal-plugin-mercury';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has, isObject, isString} from 'lodash';\n\nimport Encryption from './encryption';\nimport config from './config';\nimport {DryError} from './kms-errors';\n\nimport KmsDryErrorInterceptor from './kms-dry-error-interceptor';\n\nlet interceptors;\n\nif (process.env.NODE_ENV === 'test') {\n interceptors = {\n KmsDryErrorInterceptor: KmsDryErrorInterceptor.create,\n };\n}\n\nregisterInternalPlugin('encryption', Encryption, {\n payloadTransformer: {\n predicates: [\n {\n name: 'encryptKmsMessage',\n direction: 'outbound',\n // I don't see any practical way to reduce complexity here.\n // eslint-disable-next-line complexity\n test(ctx, options) {\n if (!has(options, 'body.kmsMessage')) {\n return Promise.resolve(false);\n }\n\n if (!isObject(options.body.kmsMessage)) {\n return Promise.resolve(false);\n }\n\n // If this is a template for a kms message, assume another transform\n // will fill it in later. This is a bit of a leaky abstraction, but the\n // alternative is building a complex rules engine for controlling\n // ordering of transforms\n if (options.body.kmsMessage.keyUris && options.body.kmsMessage.keyUris.length === 0) {\n return Promise.resolve(false);\n }\n if (\n options.body.kmsMessage.resourceUri &&\n (options.body.kmsMessage.resourceUri.includes('') ||\n options.body.kmsMessage.resourceUri.includes(''))\n ) {\n return Promise.resolve(false);\n }\n if (\n options.body.kmsMessage.uri &&\n (options.body.kmsMessage.uri.includes('') ||\n options.body.kmsMessage.uri.includes(''))\n ) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body);\n },\n },\n {\n name: 'decryptKmsMessage',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.kmsMessage') && isString(response.body.kmsMessage)\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'decryptErrorResponse',\n direction: 'inbound',\n test(ctx, reason) {\n return Promise.resolve(Boolean(reason.body && reason.body.errorCode === 1900000));\n },\n extract(reason) {\n return Promise.resolve(reason);\n },\n },\n ],\n transforms: [\n {\n name: 'encryptKmsMessage',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.kmsMessage) {\n return Promise.resolve();\n }\n\n if (isString(object.kmsMessage)) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption.kms.prepareRequest(object.kmsMessage).then((req) => {\n object.kmsMessage = req.wrapped;\n });\n },\n },\n {\n name: 'decryptKmsMessage',\n fn(ctx, object) {\n return ctx.webex.internal.encryption.kms\n .decryptKmsMessage(object.kmsMessage)\n .then((kmsMessage) => {\n object.kmsMessage = kmsMessage;\n });\n },\n },\n {\n name: 'decryptErrorResponse',\n fn(ctx, reason) {\n const promises = reason.body.errors.map((error) =>\n ctx.webex.internal.encryption.kms.decryptKmsMessage(error.description).then((desc) => {\n error.description = desc;\n })\n );\n\n promises.push(\n ctx.webex.internal.encryption.kms\n .decryptKmsMessage(reason.body.message)\n .then((kmsMessage) => {\n reason.body.message = kmsMessage;\n })\n );\n\n return Promise.all(promises).then(() => Promise.reject(new DryError(reason)));\n },\n },\n ],\n },\n interceptors,\n config,\n});\n\nexport {default} from './encryption';\nexport {default as KMS} from './kms';\nexport {KmsError, DryError} from './kms-errors';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n encryption: {\n joseOptions: {\n compact: true,\n contentAlg: 'A256GCM',\n protect: '*',\n },\n\n /**\n * Initial timeout before contacting KMS with a new request\n * @type {Number}\n */\n kmsInitialTimeout: 6000,\n\n /**\n * Maximum timeout before negotiating a new ECDH key\n * and contacting KMS with a new request\n * @type {Number}\n */\n kmsMaxTimeout: 32000,\n\n /**\n * Maximum timeout after negotiating several ECDH keys\n * @type {Number}\n */\n ecdhMaxTimeout: 32000 * 3,\n\n /**\n * Debounce wait before sending a kms request\n * @type {Number}\n */\n batcherWait: 50,\n\n /**\n * Maximum queue size before sending a kms request\n * @type {Number}\n */\n batcherMaxCalls: 50,\n\n /**\n * Debounce max wait before sending a kms metric\n * @type {Number}\n */\n batcherMaxWait: 150,\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport {partition} from 'lodash';\nimport * as WebexCore from '@webex/webex-core';\n\nconst Feature = WebexCore.WebexPlugin.extend({\n namespace: 'Feature',\n\n /**\n * Returns the value of the requested feature toggle.\n * @param {string} keyType \n * @param {string} key\n * @param {Object} options\n * @param {boolean} options.full to get full feature record including metadata.\n * @returns {string|boolean|number|FeatureModel|null}\n */\n getFeature(keyType, key, options) {\n if (keyType !== 'developer' && keyType !== 'user' && keyType !== 'entitlement') {\n return Promise.reject(\n new Error(\n 'Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted.'\n )\n );\n }\n\n options = options || {};\n\n const feature = this.webex.internal.device.features[keyType].get(key);\n\n if (!feature) {\n return Promise.resolve(null);\n }\n\n if (options.full) {\n return Promise.resolve(feature.serialize());\n }\n\n return Promise.resolve(feature.value);\n },\n\n /**\n * Handles a feature toggle update from the server.\n * When one of these legacy feature gets updated, this event handler be triggered\n * * group-message-notifications\n * * mention-notifications\n * * thread-notifications,\n * This handler is being listened from mercury connection success method for the event \"event:featureToggle_update\"\n * @param {Object} feature\n * @returns {undefined}\n */\n updateFeature(feature) {\n if (feature) {\n const keyType = feature.type.toLowerCase();\n\n if (keyType === 'user' || keyType === 'developer') {\n this.webex.internal.device.features[keyType].add([feature], {merge: true});\n }\n }\n },\n\n /**\n * Issues request to server to set a value for a feature toggle.\n * @param {string} keyType \n * @param {string} key\n * @param {string} value\n * @returns {Promise} Refreshes the local device and resolves with the features endpoint's response.\n */\n setFeature(keyType, key, value) {\n // Limit only to developer feature toggles for now.\n if (keyType !== 'developer' && keyType !== 'user') {\n return Promise.reject(new Error('Only `developer` and `user` feature toggles can be set.'));\n }\n\n return this.request({\n method: 'POST',\n api: 'feature',\n resource: `features/users/${this.webex.internal.device.userId}/${keyType}`,\n body: {\n key,\n mutable: true,\n val: value,\n },\n }).then((res) => this.webex.internal.device.features[keyType].add(res.body, {merge: true}));\n },\n\n /**\n * Issues request to server to set a value for a feature toggle.\n * @param {array} featureList - in the form of `Array<{ type: 'USER' | 'DEV', key: string, val: any }>`\n * @returns {Promise} Refreshes the local device and resolves with the features endpoint`s response.\n */\n setBundledFeatures(featureList) {\n featureList.forEach((item) => {\n item.mutable = item.mutable || 'true';\n if (item.type !== 'USER' && item.type !== 'DEV') {\n item.type = 'USER';\n }\n });\n\n return this.request({\n method: 'POST',\n api: 'feature',\n resource: `features/users/${this.webex.internal.device.userId}/toggles`,\n body: featureList,\n }).then((res) => {\n const partitionedToggles = partition(res.body.featureToggles, {type: 'USER'});\n\n this.webex.internal.device.features.user.add(partitionedToggles[0], {merge: true});\n this.webex.internal.device.features.developer.add(partitionedToggles[1], {merge: true});\n });\n },\n\n initialize(...args) {\n Reflect.apply(WebexCore.WebexPlugin.prototype.initialize, this, args);\n\n this.listenToAndRun(\n this.webex,\n 'change:internal.device.features.developer',\n this.trigger.bind(this, 'change:developer')\n );\n this.listenToAndRun(\n this.webex,\n 'change:internal.device.features.entitlement',\n this.trigger.bind(this, 'change:entitlement')\n );\n this.listenToAndRun(\n this.webex,\n 'change:internal.device.features.user',\n this.trigger.bind(this, 'change:user')\n );\n },\n});\n\nexport default Feature;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Feature from './feature';\nimport config from './config';\n\nregisterInternalPlugin('feature', Feature, {\n config,\n});\n\nexport {default} from './feature';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n feature: {},\n};\n","/* eslint-disable consistent-return */\n\nimport Mercury from '@webex/internal-plugin-mercury';\n\nimport {LLM} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {ILLMChannel} from './llm.types';\n\nexport const config = {\n llm: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n\n/**\n * LLMChannel to provide socket connections\n */\nexport default class LLMChannel extends (Mercury as any) implements ILLMChannel {\n namespace = LLM;\n\n /**\n * If the LLM plugin has been registered and listening\n * @instance\n * @type {Boolean}\n * @public\n */\n\n private webSocketUrl?: string;\n\n private binding?: string;\n\n private locusUrl?: string;\n\n private datachannelUrl?: string;\n\n /**\n * Register to the websocket\n * @param {string} llmSocketUrl\n * @returns {Promise}\n */\n private register = (llmSocketUrl: string): Promise =>\n this.request({\n method: 'POST',\n url: llmSocketUrl,\n body: {deviceUrl: this.webex.internal.device.url},\n })\n .then((res: {body: {webSocketUrl: string; binding: string}}) => {\n this.webSocketUrl = res.body.webSocketUrl;\n this.binding = res.body.binding;\n })\n .catch((error: any) => {\n this.logger.error(`Error connecting to websocket: ${error}`);\n throw error;\n });\n\n /**\n * Register and connect to the websocket\n * @param {string} locusUrl\n * @param {string} datachannelUrl\n * @returns {Promise}\n */\n public registerAndConnect = (locusUrl: string, datachannelUrl: string): Promise =>\n this.register(datachannelUrl).then(() => {\n if (!locusUrl || !datachannelUrl) return undefined;\n this.locusUrl = locusUrl;\n this.datachannelUrl = datachannelUrl;\n this.connect(this.webSocketUrl);\n });\n\n /**\n * Tells if LLM socket is connected\n * @returns {boolean} connected\n */\n public isConnected = (): boolean => this.connected;\n\n /**\n * Tells if LLM socket is binding\n * @returns {string} binding\n */\n public getBinding = (): string => this.binding;\n\n /**\n * Get Locus URL for the connection\n * @returns {string} locus Url\n */\n public getLocusUrl = (): string => this.locusUrl;\n\n /**\n * Get data channel URL for the connection\n * @returns {string} data channel Url\n */\n public getDatachannelUrl = (): string => this.datachannelUrl;\n\n /**\n * Disconnects websocket connection\n * @returns {Promise}\n */\n public disconnectLLM = (): Promise =>\n this.disconnect().then(() => {\n this.locusUrl = undefined;\n this.datachannelUrl = undefined;\n this.binding = undefined;\n this.webSocketUrl = undefined;\n });\n}\n","// eslint-disable-next-line import/prefer-default-export\nexport const LLM = 'llm';\n","import * as WebexCore from '@webex/webex-core';\nimport LLMChannel, {config} from './llm';\n\nWebexCore.registerInternalPlugin('llm', LLMChannel, {\n config,\n});\n\nexport {default} from './llm';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Exception thrown when a websocket gets closed\n */\nexport class ConnectionError extends Exception {\n static defaultMessage = 'Failed to connect to socket';\n\n /**\n * @param {CloseEvent} event\n * @returns {string}\n */\n parse(event = {}) {\n Object.defineProperties(this, {\n code: {\n value: event.code,\n },\n reason: {\n value: event.reason,\n },\n });\n\n return event.reason;\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class UnknownResponse extends ConnectionError {\n static defaultMessage =\n 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class BadRequest extends ConnectionError {\n static defaultMessage =\n 'BadRequest usually implies an attempt to use service account credentials';\n}\n\n/**\n * thrown for CloseCode 4401\n */\nexport class NotAuthorized extends ConnectionError {\n static defaultMessage = 'Please refresh your access token';\n}\n\n/**\n * thrown for CloseCode 4403\n */\nexport class Forbidden extends ConnectionError {\n static defaultMessage = 'Forbidden usually implies these credentials are not entitled for Webex';\n}\n\n// /**\n// * thrown for CloseCode 4404\n// */\n// export class NotFound extends ConnectionError {\n// static defaultMessage = `Please refresh your Mercury registration (typically via a WDM refresh)`;\n// }\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {checkRequired} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\nimport uuid from 'uuid';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\n\nconst sockets = new WeakMap();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this).binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this).bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this).extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this).protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this).readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this).url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor() {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options) {\n return new Promise((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n options = options || {};\n if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose({\n code: 1000,\n reason: 'Done (forced)',\n })\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n socket.close(options.code, options.reason);\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {number} options.pingInterval (required)\n * @param {number} options.pongTimeout (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @param {string} options.logLevelToken\n * @returns {Promise}\n */\n open(url, options) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n options = options || {};\n\n checkRequired(\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\n options\n );\n\n Object.keys(options).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: options[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor();\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], options);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n this._authorize()\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n clearTimeout(this.pongTimer);\n clearTimeout(this.pingTimer);\n\n event = this._fixCloseCode(event);\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event) {\n try {\n const data = JSON.parse(event.data);\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\n\n this.logger.debug(`socket,${this._domain}: sequence number: `, sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket,${this._domain}: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\n );\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\n }\n this.expectedSequenceNumber = sequenceNumber + 1;\n\n // Yes, it's a little weird looking; we want to emit message events that\n // look like normal socket message events, but event.data cannot be\n // modified and we don't actually care about anything but the data property\n const processedEvent = {data};\n\n this._acknowledge(processedEvent);\n if (data.type === 'pong') {\n this.emit('pong', processedEvent);\n } else {\n this.emit('message', processedEvent);\n }\n } catch (error) {\n // The above code should only be able to throw if we receive an unparsable\n // message from Mercury. At this time, the only action we have is to\n // ignore it and move on.\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data) {\n return new Promise((resolve, reject) => {\n if (this.readyState !== 1) {\n return reject(new Error('INVALID_STATE_ERROR'));\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n socket.send(data);\n\n return resolve();\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.id')) {\n return Promise.reject(new Error('`event.data.id` is required'));\n }\n\n return this.send({\n messageId: event.data.id,\n type: 'ack',\n });\n }\n\n /**\n * Sends an auth message up the socket\n * @private\n * @returns {Promise}\n */\n _authorize() {\n return new Promise((resolve) => {\n this.logger.info(`socket,${this._domain}: authorizing`);\n this.send({\n id: uuid.v4(),\n type: 'authorization',\n data: {\n token: this.token,\n },\n trackingId: this.trackingId,\n logLevelToken: this.logLevelToken,\n });\n\n const waitForBufferState = (event) => {\n if (\n !event.data.type &&\n (event.data.data.eventType === 'mercury.buffer_state' ||\n event.data.data.eventType === 'mercury.registration_status')\n ) {\n this.removeListener('message', waitForBufferState);\n this._ping();\n resolve();\n }\n };\n\n this.once('message', waitForBufferState);\n });\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n\n /**\n * Sends a ping up the socket and confirms we get it back\n * @param {[type]} id\n * @private\n * @returns {[type]}\n */\n _ping(id) {\n const confirmPongId = (event) => {\n try {\n this.logger.debug(`socket,${this._domain}: pong`, event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info(\n `socket,${this._domain}: received pong for wrong ping id, closing socket`\n );\n this.logger.debug(`socket,${this._domain}: expected`, id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch',\n });\n }\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in confirmPongId`, error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info(\n `socket,${this._domain}: pong not receive in expected period, closing socket`\n );\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn(\n `socket,${this._domain}: failed to close socket after missed pong`,\n reason\n );\n });\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in onPongNotReceived`, error);\n }\n };\n\n const scheduleNextPingAndCancelPongTimer = () => {\n try {\n clearTimeout(this.pongTimer);\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(\n `socket,${this._domain}: error occurred in scheduleNextPingAndCancelPongTimer`,\n error\n );\n }\n };\n\n const calculateLatency = (pingTimestamp) => {\n const now = performance.now();\n const latency = now - pingTimestamp;\n\n this.logger.debug(`socket,${this._domain}: latency: `, latency);\n this.emit('ping-pong-latency', latency);\n };\n\n id = id || uuid.v4();\n const pingTimestamp = performance.now();\n\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n this.once('pong', () => calculateLatency(pingTimestamp));\n this.logger.debug(`socket,${this._domain}: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n","/* eslint-disable no-restricted-globals */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n // Grabed from https://github.com/heineiuo/isomorphic-ws/blob/9b977394ac875638c045fd9cf774ed418484b394/browser.js\n let ws;\n\n if (typeof WebSocket !== 'undefined') {\n ws = WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n // eslint-disable-next-line no-undef\n ws = MozWebSocket;\n } else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket;\n } else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket;\n } else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket;\n }\n\n return ws;\n};\n\nexport default Socket;\n","/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n @oneFlight\n disconnect() {\n return new Promise((resolve) => {\n if (this.backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection`);\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n resolve(this.socket.close());\n }\n\n resolve();\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall.getNumRetries()});\n }\n this.logger.info(`${this.namespace}: connection attempt failed`, reason);\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in event handler`, {\n error,\n arguments: args,\n });\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n const socketUrl = this.socket.url;\n\n this.socket.removeAllListeners();\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket replaced; will not reconnect`);\n this._emit('offline.replaced', event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(`${this.namespace}: socket disconnected; will not reconnect`);\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n mercury: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-feature';\nimport '@webex/internal-plugin-metrics';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Mercury from './mercury';\nimport config from './config';\n\nregisterInternalPlugin('mercury', Mercury, {\n config,\n onBeforeLogout() {\n return this.disconnect();\n },\n});\n\nexport {default} from './mercury';\nexport {default as Mercury} from './mercury';\nexport {default as Socket} from './socket';\nexport {default as config} from './config';\nexport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from './errors';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\n\nexport const CLIENT_NAME = 'webex-js-sdk';\nexport default {\n device: {\n preDiscoveryServices: {\n metricsServiceUrl:\n process.env.METRICS_SERVICE_URL || 'https://metrics-a.wbx2.com/metrics/api/v1',\n metrics: process.env.METRICS_SERVICE_URL || 'https://metrics-a.wbx2.com/metrics/api/v1',\n },\n },\n metrics: {\n appType: inBrowser ? 'browser' : 'nodejs',\n batcherWait: 500,\n batcherMaxCalls: 50,\n batcherMaxWait: 1500,\n batcherRetryPlateau: 32000,\n waitForServiceTimeout: 30,\n },\n};\n\nexport const OS_NAME = {\n WINDOWS: 'windows',\n MAC: 'mac',\n IOS: 'ios',\n ANDROID: 'android',\n CHROME: 'chrome',\n LINUX: 'linux',\n OTHERS: 'other',\n};\n\nexport const OSMap = {\n 'Chrome OS': OS_NAME.CHROME,\n macOS: OS_NAME.MAC,\n Windows: OS_NAME.WINDOWS,\n iOS: OS_NAME.IOS,\n Android: OS_NAME.ANDROID,\n Linux: OS_NAME.LINUX,\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher, WebexHttpError} from '@webex/webex-core';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nconst sym = Symbol('metric id');\n\n/**\n * @class\n * @extends Batcher\n * @memberof Metrics\n */\nconst MetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * @param {any} item\n * @returns {Promise}\n */\n prepareItem(item) {\n // Keep non-prod data out of metrics\n const env = process.env.NODE_ENV === 'production' ? null : 'TEST';\n\n item.appType = item.appType || this.config.appType;\n item.env = item.env || env;\n item.time = item.time || Date.now();\n item.version = item.version || this.webex.version;\n\n return Promise.resolve(item);\n },\n\n /**\n * @param {any[]} queue\n * @returns {Promise}\n */\n prepareRequest(queue) {\n return Promise.resolve(\n queue.map((item) => {\n item.postTime = item.postTime || Date.now();\n\n return item;\n })\n );\n },\n\n /**\n * @param {any} payload\n * @returns {Promise}\n */\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'metrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n });\n },\n\n /**\n * @param {any} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(res.options.body.metrics.map((item) => this.acceptItem(item)));\n },\n\n /**\n * @param {any} reason\n * @returns {Promise}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError.NetworkOrCORSError) {\n this.logger.warn(\n 'metrics-batcher: received network error submitting metrics, reenqueuing payload'\n );\n\n return Promise.all(\n reason.options.body.metrics.map(\n (item) =>\n new Promise((resolve) => {\n const delay = item[sym].nextDelay;\n\n if (delay < this.config.batcherRetryPlateau) {\n item[sym].nextDelay *= 2;\n }\n safeSetTimeout(() => {\n resolve(this.rerequest(item));\n }, delay);\n })\n )\n );\n }\n\n return Reflect.apply(Batcher.prototype.handleHttpError, this, [reason]);\n },\n\n /**\n * @param {any} item\n * @returns {Promise}\n */\n rerequest(item) {\n return Promise.all([this.getDeferredForRequest(item), this.prepareItem(item)]).then(\n ([defer, req]) => {\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n }\n );\n },\n\n /**\n * @param {any} item\n * @returns {Promise}\n */\n fingerprintRequest(item) {\n item[sym] = item[sym] || {\n nextDelay: 1000,\n };\n\n return Promise.resolve(item[sym]);\n },\n\n /**\n * @param {any} item\n * @returns {Promise}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item[sym]);\n },\n});\n\nexport default MetricsBatcher;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport Batcher from './batcher';\n\nconst ClientMetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n prepareItem(item) {\n // Add more defaults to payload when the clientmetrics endpoint evolves to support richer payloads\n return Promise.resolve(item);\n },\n\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n });\n },\n});\n\nexport default ClientMetricsBatcher;\n","/* eslint-disable import/prefer-default-export */\n// Most client error codes are mapped based on\n// https://sqbu-github.cisco.com/WebExSquared/event-dictionary/wiki/Error-codes-for-metric-events\n\nimport {ClientEventError, ClientSubServiceType} from '../metrics.types';\n\nexport const CALL_DIAGNOSTIC_LOG_IDENTIFIER = 'call-diagnostic-events -> ';\n\nexport const AUTHENTICATION_FAILED_CODE = 1010;\nexport const NETWORK_ERROR = 1026;\nexport const NEW_LOCUS_ERROR_CLIENT_CODE = 4008;\nexport const MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE = 4100;\nexport const UNKNOWN_ERROR = 9999; // Unexpected error that is not a meetingInfo error, locus error or browser media error.\nexport const ICE_FAILURE_CLIENT_CODE = 2004;\nexport const MISSING_ROAP_ANSWER_CLIENT_CODE = 2007;\nexport const DTLS_HANDSHAKE_FAILED_CLIENT_CODE = 2008;\nexport const ICE_FAILED_WITH_TURN_TLS_CLIENT_CODE = 2010;\nexport const ICE_FAILED_WITHOUT_TURN_TLS_CLIENT_CODE = 2009;\nexport const ICE_AND_REACHABILITY_FAILED_CLIENT_CODE = 2011;\nexport const WBX_APP_API_URL = 'wbxappapi'; // MeetingInfo WebexAppApi response object normally contains a body.url that includes the string 'wbxappapi'\n\nexport const WEBEX_SUB_SERVICE_TYPES: Record = {\n PMR: 'PMR',\n SCHEDULED_MEETING: 'ScheduledMeeting',\n WEBINAR: 'Webinar',\n};\n\n// Found in https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\nconst BROWSER_MEDIA_ERROR_NAMES = {\n PERMISSION_DENIED_ERROR: 'PermissionDeniedError',\n NOT_ALLOWED_ERROR: 'NotAllowedError',\n NOT_READABLE_ERROR: 'NotReadableError',\n ABORT_ERROR: 'AbortError',\n NOT_FOUND_ERROR: 'NotFoundError',\n OVERCONSTRAINED_ERROR: 'OverconstrainedError',\n SECURITY_ERROR: 'SecurityError',\n TYPE_ERROR: 'TypeError',\n};\n\nexport const BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP = {\n [BROWSER_MEDIA_ERROR_NAMES.PERMISSION_DENIED_ERROR]: 4032, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.NOT_ALLOWED_ERROR]: 4032, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.NOT_READABLE_ERROR]: 2729, // Although the user granted permission to use the matching devices, a hardware error occurred at the operating system, browser, or Web page level which prevented access to the device.\n [BROWSER_MEDIA_ERROR_NAMES.ABORT_ERROR]: 2729, // Although the user and operating system both granted access to the hardware device, and no hardware issues occurred that would cause a NotReadableError DOMException, throw if some problem occurred which prevented the device from being used.\n [BROWSER_MEDIA_ERROR_NAMES.NOT_FOUND_ERROR]: 2729, // User did not grant permission\n [BROWSER_MEDIA_ERROR_NAMES.OVERCONSTRAINED_ERROR]: 2729, // Thrown if the specified constraints resulted in no candidate devices which met the criteria requested.\n [BROWSER_MEDIA_ERROR_NAMES.SECURITY_ERROR]: 2729, // Thrown if user media support is disabled on the Document on which getUserMedia() was called. The mechanism by which user media support is enabled and disabled is left up to the individual user agent.\n [BROWSER_MEDIA_ERROR_NAMES.TYPE_ERROR]: 2729, // Thrown if the list of constraints specified is empty, or has all constraints set to false. This can also happen if you try to call getUserMedia() in an insecure context, since navigator.mediaDevices is undefined in an insecure context.\n};\n\nexport const SDP_OFFER_CREATION_ERROR_MAP = {\n GENERAL: 2050,\n SDP_MUNGE_MISSING_CODECS: 2051,\n};\n\nexport const ERROR_DESCRIPTIONS = {\n UNKNOWN_CALL_FAILURE: 'UnknownCallFailure',\n LOCUS_RATE_LIMITED_INCOMING: 'LocusRateLimitedIncoming',\n LOCUS_RATE_LIMITED_OUTGOING: 'LocusRateLimitedOutgoing',\n LOCUS_UNAVAILABLE: 'LocusUnavailable',\n LOCUS_CONFLICT: 'LocusConflict',\n TIMEOUT: 'Timeout',\n LOCUS_INVALID_SEQUENCE_HASH: 'LocusInvalidSequenceHash',\n AUTHENTICATION_FAILED: 'AuthenticationFailed',\n NETWORK_ERROR: 'NetworkError',\n UPDATE_MEDIA_FAILED: 'UpdateMediaFailed',\n FAILED_TO_CONNECT_MEDIA: 'FailedToConnectMedia',\n MEDIA_ENGINE_LOST: 'MediaEngineLost',\n MEDIA_CONNECTION_LOST: 'MediaConnectionLost',\n ICE_FAILURE: 'IceFailure',\n MEDIA_ENGINE_HANG: 'MediaEngineHang',\n ICE_SERVER_REJECTED: 'IceServerRejected',\n CALL_FULL: 'CallFull',\n ROOM_TOO_LARGE: 'RoomTooLarge',\n GUEST_ALREADY_ADDED: 'GuestAlreadyAdded',\n LOCUS_USER_NOT_AUTHORISED: 'LocusUserNotAuthorised',\n CLOUDBERRY_UNAVAILABLE: 'CloudberryUnavailable',\n ROOM_TOO_LARGE_FREE_ACCOUNT: 'RoomTooLarge_FreeAccount',\n MEETING_INACTIVE: 'MeetingInactive',\n MEETING_LOCKED: 'MeetingLocked',\n MEETING_TERMINATING: 'MeetingTerminating',\n MODERATOR_PIN_OR_GUEST_REQUIRED: 'Moderator_Pin_Or_Guest_Required',\n MODERATOR_PIN_OR_GUEST_PIN_REQUIRED: 'Moderator_Pin_Or_Guest_PIN_Required',\n MODERATOR_REQUIRED: 'Moderator_Required',\n USER_NOT_MEMBER_OF_ROOM: 'UserNotMemberOfRoom',\n NEW_LOCUS_ERROR: 'NewLocusError',\n NETWORK_UNAVAILABLE: 'NetworkUnavailable',\n MEETING_UNAVAILABLE: 'MeetingUnavailable',\n MEETING_ID_INVALID: 'MeetingIDInvalid',\n MEETING_SITE_INVALID: 'MeetingSiteInvalid',\n LOCUS_INVALID_JOINTIME: 'LocusInvalidJoinTime',\n LOBBY_EXPIRED: 'LobbyExpired',\n MEDIA_CONNECTION_LOST_PAIRED: 'MediaConnectionLostPaired',\n PHONE_NUMBER_NOT_A_NUMBER: 'PhoneNumberNotANumber',\n PHONE_NUMBER_TOO_LONG: 'PhoneNumberTooLong',\n INVALID_DIALABLE_KEY: 'InvalidDialableKey',\n ONE_ON_ONE_TO_SELF_NOT_ALLOWED: 'OneOnOneToSelfNotAllowed',\n REMOVED_PARTICIPANT: 'RemovedParticipant',\n MEETING_LINK_NOT_FOUND: 'MeetingLinkNotFound',\n PHONE_NUMBER_TOO_SHORT_AFTER_IDD: 'PhoneNumberTooShortAfterIdd',\n INVALID_INVITEE_ADDRESS: 'InvalidInviteeAddress',\n PMR_USER_ACCOUNT_LOCKED_OUT: 'PMRUserAccountLockedOut',\n GUEST_FORBIDDEN: 'GuestForbidden',\n PMR_ACCOUNT_SUSPENDED: 'PMRAccountSuspended',\n EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE: 'EmptyPhoneNumberOrCountryCode',\n CONVERSATION_NOT_FOUND: 'ConversationNotFound',\n SIP_CALLEE_BUSY: 'SIPCalleeBusy',\n SIP_CALLEE_NOT_FOUND: 'SIPCalleeNotFound',\n START_RECORDING_FAILED: 'StartRecordingFailed',\n RECORDING_IN_PROGRESS_FAILED: 'RecordingInProgressFailed',\n MEETING_INFO_LOOKUP_ERROR: 'MeetingInfoLookupError',\n CALL_FULL_ADD_GUEST: 'CallFullAddGuest',\n REQUIRE_WEBEX_LOGIN: 'RequireWebexLogin',\n USER_NOT_ALLOWED_ACCESS_MEETING: 'UserNotAllowedAccessMeeting',\n USER_NEEDS_ACTIVATION: 'UserNeedsActivation',\n SIGN_UP_INVALID_EMAIL: 'SignUpInvalidEmail',\n UNKNOWN_ERROR: 'UnknownError',\n NO_MEDIA_FOUND: 'NoMediaFound',\n STREAM_ERROR_NO_MEDIA: 'StreamErrorNoMedia',\n CAMERA_PERMISSION_DENIED: 'CameraPermissionDenied',\n FRAUD_DETECTION: 'FraudDetection',\n E2EE_NOT_SUPPORTED: 'E2EENotSupported',\n LOCUS_LOBBY_FULL_CMR: 'LocusLobbyFullCMR',\n USER_NOT_INVITED_TO_JOIN: 'UserNotInvitedToJoin',\n MISSING_ROAP_ANSWER: 'MissingRoapAnswer',\n DTLS_HANDSHAKE_FAILED: 'DTLSHandshakeFailed',\n ICE_FAILED_WITHOUT_TURN_TLS: 'ICEFailedWithoutTURN_TLS',\n ICE_FAILED_WITH_TURN_TLS: 'ICEFailedWithTURN_TLS',\n ICE_AND_REACHABILITY_FAILED: 'ICEAndReachabilityFailed',\n SDP_OFFER_CREATION_ERROR: 'SdpOfferCreationError',\n SDP_OFFER_CREATION_ERROR_MISSING_CODEC: 'SdpOfferCreationErrorMissingCodec',\n};\n\nexport const SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP = {\n // ---- Webex API ----\n // Taken from https://wiki.cisco.com/display/HFWEB/MeetingInfo+API and https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Services/WebexMeetingService/WebexMeetingModel.h\n // Site not support the URL's domain\n 58400: 4100,\n 99002: 4100,\n // Cannot find the data. Unkown meeting.\n 99009: 4100,\n // Meeting is not allow to cross env\n 58500: 4100,\n // Input parameters contain invalit item\n 400001: 4100,\n // Empty password or token. Meeting is not allow to access since require password\n 403004: 4005,\n // Wrong password. Meeting is not allow to access since password error\n 403028: 4005,\n // Wrong or expired permission. Meeting is not allow to access since permissionToken error or expire\n 403032: 4005,\n // Meeting is required login for current user\n 403034: 4036,\n // Meeting is not allow to access since require password or hostKey\n // Empty password or host key\n 403036: 4005,\n // Meeting is not allow to access since password or hostKey error\n // Wrong password or host key\n 403038: 4005,\n // CMR Meeting Not Supported (meeting exists, but not CMR meeting)\n 403040: 4100,\n // Requires Moderator Pin or Guest Pin\n 403041: 4005,\n // Email blocked\n 403047: 4101,\n // Device not authenticated for your organization\n 403408: 4101,\n // Invalid panelist Pin\n 403043: 4005,\n // Device not registered in org. Device not authenticated.\n 403048: 4101,\n // Not allowed to join external meetings. Violate meeting join policy. Your organization settings don't allow you to join this meeting.\n 403049: 4101,\n // Invalid email. Requires sign in meeting's current site.\n 403100: 4101,\n // Enforce sign in: need login before access when policy enforce sign in. GuestForceUserSignInPolicy\n 403101: 4036,\n // Enforce sign in: sign in with your email address that is approved by your organization\n 403102: 4036,\n // Join internal Meeting: need login before access when policy enforce sign in. Guest force user sign in internal meeting policy.\n 403103: 4036,\n // Join internal Meeting: The host's organization policy doesn't allow your account to join this meeting. Try switching to another account\n 403104: 4101,\n 404001: 4101,\n // Site data not found. Unkonwn meeting. Site data not found(or null).\n 404006: 4100,\n // Invalid input with too many requests. Too many requests access, please input captcha code\n 423001: 4005,\n // Wrong password with too many requests. PasswordError too many time, please input captcha code\n 423005: 4005,\n // Wrong password or host key with too many requests\n 423006: 4005,\n // PasswordError with right captcha, please input captcha code\n 423010: 4005,\n // PasswordOrHostKeyError with right captcha, please input captcha code\n 423012: 4005,\n // Unverified or invalid input. Force show captcha. Please input captcha code\"\n 423013: 4005,\n // Too many requests access\n 429005: 4100,\n\n // ---- Locus ------\n // FREE_USER_MAX_PARTICIPANTS_EXCEEDED\n 2403001: 3007,\n // PAID_USER_MAX_PARTICIPANTS_EXCEEDED\n 2403002: 3002,\n // SERVICE_MAX_PARTICIPANTS_EXCEEDED\n 2403003: 3002,\n // LOCUS_INACTIVE\n 2403004: 4001,\n // LOCUS_FREE_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED\n 2403018: 3001,\n // LOCUS_PAID_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED\n 2403019: 3001,\n // LOCUS_LOCKED\n 2423003: 4002,\n // LOCUS_TERMINATING\n 2423004: 4003,\n // LOCUS_REQUIRES_MODERATOR_PIN_OR_GUEST\n 2423005: 4005,\n 2423006: 4005,\n 2423016: 4005,\n 2423017: 4005,\n 2423018: 4005,\n // LOCUS_OWNER_CONCURRENT_ACTIVE_MEETING_LIMIT_EXCEEDED\n 2423012: 12000,\n // LOCUS_LOBBY_FULL_CMR\n 2423021: 12001,\n // LOCUS_REQUIRES_MODERATOR_ROLE\n 2423007: 4006,\n // LOCUS_JOIN_RESTRICTED_USER_NOT_IN_ROOM\n 2403010: 4007,\n // LOCUS_MEETING_NOT_FOUND\n 2403014: 4011,\n // LOCUS_NOT_WEBEX_SITE\n 2403015: 4012,\n // LOCUS_INVALID_JOIN_TIME\n 2423010: 4013,\n // LOCUS_PHONE_NUMBER_NOT_A_NUMBER\n 2400008: 4016,\n // LOCUS_PHONE_NUMBER_TOO_LONG\n 2400011: 4017,\n // LOCUS_INVALID_DIALABLE_KEY\n 2400012: 4018,\n // LOCUS_ONE_ON_ONE_TO_SELF_NOT_ALLOWED\n 2403007: 4019,\n // LOCUS_REMOVED_PARTICIPANT\n 2401002: 4020,\n // LOCUS_MEETING_LINK_NOT_FOUND\n 2404002: 4021,\n // LOCUS_PHONE_NUMBER_TOO_SHORT_AFTER_IDD\n 2400009: 4022,\n // LOCUS_INVALID_INVITEE_ADDRESS\n 2400025: 4023,\n // LOCUS_PMR_USER_ACCOUNT_LOCKEDOUT\n 2423009: 4024,\n // LOCUS_RESOURCE_GUEST_FORBIDDEN\n 2403022: 4025,\n // LOCUS_PMR_SUSPENDED\n 2423008: 4026,\n // LOCUS_EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE\n 2400006: 4027,\n // LOCUS_INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST\n 2400014: 1006,\n // LOCUS_CONVERSATION_NOT_FOUND\n 2404001: 4028,\n // LOCUS_RECORDING_CONTROL_NOT_SUPPORTED\n 2403025: 4029,\n // LOCUS_RECORDING_NOT_STARTED\n 2405001: 4029,\n // LOCUS_RECORDING_NOT_ENABLED\n 2409005: 4029,\n // E2EE_NOT_SUPPORTED\n 2409062: 12002,\n // LOCUS: ONLY_INVITED_USERS_CAN_ATTEND_THIS_MEETING\n 2423025: 12003,\n\n // ---- U2C Sign in catalog ------\n // The user exists, but hasn't completed activation. Needs to visit Atlas for more processing.\n 100002: 4102,\n // The user exists, had completed activation earlier, but requires re-activation because of change in login strategy.\n // Common example is: user signed up using an OAuth provider, but that OAuth provider was removed by org's admin. Now the user needs to re-activate using alternate login strategies: password-pin, new OAuth provider, SSO, etc.\n 100007: 4102,\n // The user does not exist\n 100001: 4103,\n // The user wasn't found, and the organization used for search is a domain-claimed organization.\n 100006: 4103,\n 100005: 4103, // Depracated because of an issue in the UCF Clients\n // If both email-hash and domain-hash are null or undefined.\n 100004: 4103,\n};\n\nexport const CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD: Record> = {\n 1000: {\n errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_CALL_FAILURE,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1001: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_RATE_LIMITED_INCOMING,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1002: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_RATE_LIMITED_OUTGOING,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1003: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_UNAVAILABLE,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1004: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_CONFLICT,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1005: {\n errorDescription: ERROR_DESCRIPTIONS.TIMEOUT,\n category: 'signaling',\n fatal: true,\n name: 'locus.response',\n },\n 1006: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_INVALID_SEQUENCE_HASH,\n category: 'signaling',\n fatal: true,\n },\n 1007: {\n errorDescription: ERROR_DESCRIPTIONS.UPDATE_MEDIA_FAILED,\n category: 'signaling',\n fatal: true,\n },\n [AUTHENTICATION_FAILED_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.AUTHENTICATION_FAILED,\n category: 'network',\n fatal: true,\n },\n 1026: {\n errorDescription: ERROR_DESCRIPTIONS.NETWORK_ERROR,\n category: 'network',\n fatal: true,\n },\n 2001: {\n errorDescription: ERROR_DESCRIPTIONS.FAILED_TO_CONNECT_MEDIA,\n category: 'signaling',\n fatal: true,\n },\n 2002: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_ENGINE_LOST,\n category: 'signaling',\n fatal: true,\n },\n 2003: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_CONNECTION_LOST,\n category: 'signaling',\n fatal: true,\n },\n [ICE_FAILURE_CLIENT_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_FAILURE,\n category: 'media',\n fatal: true,\n },\n 2005: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_ENGINE_HANG,\n category: 'signaling',\n fatal: true,\n },\n 2006: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_SERVER_REJECTED,\n category: 'signaling',\n fatal: true,\n },\n [MISSING_ROAP_ANSWER_CLIENT_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.MISSING_ROAP_ANSWER,\n category: 'media',\n fatal: true,\n },\n [DTLS_HANDSHAKE_FAILED_CLIENT_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.DTLS_HANDSHAKE_FAILED,\n category: 'media',\n fatal: true,\n },\n [ICE_FAILED_WITHOUT_TURN_TLS_CLIENT_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_FAILED_WITHOUT_TURN_TLS,\n category: 'media',\n fatal: true,\n },\n [ICE_FAILED_WITH_TURN_TLS_CLIENT_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_FAILED_WITH_TURN_TLS,\n category: 'media',\n fatal: true,\n },\n [ICE_AND_REACHABILITY_FAILED_CLIENT_CODE]: {\n errorDescription: ERROR_DESCRIPTIONS.ICE_AND_REACHABILITY_FAILED,\n category: 'expected',\n fatal: true,\n },\n 2050: {\n errorDescription: ERROR_DESCRIPTIONS.SDP_OFFER_CREATION_ERROR,\n category: 'media',\n fatal: true,\n shownToUser: true,\n },\n 2051: {\n errorDescription: ERROR_DESCRIPTIONS.SDP_OFFER_CREATION_ERROR_MISSING_CODEC,\n category: 'expected',\n fatal: true,\n shownToUser: true,\n },\n 3001: {\n errorDescription: ERROR_DESCRIPTIONS.CALL_FULL,\n category: 'expected',\n fatal: true,\n },\n 3002: {\n errorDescription: ERROR_DESCRIPTIONS.ROOM_TOO_LARGE,\n category: 'expected',\n fatal: true,\n },\n 3004: {\n errorDescription: ERROR_DESCRIPTIONS.GUEST_ALREADY_ADDED,\n category: 'expected',\n fatal: false,\n },\n 3005: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_USER_NOT_AUTHORISED,\n category: 'expected',\n fatal: true,\n },\n 3006: {\n errorDescription: ERROR_DESCRIPTIONS.CLOUDBERRY_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 3007: {\n errorDescription: ERROR_DESCRIPTIONS.STREAM_ERROR_NO_MEDIA,\n category: 'expected',\n fatal: true,\n },\n 3013: {\n errorDescription: ERROR_DESCRIPTIONS.ROOM_TOO_LARGE_FREE_ACCOUNT,\n category: 'expected',\n fatal: false,\n },\n 4001: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_INACTIVE,\n category: 'expected',\n fatal: true,\n },\n 4002: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_LOCKED,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4003: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_TERMINATING,\n category: 'expected',\n fatal: true,\n name: 'locus.leave',\n },\n 4004: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_PIN_OR_GUEST_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4005: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_PIN_OR_GUEST_PIN_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4006: {\n errorDescription: ERROR_DESCRIPTIONS.MODERATOR_REQUIRED,\n category: 'expected',\n fatal: false,\n },\n 4007: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_MEMBER_OF_ROOM,\n category: 'expected',\n fatal: true,\n },\n 4008: {\n errorDescription: ERROR_DESCRIPTIONS.NEW_LOCUS_ERROR,\n category: 'signaling',\n fatal: true,\n },\n 4009: {\n errorDescription: ERROR_DESCRIPTIONS.NETWORK_UNAVAILABLE,\n category: 'network',\n fatal: true,\n },\n 4010: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_UNAVAILABLE,\n category: 'expected',\n fatal: true,\n },\n 4011: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_ID_INVALID,\n category: 'expected',\n fatal: true,\n },\n 4012: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_SITE_INVALID,\n category: 'expected',\n fatal: true,\n },\n 4013: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_INVALID_JOINTIME,\n category: 'expected',\n fatal: true,\n },\n 4014: {\n errorDescription: ERROR_DESCRIPTIONS.LOBBY_EXPIRED,\n category: 'expected',\n fatal: true,\n },\n 4015: {\n errorDescription: ERROR_DESCRIPTIONS.MEDIA_CONNECTION_LOST_PAIRED,\n category: 'expected',\n fatal: false,\n },\n 4016: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_NOT_A_NUMBER,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4017: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_TOO_LONG,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4018: {\n errorDescription: ERROR_DESCRIPTIONS.INVALID_DIALABLE_KEY,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n },\n 4019: {\n errorDescription: ERROR_DESCRIPTIONS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED,\n category: 'expected',\n fatal: true,\n },\n 4020: {\n errorDescription: ERROR_DESCRIPTIONS.REMOVED_PARTICIPANT,\n category: 'expected',\n fatal: true,\n },\n 4021: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_LINK_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n 4022: {\n errorDescription: ERROR_DESCRIPTIONS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD,\n category: 'expected',\n fatal: true,\n },\n 4023: {\n errorDescription: ERROR_DESCRIPTIONS.INVALID_INVITEE_ADDRESS,\n category: 'expected',\n fatal: true,\n },\n 4024: {\n errorDescription: ERROR_DESCRIPTIONS.PMR_USER_ACCOUNT_LOCKED_OUT,\n category: 'expected',\n fatal: true,\n },\n 4025: {\n errorDescription: ERROR_DESCRIPTIONS.GUEST_FORBIDDEN,\n category: 'expected',\n fatal: true,\n },\n 4026: {\n errorDescription: ERROR_DESCRIPTIONS.PMR_ACCOUNT_SUSPENDED,\n category: 'expected',\n fatal: true,\n },\n 4027: {\n errorDescription: ERROR_DESCRIPTIONS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE,\n category: 'expected',\n fatal: true,\n },\n 4028: {\n errorDescription: ERROR_DESCRIPTIONS.CONVERSATION_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n 4029: {\n errorDescription: ERROR_DESCRIPTIONS.START_RECORDING_FAILED,\n category: 'expected',\n fatal: true,\n },\n 4030: {\n errorDescription: ERROR_DESCRIPTIONS.RECORDING_IN_PROGRESS_FAILED,\n category: 'expected',\n fatal: true,\n },\n 4032: {\n errorDescription: ERROR_DESCRIPTIONS.CAMERA_PERMISSION_DENIED,\n category: 'expected',\n fatal: true,\n },\n 4036: {\n errorDescription: ERROR_DESCRIPTIONS.REQUIRE_WEBEX_LOGIN,\n category: 'expected',\n fatal: true,\n },\n 5000: {\n errorDescription: ERROR_DESCRIPTIONS.SIP_CALLEE_BUSY,\n category: 'expected',\n fatal: true,\n },\n 5001: {\n errorDescription: ERROR_DESCRIPTIONS.SIP_CALLEE_NOT_FOUND,\n category: 'expected',\n fatal: true,\n },\n\n // Webex App API Error Codes\n 4100: {\n errorDescription: ERROR_DESCRIPTIONS.MEETING_INFO_LOOKUP_ERROR,\n category: 'signaling',\n fatal: true,\n },\n 3003: {\n errorDescription: ERROR_DESCRIPTIONS.CALL_FULL_ADD_GUEST,\n category: 'expected',\n fatal: false,\n },\n 4101: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_ALLOWED_ACCESS_MEETING,\n category: 'expected',\n fatal: true,\n },\n 4102: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NEEDS_ACTIVATION,\n category: 'expected',\n fatal: true,\n },\n 4103: {\n errorDescription: ERROR_DESCRIPTIONS.SIGN_UP_INVALID_EMAIL,\n category: 'expected',\n fatal: true,\n },\n 2729: {\n errorDescription: ERROR_DESCRIPTIONS.NO_MEDIA_FOUND,\n category: 'expected',\n fatal: false,\n },\n 9999: {\n errorDescription: ERROR_DESCRIPTIONS.UNKNOWN_ERROR,\n category: 'other',\n fatal: true,\n },\n 12000: {\n errorDescription: ERROR_DESCRIPTIONS.FRAUD_DETECTION,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n shownToUser: true,\n },\n 12001: {\n errorDescription: ERROR_DESCRIPTIONS.LOCUS_LOBBY_FULL_CMR,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n shownToUser: true,\n },\n 12002: {\n errorDescription: ERROR_DESCRIPTIONS.E2EE_NOT_SUPPORTED,\n category: 'expected',\n fatal: true,\n name: 'locus.response',\n shownToUser: true,\n },\n 12003: {\n errorDescription: ERROR_DESCRIPTIONS.USER_NOT_INVITED_TO_JOIN,\n category: 'expected',\n fatal: true,\n },\n};\n\nexport const CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND = 'js_sdk_call_diagnostic_event_failed_to_send';\n","/* eslint-disable valid-jsdoc */\nimport anonymize from 'ip-anonymize';\nimport util from 'util';\n\nimport {BrowserDetection} from '@webex/common';\nimport {WebexHttpError} from '@webex/webex-core';\nimport {isEmpty, merge} from 'lodash';\nimport {\n ClientEvent,\n Event,\n MediaQualityEventAudioSetupDelayPayload,\n MediaQualityEventVideoSetupDelayPayload,\n MetricEventNames,\n} from '../metrics.types';\nimport {\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n DTLS_HANDSHAKE_FAILED_CLIENT_CODE,\n ICE_FAILED_WITHOUT_TURN_TLS_CLIENT_CODE,\n ICE_FAILED_WITH_TURN_TLS_CLIENT_CODE,\n ICE_FAILURE_CLIENT_CODE,\n MISSING_ROAP_ANSWER_CLIENT_CODE,\n WBX_APP_API_URL,\n ERROR_DESCRIPTIONS,\n ICE_AND_REACHABILITY_FAILED_CLIENT_CODE,\n} from './config';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\nexport const anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);\n\n/**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\nexport const userAgentToString = ({clientName, webexVersion}) => {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${clientName}`);\n\n if (\n ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !== -1\n ) {\n browserInfo = util.format(\n 'browser=%s',\n `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`\n );\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption\n ? `${userAgentOption}; ${clientInfo}; ${osInfo}`\n : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format(\n 'webex-js-sdk/%s %s',\n `${process.env.NODE_ENV}-${webexVersion}`,\n userAgentOption\n );\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${webexVersion}`);\n};\n\n/**\n * Iterates object recursively and removes any\n * property that returns isEmpty for it's associated value\n * isEmpty = implementation from Lodash.\n *\n * It modifies the object in place (mutable)\n *\n * @param obj - input\n * @returns\n */\nexport const clearEmptyKeysRecursively = (obj: any) => {\n // Check if the object is empty\n if (Object.keys(obj).length === 0) {\n return;\n }\n\n Object.keys(obj).forEach((key) => {\n if (\n (typeof obj[key] === 'object' || typeof obj[key] === 'string' || Array.isArray(obj[key])) &&\n isEmpty(obj[key])\n ) {\n delete obj[key];\n }\n if (Array.isArray(obj[key])) {\n obj[key] = [...obj[key].filter((x) => !!x)];\n }\n if (typeof obj[key] === 'object') {\n clearEmptyKeysRecursively(obj[key]);\n }\n });\n};\n\n/**\n * Locus error codes start with 2. The next three digits are the\n * HTTP status code related to the error code (like 400, 403, 502, etc.)\n * The remaining three digits are just an increasing integer.\n * If it is 7 digits and starts with a 2, it is locus.\n *\n * @param errorCode\n * @returns {boolean}\n */\nexport const isLocusServiceErrorCode = (errorCode: string | number) => {\n const code = `${errorCode}`;\n\n if (code.length === 7 && code.charAt(0) === '2') {\n return true;\n }\n\n return false;\n};\n\n/**\n * MeetingInfo errors sometimes has body.data.meetingInfo object\n * MeetingInfo errors come with a wbxappapi url\n *\n * @param {Object} rawError\n * @returns {boolean}\n */\nexport const isMeetingInfoServiceError = (rawError: any) => {\n if (rawError.body?.data?.meetingInfo || rawError.body?.url?.includes(WBX_APP_API_URL)) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if the raw error is a network related error\n *\n * @param {Object} rawError\n * @returns {boolean}\n */\nexport const isNetworkError = (rawError: any) => {\n if (rawError instanceof WebexHttpError.NetworkOrCORSError) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if the error is an unauthorized error\n *\n * @param {Object} rawError\n * @returns {boolean}\n */\nexport const isUnauthorizedError = (rawError: any) => {\n if (rawError instanceof WebexHttpError.Unauthorized) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if the error is an SdpOfferCreation error\n *\n * @param {Object} rawError\n * @returns {boolean}\n */\nexport const isSdpOfferCreationError = (rawError: any) => {\n // would LIKE to do rawError instanceof Errors.SdpOfferCreationError\n // but including internal-media-core in plugin-metrics breaks meetings and metrics unit tests\n if (rawError.name === ERROR_DESCRIPTIONS.SDP_OFFER_CREATION_ERROR) {\n return true;\n }\n\n return false;\n};\n\n/**\n * MDN Media Devices getUserMedia() method returns a name if it errs\n * Documentation can be found here: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n *\n * @param errorCode\n * @returns\n */\nexport const isBrowserMediaErrorName = (errorName: any) => {\n if (BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[errorName]) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @param webClientDomain\n * @returns\n */\nexport const getBuildType = (\n webClientDomain,\n markAsTestEvent = false\n): Event['origin']['buildType'] => {\n // used temporary to test pre join in production without creating noise data, SPARK-468456\n if (markAsTestEvent) {\n return 'test';\n }\n\n if (\n webClientDomain?.includes('localhost') ||\n webClientDomain?.includes('127.0.0.1') ||\n process.env.NODE_ENV !== 'production'\n ) {\n return 'test';\n }\n\n return 'prod';\n};\n\n/**\n * Prepare metric item for submission.\n * @param {Object} webex sdk instance\n * @param {Object} item\n * @returns {Object} prepared item\n */\nexport const prepareDiagnosticMetricItem = (webex: any, item: any) => {\n const origin: Partial = {\n buildType: getBuildType(\n item.eventPayload?.event?.eventData?.webClientDomain,\n item.eventPayload?.event?.eventData?.markAsTestEvent\n ),\n networkType: 'unknown',\n };\n\n // check event names and append latencies?\n const eventName = item.eventPayload?.event?.name as MetricEventNames;\n const joinTimes: ClientEvent['payload']['joinTimes'] = {};\n const audioSetupDelay: MediaQualityEventAudioSetupDelayPayload = {};\n const videoSetupDelay: MediaQualityEventVideoSetupDelayPayload = {};\n\n const cdl = webex.internal.newMetrics.callDiagnosticLatencies;\n\n switch (eventName) {\n case 'client.webexapp.launched':\n joinTimes.downloadTime = cdl.getDownloadTimeJMT();\n break;\n case 'client.login.end':\n joinTimes.otherAppApiReqResp = cdl.getOtherAppApiReqResp();\n joinTimes.exchangeCITokenJMT = cdl.getExchangeCITokenJMT();\n break;\n case 'client.interstitial-window.launched':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.clickToInterstitial = cdl.getClickToInterstitial();\n joinTimes.refreshCaptchaServiceReqResp = cdl.getRefreshCaptchaReqResp();\n joinTimes.downloadIntelligenceModelsReqResp = cdl.getDownloadIntelligenceModelsReqResp();\n break;\n\n case 'client.call.initiated':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.showInterstitialTime = cdl.getShowInterstitialTime();\n joinTimes.registerWDMDeviceJMT = cdl.getRegisterWDMDeviceJMT();\n joinTimes.getU2CTime = cdl.getU2CTime();\n joinTimes.getReachabilityClustersReqResp = cdl.getReachabilityClustersReqResp();\n break;\n\n case 'client.locus.join.response':\n joinTimes.meetingInfoReqResp = cdl.getMeetingInfoReqResp();\n joinTimes.callInitJoinReq = cdl.getCallInitJoinReq();\n joinTimes.joinReqResp = cdl.getJoinReqResp();\n joinTimes.pageJmt = cdl.getPageJMT();\n joinTimes.clickToInterstitial = cdl.getClickToInterstitial();\n joinTimes.interstitialToJoinOK = cdl.getInterstitialToJoinOK();\n joinTimes.totalJmt = cdl.getTotalJMT();\n joinTimes.clientJmt = cdl.getClientJMT();\n joinTimes.downloadTime = cdl.getDownloadTimeJMT();\n break;\n\n case 'client.ice.end':\n joinTimes.ICESetupTime = cdl.getICESetupTime();\n joinTimes.audioICESetupTime = cdl.getAudioICESetupTime();\n joinTimes.videoICESetupTime = cdl.getVideoICESetupTime();\n joinTimes.shareICESetupTime = cdl.getShareICESetupTime();\n break;\n\n case 'client.media.rx.start':\n joinTimes.localSDPGenRemoteSDPRecv = cdl.getLocalSDPGenRemoteSDPRecv();\n audioSetupDelay.joinRespRxStart = cdl.getAudioJoinRespRxStart();\n videoSetupDelay.joinRespRxStart = cdl.getVideoJoinRespRxStart();\n break;\n\n case 'client.media-engine.ready':\n joinTimes.totalMediaJMT = cdl.getTotalMediaJMT();\n joinTimes.interstitialToMediaOKJMT = cdl.getInterstitialToMediaOKJMT();\n joinTimes.callInitMediaEngineReady = cdl.getCallInitMediaEngineReady();\n joinTimes.stayLobbyTime = cdl.getStayLobbyTime();\n break;\n\n case 'client.media.tx.start':\n audioSetupDelay.joinRespTxStart = cdl.getAudioJoinRespTxStart();\n videoSetupDelay.joinRespTxStart = cdl.getVideoJoinRespTxStart();\n }\n\n if (!isEmpty(joinTimes)) {\n item.eventPayload.event = merge(item.eventPayload.event, {joinTimes});\n }\n\n if (!isEmpty(audioSetupDelay)) {\n item.eventPayload.event = merge(item.eventPayload.event, {audioSetupDelay});\n }\n\n if (!isEmpty(videoSetupDelay)) {\n item.eventPayload.event = merge(item.eventPayload.event, {videoSetupDelay});\n }\n\n item.eventPayload.origin = Object.assign(origin, item.eventPayload.origin);\n\n webex.logger.log(\n `CallDiagnosticLatencies,prepareDiagnosticMetricItem: ${JSON.stringify({\n latencies: Object.fromEntries(cdl.latencyTimestamps),\n event: item,\n })}`\n );\n\n return item;\n};\n\n/**\n * Sets the originTime value(s) before the request/fetch.\n * This function is only useful if you are about to submit a metrics\n * request using pre-built fetch options;\n *\n * @param {any} options\n * @returns {any} the updated options object\n */\nexport const setMetricTimings = (options) => {\n if (options.body && options.json) {\n const body = JSON.parse(options.body);\n\n const now = new Date().toISOString();\n body.metrics?.forEach((metric) => {\n if (metric.eventPayload) {\n // The event will effectively be triggered and sent at the same time.\n // The existing triggered time is from when the options were built.\n metric.eventPayload.originTime = {\n triggered: now,\n sent: now,\n };\n }\n });\n options.body = JSON.stringify(body);\n }\n\n return options;\n};\n\nexport const extractVersionMetadata = (version: string) => {\n // extract major and minor version\n const [majorVersion, minorVersion] = version.split('.');\n\n return {\n majorVersion: parseInt(majorVersion, 10),\n minorVersion: parseInt(minorVersion, 10),\n };\n};\n\n/**\n * Generates client error codes for specific ice failures\n * that happen when trying to add media in a meeting.\n */\nexport const generateClientErrorCodeForIceFailure = ({\n signalingState,\n iceConnected,\n turnServerUsed,\n unreachable,\n}: {\n signalingState: RTCPeerConnection['signalingState'];\n iceConnected: boolean;\n turnServerUsed: boolean;\n unreachable: boolean;\n}) => {\n let errorCode = ICE_FAILURE_CLIENT_CODE; // default;\n\n if (signalingState === 'have-local-offer') {\n errorCode = MISSING_ROAP_ANSWER_CLIENT_CODE;\n }\n\n if (signalingState === 'stable' && iceConnected) {\n errorCode = DTLS_HANDSHAKE_FAILED_CLIENT_CODE;\n }\n\n if (signalingState !== 'have-local-offer' && !iceConnected) {\n if (turnServerUsed) {\n if (unreachable) {\n errorCode = ICE_AND_REACHABILITY_FAILED_CLIENT_CODE;\n } else {\n errorCode = ICE_FAILED_WITH_TURN_TLS_CLIENT_CODE;\n }\n } else {\n errorCode = ICE_FAILED_WITHOUT_TURN_TLS_CLIENT_CODE;\n }\n }\n\n return errorCode;\n};\n","/* eslint-disable import/prefer-default-export */\n/**\n * Generates common metadata for errors\n * @param {any} error\n * @returns {object}\n */\nexport const generateCommonErrorMetadata = (error) => {\n if (error instanceof Error) {\n return JSON.stringify({\n message: error?.message,\n name: error?.name,\n stack: error?.stack,\n });\n }\n\n return error;\n};\n","import {uniqueId} from 'lodash';\nimport Batcher from './batcher';\nimport {prepareDiagnosticMetricItem} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\nconst PRE_LOGIN_METRICS_IDENTIFIER = 'Pre Login Metrics -->';\n\nconst PreLoginMetricsBatcher = Batcher.extend({\n namespace: 'Metrics',\n preLoginId: undefined,\n\n /**\n * Save the pre-login ID.\n * @param {string} preLoginId The pre-login ID to be saved.\n * @returns {void}\n */\n savePreLoginId(preLoginId) {\n this.preLoginId = preLoginId;\n },\n\n /**\n * Prepare item\n * @param {any} item\n * @returns {Promise}\n */\n prepareItem(item) {\n return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item));\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param {any[]} queue\n * @returns {Promise}\n */\n prepareRequest(queue) {\n // Add sent timestamp\n queue.forEach((item) => {\n item.eventPayload.originTime = item.eventPayload.originTime || {};\n item.eventPayload.originTime.sent = new Date().toISOString();\n });\n\n return Promise.resolve(queue);\n },\n\n /**\n *\n * @param {any} payload\n * @returns {Promise}\n */\n submitHttpRequest(payload: any) {\n const batchId = uniqueId('prelogin-batch-');\n if (this.preLoginId === undefined) {\n this.webex.logger.error(\n PRE_LOGIN_METRICS_IDENTIFIER,\n `PreLoginMetricsBatcher: @submitHttpRequest#${batchId}. PreLoginId is not set.`\n );\n\n return Promise.reject(new Error('PreLoginId is not set.'));\n }\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics-prelogin',\n headers: {\n authorization: false,\n 'x-prelogin-userid': this.preLoginId,\n },\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n })\n .then((res) => {\n this.webex.logger.log(\n PRE_LOGIN_METRICS_IDENTIFIER,\n `PreLoginMetricsBatcher: @submitHttpRequest#${batchId}. Request successful.`\n );\n\n return res;\n })\n .catch((err) => {\n this.webex.logger.error(\n PRE_LOGIN_METRICS_IDENTIFIER,\n `PreLoginMetricsBatcher: @submitHttpRequest#${batchId}. Request failed:`,\n `error: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n },\n});\n\nexport default PreLoginMetricsBatcher;\n","import PreLoginMetricsBatcher from './prelogin-metrics-batcher';\n\nconst ClientMetricsPreloginBatcher = PreLoginMetricsBatcher.extend({\n namespace: 'Metrics',\n\n /**\n * Prepare item\n * @param {any} item\n * @returns {Promise}\n */\n prepareItem(item) {\n // Add more defaults to payload when the clientmetrics endpoint evolves to support richer payloads\n return Promise.resolve(item);\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param {any[]} queue\n * @returns {Promise}\n */\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n});\n\nexport default ClientMetricsPreloginBatcher;\n","/* eslint-disable default-param-last */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {BrowserDetection} from '@webex/common';\nimport {OS_NAME, OSMap, CLIENT_NAME} from './config';\n\nimport Batcher from './batcher';\nimport ClientMetricsBatcher from './client-metrics-batcher';\nimport ClientMetricsPreloginBatcher from './client-metrics-prelogin-batcher';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\nexport function getOSNameInternal() {\n return OSMap[getOSName()] ?? OS_NAME.OTHERS;\n}\n\nfunction getSparkUserAgent(webex) {\n const {appName, appVersion, appPlatform} = webex?.config ?? {};\n\n let sparkUserAgent = CLIENT_NAME;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n return sparkUserAgent;\n}\n\nconst Metrics = WebexPlugin.extend({\n children: {\n batcher: Batcher,\n clientMetricsBatcher: ClientMetricsBatcher,\n clientMetricsPreloginBatcher: ClientMetricsPreloginBatcher,\n },\n\n namespace: 'Metrics',\n\n submit(key, value) {\n return this.batcher.request({key, ...value});\n },\n\n /**\n * Returns the payload for submitting client metrics.\n * @param {string} eventName\n * @param {any} props\n * @returns {any} - the payload\n */\n getClientMetricsPayload(eventName, props) {\n if (!eventName) {\n throw Error('Missing behavioral metric name. Please provide one');\n }\n const payload = {metricName: eventName};\n // @ts-ignore\n const providedClientVersion = this.webex.meetings?.config?.metrics?.clientVersion;\n\n payload.tags = {\n ...props.tags,\n browser: getBrowserName(),\n os: getOSNameInternal(),\n appVersion: providedClientVersion,\n\n // Node does not like this so we need to check if it exists or not\n // eslint-disable-next-line no-undef\n domain:\n typeof window !== 'undefined' ? window.location.hostname || 'non-browser' : 'non-browser', // Check what else we could measure\n };\n\n payload.fields = {\n ...props.fields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version,\n platform: 'Web',\n spark_user_agent: getSparkUserAgent(this.webex),\n client_id: this.webex.credentials.config.client_id,\n };\n\n payload.type = props.type || this.webex.config.metrics.type;\n\n payload.context = {\n ...props.context,\n app: {\n version: this.webex.version,\n },\n locale: 'en-US',\n os: {\n name: getOSNameInternal(),\n version: getOSVersion(),\n },\n };\n\n if (props.eventPayload) {\n payload.eventPayload = props.eventPayload;\n }\n\n // Mocking the time in tests when running in node\n // is impossible so unable to use Date.now()\n payload.timestamp = new Date().valueOf();\n\n return payload;\n },\n\n /**\n * This corresponds to #sendSemiStructured() in the deprecated metrics handler\n * @param {string} eventName\n * @param {Object} props\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n submitClientMetrics(eventName, props = {}, preLoginId) {\n const payload = this.getClientMetricsPayload(eventName, props);\n\n if (preLoginId) {\n this.clientMetricsPreloginBatcher.savePreLoginId(preLoginId);\n\n return this.clientMetricsPreloginBatcher.request(payload);\n }\n\n return this.clientMetricsBatcher.request(payload);\n },\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n aliasUser(preLoginId) {\n return this.request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n });\n },\n});\n\nexport default Metrics;\n","import {uniqueId} from 'lodash';\nimport Batcher from '../batcher';\nimport {prepareDiagnosticMetricItem} from './call-diagnostic-metrics.util';\nimport {CALL_DIAGNOSTIC_LOG_IDENTIFIER} from './config';\nimport {generateCommonErrorMetadata} from '../utils';\n\nconst CallDiagnosticEventsBatcher = Batcher.extend({\n namespace: 'Metrics',\n\n /**\n * Prepare item\n * @param {any} item\n * @returns {Promise}\n */\n prepareItem(item) {\n return Promise.resolve(prepareDiagnosticMetricItem(this.webex, item));\n },\n\n /**\n * Prepare request, add time sensitive date etc.\n * @param {any[]} queue\n * @returns {Promise}\n */\n prepareRequest(queue) {\n // Add sent timestamp\n queue.forEach((item) => {\n item.eventPayload.originTime = item.eventPayload.originTime || {};\n item.eventPayload.originTime.sent = new Date().toISOString();\n });\n\n return Promise.resolve(queue);\n },\n\n /**\n *\n * @param {any} payload\n * @returns {Promise}\n */\n submitHttpRequest(payload) {\n const batchId = uniqueId('ca-batch-');\n\n return this.webex\n .request({\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: payload,\n },\n waitForServiceTimeout: this.webex.config.metrics.waitForServiceTimeout,\n })\n .then((res) => {\n this.webex.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request successful.`\n );\n\n return res;\n })\n .catch((err) => {\n this.webex.logger.error(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticEventsBatcher: @submitHttpRequest#${batchId}. Request failed:`,\n `error: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n },\n});\n\nexport default CallDiagnosticEventsBatcher;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {BrowserDetection, getBrowserSerial} from '@webex/common';\nimport uuid from 'uuid';\nimport {merge} from 'lodash';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\n\nimport {\n anonymizeIPAddress,\n clearEmptyKeysRecursively,\n isLocusServiceErrorCode,\n prepareDiagnosticMetricItem,\n userAgentToString,\n extractVersionMetadata,\n isMeetingInfoServiceError,\n isBrowserMediaErrorName,\n isNetworkError,\n isUnauthorizedError,\n isSdpOfferCreationError,\n} from './call-diagnostic-metrics.util';\nimport {CLIENT_NAME} from '../config';\nimport {\n Event,\n ClientType,\n SubClientType,\n NetworkType,\n EnvironmentType,\n NewEnvironmentType,\n ClientEvent,\n SubmitClientEventOptions,\n MediaQualityEvent,\n SubmitMQEOptions,\n SubmitMQEPayload,\n ClientLaunchMethodType,\n ClientEventError,\n ClientEventPayload,\n ClientInfo,\n ClientEventPayloadError,\n ClientSubServiceType,\n BrowserLaunchMethodType,\n} from '../metrics.types';\nimport CallDiagnosticEventsBatcher from './call-diagnostic-metrics-batcher';\nimport PreLoginMetricsBatcher from '../prelogin-metrics-batcher';\n\nimport {\n CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD,\n CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND,\n NEW_LOCUS_ERROR_CLIENT_CODE,\n SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP,\n UNKNOWN_ERROR,\n BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP,\n MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n NETWORK_ERROR,\n AUTHENTICATION_FAILED_CODE,\n WEBEX_SUB_SERVICE_TYPES,\n SDP_OFFER_CREATION_ERROR_MAP,\n} from './config';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\ntype GetOriginOptions = {\n clientType: ClientType;\n subClientType: SubClientType;\n networkType?: NetworkType;\n clientLaunchMethod?: ClientLaunchMethodType;\n browserLaunchMethod?: BrowserLaunchMethodType;\n environment?: EnvironmentType;\n newEnvironment?: NewEnvironmentType;\n};\n\ntype GetIdentifiersOptions = {\n meeting?: any;\n mediaConnections?: any[];\n correlationId?: string;\n preLoginId?: string;\n globalMeetingId?: string;\n webexConferenceIdStr?: string;\n};\n\n/**\n * @description Util class to handle Call Analyzer Metrics\n * @export\n * @class CallDiagnosticMetrics\n */\nexport default class CallDiagnosticMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private callDiagnosticEventsBatcher: CallDiagnosticEventsBatcher;\n // @ts-ignore\n private preLoginMetricsBatcher: PreLoginMetricsBatcher;\n\n private logger: any; // to avoid adding @ts-ignore everywhere\n private hasLoggedBrowserSerial: boolean;\n private device: any;\n\n // the default validator before piping an event to the batcher\n // this function can be overridden by the user\n public validator: (options: {\n type: 'mqe' | 'ce';\n event: Event;\n }) => Promise<{event: Event; valid: boolean}> = (options: {type: 'mqe' | 'ce'; event: Event}) =>\n Promise.resolve({event: options?.event, valid: true});\n\n /**\n * Constructor\n * @param args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.callDiagnosticEventsBatcher = new CallDiagnosticEventsBatcher({}, {parent: this.webex});\n // @ts-ignore\n this.preLoginMetricsBatcher = new PreLoginMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the login type of the current user\n * @returns one of 'login-ci','unverified-guest', null\n */\n getCurLoginType() {\n // @ts-ignore\n if (this.webex.canAuthorize) {\n // @ts-ignore\n return this.webex.credentials.isUnverifiedGuest ? 'unverified-guest' : 'login-ci';\n }\n\n return null;\n }\n\n /**\n * Returns if the meeting has converged architecture enabled\n * @param options.meetingId\n */\n getIsConvergedArchitectureEnabled({meetingId}: {meetingId?: string}): boolean {\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n return meeting?.meetingInfo?.enableConvergedArchitecture;\n }\n\n return undefined;\n }\n\n /**\n * Returns meeting's subServiceType\n * @param meeting\n * @returns\n */\n getSubServiceType(meeting?: any): ClientSubServiceType {\n if (meeting) {\n // @ts-ignore\n const meetingInfo = meeting?.meetingInfo;\n // if not Scheduled, not Webinar, pmr - then pmr\n if (!meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.PMR;\n }\n // if Scheduled, not Webinar, not pmr - then ScheduledMeeting\n if (meetingInfo?.webexScheduled && !meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.SCHEDULED_MEETING;\n }\n // if Scheduled, Webinar, not pmr - then Webinar\n if (meetingInfo?.webexScheduled && meetingInfo?.enableEvent && !meetingInfo?.pmr) {\n return WEBEX_SUB_SERVICE_TYPES.WEBINAR;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get origin object for Call Diagnostic Event payload.\n * @param options\n * @param meetingId\n * @returns\n */\n getOrigin(options: GetOriginOptions, meetingId?: string) {\n const defaultClientType: ClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.clientType;\n const defaultSubClientType: SubClientType =\n // @ts-ignore\n this.webex.meetings.config?.metrics?.subClientType;\n // @ts-ignore\n const providedClientVersion: string = this.webex.meetings.config?.metrics?.clientVersion;\n // @ts-ignore\n const defaultSDKClientVersion = `${CLIENT_NAME}/${this.webex.version}`;\n\n let versionMetadata: Pick = {};\n\n // sdk version split doesn't really make sense for now...\n if (providedClientVersion) {\n versionMetadata = extractVersionMetadata(providedClientVersion);\n }\n\n if (!this.hasLoggedBrowserSerial) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n `CallDiagnosticMetrics: @createClientEventObjectInMeeting => collected browser data`,\n JSON.stringify(getBrowserSerial())\n );\n\n this.hasLoggedBrowserSerial = true;\n }\n\n if (\n (defaultClientType && defaultSubClientType) ||\n (options.clientType && options.subClientType)\n ) {\n const origin: Event['origin'] = {\n name: 'endpoint',\n networkType: options?.networkType || 'unknown',\n userAgent: userAgentToString({\n // @ts-ignore\n clientName: this.webex.meetings?.config?.metrics?.clientName,\n // @ts-ignore\n webexVersion: this.webex.version,\n }),\n clientInfo: {\n clientType: options?.clientType || defaultClientType,\n clientVersion: providedClientVersion || defaultSDKClientVersion,\n ...versionMetadata,\n publicNetworkPrefix:\n // @ts-ignore\n anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress) || undefined,\n localNetworkPrefix:\n anonymizeIPAddress(\n // @ts-ignore\n this.webex.meetings.meetingCollection\n .get(meetingId)\n ?.statsAnalyzer?.getLocalIpAddress()\n ) || undefined,\n osVersion: getOSVersion() || 'unknown',\n subClientType: options?.subClientType || defaultSubClientType,\n os: getOSNameInternal(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion(),\n },\n };\n\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n if (meeting?.environment) {\n origin.environment = meeting.environment;\n }\n }\n\n if (options?.environment) {\n origin.environment = options.environment;\n }\n\n if (options?.newEnvironment) {\n origin.newEnvironment = options.newEnvironment;\n }\n\n if (options?.clientLaunchMethod) {\n origin.clientInfo.clientLaunchMethod = options.clientLaunchMethod;\n }\n\n if (options?.browserLaunchMethod) {\n origin.clientInfo.browserLaunchMethod = options.browserLaunchMethod;\n }\n\n return origin;\n }\n\n throw new Error(\"ClientType and SubClientType can't be undefined\");\n }\n\n /**\n * Gather identifier details for call diagnostic payload.\n * @throws Error if initialization fails.\n * @param options\n */\n getIdentifiers(options: GetIdentifiersOptions) {\n const {\n meeting,\n mediaConnections,\n correlationId,\n webexConferenceIdStr,\n globalMeetingId,\n preLoginId,\n } = options;\n const identifiers: Event['event']['identifiers'] = {\n correlationId: 'unknown',\n };\n\n if (meeting) {\n identifiers.correlationId = meeting.correlationId;\n }\n\n if (correlationId) {\n identifiers.correlationId = correlationId;\n }\n\n if (this.device) {\n const {device} = this;\n const {installationId} = device?.config || {};\n\n identifiers.userId = device?.userId || preLoginId;\n identifiers.deviceId = device?.url;\n identifiers.orgId = device?.orgId;\n // @ts-ignore\n identifiers.locusUrl = this.webex.internal.services.get('locus');\n\n if (installationId) {\n identifiers.machineId = installationId;\n }\n }\n\n if (meeting?.locusInfo?.fullState) {\n identifiers.locusUrl = meeting.locusUrl;\n identifiers.locusId = meeting.locusUrl && meeting.locusUrl.split('/').pop();\n identifiers.locusStartTime =\n meeting.locusInfo.fullState && meeting.locusInfo.fullState.lastActive;\n }\n\n if (meeting?.meetingInfo?.confIdStr || meeting?.meetingInfo?.confID) {\n identifiers.webexConferenceIdStr = `${\n meeting.meetingInfo?.confIdStr || meeting.meetingInfo?.confID\n }`;\n }\n\n if (meeting?.meetingInfo?.meetingId) {\n identifiers.globalMeetingId = meeting.meetingInfo?.meetingId;\n }\n\n if (meeting?.meetingInfo?.siteName) {\n identifiers.webexSiteName = meeting.meetingInfo?.siteName;\n }\n\n if (mediaConnections) {\n identifiers.mediaAgentAlias = mediaConnections?.[0]?.mediaAgentAlias;\n identifiers.mediaAgentGroupId = mediaConnections?.[0]?.mediaAgentGroupId;\n }\n\n if (!identifiers?.webexConferenceIdStr && webexConferenceIdStr) {\n identifiers.webexConferenceIdStr = `${webexConferenceIdStr}`;\n }\n\n if (!identifiers?.globalMeetingId && globalMeetingId) {\n identifiers.globalMeetingId = globalMeetingId;\n }\n\n if (identifiers.correlationId === undefined) {\n throw new Error('Identifiers initialization failed.');\n }\n\n return identifiers;\n }\n\n /**\n * Create diagnostic event, which can hold client event, feature event or MQE event data.\n * This just initiates the shared properties that are required for all the 3 event categories.\n * @param eventData\n * @param options\n * @returns\n */\n prepareDiagnosticEvent(eventData: Event['event'], options: any) {\n const {meetingId} = options;\n const origin = this.getOrigin(options, meetingId);\n\n const event: Event = {\n eventId: uuid.v4(),\n version: 1,\n origin,\n originTime: {\n triggered: new Date().toISOString(),\n // is overridden in prepareRequest batcher\n sent: 'not_defined_yet',\n },\n // @ts-ignore\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: eventData,\n };\n\n // sanitize (remove empty properties, CA requires it)\n // but we don't want to sanitize MQE as most of the times\n // values will be 0, [] etc, and they are required.\n if (eventData.name !== 'client.mediaquality.event') {\n clearEmptyKeysRecursively(event);\n }\n\n return event;\n }\n\n /**\n * TODO: NOT IMPLEMENTED\n * Submit Feature Event\n * @returns\n */\n public submitFeatureEvent() {\n throw Error('Not implemented');\n }\n\n /**\n * Submit Media Quality Event\n * @param args - submit params\n * @param arg.name - event key\n * @param arg.payload - additional payload to be merge with the default payload\n * @param arg.options - options\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: SubmitMQEPayload;\n options: SubmitMQEOptions;\n }) {\n const {meetingId, mediaConnections, webexConferenceIdStr, globalMeetingId} = options;\n\n // events that will most likely happen in join phase\n if (meetingId) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send MQE but no meeting was found...',\n `event: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return;\n }\n\n // merge identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create media quality event object\n let clientEventObject: MediaQualityEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n intervals: payload.intervals,\n callingServiceType: 'LOCUS',\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n // @ts-ignore\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || 'unknown',\n startTime: new Date().toISOString(),\n },\n };\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append media quality event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n this.validator({type: 'mqe', event: diagnosticEvent});\n this.submitToCallDiagnostics(diagnosticEvent);\n } else {\n throw new Error(\n 'Media quality events cant be sent outside the context of a meeting. Meeting id is required.'\n );\n }\n }\n\n /**\n * Return Client Event payload by client error code\n * @param arg - get error arg\n * @param arg.clientErrorCode\n * @param arg.serviceErrorCode\n * @param arg.payloadOverrides\n * @param arg.httpStatusCode\n * @returns\n */\n public getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n serviceErrorName,\n rawErrorMessage,\n payloadOverrides,\n httpStatusCode,\n }: {\n clientErrorCode: number;\n serviceErrorCode: any;\n serviceErrorName?: any;\n rawErrorMessage?: string;\n payloadOverrides?: any;\n httpStatusCode?: number;\n }): ClientEventError {\n let error: ClientEventError;\n\n if (clientErrorCode) {\n const partialParsedError = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n if (partialParsedError) {\n error = merge(\n {fatal: true, shownToUser: false, name: 'other', category: 'other'}, // default values\n {errorCode: clientErrorCode},\n serviceErrorName ? {errorData: {errorName: serviceErrorName}} : {},\n {serviceErrorCode},\n {rawErrorMessage},\n httpStatusCode === undefined ? {} : {httpStatusCode},\n partialParsedError,\n payloadOverrides || {}\n );\n\n return error;\n }\n }\n\n return undefined;\n }\n\n /**\n * Generate error payload for Client Event\n * @param rawError\n */\n generateClientEventErrorPayload(rawError: any) {\n const rawErrorMessage = rawError.message;\n const httpStatusCode = rawError.statusCode;\n if (rawError.name) {\n if (isBrowserMediaErrorName(rawError.name)) {\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode: BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP[rawError.name],\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isSdpOfferCreationError(rawError)) {\n // error code is 30005, but that's not specific enough. we also need to check error.cause.type\n const causeType = rawError.cause?.type;\n\n return this.getErrorPayloadForClientErrorCode({\n serviceErrorCode: undefined,\n clientErrorCode:\n SDP_OFFER_CREATION_ERROR_MAP[causeType] || SDP_OFFER_CREATION_ERROR_MAP.GENERAL,\n serviceErrorName: rawError.name,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n const serviceErrorCode =\n rawError?.error?.body?.errorCode ||\n rawError?.body?.errorCode ||\n rawError?.body?.code ||\n rawError?.body?.reason?.reasonCode;\n\n if (serviceErrorCode) {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n if (clientErrorCode) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // by default, if it is locus error, return new locus err\n if (isLocusServiceErrorCode(serviceErrorCode)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NEW_LOCUS_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n }\n\n if (isMeetingInfoServiceError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE,\n serviceErrorCode,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isNetworkError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: NETWORK_ERROR,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n if (isUnauthorizedError(rawError)) {\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: AUTHENTICATION_FAILED_CODE,\n serviceErrorCode,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n // otherwise return unkown error\n return this.getErrorPayloadForClientErrorCode({\n clientErrorCode: UNKNOWN_ERROR,\n serviceErrorCode: UNKNOWN_ERROR,\n payloadOverrides: rawError.payloadOverrides,\n rawErrorMessage,\n httpStatusCode,\n });\n }\n\n /**\n * Create client event object for in meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - options\n * @returns object\n */\n private createClientEventObjectInMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {meetingId, mediaConnections, globalMeetingId, webexConferenceIdStr} = options;\n\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.get(meetingId);\n\n if (!meeting) {\n console.warn(\n 'Attempt to send client event but no meeting was found...',\n `name: ${name}, meetingId: ${meetingId}`\n );\n // @ts-ignore\n this.webex.internal.metrics.submitClientMetrics(CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND, {\n fields: {\n meetingId,\n name,\n },\n });\n\n return undefined;\n }\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n meeting,\n mediaConnections: meeting?.mediaConnections || mediaConnections,\n webexConferenceIdStr,\n globalMeetingId,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n canProceed: true,\n identifiers,\n errors,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n userType: meeting.getCurUserType(),\n loginType:\n 'loginType' in meeting.callStateForMetrics\n ? meeting.callStateForMetrics.loginType\n : this.getCurLoginType(),\n isConvergedArchitectureEnabled: this.getIsConvergedArchitectureEnabled({\n meetingId,\n }),\n webexSubServiceType: this.getSubServiceType(meeting),\n };\n\n return clientEventObject;\n }\n\n /**\n * Create client event object for pre meeting events\n * @param arg - create args\n * @param arg.event - event key\n * @param arg.options - payload\n * @returns object\n */\n private createClientEventObjectPreMeeting({\n name,\n options,\n errors,\n }: {\n name: ClientEvent['name'];\n options?: SubmitClientEventOptions;\n errors?: ClientEventPayloadError;\n }) {\n const {correlationId, globalMeetingId, webexConferenceIdStr, preLoginId} = options;\n\n // grab identifiers\n const identifiers = this.getIdentifiers({\n correlationId,\n preLoginId,\n globalMeetingId,\n webexConferenceIdStr,\n });\n\n // create client event object\n const clientEventObject: ClientEvent['payload'] = {\n name,\n errors,\n canProceed: true,\n identifiers,\n eventData: {\n webClientDomain: window.location.hostname,\n },\n loginType: this.getCurLoginType(),\n };\n\n return clientEventObject;\n }\n\n /**\n * Prepare Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @returns {any} options to be with fetch\n * @throws\n */\n private prepareClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n const {meetingId, correlationId, rawError} = options;\n let clientEventObject: ClientEvent['payload'];\n\n // check if we need to generate errors\n const errors: ClientEventPayloadError = [];\n\n if (rawError) {\n const generatedError = this.generateClientEventErrorPayload(rawError);\n if (generatedError) {\n errors.push(generatedError);\n }\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @prepareClientEvent. Generated errors:',\n `generatedError: ${JSON.stringify(generatedError)}`\n );\n }\n\n // events that will most likely happen in join phase\n if (meetingId) {\n clientEventObject = this.createClientEventObjectInMeeting({name, options, errors});\n } else if (correlationId) {\n // any pre join events or events that are outside the meeting.\n clientEventObject = this.createClientEventObjectPreMeeting({name, options, errors});\n } else {\n throw new Error('Not implemented');\n }\n\n // merge any new properties, or override existing ones\n clientEventObject = merge(clientEventObject, payload);\n\n // append client event data to the call diagnostic event\n const diagnosticEvent = this.prepareDiagnosticEvent(clientEventObject, options);\n\n return diagnosticEvent;\n }\n\n /**\n * Submit Client Event CA event.\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - payload\n * @throws\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }) {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @submitClientEvent. Submit Client Event CA event.',\n `name: ${name}`\n );\n const diagnosticEvent = this.prepareClientEvent({name, payload, options});\n\n if (options?.preLoginId) {\n return this.submitToCallDiagnosticsPreLogin(diagnosticEvent, options?.preLoginId);\n }\n\n this.validator({type: 'ce', event: diagnosticEvent});\n\n return this.submitToCallDiagnostics(diagnosticEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service.\n * @param event\n * @returns promise\n */\n submitToCallDiagnostics(event: Event): Promise {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n\n return this.callDiagnosticEventsBatcher.request(finalEvent);\n }\n\n /**\n * Prepare the event and send the request to metrics-a service, pre login.\n * @param event\n * @param preLoginId\n * @returns\n */\n submitToCallDiagnosticsPreLogin = (event: Event, preLoginId?: string): Promise => {\n // build metrics-a event type\n const finalEvent = {\n eventPayload: event,\n type: ['diagnostic-event'],\n };\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n };\n\n /**\n * Builds a request options object to later be passed to fetch().\n * @param arg - submit params\n * @param arg.event - event key\n * @param arg.payload - additional payload to be merged with default payload\n * @param arg.options - client event options\n * @returns {Promise}\n * @throws\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n options?: SubmitClientEventOptions;\n }): Promise {\n this.logger.log(\n CALL_DIAGNOSTIC_LOG_IDENTIFIER,\n 'CallDiagnosticMetrics: @buildClientEventFetchRequestOptions. Building request options object for fetch()...',\n `name: ${name}`\n );\n\n const clientEvent = this.prepareClientEvent({name, payload, options});\n\n // build metrics-a event type\n // @ts-ignore\n const diagnosticEvent = prepareDiagnosticMetricItem(this.webex, {\n eventPayload: clientEvent,\n type: ['diagnostic-event'],\n });\n\n const request = {\n method: 'POST',\n service: 'metrics',\n resource: 'clientmetrics',\n body: {\n metrics: [diagnosticEvent],\n },\n headers: {},\n // @ts-ignore\n waitForServiceTimeout: this.webex.internal.metrics.config.waitForServiceTimeout,\n };\n\n if (options.preLoginId) {\n request.headers = {\n authorization: false,\n 'x-prelogin-userid': options.preLoginId,\n };\n request.resource = 'clientmetrics-prelogin';\n }\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(request);\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n const clientErrorCode = SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP[serviceErrorCode];\n const clientErrorPayload = CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD[clientErrorCode];\n\n return clientErrorPayload?.category === 'expected';\n }\n\n /**\n * This method is used to set the device information by internal-plugin-device\n * @param {device} object The webex.internal.device object\n * @returns {undefined}\n */\n public setDeviceInfo(device: any): void {\n // This was created to fix the circular dependency between internal-plugin-device and internal-plugin-metrics\n this.logger.log('CallDiagnosticMetrics: @setDeviceInfo called', device);\n\n this.device = device;\n }\n}\n","import {merge} from 'lodash';\nimport {BrowserDetection} from '@webex/common';\nimport {StatelessWebexPlugin} from '@webex/webex-core';\nimport {getOSNameInternal} from '../metrics';\nimport {BEHAVIORAL_LOG_IDENTIFIER} from './config';\nimport {\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n BehavioralEventContext,\n BehavioralEvent,\n BehavioralEventPayload,\n} from '../metrics.types';\nimport ClientMetricsBatcher from '../client-metrics-batcher';\n\nconst {getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n/**\n * @description Util class to handle Behavioral Metrics\n * @export\n * @class BehavioralMetrics\n */\nexport default class BehavioralMetrics extends StatelessWebexPlugin {\n // @ts-ignore\n private clientMetricsBatcher: ClientMetricsBatcher;\n private logger: any; // to avoid adding @ts-ignore everywhere\n private device: any;\n private version: string;\n\n /**\n * Constructor\n * @param {any[]} args\n */\n constructor(...args) {\n super(...args);\n // @ts-ignore\n this.logger = this.webex.logger;\n // @ts-ignore\n this.device = this.webex.internal.device;\n // @ts-ignore\n this.version = this.webex.version;\n // @ts-ignore\n this.clientMetricsBatcher = new ClientMetricsBatcher({}, {parent: this.webex});\n }\n\n /**\n * Returns the deviceId from our registration with WDM.\n * @returns {string} deviceId or empty string\n */\n private getDeviceId(): string {\n const {url} = this.device;\n if (url && url.length !== 0) {\n const n = url.lastIndexOf('/');\n if (n !== -1) {\n return url.substring(n + 1);\n }\n }\n\n return '';\n }\n\n /**\n * Returns the context object to be submitted with all behavioral metrics.\n * @returns {BehavioralEventContext}\n */\n private getContext(): BehavioralEventContext {\n const context: BehavioralEventContext = {\n app: {\n version: this.version,\n },\n device: {\n id: this.getDeviceId(),\n },\n locale: window.navigator.language,\n os: {\n name: getOSNameInternal(),\n version: getOSVersion(),\n },\n };\n\n return context;\n }\n\n /**\n * Returns the default tags to be included with all behavioral metrics.\n * @returns {BehavioralEventPayload}\n */\n private getDefaultTags(): BehavioralEventPayload {\n const tags = {\n browser: getBrowserName(),\n browserHeight: window.innerHeight,\n browserVersion: getBrowserVersion(),\n browserWidth: window.innerWidth,\n domain: window.location.hostname,\n inIframe: window.self !== window.top,\n locale: window.navigator.language,\n os: getOSNameInternal(),\n };\n\n return tags;\n }\n\n /**\n * Creates the object to send to our metrics endpoint for a behavioral event\n * @param {MetricEventProduct} product\n * @param {MetricEventAgent} agent\n * @param {string} target\n * @param {MetricEventVerb} verb\n * @returns {BehavioralEventPayload}\n */\n private createEventObject({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: BehavioralEventPayload;\n }): BehavioralEvent {\n const metricName = `${product}.${agent}.${target}.${verb}`;\n let allTags: BehavioralEventPayload = payload;\n allTags = merge(allTags, this.getDefaultTags());\n\n const event: BehavioralEvent = {\n context: this.getContext(),\n metricName,\n tags: allTags,\n timestamp: Date.now(),\n type: ['behavioral'],\n };\n\n return event;\n }\n\n /**\n * Returns true once we're ready to submit behavioral metrics, after startup.\n * @returns {boolean} true when deviceId is defined and non-empty\n */\n public isReadyToSubmitBehavioralEvents(): boolean {\n const deviceId = this.getDeviceId();\n\n return deviceId && deviceId.length !== 0;\n }\n\n /**\n * Submit a behavioral metric to our metrics endpoint.\n * @param {MetricEventProduct} product the product from which the metric is being submitted, e.g. 'webex' web client, 'wxcc_desktop'\n * @param {MetricEventAgent} agent the source of the action for this metric\n * @param {string} target the 'thing' that this metric includes information about\n * @param {MetricEventVerb} verb the action that this metric includes information about\n * @param {BehavioralEventPayload} payload information specific to this event. This should be flat, i.e. it should not include nested objects.\n * @returns {Promise}\n */\n public submitBehavioralEvent({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: BehavioralEventPayload;\n }) {\n this.logger.log(\n BEHAVIORAL_LOG_IDENTIFIER,\n `BehavioralMetrics: @submitBehavioralEvent. Submit Behavioral event: ${product}.${agent}.${target}.${verb}`\n );\n const behavioralEvent = this.createEventObject({product, agent, target, verb, payload});\n\n return this.clientMetricsBatcher.request(behavioralEvent);\n }\n}\n","/* eslint-disable import/prefer-default-export */\n\nexport const BEHAVIORAL_LOG_IDENTIFIER = 'behavioral-events -> ';\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {MetricEventNames, PreComputedLatencies} from '../metrics.types';\n\n// we only care about client event and feature event for now\n\n/**\n * @description Helper class to store latencies timestamp and to calculate various latencies for CA.\n * @exports\n * @class CallDiagnosticLatencies\n */\nexport default class CallDiagnosticLatencies extends WebexPlugin {\n latencyTimestamps: Map;\n precomputedLatencies: Map;\n // meetingId that the current latencies are for\n private meetingId?: string;\n\n /**\n * @constructor\n */\n constructor(...args) {\n super(...args);\n this.latencyTimestamps = new Map();\n this.precomputedLatencies = new Map();\n }\n\n /**\n * Clear timestamps\n */\n public clearTimestamps() {\n this.latencyTimestamps.clear();\n this.precomputedLatencies.clear();\n }\n\n /**\n * Associate current latencies with a meeting id\n * @param meetingId\n */\n private setMeetingId(meetingId: string) {\n this.meetingId = meetingId;\n }\n\n /**\n * Returns the meeting object associated with current latencies\n * @returns meeting object\n */\n private getMeeting() {\n if (this.meetingId) {\n // @ts-ignore\n return this.webex.meetings.meetingCollection.get(this.meetingId);\n }\n\n return undefined;\n }\n\n /**\n * Store timestamp value\n * @param key - key\n * @param value - value\n * @param options - store options\n * @throws\n * @returns\n */\n public saveTimestamp({\n key,\n value = new Date().getTime(),\n options = {},\n }: {\n key: MetricEventNames;\n value?: number;\n options?: {meetingId?: string};\n }) {\n // save the meetingId so we can use the meeting object in latency calculations if needed\n const {meetingId} = options;\n if (meetingId) {\n this.setMeetingId(meetingId);\n }\n // for some events we're only interested in the first timestamp not last\n // as these events can happen multiple times\n if (\n key === 'client.media.rx.start' ||\n key === 'client.media.tx.start' ||\n key === 'internal.client.meetinginfo.request' ||\n key === 'internal.client.meetinginfo.response'\n ) {\n this.saveFirstTimestampOnly(key, value);\n } else {\n this.latencyTimestamps.set(key, value);\n }\n }\n\n /**\n * Store precomputed latency value\n * @param key - key\n * @param value - value\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @throws\n * @returns\n */\n public saveLatency(key: PreComputedLatencies, value: number, accumulate = false) {\n const existingValue = accumulate ? this.precomputedLatencies.get(key) || 0 : 0;\n this.precomputedLatencies.set(key, value + existingValue);\n }\n\n /**\n * Measure latency for a request\n * @param callback - callback for which you would like to measure latency\n * @param key - key\n * @param accumulate - when it is true, it overwrites existing value with sum of the current value and the new measurement otherwise just store the new measurement\n * @returns\n */\n public measureLatency(\n callback: () => Promise,\n key: PreComputedLatencies,\n accumulate = false\n ) {\n const start = performance.now();\n\n return callback().finally(() => {\n this.saveLatency(key, performance.now() - start, accumulate);\n });\n }\n\n /**\n * Store only the first timestamp value for the given key\n * @param key - key\n * @param value -value\n * @throws\n * @returns\n */\n saveFirstTimestampOnly(key: MetricEventNames, value: number = new Date().getTime()) {\n if (this.latencyTimestamps.has(key)) {\n return;\n }\n this.latencyTimestamps.set(key, value);\n }\n\n /**\n * Helper to calculate end - start\n * @param a start\n * @param b end\n * @returns latency\n */\n public getDiffBetweenTimestamps(a: MetricEventNames, b: MetricEventNames) {\n const start = this.latencyTimestamps.get(a);\n const end = this.latencyTimestamps.get(b);\n if (start && end) {\n return end - start;\n }\n\n return undefined;\n }\n\n /**\n * Meeting Info Request\n * @note Meeting Info request happen not just in the join phase. CA requires\n * metrics around meeting info request that are only part of join phase.\n * This internal.* event is used to track the real timestamps\n * (when the actual request/response happen). This is because the actual CA event is\n * sent inside the join method on the meeting object based on some logic, but that's not exactly when\n * those events are actually fired. The logic only confirms that they have happened, and we send them over.\n * @returns - latency\n */\n public getMeetingInfoReqResp() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meetinginfo.request',\n 'internal.client.meetinginfo.response'\n );\n }\n\n /**\n * Interstitial Time\n * @returns - latency\n */\n public getShowInterstitialTime() {\n return this.getDiffBetweenTimestamps(\n 'client.interstitial-window.start-launch',\n 'internal.client.interstitial-window.click.joinbutton'\n );\n }\n\n /**\n * getU2CTime\n * @returns - latency\n */\n public getU2CTime() {\n const u2cLatency = this.precomputedLatencies.get('internal.get.u2c.time');\n\n return u2cLatency ? Math.floor(u2cLatency) : undefined;\n }\n\n /**\n * Device Register Time\n * @returns - latency\n */\n public getRegisterWDMDeviceJMT() {\n return this.getDiffBetweenTimestamps(\n 'internal.register.device.request',\n 'internal.register.device.response'\n );\n }\n\n /**\n * Call Init Join Request\n * @returns - latency\n */\n public getCallInitJoinReq() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.request'\n );\n }\n\n /**\n * Locus Join Request\n * @returns - latency\n */\n public getJoinReqResp() {\n return this.getDiffBetweenTimestamps('client.locus.join.request', 'client.locus.join.response');\n }\n\n /**\n * Time taken to do turn discovery\n * @returns - latency\n */\n public getTurnDiscoveryTime() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.add-media.turn-discovery.start',\n 'internal.client.add-media.turn-discovery.end'\n );\n }\n\n /**\n * Local SDP Generated Remote SDP REceived\n * @returns - latency\n */\n public getLocalSDPGenRemoteSDPRecv() {\n return this.getDiffBetweenTimestamps(\n 'client.media-engine.local-sdp-generated',\n 'client.media-engine.remote-sdp-received'\n );\n }\n\n /**\n * ICE Setup Time\n * @returns - latency\n */\n public getICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Audio ICE time\n * @returns - latency\n */\n public getAudioICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Video ICE Time\n * @returns - latency\n */\n public getVideoICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Share ICE Time\n * @returns - latency\n */\n public getShareICESetupTime() {\n return this.getDiffBetweenTimestamps('client.ice.start', 'client.ice.end');\n }\n\n /**\n * Stay Lobby Time\n * @returns - latency\n */\n public getStayLobbyTime() {\n return this.getDiffBetweenTimestamps(\n 'client.locus.join.response',\n 'internal.host.meeting.participant.admitted'\n );\n }\n\n /**\n * Page JMT\n * @returns - latency\n */\n public getPageJMT() {\n return this.precomputedLatencies.get('internal.client.pageJMT') || undefined;\n }\n\n /**\n * Download Time JMT\n * @returns - latency\n */\n public getDownloadTimeJMT() {\n return this.precomputedLatencies.get('internal.download.time') || undefined;\n }\n\n /**\n * Click To Interstitial\n * @returns - latency\n */\n public getClickToInterstitial() {\n // for normal join (where green join button exists before interstitial, i.e reminder, space list etc)\n if (this.latencyTimestamps.get('internal.client.meeting.click.joinbutton')) {\n return this.getDiffBetweenTimestamps(\n 'internal.client.meeting.click.joinbutton',\n 'internal.client.meeting.interstitial-window.showed'\n );\n }\n\n // for cross launch and guest flows\n return this.precomputedLatencies.get('internal.click.to.interstitial') || undefined;\n }\n\n /**\n * Interstitial To Join Ok\n * @returns - latency\n */\n public getInterstitialToJoinOK() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.locus.join.response'\n );\n }\n\n /**\n * Call Init To MediaEngineReady\n * @returns - latency\n */\n public getCallInitMediaEngineReady() {\n return this.getDiffBetweenTimestamps(\n 'internal.client.interstitial-window.click.joinbutton',\n 'client.media-engine.ready'\n );\n }\n\n /**\n * Interstitial To Media Ok\n * @returns - latency\n */\n public getInterstitialToMediaOKJMT() {\n const interstitialJoinClickTimestamp = this.latencyTimestamps.get(\n 'internal.client.interstitial-window.click.joinbutton'\n );\n\n // get the first timestamp\n const connectedMedia = this.latencyTimestamps.get('client.ice.end');\n\n const lobbyTime = this.getStayLobbyTime() || 0;\n\n if (interstitialJoinClickTimestamp && connectedMedia) {\n return connectedMedia - interstitialJoinClickTimestamp - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Total JMT\n * @returns - latency\n */\n public getTotalJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n\n if (clickToInterstitial && interstitialToJoinOk) {\n return clickToInterstitial + interstitialToJoinOk;\n }\n\n return undefined;\n }\n\n /**\n * Join Conf JMT\n * @returns - latency\n */\n public getJoinConfJMT() {\n const joinReqResp = this.getJoinReqResp();\n const ICESetupTime = this.getICESetupTime();\n\n if (joinReqResp && ICESetupTime) {\n return joinReqResp + ICESetupTime;\n }\n\n return undefined;\n }\n\n /**\n * Total Media JMT\n * @returns - latency\n */\n public getTotalMediaJMT() {\n const clickToInterstitial = this.getClickToInterstitial();\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n const lobbyTime = this.getStayLobbyTime();\n\n if (clickToInterstitial && interstitialToJoinOk && joinConfJMT) {\n const totalMediaJMT = clickToInterstitial + interstitialToJoinOk + joinConfJMT;\n if (this.getMeeting()?.allowMediaInLobby) {\n return totalMediaJMT;\n }\n\n return totalMediaJMT - lobbyTime;\n }\n\n return undefined;\n }\n\n /**\n * Client JMT\n * @returns - latency\n */\n public getClientJMT() {\n const interstitialToJoinOk = this.getInterstitialToJoinOK();\n const joinConfJMT = this.getJoinConfJMT();\n\n if (interstitialToJoinOk && joinConfJMT) {\n return interstitialToJoinOk - joinConfJMT;\n }\n\n return undefined;\n }\n\n /**\n * Audio setup delay receive\n */\n public getAudioJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Video setup delay receive\n */\n public getVideoJoinRespRxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.rx.start');\n }\n\n /**\n * Total latency for all get cluster request.\n */\n public getReachabilityClustersReqResp() {\n const reachablityClusterReqResp = this.precomputedLatencies.get('internal.get.cluster.time');\n\n return reachablityClusterReqResp ? Math.floor(reachablityClusterReqResp) : undefined;\n }\n\n /**\n * Audio setup delay transmit\n */\n public getAudioJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Video setup delay transmit\n */\n public getVideoJoinRespTxStart() {\n return this.getDiffBetweenTimestamps('client.locus.join.response', 'client.media.tx.start');\n }\n\n /**\n * Total latency for all exchange ci token.\n */\n public getExchangeCITokenJMT() {\n const exchangeCITokenJMT = this.precomputedLatencies.get('internal.exchange.ci.token.time');\n\n return exchangeCITokenJMT ? Math.floor(exchangeCITokenJMT) : undefined;\n }\n\n /**\n * Total latency for all refresh captcha requests.\n */\n public getRefreshCaptchaReqResp() {\n const refreshCaptchaReqResp = this.precomputedLatencies.get('internal.refresh.captcha.time');\n\n return refreshCaptchaReqResp ? Math.floor(refreshCaptchaReqResp) : undefined;\n }\n\n /**\n * Get the latency for downloading intelligence models.\n * @returns - latency\n */\n public getDownloadIntelligenceModelsReqResp() {\n const downloadIntelligenceModelsReqResp = this.precomputedLatencies.get(\n 'internal.api.fetch.intelligence.models'\n );\n\n return downloadIntelligenceModelsReqResp\n ? Math.floor(downloadIntelligenceModelsReqResp)\n : undefined;\n }\n\n /**\n * Get the total latency for all other app API requests.\n * Excludes meeting info, because it's measured separately.\n * @returns - latency\n */\n public getOtherAppApiReqResp() {\n const otherAppApiJMT = this.precomputedLatencies.get('internal.other.app.api.time');\n\n return otherAppApiJMT > 0 ? Math.floor(otherAppApiJMT) : undefined;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable valid-jsdoc */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport BehavioralMetrics from './behavioral/behavioral-metrics';\nimport {\n RecursivePartial,\n MetricEventProduct,\n MetricEventAgent,\n MetricEventVerb,\n ClientEvent,\n FeatureEvent,\n BehavioralEventPayload,\n OperationalEvent,\n MediaQualityEvent,\n InternalEvent,\n SubmitClientEventOptions,\n} from './metrics.types';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport {setMetricTimings} from './call-diagnostic/call-diagnostic-metrics.util';\nimport {generateCommonErrorMetadata} from './utils';\n\n/**\n * Metrics plugin to centralize all types of metrics.\n * @class\n */\nclass Metrics extends WebexPlugin {\n // eslint-disable-next-line no-use-before-define\n static instance: Metrics;\n\n // Call Diagnostic latencies\n callDiagnosticLatencies: CallDiagnosticLatencies;\n // Helper classes to handle the different types of metrics\n callDiagnosticMetrics: CallDiagnosticMetrics;\n behavioralMetrics: BehavioralMetrics;\n\n /**\n * Constructor\n * @param args\n * @constructor\n * @private\n * @returns\n */\n constructor(...args) {\n super(...args);\n\n // @ts-ignore\n this.callDiagnosticLatencies = new CallDiagnosticLatencies({}, {parent: this.webex});\n this.onReady();\n }\n\n /**\n * On Ready\n */\n private onReady() {\n // @ts-ignore\n this.webex.once('ready', () => {\n // @ts-ignore\n this.callDiagnosticMetrics = new CallDiagnosticMetrics({}, {parent: this.webex});\n // @ts-ignore\n this.behavioralMetrics = new BehavioralMetrics({}, {parent: this.webex});\n });\n }\n\n /**\n * Used for internal purposes only\n * @param args\n */\n submitInternalEvent({\n name,\n payload,\n options,\n }: {\n name: InternalEvent['name'];\n payload?: RecursivePartial;\n options?: any;\n }) {\n if (name === 'internal.reset.join.latencies') {\n this.callDiagnosticLatencies.clearTimestamps();\n } else {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n }\n }\n\n /**\n * @returns true once we have the deviceId we need to submit behavioral events to Amplitude\n */\n isReadyToSubmitBehavioralEvents() {\n return this.behavioralMetrics.isReadyToSubmitBehavioralEvents();\n }\n\n /**\n * Behavioral event\n * @param args\n */\n submitBehavioralEvent({\n product,\n agent,\n target,\n verb,\n payload,\n }: {\n product: MetricEventProduct;\n agent: MetricEventAgent;\n target: string;\n verb: MetricEventVerb;\n payload?: BehavioralEventPayload;\n }) {\n if (!this.behavioralMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitBehavioralEvent. Attempted to submit before webex.ready: ${product}.${agent}.${target}.${verb}`\n );\n\n return Promise.resolve();\n }\n\n return this.behavioralMetrics.submitBehavioralEvent({product, agent, target, verb, payload});\n }\n\n /**\n * Operational event\n * @param args\n */\n submitOperationalEvent({\n name,\n payload,\n options,\n }: {\n name: OperationalEvent['name'];\n payload?: RecursivePartial;\n options?: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Media Quality Event\n * @param args\n */\n submitMQE({\n name,\n payload,\n options,\n }: {\n name: MediaQualityEvent['name'];\n payload: RecursivePartial & {\n intervals: MediaQualityEvent['payload']['intervals'];\n };\n options: any;\n }) {\n this.callDiagnosticLatencies.saveTimestamp({key: name});\n this.callDiagnosticMetrics.submitMQE({name, payload, options});\n }\n\n /**\n * Call Analyzer: Feature Usage Event\n * @param args\n */\n submitFeatureEvent({\n name,\n payload,\n options,\n }: {\n name: FeatureEvent['name'];\n payload?: RecursivePartial;\n options: any;\n }) {\n throw new Error('Not implemented.');\n }\n\n /**\n * Call Analyzer: Client Event\n * @public\n * @param args\n */\n public submitClientEvent({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial;\n options?: SubmitClientEventOptions;\n }): Promise {\n if (!this.callDiagnosticLatencies || !this.callDiagnosticMetrics) {\n // @ts-ignore\n this.webex.logger.log(\n `NewMetrics: @submitClientEvent. Attempted to submit before webex.ready. Event name: ${name}`\n );\n\n return Promise.resolve();\n }\n this.callDiagnosticLatencies.saveTimestamp({\n key: name,\n options: {meetingId: options?.meetingId},\n });\n\n return this.callDiagnosticMetrics.submitClientEvent({name, payload, options});\n }\n\n /**\n * Issue request to alias a user's pre-login ID with their CI UUID\n * @param {string} preLoginId\n * @returns {Object} HttpResponse object\n */\n public clientMetricsAliasUser(preLoginId: string) {\n // @ts-ignore\n return this.webex\n .request({\n method: 'POST',\n api: 'metrics',\n resource: 'clientmetrics',\n headers: {\n 'x-prelogin-userid': preLoginId,\n },\n body: {},\n qs: {\n alias: true,\n },\n })\n .then((res) => {\n // @ts-ignore\n this.webex.logger.log(`NewMetrics: @clientMetricsAliasUser. Request successful.`);\n\n return res;\n })\n .catch((err) => {\n // @ts-ignore\n this.logger.error(\n `NewMetrics: @clientMetricsAliasUser. Request failed:`,\n `err: ${generateCommonErrorMetadata(err)}`\n );\n\n return Promise.reject(err);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for submitting a metric.\n *\n * This is to support quickly submitting metrics when the browser/tab is closing.\n * Calling submitClientEvent will not work because there some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when beforeUnload is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the timings values will be wrong, but setMetricTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} arg\n * @param {String} arg.name - event name\n * @param {Object} arg.payload - event payload\n * @param {Object} arg.options - other options\n * @returns {Promise} promise that resolves to options to be used with fetch\n */\n public async buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n }: {\n name: ClientEvent['name'];\n payload?: RecursivePartial;\n options?: SubmitClientEventOptions;\n }): Promise {\n return this.callDiagnosticMetrics.buildClientEventFetchRequestOptions({\n name,\n payload,\n options,\n });\n }\n\n /**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" and \"originTime\" values to Date.now() since the existing times\n * were set when the options were built (not submitted).\n\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to the response object\n */\n public setMetricTimingsAndFetch(options: any): Promise {\n // @ts-ignore\n return this.webex.setTimingsAndFetch(setMetricTimings(options));\n }\n\n /**\n * Returns true if the specified serviceErrorCode maps to an expected error.\n * @param {number} serviceErrorCode the service error code\n * @returns {boolean}\n */\n public isServiceErrorExpected(serviceErrorCode: number): boolean {\n return this.callDiagnosticMetrics.isServiceErrorExpected(serviceErrorCode);\n }\n}\n\nexport default Metrics;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Metrics from './metrics';\nimport config from './config';\nimport NewMetrics from './new-metrics';\nimport * as Utils from './utils';\nimport {\n ClientEvent,\n ClientEventLeaveReason,\n SubmitBehavioralEvent,\n SubmitClientEvent,\n SubmitInternalEvent,\n SubmitOperationalEvent,\n SubmitMQE,\n PreComputedLatencies,\n} from './metrics.types';\nimport * as CALL_DIAGNOSTIC_CONFIG from './call-diagnostic/config';\nimport * as CallDiagnosticUtils from './call-diagnostic/call-diagnostic-metrics.util';\nimport CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';\nimport CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';\nimport BehavioralMetrics from './behavioral/behavioral-metrics';\n\nregisterInternalPlugin('metrics', Metrics, {\n config,\n});\n\nregisterInternalPlugin('newMetrics', NewMetrics, {\n config,\n});\n\nexport {default, getOSNameInternal} from './metrics';\n\nexport {\n config,\n CALL_DIAGNOSTIC_CONFIG,\n NewMetrics,\n Utils,\n CallDiagnosticUtils,\n CallDiagnosticLatencies,\n CallDiagnosticMetrics,\n BehavioralMetrics,\n};\nexport type {\n ClientEvent,\n ClientEventLeaveReason,\n SubmitBehavioralEvent,\n SubmitClientEvent,\n SubmitInternalEvent,\n SubmitMQE,\n SubmitOperationalEvent,\n PreComputedLatencies,\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n * @ignore\n */\nconst PresenceBatcher = Batcher.extend({\n namespace: 'Presence',\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n res.body.statusList.map((presenceResponse) =>\n this.handleItemSuccess(presenceResponse.subject, presenceResponse)\n )\n );\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemFailure(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemSuccess(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise}\n */\n fingerprintRequest(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise}\n */\n fingerprintResponse(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Array} ids\n * @returns {Promise}\n */\n prepareRequest(ids) {\n return Promise.resolve(ids);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Object} subjects\n * @returns {Promise}\n */\n submitHttpRequest(subjects) {\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'compositions',\n body: {subjects},\n });\n },\n});\n\nexport default PresenceBatcher;\n","export const GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms\n\nexport const FETCH_DELAY = 300; // ms\n\nexport const UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms\nexport const EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms\nexport const PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms\nexport const DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';\nexport const PRESENCE_UPDATE = 'updated';\n\nexport const ENVELOPE_TYPE = {\n SUBSCRIPTION: 'subscription',\n PRESENCE: 'presence',\n DELETE: 'delete',\n};\n","import {debounce} from 'lodash';\n\nimport {\n FETCH_DELAY,\n GROUNDSKEEPER_INTERVAL,\n SUBSCRIPTION_DELAY,\n UPDATE_PRESENCE_DELAY,\n EXPIRED_PRESENCE_TIME,\n PREMATURE_EXPIRATION_SUBSCRIPTION_TIME,\n DEFAULT_SUBSCRIPTION_TTL,\n APHELEIA_SUBSCRIPTION_UPDATE,\n PRESENCE_UPDATE,\n ENVELOPE_TYPE,\n} from './constants';\n\n/**\n * Presence Worker\n * Manages fetches and subscriptions for presence\n * @class\n */\nexport default class PresenceWorker {\n /**\n * Constructs a presence worker to execute and\n * maintain tasks related to presence upkeep.\n * @returns {undefined}\n */\n constructor() {\n this.presences = {}; // current presence objects; updated time\n this.watchers = {}; // counter of visible presence-required objects\n this.fetchers = {}; // waiting to get presence object\n this.flights = {}; // in flight to get presence object\n this.campers = {}; // waiting to subscribe; updated time\n this.subscribers = {}; // current subscriptions; expiration time\n }\n\n /**\n * Connect to the mercury for presence and starts worker.\n * @param {object} webex\n * @returns {undefined}\n */\n initialize(webex) {\n if (!webex || !webex.internal) {\n throw new Error('Must initialize Presence Worker with webex!');\n }\n\n this.webex = webex;\n\n const mercury = this.webex.internal.mercury.connected\n ? Promise.resolve()\n : this.webex.internal.mercury.connect();\n\n mercury.then(() => {\n this.webex.internal.mercury.on(\n APHELEIA_SUBSCRIPTION_UPDATE,\n this.subscriptionUpdate.bind(this)\n );\n });\n\n setInterval(this.groundskeeper.bind(this), GROUNDSKEEPER_INTERVAL);\n }\n\n /**\n * Trigger a subscription update event.\n * @param {string} event\n * @returns {undefined}\n */\n subscriptionUpdate(event) {\n this.presences[event.data.subject] = new Date().getTime();\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.SUBSCRIPTION,\n payload: event.data,\n });\n }\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n const now = new Date().getTime();\n\n if (this.watchers[id]) {\n this.watchers[id] += 1;\n } else {\n this.watchers[id] = 1;\n }\n\n if (this.subscribers[id]) {\n return;\n }\n\n if (!this.campers[id]) {\n this.campers[id] = now;\n }\n\n // Retrieve presence if:\n // not in flight or\n // don't already have the presence or\n // presence has gone stale\n if (\n !this.flights[id] &&\n (!this.presences[id] || this.presences[id] < now - UPDATE_PRESENCE_DELAY)\n ) {\n this.fetchers[id] = id;\n this.debouncedFetch();\n }\n }\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n if (this.watchers[id]) {\n this.watchers[id] -= 1;\n\n if (this.watchers[id] <= 0) {\n delete this.watchers[id];\n delete this.fetchers[id];\n delete this.campers[id];\n }\n }\n }\n\n /**\n * Retrieve users' presences.\n * @returns {undefined}\n */\n checkFetchers() {\n const boarding = this.fetchers;\n\n Object.assign(this.flights, boarding);\n this.fetchers = {};\n\n this.webex.internal.presence.list(Object.keys(boarding)).then((response) => {\n const now = new Date().getTime();\n\n response.statusList.forEach((presence) => {\n const id = presence.subject;\n\n delete this.flights[id];\n this.presences[id] = now;\n });\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.PRESENCE,\n payload: response,\n });\n });\n }\n\n debouncedFetch = debounce(this.checkFetchers, FETCH_DELAY);\n\n /**\n * Determine if we should subscribe to users' presences.\n * @returns {Array}: User ids to subscribe.\n */\n checkCampers() {\n const now = new Date().getTime();\n const subscribers = [];\n\n Object.entries(this.campers).forEach((camper) => {\n const id = camper[0];\n const time = camper[1];\n\n // Subscribe if they've been camping for a minute\n if (time < now - SUBSCRIPTION_DELAY) {\n delete this.campers[id];\n this.subscribers[id] = null;\n subscribers.push(id);\n }\n });\n\n return subscribers;\n }\n\n /**\n * Determine if we should re-subscribe or remove users' subscriptions.\n * @returns {Array}: User ids to re-subscribe.\n */\n checkSubscriptions() {\n const now = new Date().getTime();\n\n const renewIds = [];\n\n Object.entries(this.subscribers).forEach((subscription) => {\n const id = subscription[0];\n const expiration = subscription[1];\n\n if (expiration) {\n // Renew subscription if they're about to expire\n if (this.watchers[id] && now > expiration - PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {\n renewIds.push(id);\n } else if (now > expiration) {\n delete this.subscribers[id];\n }\n }\n });\n\n return renewIds;\n }\n\n /**\n * Remove expired presence objects.\n * @returns {undefined}\n */\n cleanPresences() {\n const trash = [];\n const tenMinutesAgo = new Date().getTime() - EXPIRED_PRESENCE_TIME;\n\n Object.entries(this.presences).forEach((presence) => {\n const id = presence[0];\n const lastUpdated = presence[1];\n\n // Delete the object if it is stale\n if (lastUpdated < tenMinutesAgo) {\n delete this.presences[id];\n trash.push(id);\n }\n });\n\n // Tells client to delete it too\n if (trash.length) {\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.DELETE,\n payload: trash,\n });\n }\n }\n\n /**\n * Execute chores on an interval.\n * Checks if we should make new subscribe,\n * checks if we should re-subscribe,\n * removes expired subscriptions,\n * removes expired presence objects.\n * @returns {undefined}\n */\n groundskeeper() {\n const campers = this.checkCampers();\n const renewSubscriptions = this.checkSubscriptions();\n\n const ids = [...campers, ...renewSubscriptions];\n\n if (ids.length) {\n this.webex.internal.presence.subscribe(ids).then((body) => {\n const now = new Date().getTime();\n\n body.responses.forEach((response) => {\n if (response.responseCode === 200) {\n const ttl = response.subscriptionTtl * 1000;\n\n this.subscribers[response.subject] = now + ttl;\n this.presences[response.status.subject] = now;\n } else {\n // If it errored for any reason, set the ttl so we clean it out eventually\n this.subscribers[response.subject] = now + DEFAULT_SUBSCRIPTION_TTL;\n }\n });\n });\n }\n\n this.cleanPresences();\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport PresenceBatcher from './presence-batcher';\nimport PresenceWorker from './presence-worker';\n\nconst defaultSubscriptionTtl = 600;\nconst USER = 'user';\nconst USER_PRESENCE_ENABLED = 'user-presence-enabled';\n\n/**\n * @class\n * @extends WebexPlugin\n */\nconst Presence = WebexPlugin.extend({\n namespace: 'Presence',\n\n children: {\n batcher: PresenceBatcher,\n },\n\n session: {\n worker: {\n default() {\n return new PresenceWorker();\n },\n type: 'any',\n },\n },\n\n /**\n * Initialize the presence worker for client\n * @returns {undefined}\n */\n initialize() {\n this.webex.once('ready', () => {\n if (this.config.initializeWorker) {\n this.worker.initialize(this.webex);\n }\n });\n },\n\n /**\n * Trigger an event.\n * @param {string} event\n * @param {string} payload\n * @returns {undefined}\n */\n emitEvent(event, payload) {\n if (payload.type && payload.payload) {\n this.trigger(event, payload);\n }\n },\n\n /**\n * Enables presence feature\n * @returns {Promise} resolves with true, if successful\n */\n enable() {\n return this.webex.internal.feature\n .setFeature(USER, USER_PRESENCE_ENABLED, true)\n .then((response) => response.value);\n },\n\n /**\n * Disables presence feature\n * @returns {Promise} resolves with false, if successful\n */\n disable() {\n return this.webex.internal.feature\n .setFeature(USER, USER_PRESENCE_ENABLED, false)\n .then((response) => response.value);\n },\n\n /**\n * Returns true if presence is enabled, false otherwise\n * @returns {Promise} resolves with true if presence is enabled\n */\n isEnabled() {\n return this.webex.internal.feature.getFeature(USER, USER_PRESENCE_ENABLED);\n },\n\n /**\n * The status object\n * @typedef {Object} PresenceStatusObject\n * @property {string} url: Public resource identifier for presence\n * @property {string} subject: User ID for the user the returned composed presence represents\n * @property {string} status: Current composed presence state\n * @property {string} statusTime: DateTime in RFC3339 format that the current status began\n * @property {string} lastActive: DateTime in RFC3339 format that the service last saw activity from the user.\n * @property {string} expires: DEPRECATED - DateTime in RFC3339 format that represents when the current\n * status will expire. Will not exist if expiresTTL is -1.\n * @property {Number} expiresTTL: TTL in seconds until the status will expire. If TTL is -1 the current\n * status has no known expiration.\n * @property {string} expiresTime: DateTime in RFC3339 format that the current status will expire. Missing\n * field means no known expiration.\n * @property {Object} vectorCounters: Used for packet ordering and tracking.\n * @property {Boolean} suppressNotifications: Indicates if notification suppression is recommended for this status.\n * @property {string} lastSeenDeviceUrl: Resource Identifier of the last device to post presence activity for\n * this user.\n */\n\n /**\n * Gets the current presence status of a given person id\n * @param {string} personId\n * @returns {Promise} resolves with status object of person\n */\n get(personId) {\n if (!personId) {\n return Promise.reject(new Error('A person id is required'));\n }\n\n return this.webex\n .request({\n method: 'GET',\n service: 'apheleia',\n resource: `compositions?userId=${personId}`,\n })\n .then((response) => response.body);\n },\n\n /**\n * @typedef {Object} PresenceStatusesObject\n * @property {Array.} statusList\n */\n /**\n * Gets the current presence statuses of an array of people ids\n * @param {Array} personIds\n * @returns {Promise} resolves with an object with key of `statusList` array\n */\n list(personIds) {\n if (!personIds || !Array.isArray(personIds)) {\n return Promise.reject(new Error('An array of person ids is required'));\n }\n\n return Promise.all(personIds.map((id) => this.batcher.request(id))).then((presences) => ({\n statusList: presences,\n }));\n },\n\n /**\n * Subscribes to a person's presence status updates\n * Updates are sent via mercury events `apheleia.subscription_update`\n * @param {string | Array} personIds\n * @param {number} subscriptionTtl - Requested length of subscriptions in seconds.\n * @returns {Promise}\n */\n subscribe(personIds, subscriptionTtl = defaultSubscriptionTtl) {\n let subjects;\n const batches = [];\n const batchLimit = 50;\n\n if (!personIds) {\n return Promise.reject(new Error('A person id is required'));\n }\n if (Array.isArray(personIds)) {\n subjects = personIds;\n } else {\n subjects = [personIds];\n }\n // Limit batches to 50 ids per request\n for (let i = 0; i < subjects.length; i += batchLimit) {\n batches.push(subjects.slice(i, i + batchLimit));\n }\n\n return Promise.all(\n batches.map((ids) =>\n this.webex\n .request({\n method: 'POST',\n api: 'apheleia',\n resource: 'subscriptions',\n body: {\n subjects: ids,\n subscriptionTtl,\n includeStatus: true,\n },\n })\n .then((response) => response.body.responses)\n )\n ).then((idBatches) => ({responses: [].concat(...idBatches)}));\n },\n\n /**\n * Unsubscribes from a person or group of people's presence subscription\n * @param {string | Array} personIds\n * @returns {Promise}\n */\n unsubscribe(personIds) {\n let subjects;\n\n if (!personIds) {\n return Promise.reject(new Error('A person id is required'));\n }\n if (Array.isArray(personIds)) {\n subjects = personIds;\n } else {\n subjects = [personIds];\n }\n\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'subscriptions',\n body: {\n subjects,\n subscriptionTtl: 0,\n includeStatus: true,\n },\n });\n },\n\n /**\n * Sets the status of the current user\n * @param {string} status - active | inactive | ooo | dnd\n * @param {number} ttl - Time To Live for the event in seconds.\n * @returns {Promise}\n */\n setStatus(status, ttl) {\n if (!status) {\n return Promise.reject(new Error('A status is required'));\n }\n\n return this.webex\n .request({\n method: 'POST',\n api: 'apheleia',\n resource: 'events',\n body: {\n subject: this.webex.internal.device.userId,\n eventType: status,\n ttl,\n },\n })\n .then((response) => response.body);\n },\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n return this.worker.enqueue(id);\n },\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n return this.worker.dequeue(id);\n },\n});\n\nexport default Presence;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Presence from './presence';\nimport config from './config';\n\nregisterInternalPlugin('presence', Presence, {\n payloadTransformer: {\n predicates: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n test(ctx, response) {\n // POST to /apheleia/api/v1/events\n return Promise.resolve(has(response, 'body.eventType') && has(response, 'body.subject'));\n },\n extract(response) {\n return Promise.resolve(response);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n fn(ctx, response) {\n response.body.status = response.body.eventType;\n },\n },\n ],\n },\n config,\n});\n\nexport {default} from './presence';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n presence: {\n batcherWait: 50,\n batcherMaxCalls: 50,\n batcherMaxWait: 150,\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\nimport uuid from 'uuid';\n\nconst Support = WebexPlugin.extend({\n namespace: 'Support',\n\n getFeedbackUrl(options) {\n options = options || {};\n\n return this.request({\n method: 'POST',\n api: 'conversation',\n resource: 'users/deskFeedbackUrl',\n body: defaults(options, {\n appVersion: this.config.appVersion,\n appType: this.config.appType,\n feedbackId: options.feedbackId || uuid.v4(),\n languageCode: this.config.languageCode,\n }),\n }).then((res) => res.body.url);\n },\n\n getSupportUrl() {\n return this.webex\n .request({\n method: 'GET',\n api: 'conversation',\n resource: 'users/deskSupportUrl',\n qs: {\n languageCode: this.config.languageCode,\n },\n })\n .then((res) => res.body.url);\n },\n\n submitLogs(metadata, logs) {\n const metadataArray = this._constructFileMetadata(metadata);\n\n // this is really testing that Ampersand is fully ready. once it's ready, these exist\n if (\n !logs &&\n this.webex.logger.sdkBuffer &&\n this.webex.logger.clientBuffer &&\n this.webex.logger.buffer\n ) {\n logs = this.webex.logger.formatLogs();\n }\n\n let filename;\n\n if (metadata.locusId && metadata.callStart) {\n filename = `${metadata.locusId}_${metadata.callStart}.txt`;\n } else {\n filename = `${this.webex.sessionId}.txt`;\n }\n\n let userId;\n\n return this.webex.credentials\n .getUserToken()\n .catch(() => this.webex.credentials.getClientToken())\n .then(async (token) => {\n const headers = {authorization: token.toString()};\n\n const initalOpts = {\n service: 'clientLogs',\n resource: 'logs/urls',\n };\n\n const finalOpts = {\n service: 'clientLogs',\n resource: 'logs/meta',\n };\n\n const options = defaults(initalOpts, {\n file: logs,\n shouldAttemptReauth: false,\n headers,\n phases: {\n initialize: {\n body: {\n file: filename,\n },\n },\n upload: {\n $uri: (session) => session.tempURL,\n },\n finalize: defaults(finalOpts, {\n $body: (session) => {\n userId = session.userId;\n\n return {\n filename: session.logFilename,\n data: metadataArray,\n userId: this.webex.internal.device.userId || session.userId,\n };\n },\n }),\n },\n });\n\n return this.webex.upload(options);\n })\n .then((body) => {\n if (userId && !body.userId) {\n body.userId = userId;\n }\n\n return body;\n });\n },\n\n /**\n * Constructs an array of key-value pairs for log upload.\n * @param {*} metadata\n * @returns {array}\n */\n _constructFileMetadata(metadata) {\n const metadataArray = [\n 'locusId',\n 'appVersion',\n 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId',\n 'surveySessionId',\n 'productAreaTag',\n 'issueTypeTag',\n 'locussessionid',\n 'autoupload',\n ]\n .map((key) => {\n if (metadata[key]) {\n return {\n key,\n value: metadata[key],\n };\n }\n\n return null;\n })\n .filter((entry) => Boolean(entry));\n\n if (this.webex.sessionId) {\n metadataArray.push({\n key: 'trackingId',\n value: this.webex.sessionId,\n });\n }\n\n if (this.webex.internal.support.config.appVersion) {\n metadataArray.push({\n key: 'appVersion',\n value: this.webex.internal.support.config.appVersion,\n });\n }\n\n if (this.webex.internal.device.userId) {\n metadataArray.push({\n key: 'userId',\n value: this.webex.internal.device.userId,\n });\n }\n\n if (this.webex.internal.device.orgId) {\n metadataArray.push({\n key: 'orgId',\n value: this.webex.internal.device.orgId,\n });\n }\n\n return metadataArray;\n },\n});\n\nexport default Support;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n device: {\n preDiscoveryServices: {\n atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n clientLogs: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n clientLogsServiceUrl:\n process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n },\n },\n\n support: {\n appType: '',\n appVersion: '',\n languageCode: '',\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Support from './support';\nimport config from './config';\n\nregisterInternalPlugin('support', Support, {\n config,\n});\n\nexport {default} from './support';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher, WebexPlugin} from '@webex/webex-core';\n\n/**\n * @class\n */\nconst AbstractUserUUIDRequestBatcher = Batcher.extend({\n namespace: 'User',\n\n /**\n * @param {string} item\n * @returns {Promise}\n */\n prepareItem(item) {\n return Promise.resolve({email: item});\n },\n\n /**\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n Object.keys(res.body).map((email) => {\n if (res.body[email] && res.body[email].id) {\n return this.handleItemSuccess(email, res.body[email]);\n }\n\n return this.handleItemFailure(email, res.body[email]);\n })\n );\n },\n\n handleItemFailure(email, response) {\n return this.getDeferredForResponse(email).then((defer) => {\n defer.reject(response);\n });\n },\n\n /**\n * @param {string} email\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemSuccess(email, response) {\n return this.getDeferredForResponse(email).then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @param {string} email\n * @returns {Promise}\n */\n fingerprintRequest(email) {\n return Promise.resolve(email.email || email);\n },\n\n /**\n * @param {string} email\n * @returns {Promise}\n */\n fingerprintResponse(email) {\n return Promise.resolve(email);\n },\n});\n\n/**\n * @class\n */\nconst FakeUserUUIDRequestBatcher = AbstractUserUUIDRequestBatcher.extend({\n /**\n * @param {Object} payload\n * @returns {Promise}\n */\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'conversation',\n resource: '/users',\n body: payload,\n });\n },\n});\n\n/**\n * @class\n */\nconst RealUserUUIDRequestBatcher = AbstractUserUUIDRequestBatcher.extend({\n /**\n * @param {Object} payload\n * @returns {Promise}\n */\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n service: 'conversation',\n resource: '/users',\n body: payload,\n qs: {\n shouldCreateUsers: true,\n },\n });\n },\n});\n\n/**\n * @class\n */\nconst UserUUIDBatcher = WebexPlugin.extend({\n children: {\n faker: FakeUserUUIDRequestBatcher,\n creator: RealUserUUIDRequestBatcher,\n },\n\n /**\n * @param {Object} payload\n * @returns {Promise}\n */\n request(payload) {\n return payload.create ? this.creator.request(payload.email) : this.faker.request(payload.email);\n },\n});\n\nexport default UserUUIDBatcher;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {patterns} from '@webex/common';\n\nconst usersByEmail = new WeakMap();\nconst usersById = new WeakMap();\n\n/**\n * @class\n */\nexport default class UserUUIDStore {\n /**\n * @constructs {UserUUIDStore}\n */\n constructor() {\n usersByEmail.set(this, new Map());\n usersById.set(this, new Map());\n }\n\n /**\n * Adds a user object to the store\n * @param {Object} user\n * @param {string} user.id\n * @param {string} user.emailAddress\n * @returns {Promise}\n */\n add(user) {\n if (!user.id) {\n return Promise.reject(new Error('`user.id` is required'));\n }\n\n if (!user.emailAddress) {\n return Promise.reject(new Error('`user.emailAddress` is required'));\n }\n\n if (!patterns.uuid.test(user.id)) {\n return Promise.reject(new Error('`user.id` does not appear to be a uuid'));\n }\n\n if (!patterns.email.test(user.emailAddress)) {\n return Promise.reject(\n new Error('`user.emailAddress` does not appear to be an email address')\n );\n }\n\n const p1 = this.getById(user.id)\n .then((u) => usersById.get(this).set(user.id, {...u, ...user}))\n .catch(() => usersById.get(this).set(user.id, {...user}));\n\n const p2 = this.getByEmail(user.emailAddress)\n .then((u) => usersByEmail.get(this).set(user.emailAddress, {...u, ...user}))\n .catch(() => usersByEmail.get(this).set(user.emailAddress, {...user}));\n\n return Promise.all([p1, p2]);\n }\n\n /**\n * Retrieves the specified user object from the store\n * @param {string} id\n * @returns {Promise}\n */\n get(id) {\n if (patterns.uuid.test(id)) {\n return this.getById(id);\n }\n\n if (patterns.email.test(id)) {\n return this.getByEmail(id);\n }\n\n return Promise.reject(new Error('`id` does not appear to be a valid user identifier'));\n }\n\n /**\n * Retrieves the specified user object by id from the store\n * @param {Object} id\n * @returns {Promise}\n */\n getById(id) {\n const ret = usersById.get(this).get(id);\n\n if (ret) {\n return Promise.resolve(ret);\n }\n\n return Promise.reject(new Error('No user found by specified id'));\n }\n\n /**\n * Retrieves the specified user object by id from the store\n * @param {Object} email\n * @returns {Promise}\n */\n getByEmail(email) {\n const ret = usersByEmail.get(this).get(email);\n\n if (ret) {\n return Promise.resolve(ret);\n }\n\n return Promise.reject(new Error('No user found by specified email address'));\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {isArray} from 'lodash';\nimport {deprecated, oneFlight, patterns, tap} from '@webex/common';\nimport {persist, WebexPlugin, waitForValue} from '@webex/webex-core';\n\nimport UserUUIDBatcher from './user-uuid-batcher';\nimport UserUUIDStore from './user-uuid-store';\n\n/**\n * @class\n */\nconst User = WebexPlugin.extend({\n namespace: 'User',\n\n children: {\n batcher: UserUUIDBatcher,\n },\n\n props: {\n /**\n * Indicates if the current user is known to have a password.\n * @instance\n * @memberof User\n * @type {boolean}\n */\n hasPassword: {\n default: false,\n type: 'boolean',\n },\n },\n\n session: {\n store: {\n default() {\n return new UserUUIDStore();\n },\n type: 'any',\n },\n },\n\n @waitForValue('@')\n /**\n * Activates a Webex user account and exchanges for user token.\n * @instance\n * @memberof User\n * @param {Object} options\n * @param {Object} options.confirmationCode (required -- optional if verification token is provided)\n * @param {Object} options.id (required -- optional if verification token is provided)\n * @param {Object} options.verificationToken (required -- optional if uuid and verification token provided)\n * @param {Object} options.email (required with verificationToken for Federation/global user)\n * @returns {Promise} Resolves with a userSession\n */\n activate(options = {}) {\n if (!(options.verificationToken || (options.confirmationCode && options.id))) {\n return Promise.reject(\n new Error(\n 'either options.verificationToken is required or both options.confirmationCode and options.id are required'\n )\n );\n }\n\n options.scope = this.webex.config.credentials.scope;\n\n // if we have options.email and options.verificationToken\n // and Federation flag is enabled, flag that we need to\n // lookup user's CI.\n const activateOptions = {...options};\n\n delete activateOptions.email;\n\n return this.request({\n uri: this.webex.config.credentials.activationUrl,\n method: 'POST',\n body: activateOptions,\n auth: {\n user: this.webex.config.credentials.client_id,\n pass: this.webex.config.credentials.client_secret,\n sendImmediately: true,\n },\n }).then((res) => {\n this.webex.credentials.set({supertoken: res.body.tokenData});\n\n return res.body;\n });\n },\n\n /**\n * Converts a user-identifying object to a uuid, perhaps by doing a network\n * lookup\n * @param {string|Object} user\n * @param {Object} options\n * @param {boolean} options.create if true, ensures the return UUID refers to\n * an existing user (rather than creating one deterministically based on email\n * address), even if that user must be created\n * @returns {Promise}\n */\n asUUID(user, options) {\n if (!user) {\n return Promise.reject(new Error('`user` is required'));\n }\n\n if (isArray(user)) {\n return Promise.all(user.map((u) => this.asUUID(u, options)));\n }\n\n const id = this._extractUUID(user);\n\n if (!(options && options.force) && patterns.uuid.test(id)) {\n return Promise.resolve(id);\n }\n\n const email = this._extractEmailAddress(user);\n\n if (!patterns.email.test(email)) {\n return Promise.reject(new Error('Provided user object does not appear to identify a user'));\n }\n\n return this.getUUID(email, options);\n },\n\n /**\n * Requests a uuid from the api\n * @param {string} email\n * @param {Object} options\n * @param {boolean} options.create\n * @returns {Promise}\n */\n fetchUUID(email, options) {\n return this.batcher\n .request({\n email,\n create: options && options.create,\n })\n .then((user) => this.recordUUID({emailAddress: email, ...user}).then(() => user.id));\n },\n /**\n * Generates One Time Password.\n * @instance\n * @param {Object} options\n * @param {string} options.email\n * @param {string} options.id\n * @returns {Promise}\n */\n generateOTP(options = {}) {\n if (!(options.email || options.id)) {\n return Promise.reject(new Error('One of `options.email` or `options.id` is required'));\n }\n\n return this.request({\n uri: this.webex.config.credentials.generateOtpUrl,\n method: 'POST',\n body: options,\n auth: {\n user: this.webex.config.credentials.client_id,\n pass: this.webex.config.credentials.client_secret,\n },\n }).then((res) => res.body);\n },\n\n /**\n * Fetches details about the current user\n * @returns {Promise}\n */\n get() {\n return this.request({\n service: 'conversation',\n resource: 'users',\n })\n .then((res) => res.body)\n .then(\n tap((user) =>\n this.recordUUID({\n id: user.id,\n // CI endpoints don't use the same user format as actors, so, email may\n // be in one of a few fields\n emailAddress: user.email || user.emailAddress,\n })\n )\n );\n },\n\n /**\n * Converts an email address to a uuid, perhaps by doing a network lookup\n * @param {string} email\n * @param {Object} options\n * @param {boolean} options.create\n * @returns {Promise}\n */\n @oneFlight({keyFactory: (email, options) => email + String(options && options.create)})\n getUUID(email, options) {\n return this.store\n .getByEmail(email)\n .then((user) => {\n if (options && options.create && !user.userExists) {\n return Promise.reject(new Error('User for specified email cannot be confirmed to exist'));\n }\n\n if (!user.id) {\n return Promise.reject(new Error('No id recorded for specified user'));\n }\n\n return user.id;\n })\n .catch(() => this.fetchUUID(email, options));\n },\n\n @persist('@')\n initialize(...args) {\n return Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Caches the uuid for the specified email address\n * @param {Object} user\n * @param {string} user.id\n * @param {string} user.emailAddress\n * @returns {Promise}\n */\n recordUUID(user) {\n if (!user) {\n return Promise.reject(new Error('`user` is required'));\n }\n\n if (!user.id) {\n return Promise.reject(new Error('`user.id` is required'));\n }\n\n if (!patterns.uuid.test(user.id)) {\n return Promise.reject(new Error('`user.id` must be a uuid'));\n }\n\n if (!user.emailAddress) {\n return Promise.reject(new Error('`user.emailAddress` is required'));\n }\n\n if (!patterns.email.test(user.emailAddress)) {\n return Promise.reject(new Error('`user.emailAddress` must be an email address'));\n }\n\n return this.store.add(user);\n },\n\n @deprecated('Use User#verify()')\n register(...args) {\n return this.verify(...args);\n },\n\n /**\n * Updates a user with webex.\n * @param {Object} body\n * @private\n * @returns {Promise} Resolves with a response from PATCH request\n */\n _setUser(body) {\n return this.webex.credentials.getUserToken().then((token) =>\n this.request({\n uri: `${this.webex.config.credentials.setPasswordUrl}/${this.webex.internal.device.userId}`,\n method: 'PATCH',\n headers: {\n authorization: token.toString(),\n },\n body,\n })\n );\n },\n\n /**\n * Updates a user's password with webex.\n * @instance\n * @memberof User\n * @param {Object} options\n * @param {string} options.password (required)\n * @param {string} options.email (required when federation enabled)\n * @returns {Promise} Resolves with complete user object containing new password\n */\n setPassword(options) {\n options = options || {};\n if (!options.password) {\n return Promise.reject(new Error('`options.password` is required'));\n }\n\n return this._setUser({\n schemas: ['urn:scim:schemas:core:1.0', 'urn:scim:schemas:extension:cisco:commonidentity:1.0'],\n password: options.password,\n }).then((res) => {\n this.hasPassword = true;\n\n return res.body;\n });\n },\n\n /**\n * Updates a user's name with webex.\n * @instance\n * @memberof User\n * @param {string} givenName\n * @param {string} familyName\n * @param {string} displayName\n * @returns {Promise}\n */\n updateName({givenName, familyName, displayName} = {}) {\n if (!(givenName || familyName || displayName)) {\n return Promise.reject(\n new Error('One of `givenName` and `familyName` or `displayName` is required')\n );\n }\n\n return this._setUser({\n schemas: ['urn:scim:schemas:core:1.0', 'urn:scim:schemas:extension:cisco:commonidentity:1.0'],\n name: {givenName, familyName},\n displayName,\n }).then((res) => res.body);\n },\n\n /**\n * Updates the current user's display name\n * @param {Object} options\n * @param {string} options.displayName\n * @returns {Promise}\n */\n update(options) {\n options = options || {};\n if (!options.displayName) {\n return Promise.reject(new Error('`options.displayName` is required'));\n }\n\n return this.request({\n method: 'PATCH',\n service: 'conversation',\n resource: 'users/user',\n body: options,\n }).then((res) => res.body);\n },\n\n /**\n * Validated One Time Password.\n * @instance\n * @param {Object} options\n * @param {string} options.email\n * @param {string} options.id\n * @param {string} options.oneTimePassword\n * @returns {Promise}\n */\n validateOTP(options = {}) {\n if (!(options.email || options.id) || !options.oneTimePassword) {\n return Promise.reject(\n new Error(\n 'One of `options.email` or `options.id` and `options.oneTimePassword` are required'\n )\n );\n }\n\n options.scope = this.webex.config.credentials.scope;\n\n return this.request({\n uri: this.webex.config.credentials.validateOtpUrl,\n method: 'POST',\n body: options,\n auth: {\n user: this.webex.config.credentials.client_id,\n pass: this.webex.config.credentials.client_secret,\n },\n }).then((res) => {\n this.webex.credentials.set({supertoken: res.body.tokenData});\n\n return res.body;\n });\n },\n\n /**\n * Determines if the specified user needs to signup or can signin.\n * Triggers activation email if client credentials are used\n * @param {Object} options\n * @param {string} options.email (required)\n * @param {string} options.reqId required if need to check email status\n * @param {string} options.preloginId\n * @returns {Promise}\n */\n verify(options) {\n options = {...this.config.verifyDefaults, ...options};\n const {email} = options;\n\n if (!email) {\n return Promise.reject(new Error('`options.email` is required'));\n }\n\n return this.webex.internal.services\n .collectPreauthCatalog({email})\n .then(() => this.webex.credentials.getUserToken())\n .catch(() => this.webex.credentials.getClientToken())\n .then((token) =>\n this.request({\n service: 'atlas',\n resource: 'users/activations',\n method: 'POST',\n headers: {\n authorization: token.toString(),\n 'x-prelogin-userid': options.preloginId,\n },\n body: options,\n shouldRefreshAccessToken: false,\n })\n )\n .then((res) => {\n if (res.body.hasPassword || res.body.sso) {\n this.hasPassword = true;\n }\n\n return res.body;\n });\n },\n\n /**\n * If the passed-in lookupCI is true, retrieve the user's\n * CI from Atlas and return the URL's via a Promise.\n * Otherwise, return current CI in config via a Promise.\n * Useful in a Promise chain to retrieve the CI based on\n * conditions like Federation enabled, and suppresses sending\n * an additional email to the user, since this is just a\n * look-up.\n * @param {string} email (required)\n * @param {boolean} lookupCI (required)\n * @returns {Promise}\n */\n getUserCI(email, lookupCI) {\n if (lookupCI) {\n // call verify first to get the user's CI, but suppress sending another email\n const verifyOptions = {\n email,\n suppressEmail: true,\n };\n\n return this.verify(verifyOptions).then((res) => Promise.resolve(res.userEntities));\n }\n\n return Promise.resolve({\n idBrokerUrl: this.webex.config.credentials.idbroker.url,\n identityUrl: this.webex.config.credentials.identity.url,\n });\n },\n\n /**\n * Extracts the uuid from a user identifying object\n * @param {string|Object} user\n * @private\n * @returns {string}\n */\n _extractUUID(user) {\n return user.entryUUID || user.id || user;\n },\n\n /**\n * Extracts the email address from a user identifying object\n * @param {string|Object} user\n * @private\n * @returns {string}\n */\n _extractEmailAddress(user) {\n return user.email || user.emailAddress || user.entryEmail || user;\n },\n});\n\nexport default User;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport User from './user';\nimport config from './config';\n\nregisterInternalPlugin('user', User, {\n config,\n});\n\nexport {default} from './user';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n device: {\n preDiscoveryServices: {\n atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n },\n },\n\n user: {\n batcherWait: 100,\n batcherMaxCalls: 100,\n batcherMaxWait: 1500,\n verifyDefaults: {\n reqId: 'WEBCLIENT',\n },\n },\n};\n","export const EVENT_TRIGGERS = {\n VOICEA_ANNOUNCEMENT: 'voicea:announcement',\n CAPTION_LANGUAGE_UPDATE: 'voicea:captionLanguageUpdate',\n SPOKEN_LANGUAGE_UPDATE: 'voicea:spokenLanguageUpdate',\n CAPTIONS_TURNED_ON: 'voicea:captionOn',\n TRANSCRIBING_ON: 'voicea:transcribingOn',\n TRANSCRIBING_OFF: 'voicea:transcribingOff',\n\n NEW_CAPTION: 'voicea:newCaption',\n EVA_COMMAND: 'voicea:wxa',\n HIGHLIGHT_CREATED: 'voicea:highlightCreated',\n NEW_MANUAL_CAPTION: 'aibridge:newManualCaption',\n};\n\nexport const AIBRIDGE_RELAY_TYPES = {\n VOICEA: {\n ANNOUNCEMENT: 'voicea.annc',\n CLIENT_ANNOUNCEMENT: 'client.annc',\n TRANSLATION_REQUEST: 'voicea.transl.req',\n TRANSLATION_RESPONSE: 'voicea.transl.rsp',\n TRANSCRIPTION: 'voicea.transcription',\n },\n MANUAL: {\n TRANSCRIPTION: 'aibridge.manual_transcription',\n },\n};\n\nexport const TRANSCRIPTION_TYPE = {\n UNKNOWN: 'unknown',\n EVA_WAKE: 'eva_wake',\n EVA_THANKS: 'eva_thanks',\n EVA_CANCEL: 'eva_cancel',\n HIGHLIGHT_CREATED: 'highlight_created',\n TRANSCRIPT_INTERIM_RESULTS: 'transcript_interim_results',\n TRANSCRIPT_FINAL_RESULT: 'transcript_final_result',\n MANUAL_CAPTION_INTERIM_RESULTS: 'manual_caption_interim_results',\n MANUAL_CAPTION_FINAL_RESULT: 'manual_caption_final_result',\n};\n\nexport const VOICEA = 'voicea';\n\nexport const ANNOUNCE_STATUS = {\n IDLE: 'idle',\n JOINED: 'joined',\n JOINING: 'joining',\n};\n\nexport const TURN_ON_CAPTION_STATUS = {\n IDLE: 'idle',\n ENABLED: 'enabled',\n SENDING: 'sending',\n};\n","// eslint-disable-next-line import/prefer-default-export\nexport const millisToMinutesAndSeconds = (millis: number) => {\n const minutes = Math.floor(millis / 60000);\n const seconds = ((millis % 60000) / 1000).toFixed(0);\n\n return `${minutes}:${+seconds < 10 ? '0' : ''}${seconds}`;\n};\n","import uuid from 'uuid';\nimport {WebexPlugin, config} from '@webex/webex-core';\n\nimport {\n EVENT_TRIGGERS,\n AIBRIDGE_RELAY_TYPES,\n TRANSCRIPTION_TYPE,\n VOICEA,\n ANNOUNCE_STATUS,\n TURN_ON_CAPTION_STATUS,\n} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {\n AnnouncementPayload,\n CaptionLanguageResponse,\n TranscriptionResponse,\n IVoiceaChannel,\n} from './voicea.types';\nimport {millisToMinutesAndSeconds} from './utils';\n\n/**\n * @description VoiceaChannel to hold single instance of LLM\n * @export\n * @class VoiceaChannel\n */\nexport class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {\n namespace = VOICEA;\n\n private seqNum: number;\n\n private areCaptionsEnabled: boolean;\n\n private hasSubscribedToEvents = false;\n\n private vmcDeviceId?: string;\n\n private announceStatus: string;\n\n private captionStatus: string;\n\n /**\n * @param {Object} e\n * @returns {undefined}\n */\n\n private eventProcessor = (e) => {\n this.seqNum = e.sequenceNumber + 1;\n switch (e.data.relayType) {\n case AIBRIDGE_RELAY_TYPES.VOICEA.ANNOUNCEMENT:\n this.vmcDeviceId = e.headers.from;\n this.announceStatus = ANNOUNCE_STATUS.JOINED;\n this.processAnnouncementMessage(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_RESPONSE:\n this.processCaptionLanguageResponse(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.VOICEA.TRANSCRIPTION:\n this.processTranscription(e.data.voiceaPayload);\n break;\n case AIBRIDGE_RELAY_TYPES.MANUAL.TRANSCRIPTION:\n this.processManualTranscription(e.data.transcriptPayload);\n break;\n default:\n break;\n }\n };\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {void}\n */\n public deregisterEvents() {\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n // @ts-ignore\n this.webex.internal.llm.off('event:relay.event', this.eventProcessor);\n this.hasSubscribedToEvents = false;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Initializes Voicea plugin\n * @param {any} args\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n this.areCaptionsEnabled = false;\n this.vmcDeviceId = undefined;\n this.announceStatus = ANNOUNCE_STATUS.IDLE;\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n }\n\n /**\n * Process manual Transcript and send alert\n * @param {TranscriptionResponse} transcriptPayload\n * @returns {void}\n */\n private processManualTranscription = (transcriptPayload: TranscriptionResponse): void => {\n switch (transcriptPayload.type) {\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT:\n case TRANSCRIPTION_TYPE.MANUAL_CAPTION_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_MANUAL_CAPTION, {\n isFinal: transcriptPayload.type === TRANSCRIPTION_TYPE.MANUAL_CAPTION_FINAL_RESULT,\n transcriptId: transcriptPayload.id,\n transcripts: transcriptPayload.transcripts,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Process Transcript and send alert\n * @param {TranscriptionResponse} voiceaPayload\n * @returns {void}\n */\n private processTranscription = (voiceaPayload: TranscriptionResponse): void => {\n switch (voiceaPayload.type) {\n case TRANSCRIPTION_TYPE.TRANSCRIPT_INTERIM_RESULTS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: false,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts,\n });\n break;\n\n case TRANSCRIPTION_TYPE.TRANSCRIPT_FINAL_RESULT:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.NEW_CAPTION, {\n isFinal: true,\n transcriptId: voiceaPayload.transcript_id,\n transcripts: voiceaPayload.transcripts.map((transcript) => {\n transcript.timestamp = millisToMinutesAndSeconds(transcript.end_millis);\n\n return transcript;\n }),\n });\n break;\n\n case TRANSCRIPTION_TYPE.HIGHLIGHT_CREATED:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.HIGHLIGHT_CREATED, {\n csis: voiceaPayload.highlight.csis,\n highlightId: voiceaPayload.highlight.highlight_id,\n text: voiceaPayload.highlight.transcript,\n highlightLabel: voiceaPayload.highlight.highlight_label,\n highlightSource: voiceaPayload.highlight.highlight_source,\n timestamp: millisToMinutesAndSeconds(voiceaPayload.highlight.end_millis),\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_THANKS:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: false,\n text: voiceaPayload.command_response,\n });\n break;\n\n case TRANSCRIPTION_TYPE.EVA_WAKE:\n case TRANSCRIPTION_TYPE.EVA_CANCEL:\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.EVA_COMMAND, {\n isListening: voiceaPayload.type === TRANSCRIPTION_TYPE.EVA_WAKE,\n });\n break;\n\n default:\n break;\n }\n };\n\n /**\n * Processes Caption Language Response\n * @param {CaptionLanguageResponse} voiceaPayload\n * @returns {void}\n */\n private processCaptionLanguageResponse = (voiceaPayload: CaptionLanguageResponse): void => {\n if (voiceaPayload.statusCode === 200) {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {statusCode: 200});\n } else {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, {\n statusCode: voiceaPayload.errorCode,\n errorMessage: voiceaPayload.message,\n });\n }\n };\n\n /**\n * processes voicea announcement response and triggers event\n * @param {Object} voiceaPayload\n * @returns {void}\n */\n private processAnnouncementMessage = (voiceaPayload: AnnouncementPayload): void => {\n const voiceaLanguageOptions = {\n captionLanguages: voiceaPayload?.translation?.allowed_languages ?? [],\n maxLanguages: voiceaPayload?.translation?.max_languages ?? 0,\n spokenLanguages: voiceaPayload?.ASR?.spoken_languages ?? [],\n };\n\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, voiceaLanguageOptions);\n };\n\n /**\n * Sends Announcement to add voicea to the meeting\n * @returns {void}\n */\n private sendAnnouncement = (): void => {\n this.announceStatus = ANNOUNCE_STATUS.JOINING;\n this.listenToEvents();\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {},\n data: {\n clientPayload: {\n version: 'v2',\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.CLIENT_ANNOUNCEMENT,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * Set Spoken Language for the meeting\n * @param {string} languageCode\n * @returns {Promise}\n */\n public setSpokenLanguage = (languageCode: string): Promise =>\n // @ts-ignore\n this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n spokenLanguage: languageCode,\n },\n },\n }).then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, {languageCode});\n });\n\n /**\n * Request Language translation\n * @param {string} languageCode\n * @returns {void}\n */\n public requestLanguage = (languageCode: string): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n // @ts-ignore\n this.webex.internal.llm.socket.send({\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: this.vmcDeviceId,\n },\n data: {\n clientPayload: {\n translationLanguage: languageCode,\n id: uuid.v4(),\n },\n eventType: 'relay.event',\n relayType: AIBRIDGE_RELAY_TYPES.VOICEA.TRANSLATION_REQUEST,\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n });\n this.seqNum += 1;\n };\n\n /**\n * request turn on Captions\n * @param {string} [languageCode] - Optional Parameter for spoken language code. Defaults to English\n * @returns {Promise}\n */\n private requestTurnOnCaptions = (languageCode?): undefined | Promise => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.SENDING;\n\n // only set the spoken language if it is provided\n const body = {\n transcribe: {caption: true},\n languageCode,\n };\n\n // @ts-ignore\n // eslint-disable-next-line newline-before-return\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body,\n })\n .then(() => {\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.CAPTIONS_TURNED_ON);\n\n this.areCaptionsEnabled = true;\n this.captionStatus = TURN_ON_CAPTION_STATUS.ENABLED;\n this.announce();\n })\n .catch(() => {\n this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;\n throw new Error('turn on captions fail');\n });\n };\n\n /**\n * is announce processing\n * @returns {boolean}\n */\n private isAnnounceProcessing = () =>\n [ANNOUNCE_STATUS.JOINING, ANNOUNCE_STATUS.JOINED].includes(this.announceStatus);\n\n /**\n * announce to voicea data chanel\n * @returns {void}\n */\n public announce = () => {\n if (this.isAnnounceProcessing()) return;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('voicea can not announce before llm connected');\n }\n this.sendAnnouncement();\n };\n\n /**\n * is turn on caption processing\n * @returns {boolean}\n */\n private isCaptionProcessing = () =>\n [TURN_ON_CAPTION_STATUS.SENDING, TURN_ON_CAPTION_STATUS.ENABLED].includes(this.captionStatus);\n\n /**\n * Turn on Captions\n * @param {string} [spokenLanguage] - Optional Spoken language code\n * @returns {Promise}\n */\n public turnOnCaptions = async (spokenLanguage?): undefined | Promise => {\n if (this.isCaptionProcessing()) return undefined;\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) {\n throw new Error('can not turn on captions before llm connected');\n }\n\n return this.requestTurnOnCaptions(spokenLanguage);\n };\n\n /**\n * Toggle transcribing for highlights\n * @param {bool} activate if true transcribing is turned on\n * @param {string} spokenLanguage language code for spoken language\n * @returns {Promise}\n */\n public toggleTranscribing = (\n activate: boolean,\n spokenLanguage?: string\n ): undefined | Promise => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n transcribe: {\n transcribing: activate,\n },\n spokenLanguage,\n },\n }).then((): undefined | Promise => {\n if (activate && !this.areCaptionsEnabled) {\n return this.turnOnCaptions(spokenLanguage);\n }\n\n return undefined;\n });\n };\n\n /**\n * Toggle turn on manual caption\n * @param {bool} enable if true manual caption is turned on\n * @returns {Promise}\n */\n public toggleManualCaption = (enable: boolean): undefined | Promise => {\n // @ts-ignore\n return this.request({\n method: 'PUT',\n // @ts-ignore\n url: `${this.webex.internal.llm.getLocusUrl()}/controls/`,\n body: {\n manualCaption: {\n enable,\n },\n },\n }).then((): undefined | Promise => {\n return undefined;\n });\n };\n\n /**\n * get caption status\n * @returns {string}\n */\n public getCaptionStatus = () => this.captionStatus;\n\n /**\n * get announce status\n * @returns {string}\n */\n public getAnnounceStatus = () => this.announceStatus;\n}\n\nexport default VoiceaChannel;\n","import * as WebexCore from '@webex/webex-core';\n\nimport VoiceaChannel from './voicea';\nimport type {MeetingTranscriptPayload} from './voicea.types';\n\nWebexCore.registerInternalPlugin('voicea', VoiceaChannel, {});\n\nexport {default} from './voicea';\nexport {type MeetingTranscriptPayload};\nexport {EVENT_TRIGGERS, TURN_ON_CAPTION_STATUS} from './constants';\n","/*!\n * Copyright (c) 2015-2017 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {\n SDK_EVENT,\n createEventEnvelope,\n constructHydraId,\n getHydraClusterString,\n hydraTypes,\n} from '@webex/common';\nimport {cloneDeep} from 'lodash';\n\nconst debug = require('debug')('attachmentActions');\n\n/**\n * @typedef {Object} AttachmentActionObject\n * @property {string} id - (server generated) Unique identifier for the attachment action\n * @property {string} messageId - The ID of the message in which attachment action is to be performed\n * @property {string} type - The type of attachment action eg., submit\n * @property {Object} inputs - The inputs for form fields in attachment message\n * @property {string} personId - (server generated) The ID for the author of the attachment action\n * @property {string} roomId - (server generated) The ID for the room of the message\n * @property {isoDate} created - (server generated) The date and time that the message was created\n */\n\n/**\n * AttachmentActions are events that communicate information when a user clicks on an\n * Action.Submit button in a card displayed in Webex\n * Information conveyed in an AttachmentAction includes details about the user that\n * clicked the button along with any card specific inputs. See the\n * {@link https://developer.webex.com/docs/api/v1/attachment-actions|Attachments Actions API Documentation}\n * for more details\n * @class\n */\nconst AttachmentActions = WebexPlugin.extend({\n /**\n * Initializer used to generate AttachmentActions\n * as a plugin wrapped around the provided arguments.\n * @private\n * @see WebexPlugin.initialize\n * @param {...any} args\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Register to listen for incoming attachmentAction events\n * This is an alternate approach to registering for attachmentAction webhooks.\n * The events passed to any registered handlers will be similar to the webhook JSON,\n * but will omit webhook specific fields such as name, secret, url, etc.\n * The attachmentActions.listen() event objects can also include additional fields not\n * available in the webhook's JSON payload, specifically: `inputs`.\n * To utilize the `listen()` method, the authorization token used\n * will need to have `spark:all` and `spark:kms` scopes enabled.\n * Note that by configuring your application to enable or disable `spark:all`\n * via its configuration page will also enable or disable `spark:kms`.\n * See the Sample App\n * for more details.\n * @instance\n * @memberof Messages\n * @returns {Promise}\n * @example\n * webex.attachmentActions.listen()\n * .then(() => {\n * console.log('listening to attachmentActions events');\n * webex.attachmentActions.on('created', (event) => console.log(`Got an attachmentActions:created event:\\n${event}`));\n * })\n * .catch((e) => console.error(`Unable to register for attachmentAction events: ${e}`));\n * // Some app logic...\n * // WHen it is time to cleanup\n * webex.attachmentActions.stopListening();\n * webex.attachmentActions.off('created');\n */\n listen() {\n // Create a common envelope that we will wrap all events in\n return createEventEnvelope(this.webex, SDK_EVENT.EXTERNAL.RESOURCE.ATTACHMENT_ACTIONS).then(\n (envelope) => {\n this.eventEnvelope = envelope;\n\n // Register to listen to events\n return this.webex.internal.mercury.connect().then(() => {\n this.listenTo(this.webex.internal.mercury, SDK_EVENT.INTERNAL.WEBEX_ACTIVITY, (event) =>\n this.onWebexApiEvent(event)\n );\n });\n }\n );\n },\n\n /**\n * Post a new attachment action for a message with attachment.\n * @instance\n * @memberof AttachmentActions\n * @param {AttachmentActionObject} attachmentAction\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Create Message with card Example'})\n * .then(function(room) {\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id,\n * attachments:[ {\n * contentType: 'application/vnd.microsoft.card.adaptive',\n * content: {\n * type: 'AdaptiveCard',\n * version: '1.0',\n * body: [\n * {\n * type: 'TextBlock',\n * text: '',\n * size: 'large'\n * },\n * {\n * type: 'TextBlock',\n * text: 'Adaptive Cards',\n * separation: 'none'\n * }\n * {\n * type: 'Input.Date',\n * id: 'dueDate'\n * }\n * ],\n * actions: [\n * {\n * type: 'Action.Submit',\n * title: 'Due Date'\n * }\n * ]\n * }\n * }]\n * });\n * })\n * .then(function(message) {\n * return webex.attachmentActions.create({\n * type: 'submit',\n * messageId: message.id,\n * inputs:{\n * dueDate: '26/06/1995'\n * }\n * })\n * .then(function(attachmentAction)){\n * var assert = require('assert');\n * assert(attachmentAction.id);\n * assert(attachmentAction.type);\n * assert(attachmentAction.personId);\n * assert(attachmentAction.inputs);\n * assert(attachmentAction.messageId);\n * assert(attachmentAction.roomId);\n * assert(attachmentAction.created);\n * return 'success';\n * }\n * });\n * // => success\n */\n create(attachmentAction) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'attachment/actions',\n body: attachmentAction,\n }).then((res) => res.body);\n },\n\n /**\n * Returns a single attachment action.\n * @instance\n * @memberof AttachmentActions\n * @param {string} attachmentAction\n * @returns {Promise}\n * @example\n * var attachmentAction;\n * webex.rooms.create({title: 'Get Message Example'})\n * .then(function(room) {\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id,\n * attachments:[ {\n * contentType: 'application/vnd.microsoft.card.adaptive',\n * content: {\n * type: 'AdaptiveCard',\n * version: '1.0',\n * body: [\n * {\n * type: 'TextBlock',\n * text: '',\n * size: 'large'\n * },\n * {\n * type: 'TextBlock',\n * text: 'Adaptive Cards',\n * separation: 'none'\n * },\n * {\n * type: 'Input.Date',\n * id: 'dueDate'\n * }\n * ],\n * actions: [\n * {\n * type: 'Action.Submit',\n * title: 'Due Date'\n * }\n * ]\n * }\n * }]\n * });\n * })\n * .then(function(message) {\n * return webex.attachmentActions.create({\n * type: 'submit',\n * messageId: message.id,\n * inputs:{\n * dueDate: '26/06/1995'\n * });\n * })\n * .then(function(attachmentAction) {\n * return webex.attachmentActions.get(attachmentAction.id)\n * })\n * .then(function(attachmentAction){\n * var assert = require('assert');\n * assert.deepEqual(attachmentAction, attachmentAction);\n * return 'success';\n * })\n * // => success\n */\n get(attachmentAction) {\n const id = attachmentAction.id || attachmentAction;\n\n return this.request({\n service: 'hydra',\n resource: `attachment/actions/${id}`,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * This function is called when an internal mercury events fires,\n * if the user registered for these events with the listen() function.\n * External users of the SDK should not call this function\n * @private\n * @memberof AttachmentAction\n * @param {Object} event\n * @returns {void}\n */\n onWebexApiEvent(event) {\n const {activity} = event.data;\n\n /* eslint-disable no-case-declarations */\n switch (activity.verb) {\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.CARD_ACTION:\n const createdEvent = this.getattachmentActionEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED\n );\n\n if (createdEvent) {\n debug(`attachmentAction \"created\" payload: \\\n ${JSON.stringify(createdEvent)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, createdEvent);\n }\n break;\n\n default: {\n break;\n }\n }\n },\n\n /**\n * Constructs the data object for an event on the attachmentAction resource,\n * adhering to Hydra's Webhook data structure messages.\n * External users of the SDK should not call this function\n * @private\n * @memberof AttachmentAction\n * @param {Object} activity from mercury\n * @param {Object} event type of \"webhook\" event\n * @returns {Object} constructed event\n */\n getattachmentActionEvent(activity, event) {\n try {\n const sdkEvent = cloneDeep(this.eventEnvelope);\n const cluster = getHydraClusterString(this.webex, activity.target.url);\n\n sdkEvent.event = event;\n sdkEvent.data.created = activity.published;\n sdkEvent.actorId = constructHydraId(hydraTypes.PEOPLE, activity.actor.entryUUID, cluster);\n sdkEvent.data.roomId = constructHydraId(hydraTypes.ROOM, activity.target.id, cluster);\n sdkEvent.data.messageId = constructHydraId(hydraTypes.MESSAGE, activity.parent.id, cluster);\n sdkEvent.data.personId = constructHydraId(\n hydraTypes.PEOPLE,\n activity.actor.entryUUID,\n cluster\n );\n // Seems like it would be nice to have this, but its not in the hydra webhook\n // sdkEvent.data.personEmail =\n // activity.actor.emailAddress || activity.actor.entryEmail;\n\n sdkEvent.data.id = constructHydraId(hydraTypes.ATTACHMENT_ACTION, activity.id, cluster);\n if (activity.object.inputs) {\n sdkEvent.data.inputs = activity.object.inputs;\n }\n sdkEvent.data.type = activity.object.objectType;\n\n return sdkEvent;\n } catch (e) {\n this.webex.logger.error(`Unable to generate SDK event from mercury \\\n'socket activity for attachmentAction:${event} event: ${e.message}`);\n\n return null;\n }\n },\n});\n\nexport default AttachmentActions;\n","/*!\n * Copyright (c) 2015-2017 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-conversation'; // decrypt mercury activities\nimport '@webex/internal-plugin-mercury';\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport AttachmentActions from './attachmentActions';\n\nregisterPlugin('attachmentActions', AttachmentActions);\n\nexport default AttachmentActions;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport querystring from 'querystring';\nimport url from 'url';\n\nimport {base64, oneFlight, whileInFlight} from '@webex/common';\nimport {grantErrors, WebexPlugin} from '@webex/webex-core';\nimport {cloneDeep, isEmpty, omit} from 'lodash';\nimport uuid from 'uuid';\nconst jwt = require('jsonwebtoken');\n\nconst OAUTH2_CSRF_TOKEN = 'oauth2-csrf-token';\nconst EMPTY_OBJECT_STRING = base64.encode(JSON.stringify({}));\n\n/**\n * Browser support for OAuth2. Automatically parses the URL hash for an access\n * token\n * @class\n * @name AuthorizationBrowser\n */\nconst Authorization = WebexPlugin.extend({\n derived: {\n /**\n * Alias of {@link AuthorizationBrowser#isAuthorizing}\n * @instance\n * @memberof AuthorizationBrowser\n * @type {boolean}\n */\n isAuthenticating: {\n deps: ['isAuthorizing'],\n fn() {\n return this.isAuthorizing;\n },\n },\n },\n\n session: {\n /**\n * Indicates if an Authorization Code exchange is inflight\n * @instance\n * @memberof AuthorizationBrowser\n * @type {boolean}\n */\n isAuthorizing: {\n default: false,\n type: 'boolean',\n },\n ready: {\n default: false,\n type: 'boolean',\n },\n },\n\n namespace: 'Credentials',\n\n /**\n * Initializer\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} attrs {@link AmpersandState}\n * @param {boolean} attrs.parse Controls whether or not the the url should get\n * parsed for an access token\n * @private\n * @returns {Authorization}\n */\n // eslint-disable-next-line complexity\n initialize(attrs, options) {\n const ret = Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n // Reminder, we can't do parse based on config, because config is not\n // available until nextTick and we want to be able to throw errors found in\n // the url.\n if (attrs.parse === false) {\n this.ready = true;\n\n return ret;\n }\n const location = url.parse(this.webex.getWindow().location.href, true);\n\n this._checkForErrors(location);\n\n let {hash} = location;\n\n if (!hash) {\n this.ready = true;\n\n return ret;\n }\n if (hash.includes('#')) {\n hash = hash.substr(1);\n }\n location.hash = querystring.parse(hash);\n if (location.hash.state) {\n location.hash.state = JSON.parse(base64.decode(location.hash.state));\n }\n const tokenData = this._parseHash(location);\n\n if (!tokenData) {\n return ret;\n }\n this._cleanUrl(location);\n\n // Wait until nextTick in case `credentials` hasn't initialized yet\n process.nextTick(() => {\n this.webex.credentials.set({supertoken: tokenData});\n this.ready = true;\n });\n\n return ret;\n },\n\n /**\n * Kicks off an oauth flow\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} options\n * @returns {Promise}\n */\n initiateLogin(options = {}) {\n options.state = options.state || {};\n options.state.csrf_token = this._generateSecurityToken();\n\n // If we're not explicitly a confidential client, assume we're a public\n // client\n if (this.config.clientType === 'confidential') {\n return this.initiateAuthorizationCodeGrant(options);\n }\n\n return this.initiateImplicitGrant(options);\n },\n\n @whileInFlight('isAuthorizing')\n /**\n * Kicks off the Authorization Code grant flow. Typically called via\n * {@link AuthorizationBrowser#initiateLogin}\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} options\n * @returns {Promise}\n */\n initiateImplicitGrant(options) {\n this.logger.info('authorization: initiating implicit grant flow');\n this.webex.getWindow().location = this.webex.credentials.buildLoginUrl(\n Object.assign({response_type: 'token'}, options)\n );\n\n return Promise.resolve();\n },\n\n @whileInFlight('isAuthorizing')\n /**\n * Kicks off the Implicit Code grant flow. Typically called via\n * {@link AuthorizationBrowser#initiateLogin}\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} options\n * @returns {Promise}\n */\n initiateAuthorizationCodeGrant(options) {\n this.logger.info('authorization: initiating authorization code grant flow');\n this.webex.getWindow().location = this.webex.credentials.buildLoginUrl(\n Object.assign({response_type: 'code'}, options)\n );\n\n return Promise.resolve();\n },\n\n @oneFlight\n /**\n * Requests a Webex access token for a user already authenticated into\n * your product.\n *\n * Note: You'll need to supply a jwtRefreshCallback of the form\n * `Promise = jwtRefreshCallback(webex)` for automatic token refresh to\n * work.\n *\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} options\n * @param {Object} options.jwt This is a jwt generated by your backend that\n * identifies a user in your system\n * @returns {Promise}\n */\n requestAccessTokenFromJwt({jwt}) {\n let hydraUri = this.webex.internal.services.get('hydra', true);\n\n if (hydraUri && hydraUri.slice(-1) !== '/') {\n // add a `/` to hydra's uri from the services catalog so that\n // it matches the current env service format.\n hydraUri += '/';\n }\n\n hydraUri = hydraUri || process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1/';\n\n return this.webex\n .request({\n method: 'POST',\n uri: `${hydraUri}jwt/login`,\n headers: {\n authorization: jwt,\n },\n })\n .then(({body}) => ({\n access_token: body.token,\n token_type: 'Bearer',\n expires_in: body.expiresIn,\n }))\n .then((token) => {\n this.webex.credentials.set({\n supertoken: token,\n });\n })\n .then(() => this.webex.internal.services.initServiceCatalogs());\n },\n\n /**\n * Called by {@link WebexCore#logout()}. Redirects to the logout page\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} options\n * @param {boolean} options.noRedirect if true, does not redirect\n * @returns {Promise}\n */\n logout(options = {}) {\n if (!options.noRedirect) {\n this.webex.getWindow().location = this.webex.credentials.buildLogoutUrl(options);\n }\n },\n\n /**\n * Creates a jwt user token\n * @param {object} options\n * @param {String} options.issuer Guest Issuer ID\n * @param {String} options.secretId Guest Secret ID\n * @param {String} options.displayName Guest Display Name | optional\n * @param {String} options.expiresIn\n * @returns {Promise}\n */\n async createJwt({issuer, secretId, displayName, expiresIn}) {\n const secret = Buffer.from(secretId, 'base64');\n const payload = {\n \"sub\": `guest-user-${uuid()}`,\n \"iss\": issuer,\n \"name\": displayName || `Guest User - ${uuid()}`\n };\n const alg = 'HS256';\n\n try {\n\n const jwtToken = jwt.sign(payload, secret, { expiresIn });\n\n return Promise.resolve({jwt: jwtToken});\n } catch (e) {\n return Promise.reject(e);\n }\n },\n\n /**\n * Checks if the result of the login redirect contains an error string\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} location\n * @private\n * @returns {Promise}\n */\n _checkForErrors(location) {\n const {query} = location;\n\n if (query && query.error) {\n const ErrorConstructor = grantErrors.select(query.error);\n\n throw new ErrorConstructor(query);\n }\n },\n\n /**\n * Removes no-longer needed values from the url (access token, csrf token, etc)\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} location\n * @private\n * @returns {Promise}\n */\n _cleanUrl(location) {\n location = cloneDeep(location);\n if (this.webex.getWindow().history && this.webex.getWindow().history.replaceState) {\n [\n 'access_token',\n 'token_type',\n 'expires_in',\n 'refresh_token',\n 'refresh_token_expires_in',\n ].forEach((key) => Reflect.deleteProperty(location.hash, key));\n if (!isEmpty(location.hash.state)) {\n location.hash.state = base64.encode(\n JSON.stringify(omit(location.hash.state, 'csrf_token'))\n );\n if (location.hash.state === EMPTY_OBJECT_STRING) {\n Reflect.deleteProperty(location.hash, 'state');\n }\n } else {\n Reflect.deleteProperty(location.hash, 'state');\n }\n location.hash = querystring.stringify(location.hash);\n this.webex.getWindow().history.replaceState({}, null, url.format(location));\n }\n },\n\n /**\n * Generates a CSRF token and sticks in in sessionStorage\n * @instance\n * @memberof AuthorizationBrowser\n * @private\n * @returns {Promise}\n */\n _generateSecurityToken() {\n this.logger.info('authorization: generating csrf token');\n\n const token = uuid.v4();\n\n this.webex.getWindow().sessionStorage.setItem('oauth2-csrf-token', token);\n\n return token;\n },\n\n /**\n * Parses the url hash into an access token object\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} location\n * @private\n * @returns {Object}\n */\n _parseHash(location) {\n const hash = cloneDeep(location.hash);\n\n if (hash) {\n this._verifySecurityToken(hash);\n }\n if (!hash.access_token) {\n this.ready = true;\n\n return undefined;\n }\n if (hash.expires_in) {\n hash.expires_in = parseInt(hash.expires_in, 10);\n }\n if (hash.refresh_token_expires_in) {\n hash.refresh_token_expires_in = parseInt(hash.refresh_token_expires_in, 10);\n }\n\n return hash;\n },\n\n /**\n * Checks if the CSRF token in sessionStorage is the same as the one returned\n * in the url.\n * @instance\n * @memberof AuthorizationBrowser\n * @param {Object} hash\n * @private\n * @returns {Promise}\n */\n _verifySecurityToken(hash) {\n const sessionToken = this.webex.getWindow().sessionStorage.getItem(OAUTH2_CSRF_TOKEN);\n\n this.webex.getWindow().sessionStorage.removeItem(OAUTH2_CSRF_TOKEN);\n if (!sessionToken) {\n return;\n }\n\n if (!hash.state) {\n throw new Error(`Expected CSRF token ${sessionToken}, but not found in redirect hash`);\n }\n\n if (!hash.state.csrf_token) {\n throw new Error(`Expected CSRF token ${sessionToken}, but not found in redirect hash`);\n }\n\n const token = hash.state.csrf_token;\n\n if (token !== sessionToken) {\n throw new Error(`CSRF token ${token} does not match stored token ${sessionToken}`);\n }\n },\n});\n\nexport default Authorization;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n credentials: {\n /**\n * Controls whether {@link Authorization#initiateLogin()} requests a token\n * or an auth code. Anything other than 'confidential' will be treated as\n * 'public'\n * @private\n * @type {string}\n */\n clientType: 'public',\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Authorization from './authorization';\nimport config from './config';\n\nconst proxies = ['isAuthorizing', 'isAuthenticating'];\n\nregisterPlugin('authorization', Authorization, {\n config,\n proxies,\n});\n\nexport {default} from './authorization';\nexport {default as config} from './config';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {base64} from '@webex/common';\n\n/**\n * @class\n * @extends {Lyra}\n * @memberof Lyra\n */\nconst Space = WebexPlugin.extend({\n namespace: 'Lyra',\n\n /**\n * Lists lyra spaces associated with user\n *\n * @returns {Promise} spaces\n */\n list() {\n return this.webex\n .request({\n method: 'GET',\n api: 'lyra',\n resource: '/spaces',\n })\n .then((res) => res.body.items);\n },\n\n /**\n * Retrieves a lyra space info\n * @param {Types~LyraSpace} space\n * @param {string} space.id\n * @param {string} space.identity.id\n * @returns {Promise} response body\n */\n get(space = {}) {\n const spaceId = space.id || (space.identity && space.identity.id);\n\n if (!spaceId) {\n return Promise.reject(new Error('space.id is required'));\n }\n\n return this.webex\n .request({\n method: 'GET',\n api: 'lyra',\n resource: `/spaces/${spaceId}`,\n })\n .then((res) => res.body);\n },\n\n /**\n * Joins a lyra space, update every 10 minutes to keep alive for MANUAL\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {object} options\n * @param {string} options.passType\n * @param {string} options.data additional data such as proof for ultrasound\n * @param {string} options.uri use a custom uri\n * @returns {Promise}\n */\n join(space, options) {\n options = {\n passType: 'MANUAL',\n ...options,\n };\n\n const body = {\n pass: {\n type: options.passType,\n },\n deviceUrl: this.webex.internal.device.url,\n };\n\n if (options.data) {\n body.pass.data = options.data;\n }\n\n if (options.verificationInitiation) {\n body.verificationInitiation = options.verificationInitiation;\n }\n\n // if options.uri is available use it, since that would have the\n // complete lyra service URL\n if (options.uri) {\n return this.webex.request({\n method: 'PUT',\n uri: options.uri,\n body,\n });\n }\n\n return this.webex.request({\n method: 'PUT',\n api: 'lyra',\n resource: `${space.url}/occupants/@me`,\n body,\n });\n },\n\n /**\n * Leaves a lyra space\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {object} options\n * @param {boolean} options.removeAllDevices remove all devices of current user also\n * @returns {Promise}\n */\n leave(space, options = {}) {\n // all devices are removed by default (when deviceUrl is not supplied)\n let uri = `${space.url}/occupants/@me`;\n\n if (!options.removeAllDevices) {\n const params = {\n deviceUrl: base64.toBase64Url(this.webex.internal.device.url),\n };\n\n uri += `?${querystring.stringify(params)}`;\n }\n\n return this.webex.request({\n method: 'DELETE',\n api: 'lyra',\n resource: uri,\n });\n },\n\n /**\n * Verifies a space occupant (to be used by the lyra device)\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {string} occupantId id of user to verify\n * @returns {Promise}\n */\n verifyOccupant(space, occupantId) {\n const body = {\n pass: {\n type: 'VERIFICATION',\n },\n };\n\n return this.webex.request({\n method: 'PUT',\n uri: `${space.url}/occupants/${occupantId}`,\n body,\n });\n },\n\n /**\n * Gets the state of bindings in this Lyra space\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @returns {Promise} bindings response body\n */\n getCurrentBindings(space) {\n return this.webex\n .request({\n method: 'GET',\n uri: `${space.url}/bindings`,\n })\n .then((res) => res.body);\n },\n\n /**\n * Binds a conversation to lyra space\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {string} space.id\n * @param {string} space.identity.id\n * @param {Types~Conversation} conversation\n * @param {string} conversation.kmsResourceObjectUrl\n * @param {string} conversation.url\n * @param {object} options\n * @param {boolean} options.uri complete lyra service URL\n * @returns {Promise} bindings response body\n */\n bindConversation(space = {}, conversation = {}, options = {}) {\n const spaceId = space.id || (space.identity && space.identity.id);\n\n if (!space.url) {\n return Promise.reject(new Error('space.url is required'));\n }\n\n if (!spaceId) {\n return Promise.reject(new Error('space.id is required'));\n }\n\n if (!conversation.kmsResourceObjectUrl) {\n return Promise.reject(new Error('conversation.kmsResourceObjectUrl is required'));\n }\n\n if (!conversation.url) {\n return Promise.reject(new Error('conversation.url is required'));\n }\n\n const body = {\n kmsMessage: {\n method: 'create',\n uri: '/authorizations',\n resourceUri: `${conversation.kmsResourceObjectUrl}`,\n userIds: [spaceId],\n },\n conversationUrl: conversation.url,\n };\n\n const request = {\n method: 'POST',\n body,\n };\n\n // if options.uri is available use it, since that would have the\n // complete lyra service URL\n if (options.uri) {\n request.uri = options.uri;\n } else {\n request.api = 'lyra';\n request.resource = `${space.url}/bindings`;\n }\n\n return this._bindConversation(spaceId)\n .then(() => this.webex.request(request))\n .then((res) => res.body);\n },\n\n /**\n * Binds a conversation to lyra space by posting capabilities to Lyra.\n *\n * Lyra no longer automatically enables binding for a space containing a device with type \"SPARK_BOARD\".\n * Webexboard now is running the CE code stack which supports posting of capabilities to Lyra.\n * @param {String} spaceId space ID\n * @returns {Promise} bindings response body\n */\n _bindConversation(spaceId) {\n // Skip until we can bind a conversation to lyra space by posting capabilities to Lyra.\n /* eslint no-unreachable: 1 */\n return Promise.resolve();\n\n // PUT /lyra/api/v1/spaces/{spaceId}/devices/{encodedDeviceUrl}/capabilities\n const encodedDeviceUrl = base64.encode(this.webex.internal.device.url);\n const resource = `spaces/${spaceId}/devices/${encodedDeviceUrl}/capabilities`;\n\n return this.webex.request({\n method: 'PUT',\n api: 'lyra',\n resource,\n body: {\n bindingCleanupAfterCall: true,\n },\n });\n },\n\n /**\n * Removes binding between a conversation and a lyra space using conversation\n * url\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {string} space.id\n * @param {string} space.identity.id\n * @param {Types~Conversation} conversation\n * @param {string} conversation.kmsResourceObjectUrl\n * @param {string} conversation.url\n * @param {object} options\n * @param {boolean} options.uri complete lyra service URL\n * @returns {Promise} bindings response body\n */\n unbindConversation(space = {}, conversation = {}, options = {}) {\n const spaceId = space.id || (space.identity && space.identity.id);\n\n if (!space.url) {\n return Promise.reject(new Error('space.url is required'));\n }\n\n if (!spaceId) {\n return Promise.reject(new Error('space.id is required'));\n }\n\n if (!conversation.url) {\n return Promise.reject(new Error('conversation.url is required'));\n }\n\n if (!conversation.kmsResourceObjectUrl) {\n return Promise.reject(new Error('conversation.kmsResourceObjectUrl is required'));\n }\n\n const parameters = {\n kmsMessage: {\n method: 'delete',\n uri: `${conversation.kmsResourceObjectUrl}/authorizations?${querystring.stringify({\n authId: spaceId,\n })}`,\n },\n conversationUrl: base64.toBase64Url(conversation.url),\n };\n\n return this.webex.internal.encryption.kms.prepareRequest(parameters.kmsMessage).then((req) => {\n parameters.kmsMessage = req.wrapped;\n // if options.uri is available use it, since that would have the\n // complete lyra service URL\n if (options.uri) {\n return this.webex.request({\n method: 'DELETE',\n uri: `${options.uri}?${querystring.stringify(parameters)}`,\n });\n }\n\n return this.webex.request({\n method: 'DELETE',\n api: 'lyra',\n resource: `${space.url}/bindings?${querystring.stringify(parameters)}`,\n });\n });\n },\n\n /**\n * Delete a binding using binding id\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {string} space.identity.id\n * @param {object} options\n * @param {string} options.kmsResourceObjectUrl\n * @param {string} options.bindingId\n * @returns {Promise} bindings response body\n */\n deleteBinding(space = {}, options = {}) {\n const spaceId = space.id || (space.identity && space.identity.id);\n\n if (!space.url) {\n return Promise.reject(new Error('space.url is required'));\n }\n\n if (!spaceId) {\n return Promise.reject(new Error('space.id is required'));\n }\n\n if (!options.kmsResourceObjectUrl) {\n return Promise.reject(new Error('options.kmsResourceObjectUrl is required'));\n }\n\n if (!options.bindingId) {\n return Promise.reject(new Error('options.bindingId is required'));\n }\n\n const parameters = {\n kmsMessage: {\n method: 'delete',\n uri: `${options.kmsResourceObjectUrl}/authorizations?${querystring.stringify({\n authId: spaceId,\n })}`,\n },\n };\n\n return this.webex.internal.encryption.kms.prepareRequest(parameters.kmsMessage).then((req) => {\n parameters.kmsMessage = req.wrapped;\n\n return this.webex.request({\n method: 'DELETE',\n uri: `${space.url}/bindings/${options.bindingId}?${querystring.stringify(parameters)}`,\n });\n });\n },\n});\n\nexport default Space;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\n/**\n * @class\n * @extends {Lyra}\n * @memberof Lyra\n */\nconst Device = WebexPlugin.extend({\n namespace: 'Lyra',\n\n /**\n * Gets the audio state of the device\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @returns {Promise} {volume, microphones, url}\n */\n getAudioState(space) {\n return this.webex\n .request({\n method: 'GET',\n uri: `${space.url}/audio`,\n })\n .then((res) => res.body);\n },\n\n /**\n * Updates audio state for lyra device, should be called every 10 minutes or\n * when mic or volume state is changed\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {Types~LyraAudioState} audioState\n * @param {object} audioState.volume optional\n * @param {boolean} audioState.volume.level\n * @param {object} audioState.microphones optional\n * @param {boolean} audioState.microphones.muted\n * @param {string} audioState.deviceUrl\n * @returns {Promise}\n */\n putAudioState(space, audioState = {}) {\n if (!audioState.deviceUrl) {\n return Promise.reject(new Error('audioState.deviceUrl is required'));\n }\n\n return this.webex\n .request({\n method: 'PUT',\n uri: `${space.url}/audio`,\n body: audioState,\n })\n .then((res) => res.body);\n },\n\n /**\n * Mutes lyra device\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @returns {Promise}\n */\n mute(space) {\n return this.webex.request({\n method: 'POST',\n uri: `${space.url}/audio/microphones/actions/mute/invoke`,\n });\n },\n\n /**\n * Unmutes lyra device\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @returns {Promise}\n */\n unmute(space) {\n return this.webex.request({\n method: 'POST',\n uri: `${space.url}/audio/microphones/actions/un-mute/invoke`,\n });\n },\n\n /**\n * Increases lyra device's volume\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @returns {Promise}\n */\n increaseVolume(space) {\n return this.webex.request({\n method: 'POST',\n uri: `${space.url}/audio/volume/actions/increase/invoke`,\n });\n },\n\n /**\n * Decreases lyra device's volume\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @returns {Promise}\n */\n decreaseVolume(space) {\n return this.webex.request({\n method: 'POST',\n uri: `${space.url}/audio/volume/actions/decrease/invoke`,\n });\n },\n\n /**\n * Sets lyra device's volume but should use increase and decrease api instead\n * @param {Types~LyraSpace} space\n * @param {string} space.url\n * @param {integer} level to be set\n * @returns {Promise}\n */\n setVolume(space, level = 0) {\n return this.webex.request({\n method: 'POST',\n uri: `${space.url}/audio/volume/actions/set/invoke`,\n body: {\n level,\n },\n });\n },\n});\n\nexport default Device;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport Space from './space';\nimport Device from './device';\n\nconst Lyra = WebexPlugin.extend({\n /**\n * @typedef {Object} Endpoint\n * @property {Object} advertiser\n * @property {string} advertiser.id\n * @property {string} advertiser.displayName\n * @property {string} advertiser.orgId\n * @property {Object} links\n * @property {Object} links.addMeToSpace\n * @property {string} links.addMeToSpace.href\n * @property {string} links.addMeToSpace.method\n * @property {Object} links.lyra_space\n * @property {string} links.lyra_space.href\n * @property {string} links.lyra_space.method\n * @property {string} proof\n * @property {Object} token\n * @property {string} token.value\n */\n namespace: 'Lyra',\n children: {\n space: Space,\n device: Device,\n },\n\n /**\n * Get the endpoint information\n * @param {string} token - ultrasound token decoded\n * @returns {Promise}\n */\n getAdvertisedEndpoint(token) {\n return this.webex\n .request({\n method: 'GET',\n api: 'proximity',\n resource: '/ultrasound/advertisements',\n qs: {\n token,\n },\n })\n .then((res) => res.body);\n },\n});\n\nexport default Lyra;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-feature';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Lyra from './lyra';\nimport config from './config';\n\nregisterInternalPlugin('lyra', Lyra, {\n config,\n});\n\nexport {default} from './lyra';\nexport {config};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n lyra: {},\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get} from 'lodash';\nimport {oneFlight} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Search = WebexPlugin.extend({\n namespace: 'Search',\n\n people(options) {\n options = options || {};\n\n if (!options.queryString && options.query) {\n options.queryString = options.query;\n Reflect.deleteProperty(options, 'query');\n }\n\n if (!options.queryString) {\n return Promise.reject(new Error('`options.query` is required'));\n }\n\n return this.request({\n api: 'argonaut',\n resource: 'directory',\n method: 'POST',\n body: options,\n }).then((res) => res.body);\n },\n\n @oneFlight\n bindSearchKey() {\n return this.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then(([key]) =>\n this.webex.internal.encryption.kms\n .createResource({\n key,\n userIds: [this.webex.internal.device.userId],\n })\n .then(() => this.webex.internal.device.set('searchEncryptionKeyUrl', key.uri))\n );\n },\n\n /**\n * Fetches search result activities\n * @param {Object} options\n * @param {boolean} options.includeRemoteClusterReferences when true,\n * includes search results from remote clusters\n * @returns {Promise} Resolves with the activities\n */\n search(options) {\n /* eslint max-nested-callbacks: [0] */\n options = options || {};\n\n let promise = Promise.resolve();\n\n if (!this.webex.internal.device.searchEncryptionKeyUrl) {\n promise = this.bindSearchKey();\n }\n\n return promise\n .then(() =>\n this.webex.request({\n service: 'argonaut',\n resource: 'search',\n method: 'POST',\n body: Object.assign(options, {\n searchEncryptionKeyUrl: this.webex.internal.device.searchEncryptionKeyUrl,\n }),\n })\n )\n .then((res) => {\n const resActivities = get(res, 'body.activities.items', []);\n\n if (options.includeRemoteClusterReferences && res.body.breadcrumbs) {\n const {breadcrumbs} = res.body;\n const promises = [];\n\n Object.keys(breadcrumbs).forEach((cluster) => {\n // Map activity URLs to their cluster\n const editedCluster = `${cluster}:identityLookup`;\n const clusterActivityUrls = breadcrumbs[cluster].items.map(\n (activity) => activity.activityUrl\n );\n\n // Find activities per cluster\n const bulkActivitiesPromise = this.webex.internal.conversation\n .bulkActivitiesFetch(clusterActivityUrls, {cluster: editedCluster})\n .catch((err) => {\n this.logger.warn('search: error fetching from remote clusters', err);\n\n return Promise.resolve([]);\n });\n\n promises.push(bulkActivitiesPromise);\n });\n\n return Promise.all(promises).then((clusterResults) =>\n clusterResults.reduce(\n (accumulator, clusterResult) => accumulator.concat(clusterResult),\n resActivities\n )\n );\n }\n\n return resActivities;\n });\n },\n});\n\nexport default Search;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-encryption';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Search from './search';\nimport config from './config';\n\nregisterInternalPlugin('search', Search, {\n config,\n payloadTransformer: {\n predicates: [\n {\n name: 'encryptSearchQuery',\n direction: 'outbound',\n test(ctx, options) {\n if (!has(options, 'body.query')) {\n return Promise.resolve(false);\n }\n\n if (!has(options, 'body.searchEncryptionKeyUrl')) {\n return Promise.resolve(false);\n }\n\n if (options.service === 'argonaut') {\n return Promise.resolve(true);\n }\n\n if (options.url) {\n const service = ctx.webex.internal.services.getServiceFromUrl(options.url);\n\n return Promise.resolve(service && service.name === 'argonaut');\n }\n\n return Promise.resolve(false);\n },\n extract(options) {\n return Promise.resolve(options.body);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.activities.items[0].objectType')).then(\n (res) => {\n if (!res) {\n return Promise.resolve(false);\n }\n\n if (response.options.service === 'argonaut') {\n return Promise.resolve(true);\n }\n\n if (response.options.url) {\n const service = ctx.webex.internal.services.getServiceFromUrl(response.options.url);\n\n return Promise.resolve(service && service.name === 'argonaut');\n }\n\n return Promise.resolve(false);\n }\n );\n },\n extract(response) {\n return Promise.resolve(response.body.activities.items);\n },\n },\n ],\n transforms: [\n {\n name: 'encryptSearchQuery',\n direction: 'outbound',\n fn(ctx, object) {\n return ctx.webex.internal.encryption\n .encryptText(object.searchEncryptionKeyUrl, object.query)\n .then((q) => {\n object.query = q;\n });\n },\n },\n ],\n },\n});\n\nexport {default} from './search';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n search: {},\n};\n","import {merge} from 'lodash';\n\nconst DeviceCollection = {\n devices: {},\n\n get(deviceId) {\n return this.devices[deviceId];\n },\n\n set(device) {\n const deviceId = device.id || (device.identity && device.identity.id);\n // check if the device is already existing, if so then merge else add\n const existingDevice = this.devices[deviceId];\n\n if (existingDevice) {\n // already existing, merge for any new binding information\n merge(existingDevice, device);\n } else {\n this.devices[deviceId] = device;\n }\n },\n\n reset() {\n this.devices = {};\n },\n\n getAll() {\n return Object.values(this.devices);\n },\n};\n\nexport default DeviceCollection;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {cloneDeep} from 'lodash';\nimport '@webex/internal-plugin-lyra';\nimport '@webex/internal-plugin-search';\nimport {WebexPlugin} from '@webex/webex-core';\nimport uuid from 'uuid';\n\nimport {LYRA_SPACE, UC_CLOUD, DEFAULT_PRODUCT_NAME} from './constants';\nimport DeviceCollection from './collection';\n\nconst DeviceManager = WebexPlugin.extend({\n namespace: 'DeviceManager',\n _devicePendingPinChallenge: null,\n _pairedDevice: null,\n _boundSpace: null,\n\n initialize() {\n // Lyra mercury events listener\n this.webex.internal.mercury.on('event:lyra.space_updated', ({data}) => {\n this._receiveDeviceUpdates(data);\n });\n },\n\n /**\n * Gets a list of all recent devices associated with the user\n * the device list gets populated from Redis\n * @returns {Promise}\n */\n getAll() {\n return DeviceCollection.getAll();\n },\n\n /**\n * Gets a list of all recent devices associated with the user\n * the device list gets populated from Redis\n * @returns {Promise}\n */\n refresh() {\n DeviceCollection.reset();\n\n return this.webex\n .request({\n api: 'wdm',\n resource: 'devices/auxiliary',\n })\n .then((res) => {\n if (!res.body) {\n return Promise.reject();\n }\n\n return this._updateDeviceMetadata(res.body.items).then((devices) => {\n /* eslint-disable consistent-return */\n devices.forEach((device) => {\n if (device.deviceInfo && device.deviceInfo.machineType === LYRA_SPACE) {\n return this.webex.internal.lyra.space.get(device.deviceInfo).catch((err) => {\n this.logger.error('DeviceManager#refresh: failed to receive device info', err);\n });\n }\n });\n /* eslint-enable consistent-return */\n res.body.items.forEach((device) => {\n DeviceCollection.set(device);\n });\n\n return this.getAll();\n });\n })\n .catch((err) => {\n this.logger.error('DeviceManager#refresh: failed to fetch recent devices', err);\n });\n },\n\n /**\n * Search for a device by name\n * @param {Object} options\n * @param {string} options.searchQuery\n * @returns {Promise}\n */\n search(options) {\n if (!options || !options.searchQuery) {\n this.logger.error('DeviceManager#search: options.searchQuery is required');\n\n return Promise.reject(new Error('DeviceManager#search: options.searchQuery is required'));\n }\n\n return this.webex.internal.search\n .people({\n searchId: uuid.v4(),\n searchType: 'DEVICE_SEARCH',\n searchEntity: 'device',\n includePeople: false,\n includeRooms: true,\n queryString: options.searchQuery,\n })\n .catch((err) => {\n this.logger.error('DeviceManager#search: failed to search a device', err);\n\n throw err;\n });\n },\n\n /**\n * Caches the device info and also registers to Redis for subsequent fetches\n * @param {Object} device\n * @param {string} device.id\n * @returns {deviceInfo}\n */\n upsert(device) {\n const deviceId = device.id || (device.identity && device.identity.id);\n\n if (!deviceId) {\n this.logger.error('DeviceManager#upsert: device.id is required');\n\n return Promise.reject(new Error('DeviceManager#upsert: device.id is required'));\n }\n this._pairedDevice = this._devicePendingPinChallenge;\n this._devicePendingPinChallenge = null;\n // check if the device is already existing, if so then merge else add\n const existingDevice = DeviceCollection.get(deviceId);\n\n if (existingDevice) {\n DeviceCollection.set(device);\n\n return Promise.resolve(DeviceCollection.get(deviceId));\n }\n\n // new device requested, add to wdm for subsequent retreivals\n return (\n this.webex\n .request({\n api: 'wdm',\n method: 'PUT',\n resource: `devices/auxiliary/Room/${deviceId}`,\n })\n .then((res) => {\n const auxDevice = res.body;\n\n return this._decryptDeviceName(auxDevice);\n })\n // eslint-disable-next-line no-shadow\n .then((device) => {\n DeviceCollection.set(device);\n\n return Promise.resolve(DeviceCollection.get(deviceId));\n })\n .catch((err) => {\n this.logger.error('DeviceManager#upsert: failed to add/update a device', err);\n\n return Promise.reject(err);\n })\n );\n },\n\n /**\n * Retreives device info of a particular device\n * @param {string} token\n * @returns {Promise}\n */\n get(token) {\n if (!token) {\n this.logger.error('DeviceManager#get: token is required');\n\n return Promise.reject(new Error('DeviceManager#get: token is required'));\n }\n let deviceInfo;\n\n return this.webex.internal.lyra\n .getAdvertisedEndpoint(token)\n .then((res) => {\n deviceInfo = res;\n\n return this.webex.internal.lyra.space.get({id: res.advertiser.id});\n })\n .then((result) => {\n // the deviceInfo doesn't have proper displayName, hence update\n // displayName on deviceInfo for search to work\n if (result && result.identity && result.identity.displayName) {\n deviceInfo.advertiser.displayName = result.identity.displayName;\n }\n\n return deviceInfo;\n })\n .catch((err) => {\n this.logger.error('DeviceManager#get: failed to get device info', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Unregisters the device from Redis, will not fetch in subsequent loads,\n * similar to space.deleteBinding()\n * @param {string} deviceId\n * @returns {Promise}\n */\n remove(deviceId) {\n if (!deviceId) {\n this.logger.error('DeviceManager#remove: deviceId is required');\n\n return Promise.reject(new Error('DeviceManager#remove: deviceId is required'));\n }\n\n return this.webex\n .request({\n method: 'delete',\n api: 'wdm',\n resource: `devices/auxiliary/${deviceId}`,\n })\n .catch((error) => {\n this.logger.error('DeviceManager#remove: failed to remove the device', error);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Requests to display PIN on the device\n * @param {object} device\n * @param {object} options\n * @param {object} options.data\n * @returns {Promise}\n */\n requestPin(device, options = {}) {\n const deviceId = device.id || (device.identity && device.identity.id);\n\n if (!deviceId) {\n this.logger.error('DeviceManager#requestPin: device.id is required');\n\n return Promise.reject(new Error('DeviceManager#requestPin: device.id is required'));\n }\n const space = {id: deviceId, url: `/spaces/${deviceId}`};\n\n return this.webex.internal.lyra.space\n .get(space)\n .then((dev) => {\n // check if the space is pinChallenge capable\n if (dev && dev.occupants && dev.occupants.pinChallenge) {\n this.logger.info('DeviceManager#requestPin: space is PIN challenge capable');\n\n return this.webex.internal.lyra.space\n .join(space, {\n passType: 'MANUAL',\n verificationInitiation: 'PIN',\n data: options.data,\n })\n .then(() => {\n this._devicePendingPinChallenge = dev;\n\n // return the actual device so that it can be upserted on successful\n // PIN exchange\n return dev;\n });\n }\n // pairs with the space if it's not PIN challenge capable\n this.logger.info(\n 'DeviceManager#requestPin: space is not PIN challenge capable, probably already occupied, will still return device info'\n );\n\n return this.webex.internal.lyra.space.get(space).then(() => Promise.resolve(dev));\n })\n .catch((err) => {\n this.logger.error('DeviceManager#requestPin: device failed PIN challenge request', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * pairs the device with the user (manual pairing), also adds it to\n * user's recents list for subsequent fetches.\n * similar to space.join()\n * @param {object} options\n * @param {number} options.pin\n * @returns {Promise}\n */\n pair(options = {}) {\n if (!options.pin) {\n this.logger.error('DeviceManager#pair: options.pin is required');\n\n return Promise.reject(new Error('DeviceManager#pair: options.pin is required'));\n }\n if (this._devicePendingPinChallenge) {\n const space = {\n id: this._devicePendingPinChallenge.identity.id,\n url: `/spaces/${this._devicePendingPinChallenge.identity.id}`,\n };\n\n return this.webex.internal.lyra.space\n .join(space, {\n passType: 'PIN_ANSWER',\n data: options.pin,\n })\n .catch((err) => {\n this.logger.error('DeviceManager#pair: incorrect PIN, unable to pair ', err);\n\n return Promise.reject(err);\n })\n .then(() => this.upsert(this._devicePendingPinChallenge));\n }\n this.logger.error('DeviceManager#pair: no device to pair');\n\n return Promise.reject(new Error('DeviceManager#pair: no device to pair'));\n },\n\n /**\n * unpairs the device with the user (manual/ultrasonic pairing), but still\n * keeps in the recents list/does not remove from Redis\n * options.removeAllDevices will remove all associated devices to user\n * similar to space.leave()\n * @param {object} options\n * @param {boolean} options.removeAllDevices\n * @returns {Promise}\n */\n unpair(options = {}) {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#unpair: no device to unpair');\n\n return Promise.reject(new Error('DeviceManager#unpair: no device to unpair'));\n }\n const space = {url: `/spaces/${this._pairedDevice.identity.id}`};\n\n return this.webex.internal.lyra.space.leave(space, options).catch((err) => {\n this.logger.error('DeviceManager#unpair: failed to remove device from Lyra', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * binds the space to the paired device (if supported)\n * similar to space.bindConversation()\n * @param {object} options\n * @param {boolean} options.url, conversation url\n * @param {boolean} options.kmsResourceObjectUrl of the convo\n * @returns {Promise}\n */\n bindSpace(options = {}) {\n if (!options.url) {\n this.logger.error('DeviceManager#pair: options.url is required');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: options.url is required'));\n }\n if (!options.kmsResourceObjectUrl) {\n this.logger.error('DeviceManager#bindSpace: options.kmsResourceObjectUrl is required');\n\n return Promise.reject(\n new Error('DeviceManager#bindSpace: options.kmsResourceObjectUrl is required')\n );\n }\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#bindSpace: No device paired currently');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: No device paired currently'));\n }\n const space = {\n url: `/spaces/${this._pairedDevice.identity.id}`,\n id: this._pairedDevice.identity.id,\n };\n\n this._boundSpace = {\n kmsResourceObjectUrl: options.kmsResourceObjectUrl,\n url: options.url,\n };\n\n return this.webex.internal.lyra.space.bindConversation(space, this._boundSpace).catch((err) => {\n this.logger.error('DeviceManager#bindSpace: failed to bind device to Space');\n\n return Promise.reject(err);\n });\n },\n\n /**\n * unbinds the space to the paired device (if supported)\n * similar to space.unbindConversation()\n * @returns {Promise}\n */\n unbindSpace() {\n if (!this._pairedDevice || !this._boundSpace) {\n this.logger.error('DeviceManager#unbindSpace: No space currently bound to the device');\n\n return Promise.reject(\n new Error('DeviceManager#unbindSpace: No space currently bound to the device')\n );\n }\n const space = {\n url: `/spaces/${this._pairedDevice.identity.id}`,\n id: this._pairedDevice.identity.id,\n };\n\n return this.webex.internal.lyra.space\n .unbindConversation(space, this._boundSpace)\n .then((res) => {\n this._boundSpace = null;\n\n return Promise.resolve(res);\n })\n .catch((err) => {\n this.logger.error('DeviceManager#unbindSpace: failed to unbind Space to device');\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Gets the audio state of the paired device\n * similar to device.getAudioState()\n * @returns {Promise}\n */\n getAudioState() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#getAudioState: Currently no device is paired');\n\n return Promise.reject(\n new Error('DeviceManager#getAudioState: Currently no device is paired')\n );\n }\n\n return this.webex.internal.lyra.device.getAudioState(this._pairedDevice);\n },\n\n /**\n * Updates audio state of the paired device, should be called every 10 minutes\n * or when mic or volume state is changed\n * similar to device.putAudioState()\n * @param {object} space\n * @param {object} audioState\n * @returns {Promise}\n */\n putAudioState(space, audioState = {}) {\n return this.webex.internal.lyra.device.putAudioState(space, audioState);\n },\n\n /**\n * Mutes paired device\n * similar to device.mute()\n * @returns {Promise}\n */\n mute() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#mute: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#mute: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.mute(this._pairedDevice);\n },\n\n /**\n * Unmutes paired device\n * similar to device.unmute()\n * @returns {Promise}\n */\n unmute() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#unmute: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#unmute: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.unmute(this._pairedDevice);\n },\n\n /**\n * Increases paired device's volume\n * similar to device.increaseVolume()\n * @returns {Promise}\n */\n increaseVolume() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#increaseVolume: Currently no device is paired');\n\n return Promise.reject(\n new Error('DeviceManager#increaseVolume: Currently no device is paired')\n );\n }\n\n return this.webex.internal.lyra.device.increaseVolume(this._pairedDevice);\n },\n\n /**\n * Decreases paired device's volume\n * similar to device.decreaseVolume()\n * @returns {Promise}\n */\n decreaseVolume() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#decreaseVolume: Currently no device is paired');\n\n return Promise.reject(\n new Error('DeviceManager#decreaseVolume: Currently no device is paired')\n );\n }\n\n return this.webex.internal.lyra.device.decreaseVolume(this._pairedDevice);\n },\n\n /**\n * Sets paired device's volume but should use increase and decrease api instead\n * similar to device.setVolume()\n * @param {number} level\n * @returns {Promise}\n */\n setVolume(level = 0) {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#setVolume: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#setVolume: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.setVolume(this._pairedDevice, level);\n },\n\n /**\n * Utility function to update decrypted device name on device object\n * @param {Array} deviceArray\n * @returns {device}\n */\n _updateDeviceMetadata(deviceArray = []) {\n if (!deviceArray.length) {\n return Promise.resolve(deviceArray);\n }\n const devices = cloneDeep(deviceArray);\n\n return Promise.all(\n devices.map((device, index) =>\n this.webex.internal.services\n .waitForCatalog('postauth')\n .then(() => {\n if (device.deviceClass === UC_CLOUD) {\n device.id = `${this.webex.internal.services.get('wdm')}/${device.id}`;\n }\n\n return this._decryptDeviceName(device);\n })\n .then((updatedDevice) => {\n devices[index] = updatedDevice;\n\n return Promise.resolve();\n })\n )\n ).then(() => Promise.resolve(devices));\n },\n\n /**\n * Utility function to update decrypted device name on device object\n * @param {object} inDevice\n * @returns {device}\n */\n _decryptDeviceName(inDevice = {}) {\n const device = cloneDeep(inDevice);\n\n if (\n device.metadata &&\n device.metadata.encryptedUserAssignedName &&\n device.metadata.encryptionKeyUrl\n ) {\n return this.webex.internal.encryption\n .decryptText(device.metadata.encryptionKeyUrl, device.metadata.encryptedUserAssignedName)\n .then((decryptedDeviceName) => {\n // set userAssignedName as the decypted value, unset encryptedUserAssignedName since it's not needed\n device.metadata.encryptedUserAssignedName = undefined;\n device.metadata.userAssignedName = decryptedDeviceName;\n\n return Promise.resolve(device);\n })\n .catch((err) => {\n // unset encryptedUserAssignedName if failed to decrypt\n device.metadata.encryptedUserAssignedName = undefined;\n this.logger.error(\n 'DeviceCollection#_decryptDeviceName: failed to decrypt device name',\n err\n );\n });\n }\n\n return Promise.resolve(device);\n },\n\n /**\n * Utility function to update device info on mercury updates\n * @param {object} device\n * @returns {device}\n */\n _receiveDeviceUpdates(device) {\n // we care only the updates are for the registered devices\n if (device && device.spaceUrl) {\n const deviceId = device.spaceUrl.substring(device.spaceUrl.lastIndexOf('/') + 1);\n const existingDevice = DeviceCollection.get(deviceId);\n\n if (existingDevice) {\n return this.webex.internal.lyra.space\n .get({id: deviceId})\n .then((space) => {\n // eslint-disable-next-line no-shadow\n const device = DeviceCollection.get(deviceId);\n\n if (\n device &&\n space.occupants &&\n (!space.occupants.self || !space.occupants.self.verified)\n ) {\n device.productName =\n (space.devices && space.devices[0] && space.devices[0].productName) ||\n DEFAULT_PRODUCT_NAME;\n // pin challenge is not verified reset _pairedDevice if ids\n // match\n const pairedDeviceId =\n this._pairedDevice && (this._pairedDevice.id || this._pairedDevice.identity.id);\n\n if (pairedDeviceId === deviceId) {\n this._pairedDevice = null;\n this.logger.info(\n `DeviceManager#_receiveDeviceUpdates: device ${deviceId} lost pairing`\n );\n\n return Promise.resolve();\n }\n // we do not want to reset the device pending PIN challenge\n if (this._devicePendingPinChallenge.identity.id !== deviceId) {\n return this.upsert(device);\n }\n\n return Promise.resolve();\n }\n\n return Promise.resolve();\n })\n .catch((err) => {\n this.logger.error(\n 'DeviceManager#_receiveDeviceUpdates: failed to receive updates for Lyra space',\n err\n );\n });\n }\n }\n\n return Promise.resolve();\n },\n});\n\nexport default DeviceManager;\n","export const LYRA_SPACE = 'LYRA_SPACE';\nexport const UC_CLOUD = 'uc-cloud';\nexport const DEFAULT_PRODUCT_NAME = 'default';\n","export default {};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* globals */\n\nimport '@webex/internal-plugin-device';\nimport {registerPlugin} from '@webex/webex-core';\n\nimport DeviceManager from './device-manager';\nimport config from './config';\n\nregisterPlugin('devicemanager', DeviceManager, {\n config,\n});\n\nexport {default} from './device-manager';\nexport {default as config} from './config';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser, patterns} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {cloneDeep, has, isArray, isObject, isString} from 'lodash';\n\nconst precedence = {\n silent: 0,\n group: 1,\n groupEnd: 2,\n error: 3,\n warn: 4,\n log: 5,\n info: 6,\n debug: 7,\n trace: 8,\n};\n\nexport const levels = Object.keys(precedence).filter((level) => level !== 'silent');\n\nconst fallbacks = {\n error: ['log'],\n warn: ['error', 'log'],\n info: ['log'],\n debug: ['info', 'log'],\n trace: ['debug', 'info', 'log'],\n};\n\nconst LOG_TYPES = {\n SDK: 'sdk',\n CLIENT: 'client',\n};\n\nconst SDK_LOG_TYPE_NAME = 'wx-js-sdk';\n\nconst authTokenKeyPattern = /[Aa]uthorization/;\n\n/**\n * Recursively strips \"authorization\" fields from the specified object\n * @param {Object} object\n * @param {Array} [visited]\n * @private\n * @returns {Object}\n */\nfunction walkAndFilter(object, visited = []) {\n if (visited.includes(object)) {\n // Prevent circular references\n return object;\n }\n\n visited.push(object);\n\n if (isArray(object)) {\n return object.map((o) => walkAndFilter(o, visited));\n }\n if (!isObject(object)) {\n if (isString(object)) {\n if (patterns.containsEmails.test(object)) {\n return object.replace(patterns.containsEmails, '[REDACTED]');\n }\n if (patterns.containsMTID.test(object)) {\n return object.replace(patterns.containsMTID, '$1[REDACTED]');\n }\n }\n\n return object;\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (authTokenKeyPattern.test(key)) {\n Reflect.deleteProperty(object, key);\n } else {\n object[key] = walkAndFilter(value, visited);\n }\n }\n\n return object;\n}\n\n/**\n * @class\n */\nconst Logger = WebexPlugin.extend({\n namespace: 'Logger',\n\n derived: {\n level: {\n cache: false,\n fn() {\n return this.getCurrentLevel();\n },\n },\n client_level: {\n cache: false,\n fn() {\n return this.getCurrentClientLevel();\n },\n },\n },\n session: {\n // for when configured to use single buffer\n buffer: {\n type: 'array',\n default() {\n return [];\n },\n },\n groupLevel: {\n type: 'number',\n default() {\n return 0;\n },\n },\n // for when configured to use separate buffers\n sdkBuffer: {\n type: 'array',\n default() {\n return [];\n },\n },\n clientBuffer: {\n type: 'array',\n default() {\n return [];\n },\n },\n },\n\n /**\n * Ensures auth headers don't get printed in logs\n * @param {Array} args\n * @private\n * @memberof Logger\n * @returns {Array}\n */\n filter(...args) {\n return args.map((arg) => {\n // WebexHttpError already ensures auth tokens don't get printed, so, no\n // need to alter it here.\n if (arg instanceof Error) {\n // karma logs won't print subclassed errors correctly, so we need\n // explicitly call their tostring methods.\n if (process.env.NODE_ENV === 'test' && inBrowser) {\n let ret = arg.toString();\n\n ret += 'BEGIN STACK';\n ret += arg.stack;\n ret += 'END STACK';\n\n return ret;\n }\n\n return arg;\n }\n\n arg = cloneDeep(arg);\n\n return walkAndFilter(arg);\n });\n },\n\n /**\n * Determines if the current level allows logs at the specified level to be\n * printed\n * @param {string} level\n * @param {string} type type of log, SDK or client\n * @private\n * @memberof Logger\n * @returns {boolean}\n */\n shouldPrint(level, type = LOG_TYPES.SDK) {\n return (\n precedence[level] <=\n precedence[type === LOG_TYPES.SDK ? this.getCurrentLevel() : this.getCurrentClientLevel()]\n );\n },\n\n /**\n * Determines if the current level allows logs at the specified level to be\n * put into the log buffer. We're configuring it omit trace and debug logs\n * because there are *a lot* of debug logs that really don't provide value at\n * runtime (they're helpful for debugging locally, but really just pollute the\n * uploaded logs and push useful info out).\n * @param {string} level\n * @param {string} type type of log, SDK or client\n * @private\n * @memberof Logger\n * @returns {boolean}\n */\n shouldBuffer(level) {\n return (\n precedence[level] <=\n (this.config.bufferLogLevel ? precedence[this.config.bufferLogLevel] : precedence.info)\n );\n },\n\n /**\n * Indicates the current SDK log level based on env vars, feature toggles, and\n * user type.\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {string}\n */\n // eslint-disable-next-line complexity\n getCurrentLevel() {\n // If a level has been explicitly set via config, alway use it.\n if (this.config.level) {\n return this.config.level;\n }\n\n if (levels.includes(process.env.WEBEX_LOG_LEVEL)) {\n return process.env.WEBEX_LOG_LEVEL;\n }\n\n // Always use debug-level logging in test mode;\n if (process.env.NODE_ENV === 'test') {\n return 'trace';\n }\n\n // Use server-side-feature toggles to configure log levels\n const level =\n this.webex.internal.device && this.webex.internal.device.features.developer.get('log-level');\n\n if (level) {\n if (levels.includes(level)) {\n return level;\n }\n }\n\n return 'error';\n },\n\n /**\n * Indicates the current client log level based on config, defaults to SDK level\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {string}\n */\n getCurrentClientLevel() {\n // If a client log level has been explicitly set via config, alway use it.\n if (this.config.clientLevel) {\n return this.config.clientLevel;\n }\n\n // otherwise default to SDK level\n return this.getCurrentLevel();\n },\n\n /**\n * Format logs (for upload)\n *\n * If separate client, SDK buffers is configured, merge the buffers, if configured\n *\n * @instance\n * @memberof Logger\n * @public\n * @memberof Logger\n * @returns {string} formatted buffer\n */\n formatLogs() {\n function getDate(log) {\n return log[1];\n }\n let buffer = [];\n let clientIndex = 0;\n let sdkIndex = 0;\n\n if (this.config.separateLogBuffers) {\n // merge the client and sdk buffers\n // while we have entries in either buffer\n while (clientIndex < this.clientBuffer.length || sdkIndex < this.sdkBuffer.length) {\n // if we have remaining entries in the SDK buffer\n if (\n sdkIndex < this.sdkBuffer.length &&\n // and we haven't exhausted all the client buffer entries, or SDK date is before client date\n (clientIndex >= this.clientBuffer.length ||\n new Date(getDate(this.sdkBuffer[sdkIndex])) <=\n new Date(getDate(this.clientBuffer[clientIndex])))\n ) {\n // then add to the SDK buffer\n buffer.push(this.sdkBuffer[sdkIndex]);\n sdkIndex += 1;\n }\n // otherwise if we haven't exhausted all the client buffer entries, add client entry, whether it was because\n // it was the only remaining entries or date was later (the above if)\n else if (clientIndex < this.clientBuffer.length) {\n buffer.push(this.clientBuffer[clientIndex]);\n clientIndex += 1;\n }\n }\n } else {\n buffer = this.buffer;\n }\n\n return buffer.join('\\n');\n },\n});\n\n/**\n * Creates a logger method\n *\n *\n * @param {string} level level to create (info, error, warn, etc.)\n * @param {string} impl the level to use when writing to console\n * @param {string} type type of log, SDK or client\n * @param {bool} neverPrint function never prints to console\n * @param {bool} alwaysBuffer function always logs to log buffer\n * @instance\n * @memberof Logger\n * @private\n * @memberof Logger\n * @returns {function} logger method with specified params\n */\nfunction makeLoggerMethod(level, impl, type, neverPrint = false, alwaysBuffer = false) {\n // Much of the complexity in the following function is due to a test-mode-only\n // helper\n return function wrappedConsoleMethod(...args) {\n // it would be easier to just pass in the name and buffer here, but the config isn't completely initialized\n // in Ampersand, even if the initialize method is used to set this up. so we keep the type to achieve\n // a sort of late binding to allow retrieving a name from config.\n const logType = type;\n const clientName =\n logType === LOG_TYPES.SDK ? SDK_LOG_TYPE_NAME : this.config.clientName || logType;\n\n let buffer;\n let historyLength;\n\n if (this.config.separateLogBuffers) {\n historyLength = this.config.clientHistoryLength\n ? this.config.clientHistoryLength\n : this.config.historyLength;\n buffer = logType === LOG_TYPES.SDK ? this.sdkBuffer : this.clientBuffer;\n } else {\n buffer = this.buffer;\n historyLength = this.config.historyLength;\n }\n\n try {\n const shouldPrint = !neverPrint && this.shouldPrint(level, logType);\n const shouldBuffer = alwaysBuffer || this.shouldBuffer(level);\n\n if (!shouldBuffer && !shouldPrint) {\n return;\n }\n\n const filtered = [clientName, ...this.filter(...args)];\n const stringified = filtered.map((item) => {\n if (item instanceof Error) {\n return item.toString();\n }\n if (typeof item === 'object') {\n let cache = [];\n let returnItem;\n try {\n returnItem = JSON.stringify(item, (_key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (cache.includes(value)) {\n // Circular reference found, discard key\n return undefined;\n }\n // Store value in our collection\n cache.push(value);\n }\n\n return value;\n });\n } catch (e) {\n returnItem = `Failed to stringify: ${item}`;\n }\n cache = null;\n\n return returnItem;\n }\n\n return item;\n });\n\n if (shouldPrint) {\n // when logging an object in browsers, we tend to get a dynamic\n // reference, thus going back to look at the logged value doesn't\n // necessarily show the state at log time, thus we print the stringified\n // value.\n const toPrint = inBrowser ? stringified : filtered;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'test' && has(this, 'webex.internal.device.url')) {\n toPrint.unshift(this.webex.internal.device.url.slice(-3));\n }\n // eslint-disable-next-line no-console\n console[impl](...toPrint);\n }\n\n if (shouldBuffer) {\n const logDate = new Date();\n\n stringified.unshift(logDate.toISOString());\n stringified.unshift('| '.repeat(this.groupLevel));\n buffer.push(stringified);\n if (buffer.length > historyLength) {\n buffer.splice(0, buffer.length - historyLength);\n }\n if (level === 'group') this.groupLevel += 1;\n if (level === 'groupEnd' && this.groupLevel > 0) this.groupLevel -= 1;\n }\n } catch (reason) {\n if (!neverPrint) {\n /* istanbul ignore next */\n // eslint-disable-next-line no-console\n console.warn(`failed to execute Logger#${level}`, reason);\n }\n }\n };\n}\n\nlevels.forEach((level) => {\n let impls = fallbacks[level];\n let impl = level;\n\n if (impls) {\n impls = impls.slice();\n // eslint-disable-next-line no-console\n while (!console[impl]) {\n impl = impls.pop();\n }\n }\n\n // eslint-disable-next-line complexity\n Logger.prototype[`client_${level}`] = makeLoggerMethod(level, impl, LOG_TYPES.CLIENT);\n Logger.prototype[level] = makeLoggerMethod(level, impl, LOG_TYPES.SDK);\n});\n\nLogger.prototype.client_logToBuffer = makeLoggerMethod(\n levels.info,\n levels.info,\n LOG_TYPES.CLIENT,\n true,\n true\n);\nLogger.prototype.logToBuffer = makeLoggerMethod(\n levels.info,\n levels.info,\n LOG_TYPES.SDK,\n true,\n true\n);\n\nexport default Logger;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Logger from './logger';\nimport config from './config';\n\nregisterPlugin('logger', Logger, {\n config,\n replace: true,\n});\n\nexport {default, levels} from './logger';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @typedef {Object} LoggerConfig\n * @property {string} [level=process.env.WEBEX_LOG_LEVEL] - Maximum log level that\n * should be printed to the console. One of\n * silent|error|warn|log|info|debug|trace\n * @property {number} [historyLength=1000] - Maximum number of entries to store in the log buffer.\n * @example\n * {\n * level: process.env.WEBEX_LOG_LEVEL,\n * historyLength: 1000\n * }\n */\n\nexport default {\n logger: {\n level: process.env.WEBEX_LOG_LEVEL,\n historyLength: 10000,\n },\n};\n","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nexport { _asyncToGenerator as default };","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\n\nfunction _mergeNamespaces(n, m) {\n m.forEach(function (e) {\n e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {\n if (k !== 'default' && !(k in n)) {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n });\n return Object.freeze(n);\n}\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter$6() {\n EventEmitter$6.init.call(this);\n}\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter$6.EventEmitter = EventEmitter$6;\n\nEventEmitter$6.usingDomains = false;\n\nEventEmitter$6.prototype.domain = undefined;\nEventEmitter$6.prototype._events = undefined;\nEventEmitter$6.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter$6.defaultMaxListeners = 10;\n\nEventEmitter$6.init = function() {\n this.domain = null;\n if (EventEmitter$6.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active ) ;\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$6.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter$6.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter$6.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter$6.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener$3(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter$6.prototype.addListener = function addListener(type, listener) {\n return _addListener$3(this, type, listener, false);\n};\n\nEventEmitter$6.prototype.on = EventEmitter$6.prototype.addListener;\n\nEventEmitter$6.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener$3(this, type, listener, true);\n };\n\nfunction _onceWrap$3(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter$6.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap$3(this, type, listener));\n return this;\n};\n\nEventEmitter$6.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap$3(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter$6.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne$3(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n \n// Alias for removeListener added in NodeJS 10.0\n// https://nodejs.org/api/events.html#events_emitter_off_eventname_listener\nEventEmitter$6.prototype.off = function(type, listener){\n return this.removeListener(type, listener);\n};\n\nEventEmitter$6.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter$6.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners$3(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter$6.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount$3.call(emitter, type);\n }\n};\n\nEventEmitter$6.prototype.listenerCount = listenerCount$3;\nfunction listenerCount$3(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter$6.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne$3(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone$3(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners$3(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nclass EventEmitter$5 extends EventEmitter$6 {}\n\nvar MEDIA = 'MEDIA';\nvar DEVICE = 'DEVICE';\nvar MEDIA_STREAM_TRACK = 'MEDIA_STREAM_TRACK';\n\nvar LEVELS = {\n error: 1,\n warn: 2,\n info: 3,\n debug: 4\n};\nvar logFormat = (level, logDetails) => {\n var {\n ID,\n mediaType,\n action,\n description,\n error\n } = logDetails;\n var timestamp = new Date().toISOString();\n var errorText = error ? error.stack ? \"\".concat(error.message, \": \").concat(error.stack) : \"\".concat(error) : '';\n return \"\".concat(timestamp, \" \").concat(level, \" \").concat(ID || '', \" \").concat(mediaType, \" \").concat(action, \" \").concat(description, \" \").concat(errorText).replace(/\\s+/g, ' ').trim();\n};\nvar currentLevel = 'error';\nvar log$3 = (level, args) => {\n if (LEVELS[level] <= LEVELS[currentLevel]) {\n console.log(logFormat(level, args));\n }\n};\nvar logger$4 = {\n info: args => log$3('info', args),\n warn: args => log$3('warn', args),\n error: args => log$3('error', args),\n debug: args => log$3('debug', args)\n};\nvar _loop = function _loop(level) {\n logger$4[level] = logInfo => {\n var {\n ID,\n mediaType,\n action,\n description,\n error\n } = logInfo;\n currentLevel = level;\n return log$3(level, {\n ID,\n mediaType,\n action,\n description,\n error\n });\n };\n};\nfor (var level of ['info', 'warn', 'error', 'debug']) {\n _loop(level);\n}\n\nfunction _classPrivateFieldInitSpec$1(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nvar DeviceKinds;\n(function (DeviceKinds) {\n DeviceKinds[\"AUDIO_INPUT\"] = \"audioinput\";\n DeviceKinds[\"AUDIO_OUTPUT\"] = \"audiooutput\";\n DeviceKinds[\"VIDEO_INPUT\"] = \"videoinput\";\n})(DeviceKinds || (DeviceKinds = {}));\nvar _mediaDeviceInfo = /*#__PURE__*/new WeakMap();\nclass Device {\n constructor(mediaDeviceInfo) {\n _defineProperty(this, \"ID\", void 0);\n _defineProperty(this, \"groupID\", void 0);\n _defineProperty(this, \"label\", void 0);\n _defineProperty(this, \"kind\", void 0);\n _classPrivateFieldInitSpec$1(this, _mediaDeviceInfo, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldSet(this, _mediaDeviceInfo, mediaDeviceInfo);\n this.ID = _classPrivateFieldGet(this, _mediaDeviceInfo).deviceId;\n this.groupID = _classPrivateFieldGet(this, _mediaDeviceInfo).groupId;\n this.label = _classPrivateFieldGet(this, _mediaDeviceInfo).label;\n this.kind = _classPrivateFieldGet(this, _mediaDeviceInfo).kind;\n }\n}\n\nfunction getTrackSettings(track) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'getTrackSettings()',\n description: 'Called'\n });\n var settings = track.getSettings();\n if (settings) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'getTrackSettings()',\n description: \"Returning track settings \".concat(JSON.stringify(settings))\n });\n return settings;\n }\n var error = new Error('Unable to get track settings');\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'getTrackSettings()',\n description: error.message,\n error\n });\n return {};\n}\n\nvar TrackEventNames;\n(function (TrackEventNames) {\n TrackEventNames[\"TRACK_MUTE_STATE_CHANGED\"] = \"track:mute\";\n})(TrackEventNames || (TrackEventNames = {}));\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nvar TrackStatus;\n(function (TrackStatus) {\n TrackStatus[\"ENDED\"] = \"ended\";\n TrackStatus[\"LIVE\"] = \"live\";\n})(TrackStatus || (TrackStatus = {}));\nvar TrackKind;\n(function (TrackKind) {\n TrackKind[\"AUDIO\"] = \"audio\";\n TrackKind[\"VIDEO\"] = \"video\";\n})(TrackKind || (TrackKind = {}));\nvar _mediaStreamTrack = /*#__PURE__*/new WeakMap();\nclass Track extends EventEmitter$5 {\n constructor(mediaStreamTrack) {\n super();\n _defineProperty(this, \"ID\", void 0);\n _defineProperty(this, \"kind\", void 0);\n _defineProperty(this, \"status\", void 0);\n _defineProperty(this, \"muted\", void 0);\n _defineProperty(this, \"label\", void 0);\n _classPrivateFieldInitSpec(this, _mediaStreamTrack, {\n writable: true,\n value: void 0\n });\n this.ID = mediaStreamTrack.id;\n this.kind = mediaStreamTrack.kind;\n this.status = mediaStreamTrack.readyState;\n this.muted = mediaStreamTrack.muted;\n this.label = mediaStreamTrack.label;\n _classPrivateFieldSet(this, _mediaStreamTrack, mediaStreamTrack);\n _classPrivateFieldGet(this, _mediaStreamTrack).onmute = () => {\n var action = _classPrivateFieldGet(this, _mediaStreamTrack).enabled ? 'muted' : 'unmuted';\n this.emit(TrackEventNames.TRACK_MUTE_STATE_CHANGED, {\n action\n });\n };\n }\n stop() {\n _classPrivateFieldGet(this, _mediaStreamTrack).stop();\n this.status = TrackStatus.ENDED;\n }\n applyConstraints(constraints) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _constraints$deviceId, _constraints$deviceId2, _constraints$deviceId5;\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId = constraints.deviceId) === null || _constraints$deviceId === void 0 ? void 0 : _constraints$deviceId.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: \"Called with \".concat(JSON.stringify(constraints))\n });\n logger$4.info({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId2 = constraints.deviceId) === null || _constraints$deviceId2 === void 0 ? void 0 : _constraints$deviceId2.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: 'Applying constraints to track objects'\n });\n var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n var notSupportedConstraints = [];\n for (var thisConstraint of Object.keys(constraints)) {\n if (!supportedConstraints[thisConstraint]) {\n var _constraints$deviceId3;\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId3 = constraints.deviceId) === null || _constraints$deviceId3 === void 0 ? void 0 : _constraints$deviceId3.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: \"Not suported constraint tracked \".concat(thisConstraint)\n });\n notSupportedConstraints.push(thisConstraint);\n }\n }\n if (notSupportedConstraints.length > 0) {\n var _constraints$deviceId4;\n console.warn(\"#TrackObject Unsupported constraints - \".concat(notSupportedConstraints.join(', ')));\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId4 = constraints.deviceId) === null || _constraints$deviceId4 === void 0 ? void 0 : _constraints$deviceId4.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: 'Constraints not applied'\n });\n return false;\n }\n yield _classPrivateFieldGet(_this, _mediaStreamTrack).applyConstraints(constraints);\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId5 = constraints.deviceId) === null || _constraints$deviceId5 === void 0 ? void 0 : _constraints$deviceId5.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: 'Constraints applied successfully'\n });\n return true;\n })();\n }\n getSettings() {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getSettings()',\n description: 'Called'\n });\n logger$4.info({\n mediaType: MEDIA,\n action: 'getSettings()',\n description: 'Fetching constraints properties for the current media stream track'\n });\n var settings = getTrackSettings(_classPrivateFieldGet(this, _mediaStreamTrack));\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getSettings()',\n description: \"Received settings \".concat(JSON.stringify(settings))\n });\n return settings;\n }\n getMediaStreamTrack() {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getMediaStreamTrack()',\n description: 'Called'\n });\n var mediaStreamTrack = _classPrivateFieldGet(this, _mediaStreamTrack);\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getMediaStreamTrack()',\n description: \"Received media stream track \".concat(JSON.stringify(mediaStreamTrack))\n });\n return mediaStreamTrack;\n }\n}\n\nvar eventEmitter = new EventEmitter$5();\nvar deviceList = [];\nvar getDevices$1 = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* () {\n var _navigator$mediaDevic;\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getDevices()',\n description: 'Called'\n });\n if (!((_navigator$mediaDevic = navigator.mediaDevices) !== null && _navigator$mediaDevic !== void 0 && _navigator$mediaDevic.enumerateDevices)) {\n console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');\n return [];\n }\n logger$4.info({\n mediaType: DEVICE,\n action: 'getDevices()',\n description: 'Requesting list of available media input and output devices'\n });\n return navigator.mediaDevices.enumerateDevices();\n });\n return function getDevices() {\n return _ref.apply(this, arguments);\n };\n}();\nvar getCameras = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* () {\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getCameras()',\n description: 'Called'\n });\n var devices = yield getDevices$1();\n logger$4.info({\n mediaType: DEVICE,\n action: 'getCameras()',\n description: 'Filtering camera devices from all available media devices'\n });\n return devices.filter(_ref3 => {\n var {\n kind\n } = _ref3;\n return kind === DeviceKinds.VIDEO_INPUT;\n }).map(device => {\n logger$4.debug({\n ID: device.deviceId,\n mediaType: DEVICE,\n action: 'getCameras()',\n description: \"Received camera device \".concat(JSON.stringify(device))\n });\n return new Device(device);\n });\n });\n return function getCameras() {\n return _ref2.apply(this, arguments);\n };\n}();\nvar getMicrophones = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* () {\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getMicrophones()',\n description: 'Called'\n });\n var devices = yield getDevices$1();\n logger$4.info({\n mediaType: DEVICE,\n action: 'getMicrophones()',\n description: 'Filtering microphones devices from all available media devices'\n });\n return devices.filter(_ref5 => {\n var {\n kind\n } = _ref5;\n return kind === DeviceKinds.AUDIO_INPUT;\n }).map(device => {\n logger$4.debug({\n ID: device.deviceId,\n mediaType: DEVICE,\n action: 'getMicrophones()',\n description: \"Received microphone device \".concat(JSON.stringify(device))\n });\n return new Device(device);\n });\n });\n return function getMicrophones() {\n return _ref4.apply(this, arguments);\n };\n}();\nvar getSpeakers = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* () {\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getSpeakers()',\n description: 'Called'\n });\n var devices = yield getDevices$1();\n logger$4.info({\n mediaType: DEVICE,\n action: 'getSpeakers()',\n description: 'Filtering speaker devices from all available media devices'\n });\n return devices.filter(_ref7 => {\n var {\n kind\n } = _ref7;\n return kind === DeviceKinds.AUDIO_OUTPUT;\n }).map(device => {\n logger$4.debug({\n ID: device.deviceId,\n mediaType: DEVICE,\n action: 'getSpeakers()',\n description: \"Received speaker device \".concat(JSON.stringify(device))\n });\n return new Device(device);\n });\n });\n return function getSpeakers() {\n return _ref6.apply(this, arguments);\n };\n}();\nfunction getUnsupportedConstraints(mediaConstraints) {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getUnsupportedConstraints()',\n description: \"Called with \".concat(JSON.stringify(mediaConstraints))\n });\n logger$4.info({\n mediaType: MEDIA,\n action: 'getUnsupportedConstraints()',\n description: 'Filtering list of media track unsupported constraints'\n });\n var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n var unsupportedConstraints = [];\n Object.keys(mediaConstraints).forEach(constraint => {\n if (!(Object.prototype.hasOwnProperty.call(supportedConstraints, constraint) && supportedConstraints[constraint])) {\n unsupportedConstraints.push(constraint);\n }\n });\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getUnsupportedConstraints()',\n description: \"Received unsupported constraints \".concat(unsupportedConstraints)\n });\n return unsupportedConstraints;\n}\nfunction createAudioTrack(_x) {\n return _createAudioTrack.apply(this, arguments);\n}\nfunction _createAudioTrack() {\n _createAudioTrack = _asyncToGenerator(function* (device) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createAudioTrack()',\n description: \"Called \".concat(device ? \"with \".concat(JSON.stringify(device)) : '', \" \")\n });\n if (device && device.kind !== DeviceKinds.AUDIO_INPUT) {\n var _error = new Error(\"Device \".concat(device.ID, \" is not of kind AUDIO_INPUT\"));\n logger$4.error({\n ID: device.ID,\n mediaType: 'DEVICE',\n action: 'createAudioTrack()',\n description: _error.message,\n error: _error\n });\n throw _error;\n }\n logger$4.info({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createAudioTrack()',\n description: 'Creating audio track'\n });\n var deviceConfig = device ? {\n audio: {\n deviceId: {\n exact: device.ID\n }\n }\n } : {\n audio: true,\n video: false\n };\n var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);\n var track = stream.getAudioTracks()[0];\n if (track) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createAudioTrack()',\n description: \"Received audio track \".concat(JSON.stringify(track))\n });\n return new Track(track);\n }\n var error = new Error(\"Device could not obtain an audio track of kind \".concat(device === null || device === void 0 ? void 0 : device.kind));\n logger$4.error({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: 'DEVICE',\n action: 'createAudioTrack()',\n description: error.message,\n error\n });\n throw error;\n });\n return _createAudioTrack.apply(this, arguments);\n}\nfunction createVideoTrack(_x2) {\n return _createVideoTrack.apply(this, arguments);\n}\nfunction _createVideoTrack() {\n _createVideoTrack = _asyncToGenerator(function* (device) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createVideoTrack()',\n description: \"Called \".concat(device ? \"with \".concat(JSON.stringify(device)) : '', \" \")\n });\n if (device && device.kind !== DeviceKinds.VIDEO_INPUT) {\n var _error2 = new Error(\"Device \".concat(device.ID, \" is not of kind VIDEO_INPUT\"));\n logger$4.error({\n ID: device.ID,\n mediaType: 'DEVICE',\n action: 'createVideoTrack()',\n description: _error2.message,\n error: _error2\n });\n throw _error2;\n }\n logger$4.info({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createVideoTrack()',\n description: 'Creating video track'\n });\n var deviceConfig = device ? {\n video: {\n deviceId: {\n exact: device.ID\n }\n }\n } : {\n audio: false,\n video: true\n };\n var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);\n var track = stream.getVideoTracks()[0];\n if (track) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createVideoTrack()',\n description: \"Received video track \".concat(JSON.stringify(track))\n });\n return new Track(track);\n }\n var error = new Error(\"Device could not obtain a video track of kind \".concat(device === null || device === void 0 ? void 0 : device.kind));\n logger$4.error({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: 'DEVICE',\n action: 'createVideoTrack()',\n description: error.message,\n error\n });\n throw error;\n });\n return _createVideoTrack.apply(this, arguments);\n}\nfunction createContentTrack(_x3) {\n return _createContentTrack.apply(this, arguments);\n}\nfunction _createContentTrack() {\n _createContentTrack = _asyncToGenerator(function* (mediaConstraints) {\n var _mediaConstraints$dev, _mediaConstraints$dev2, _mediaConstraints$dev7;\n logger$4.debug({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev = mediaConstraints.deviceId) === null || _mediaConstraints$dev === void 0 ? void 0 : _mediaConstraints$dev.toString(),\n mediaType: DEVICE,\n action: 'createContentTrack()',\n description: \"Called \".concat(mediaConstraints ? \"with \".concat(JSON.stringify(mediaConstraints)) : '', \" \")\n });\n logger$4.info({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev2 = mediaConstraints.deviceId) === null || _mediaConstraints$dev2 === void 0 ? void 0 : _mediaConstraints$dev2.toString(),\n mediaType: MEDIA,\n action: 'createContentTrack()',\n description: 'Creating content track'\n });\n var deviceConfig = {\n audio: false,\n video: true\n };\n var track;\n var stream;\n try {\n stream = yield navigator.mediaDevices.getDisplayMedia(deviceConfig);\n [track] = stream.getVideoTracks();\n } catch (error) {\n if (error instanceof Error) {\n var _mediaConstraints$dev3;\n logger$4.error({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev3 = mediaConstraints.deviceId) === null || _mediaConstraints$dev3 === void 0 ? void 0 : _mediaConstraints$dev3.toString(),\n mediaType: 'DEVICE',\n action: 'createContentTrack()',\n description: error.message,\n error\n });\n }\n throw error;\n }\n if (mediaConstraints) {\n var unsupportedConstraints = getUnsupportedConstraints(mediaConstraints);\n if (unsupportedConstraints.length <= 0) {\n var _mediaConstraints$dev4;\n track.applyConstraints(mediaConstraints);\n logger$4.debug({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev4 = mediaConstraints.deviceId) === null || _mediaConstraints$dev4 === void 0 ? void 0 : _mediaConstraints$dev4.toString(),\n mediaType: DEVICE,\n action: 'createContentTrack()',\n description: 'Applied media constraints to fetched content track'\n });\n } else {\n var _mediaConstraints$dev5;\n var _error3 = new Error(\"\".concat(unsupportedConstraints.join(', '), \" constraint is not supported by browser\"));\n logger$4.error({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev5 = mediaConstraints.deviceId) === null || _mediaConstraints$dev5 === void 0 ? void 0 : _mediaConstraints$dev5.toString(),\n mediaType: 'DEVICE',\n action: 'createContentTrack()',\n description: _error3.message,\n error: _error3\n });\n throw _error3;\n }\n }\n if (track) {\n var _mediaConstraints$dev6;\n logger$4.debug({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev6 = mediaConstraints.deviceId) === null || _mediaConstraints$dev6 === void 0 ? void 0 : _mediaConstraints$dev6.toString(),\n mediaType: DEVICE,\n action: 'createContentTrack()',\n description: \"Received content track \".concat(JSON.stringify(track))\n });\n return new Track(track);\n }\n var error = new Error('Could not obtain a content track');\n logger$4.error({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev7 = mediaConstraints.deviceId) === null || _mediaConstraints$dev7 === void 0 ? void 0 : _mediaConstraints$dev7.toString(),\n mediaType: 'DEVICE',\n action: 'createContentTrack()',\n description: error.message,\n error\n });\n throw error;\n });\n return _createContentTrack.apply(this, arguments);\n}\nfunction deviceChangePublisher() {\n return _deviceChangePublisher.apply(this, arguments);\n}\nfunction _deviceChangePublisher() {\n _deviceChangePublisher = _asyncToGenerator(function* () {\n var _navigator$mediaDevic2;\n logger$4.debug({\n mediaType: DEVICE,\n action: 'deviceChangePublisher()',\n description: 'Called'\n });\n if (!((_navigator$mediaDevic2 = navigator.mediaDevices) !== null && _navigator$mediaDevic2 !== void 0 && _navigator$mediaDevic2.enumerateDevices)) {\n console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');\n return;\n }\n logger$4.info({\n mediaType: DEVICE,\n action: 'deviceChangePublisher()',\n description: 'Calling individual subscription listener obtained by device change event'\n });\n var newDeviceList = yield navigator.mediaDevices.enumerateDevices();\n var filtered = [];\n var getGroupIdsFrom = [];\n var filterDevicesFrom = [];\n var action = 'changed';\n var deviceListGroups = new Set();\n if (newDeviceList.length !== deviceList.length) {\n [getGroupIdsFrom, filterDevicesFrom, action] = newDeviceList.length < deviceList.length ? [newDeviceList, deviceList, 'removed'] : [deviceList, newDeviceList, 'added'];\n getGroupIdsFrom.forEach(device => {\n deviceListGroups.add(device.groupId);\n });\n filtered = filterDevicesFrom.filter(device => !deviceListGroups.has(device.groupId));\n deviceList.splice(0, deviceList.length);\n deviceList.push(...newDeviceList);\n eventEmitter.emit('device:changed', {\n action,\n devices: filtered\n });\n }\n });\n return _deviceChangePublisher.apply(this, arguments);\n}\nfunction on$1(_x4, _x5) {\n return _on.apply(this, arguments);\n}\nfunction _on() {\n _on = _asyncToGenerator(function* (eventName, listener) {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'on()',\n description: \"Subscribing to an \".concat(eventName, \",\").concat(listener)\n });\n eventEmitter.on(eventName, listener);\n if (eventName === 'device:changed') {\n var thisDeviceList = yield getDevices$1();\n deviceList.push(...thisDeviceList);\n navigator.mediaDevices.addEventListener('devicechange', deviceChangePublisher);\n }\n });\n return _on.apply(this, arguments);\n}\nvar off$1 = (eventName, listener) => {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'off()',\n description: \"Called \".concat(eventName, \" with \").concat(listener, \" listener\")\n });\n eventEmitter.off(eventName, listener);\n};\n\nvar bnrProcessor = {\n isModuleAdded: false,\n workletProcessorUrl: 'https://models.intelligence.webex.com/bnr/1.1.0/noise-reduction-effect.worklet.js'\n};\nfunction isValidTrack(track) {\n var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n var supportedSampleRates = [16000, 32000, 48000];\n if (supportedConstraints.sampleRate) {\n var settings = getTrackSettings(track);\n var {\n sampleRate\n } = settings;\n if (sampleRate && !supportedSampleRates.includes(sampleRate)) {\n var error = new Error(\"Sample rate of \".concat(sampleRate, \" is not supported.\"));\n logger$4.error({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'isValidTrack()',\n description: error.message,\n error\n });\n throw error;\n } else {\n return true;\n }\n } else {\n var _error = new Error('Not supported');\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'isValidTrack()',\n description: _error.message,\n error: _error\n });\n return true;\n }\n}\nfunction loadProcessor() {\n return _loadProcessor.apply(this, arguments);\n}\nfunction _loadProcessor() {\n _loadProcessor = _asyncToGenerator(function* () {\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'loadProcessor()',\n description: 'Creating and loading BNR module'\n });\n var audioContext = new AudioContext();\n bnrProcessor.isModuleAdded = true;\n bnrProcessor.audioContext = audioContext;\n yield audioContext.audioWorklet.addModule(bnrProcessor.workletProcessorUrl);\n bnrProcessor.workletNode = new AudioWorkletNode(audioContext, 'noise-reduction-worklet-processor');\n return audioContext;\n });\n return _loadProcessor.apply(this, arguments);\n}\nfunction enableBNR(_x) {\n return _enableBNR.apply(this, arguments);\n}\nfunction _enableBNR() {\n _enableBNR = _asyncToGenerator(function* (track) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Called'\n });\n try {\n isValidTrack(track);\n var streamFromTrack = new MediaStream();\n streamFromTrack.addTrack(track);\n var workletNode;\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Checking if BNR module is present already'\n });\n var oldDestinationTrack = bnrProcessor.destinationTrack;\n if (oldDestinationTrack && track.id === oldDestinationTrack.id) {\n var oldTrackErrorMsg = 'BNR is enabled on the track already';\n var oldTrackError = new Error(oldTrackErrorMsg);\n logger$4.error({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: oldTrackErrorMsg,\n error: oldTrackError\n });\n throw oldTrackError;\n }\n if (bnrProcessor.isModuleAdded) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Disposing existing BNR module'\n });\n workletNode = bnrProcessor.workletNode;\n workletNode.port.postMessage('DISPOSE');\n }\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Creating worklet node, connecting source and destination streams'\n });\n var audioContext = yield loadProcessor();\n workletNode = bnrProcessor.workletNode;\n workletNode.port.postMessage('ENABLE');\n bnrProcessor.sourceNode = audioContext.createMediaStreamSource(streamFromTrack);\n bnrProcessor.sourceNode.connect(workletNode);\n bnrProcessor.destinationStream = audioContext.createMediaStreamDestination();\n workletNode.connect(bnrProcessor.destinationStream);\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Obtaining noise reduced track and returning'\n });\n var destinationStream = bnrProcessor.destinationStream.stream;\n var [destinationTrack] = destinationStream.getAudioTracks();\n bnrProcessor.destinationTrack = destinationTrack;\n return destinationTrack;\n } catch (error) {\n logger$4.error({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Error in enableBNR',\n error: error\n });\n throw error;\n }\n });\n return _enableBNR.apply(this, arguments);\n}\nfunction disableBNR() {\n logger$4.debug({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Called'\n });\n try {\n var workletNode;\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Checking if BNR is enabled before disabling'\n });\n if (!bnrProcessor.isModuleAdded) {\n var error = new Error('Can not disable as BNR is not enabled');\n logger$4.error({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Can not disable as BNR is not enabled'\n });\n throw error;\n } else {\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Using existing AudioWorkletNode for disabling BNR'\n });\n workletNode = bnrProcessor.workletNode;\n }\n workletNode.port.postMessage('DISPOSE');\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Obtaining raw media stream track and removing bnr context'\n });\n var bnrDisabledStream = bnrProcessor.sourceNode.mediaStream;\n var [track] = bnrDisabledStream === null || bnrDisabledStream === void 0 ? void 0 : bnrDisabledStream.getAudioTracks();\n bnrProcessor.isModuleAdded = false;\n delete bnrProcessor.workletNode;\n delete bnrProcessor.audioContext;\n delete bnrProcessor.sourceNode;\n delete bnrProcessor.destinationStream;\n delete bnrProcessor.destinationTrack;\n return track;\n } catch (error) {\n logger$4.error({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Error in disableBNR',\n error: error\n });\n throw error;\n }\n}\n\nvar ErrorCode;\n(function (ErrorCode) {\n ErrorCode[ErrorCode[\"MediaConnectionError\"] = 30001] = \"MediaConnectionError\";\n ErrorCode[ErrorCode[\"SdpError\"] = 30002] = \"SdpError\";\n ErrorCode[ErrorCode[\"IceGatheringError\"] = 30003] = \"IceGatheringError\";\n ErrorCode[ErrorCode[\"SdpAnswerHandlingError\"] = 30004] = \"SdpAnswerHandlingError\";\n ErrorCode[ErrorCode[\"SdpOfferCreationError\"] = 30005] = \"SdpOfferCreationError\";\n ErrorCode[ErrorCode[\"SdpOfferHandlingError\"] = 30006] = \"SdpOfferHandlingError\";\n})(ErrorCode || (ErrorCode = {}));\n\nclass MediaConnectionError extends Error {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message);\n _defineProperty(this, \"code\", void 0);\n this.name = options.name || 'MediaConnectionError';\n this.cause = options.cause;\n this.code = options.code || ErrorCode.MediaConnectionError;\n }\n}\n\nfunction ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpError extends MediaConnectionError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$9({\n code: ErrorCode.SdpError,\n name: 'SdpError'\n }, options));\n }\n}\n\nfunction ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass IceGatheringError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$8({\n code: ErrorCode.IceGatheringError,\n name: 'IceGatheringError'\n }, options));\n }\n}\n\nfunction ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpAnswerHandlingError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$7({\n code: ErrorCode.SdpAnswerHandlingError,\n name: 'SdpAnswerHandlingError'\n }, options));\n }\n}\n\nfunction ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpOfferCreationError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$6({\n code: ErrorCode.SdpOfferCreationError,\n name: 'SdpOfferCreationError'\n }, options));\n }\n}\n\nfunction ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpOfferHandlingError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$5({\n code: ErrorCode.SdpOfferHandlingError,\n name: 'SdpOfferHandlingError'\n }, options));\n }\n}\n\nvar Error$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get ErrorCode () { return ErrorCode; },\n IceGatheringError: IceGatheringError,\n MediaConnectionError: MediaConnectionError,\n SdpAnswerHandlingError: SdpAnswerHandlingError,\n SdpError: SdpError,\n SdpOfferCreationError: SdpOfferCreationError,\n SdpOfferHandlingError: SdpOfferHandlingError\n});\n\nvar global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue$2 = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue$2 = currentQueue.concat(queue$2);\n } else {\n queueIndex = -1;\n }\n if (queue$2.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue$2.length;\n while(len) {\n currentQueue = queue$2;\n queue$2 = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue$2.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue$2.push(new Item(fun, args));\n if (queue$2.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nvar title = 'browser';\nvar platform = 'browser';\nvar browser = true;\nvar env = {};\nvar argv = [];\nvar version = ''; // empty string to avoid regexp issues\nvar versions = {};\nvar release = {};\nvar config = {};\n\nfunction noop() {}\n\nvar on = noop;\nvar addListener = noop;\nvar once$4 = noop;\nvar off = noop;\nvar removeListener = noop;\nvar removeAllListeners = noop;\nvar emit = noop;\n\nfunction binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nfunction cwd () { return '/' }\nfunction chdir (dir) {\n throw new Error('process.chdir is not supported');\n}function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance$1 = global$1.performance || {};\nvar performanceNow =\n performance$1.now ||\n performance$1.mozNow ||\n performance$1.msNow ||\n performance$1.oNow ||\n performance$1.webkitNow ||\n function(){ return (new Date()).getTime() };\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance$1)*1e-3;\n var seconds = Math.floor(clocktime);\n var nanoseconds = Math.floor((clocktime%1)*1e9);\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0];\n nanoseconds = nanoseconds - previousTimestamp[1];\n if (nanoseconds<0) {\n seconds--;\n nanoseconds += 1e9;\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nfunction uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nvar browser$1 = {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once$4,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n\nfunction _mergeNamespaces$1(n,m){m.forEach(function(e){e&&typeof e!=='string'&&!Array.isArray(e)&&Object.keys(e).forEach(function(k){if(k!=='default'&&!(k in n)){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function get(){return e[k];}});}});});return Object.freeze(n);}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */function __awaiter$2(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator[\"throw\"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var commonjsGlobal$1$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$1$1={exports:{}};/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */(function(module){(function(global){// Top level module for the global, static logger instance.\nvar Logger={};// For those that are at home that are keeping score.\nLogger.VERSION=\"1.6.1\";// Function which handles all incoming log messages.\nvar logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\nvar contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.\nvar bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\nvar merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.\ninvoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.\nvar globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.\n(function(){// Shortcut for optimisers.\nvar L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!\nL.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\n// object with the supplied log messages and the second being a context object which contains a hash of stateful\n// parameters which the logging function can consume.\nLogger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\n// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\nLogger.setLevel=function(level){// Set the globalLogger's level.\nglobalLogger.setLevel(level);// Apply this level to all registered contextual loggers.\nfor(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level\nLogger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\n// default context and log handler.\nLogger.get=function(name){// All logger instances are cached so they can be configured ahead of use.\nreturn contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\n// write to the window's console object (if present); the optional options object can be used to customise the\n// formatter used to format each log message.\nLogger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.\nif(context.name){messages.unshift(\"[\"+context.name+\"]\");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\n// that don't offer a native console method.\nvar timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)\nvar invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.\nif(typeof console===\"undefined\"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.\nmessages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.\nif(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The\n// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\nLogger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\nLogger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.\nif(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1$1);})(logger$1$1);var Logger$2=logger$1$1.exports;var DEFAULT_LOGGER_NAME$1='webrtc-core';var logger$3=Logger$2.get(DEFAULT_LOGGER_NAME$1);Logger$2.useDefaults({defaultLevel:Logger$2.DEBUG,/* eslint-disable-next-line jsdoc/require-jsdoc */formatter:(messages,context)=>{messages.unshift(\"[\".concat(context.name,\"]\"));}});var DeviceKind$1;(function(DeviceKind){DeviceKind[\"AudioInput\"]=\"audioinput\";DeviceKind[\"AudioOutput\"]=\"audiooutput\";DeviceKind[\"VideoInput\"]=\"videoinput\";})(DeviceKind$1||(DeviceKind$1={}));/**\n * Prompts the user for permission to use a media input which produces a MediaStream with tracks\n * containing the requested types of media.\n *\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\n * along with any requirements for each type.\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\n * media has successfully been obtained.\n */function getUserMedia(constraints){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.getUserMedia(constraints);});}/**\n * Prompts the user for permission to use a user's display media and audio. If a video track is\n * absent from the constraints argument, one will still be provided.\n *\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\n * along with any requirements for each type.\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\n * media has successfully been obtained.\n */function getDisplayMedia(constraints){return navigator.mediaDevices.getDisplayMedia(constraints);}/**\n * Requests a list of the available media input and output devices, such as microphones, cameras,\n * headsets, and so forth.\n *\n * @returns A Promise that receives an array of MediaDeviceInfo objects when the promise is\n * fulfilled.\n */function enumerateDevices(){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.enumerateDevices();});}/**\n * Adds the callback handler to be notified of a media device change (for example, a headset is\n * unplugged from the user's computer).\n *\n * @param handler - The callback function to execute.\n */function setOnDeviceChangeHandler$1(handler){navigator.mediaDevices.ondevicechange=handler;}/**\n * Checks permissions using the navigator's permissions api.\n *\n * @param deviceKinds - Array of DeviceKind items.\n * @throws An error if camera or microphone aren't available options for query() (Firefox), or if\n * navigator.permissions is undefined (Safari and others).\n * @returns Array of Permission Status objects.\n */function checkNavigatorPermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){var permissionRequests=[];if(deviceKinds.includes(DeviceKind$1.VideoInput)){permissionRequests.push(navigator.permissions.query({name:'camera'}));}if(deviceKinds.includes(DeviceKind$1.AudioInput)){permissionRequests.push(navigator.permissions.query({name:'microphone'}));}return Promise.all(permissionRequests);});}/**\n * Check to see if the user has granted the application permission to use their devices.\n *\n * @param deviceKinds - Array of DeviceKind items.\n * @returns True if device permissions exist, false if otherwise.\n */function checkDevicePermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){try{var permissions=yield checkNavigatorPermissions(deviceKinds);if(permissions.every(permission=>permission.state==='granted')){return true;}// eslint-disable-next-line no-empty\n}catch(e){}try{var devices=yield enumerateDevices();// If permissions are granted, the MediaDeviceInfo objects will have labels.\nreturn devices.filter(device=>deviceKinds.includes(device.kind)).every(device=>device.label);// eslint-disable-next-line no-empty\n}catch(e){}return false;});}/**\n * Ensures that the user has granted permissions to the microphone and camera.\n *\n * @param deviceKinds - Array of DeviceKind items.\n * @param callback - Function that will be executed while device permissions are granted. After this\n * returns, permissions (for example device labels in Firefox) may not be available anymore.\n * @returns The callback's response.\n */function ensureDevicePermissions(deviceKinds,callback){return __awaiter$2(this,void 0,void 0,function*(){try{var hasDevicePermissions=yield checkDevicePermissions(deviceKinds);if(!hasDevicePermissions){var stream=yield getUserMedia({audio:deviceKinds.includes(DeviceKind$1.AudioInput),video:deviceKinds.includes(DeviceKind$1.VideoInput)});// Callback is here to call a function while an active capture exists, so that the browser\n// (Firefox) will allow the user to access device information.\nvar callbackRes=yield callback();// Stop tracks in the stream so the browser (Safari) will know that there is not an active\n// stream running.\nstream.getTracks().forEach(track=>track.stop());return callbackRes;}return callback();}catch(e){logger$3.error(e);throw new Error('Failed to ensure device permissions.');}});}var media=/*#__PURE__*/Object.freeze({__proto__:null,get DeviceKind(){return DeviceKind$1;},getUserMedia:getUserMedia,getDisplayMedia:getDisplayMedia,enumerateDevices:enumerateDevices,setOnDeviceChangeHandler:setOnDeviceChangeHandler$1,checkDevicePermissions:checkDevicePermissions,ensureDevicePermissions:ensureDevicePermissions});var WebrtcCoreErrorType;(function(WebrtcCoreErrorType){WebrtcCoreErrorType[\"DEVICE_PERMISSION_DENIED\"]=\"DEVICE_PERMISSION_DENIED\";WebrtcCoreErrorType[\"CREATE_STREAM_FAILED\"]=\"CREATE_STREAM_FAILED\";WebrtcCoreErrorType[\"ADD_EFFECT_FAILED\"]=\"ADD_EFFECT_FAILED\";})(WebrtcCoreErrorType||(WebrtcCoreErrorType={}));/**\n * Represents a WebRTC core error, which contains error type and error message.\n */class WebrtcCoreError{/**\n * Creates new error.\n *\n * @param type - Error type.\n * @param message - Error message.\n */constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}/**\n * Creates a camera stream. Please note that the constraint params in second getUserMedia call would NOT take effect when:\n *\n * 1. Previous captured video stream from the same device is not stopped.\n * 2. Previous createCameraStream() call for the same device is in progress.\n *\n * @param constructor - Constructor for the local camera stream.\n * @param constraints - Video device constraints.\n * @returns A LocalCameraStream object or an error.\n */function createCameraStream(constructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create camera stream: \".concat(error));}return new constructor(stream);});}/**\n * Creates a LocalMicrophoneStream with the given constraints.\n *\n * @param constructor - Constructor for the local microphone stream.\n * @param constraints - Audio device constraints.\n * @returns A LocalMicrophoneStream object or an error.\n */function createMicrophoneStream(constructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({audio:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create microphone stream: \".concat(error));}return new constructor(stream);});}/**\n * Creates a LocalDisplayStream with the given parameters.\n *\n * @param constructor - Constructor for the local display stream.\n * @param videoContentHint - An optional parameter to give a hint for the content of the stream.\n * @returns A Promise that resolves to a LocalDisplayStream or an error.\n */function createDisplayStream(constructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create display stream: \".concat(error));}var localDisplayStream=new constructor(stream);if(videoContentHint){localDisplayStream.contentHint=videoContentHint;}return localDisplayStream;});}/**\n * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.\n *\n * @param displayStreamConstructor - Constructor for the local display stream.\n * @param systemAudioStreamConstructor - Constructor for the local system audio stream.\n * @param videoContentHint - An optional parameter to give a hint for the content of the stream.\n * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an\n * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null\n * instead.\n */function createDisplayStreamWithAudio(displayStreamConstructor,systemAudioStreamConstructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true,audio:true});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create display and system audio streams: \".concat(error));}// eslint-disable-next-line new-cap\nvar localDisplayStream=new displayStreamConstructor(new MediaStream(stream.getVideoTracks()));if(videoContentHint){localDisplayStream.contentHint=videoContentHint;}var localSystemAudioStream=null;if(stream.getAudioTracks().length>0){// eslint-disable-next-line new-cap\nlocalSystemAudioStream=new systemAudioStreamConstructor(new MediaStream(stream.getAudioTracks()));}return [localDisplayStream,localSystemAudioStream];});}/**\n * Enumerates the media input and output devices available.\n *\n * @param deviceKind - Optional filter to return a specific device kind.\n * @returns List of media devices in an array of MediaDeviceInfo objects.\n */function getDevices(deviceKind){return __awaiter$2(this,void 0,void 0,function*(){var devices;try{devices=yield ensureDevicePermissions([DeviceKind$1.AudioInput,DeviceKind$1.VideoInput],enumerateDevices);}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.DEVICE_PERMISSION_DENIED,'Failed to ensure device permissions');}return devices.filter(v=>deviceKind?v.kind===deviceKind:true);});}/**\n * Helper function to get a list of microphone devices.\n *\n * @returns List of microphone devices in an array of MediaDeviceInfo objects.\n */function getAudioInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioInput);});}/**\n * Helper function to get a list of speaker devices.\n *\n * @returns List of speaker devices in an array of MediaDeviceInfo objects.\n */function getAudioOutputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioOutput);});}/**\n * Helper function to get a list of camera devices.\n *\n * @returns List of camera devices in an array of MediaDeviceInfo objects.\n */function getVideoInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.VideoInput);});}/**\n * Export the setOnDeviceChangeHandler method directly from the core lib.\n */var {setOnDeviceChangeHandler}=media;var events$1$1={exports:{}};var R$1$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1$1=R$1$1&&typeof R$1$1.apply==='function'?R$1$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1$1;if(R$1$1&&typeof R$1$1.ownKeys==='function'){ReflectOwnKeys$1$1=R$1$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1$1(){EventEmitter$1$1.init.call(this);}events$1$1.exports=EventEmitter$1$1;events$1$1.exports.once=once$1$1;// Backwards-compat with node 0.10.x\nEventEmitter$1$1.EventEmitter=EventEmitter$1$1;EventEmitter$1$1.prototype._events=undefined;EventEmitter$1$1.prototype._eventsCount=0;EventEmitter$1$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners$1$1=10;function checkListener$1$1(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1$1(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1$1=arg;}});EventEmitter$1$1.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1$1(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1$1(that){if(that._maxListeners===undefined)return EventEmitter$1$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1$1(this);};EventEmitter$1$1.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1$1(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1$1(w);}}return target;}EventEmitter$1$1.prototype.addListener=function addListener(type,listener){return _addListener$1$1(this,type,listener,false);};EventEmitter$1$1.prototype.on=EventEmitter$1$1.prototype.addListener;EventEmitter$1$1.prototype.prependListener=function prependListener(type,listener){return _addListener$1$1(this,type,listener,true);};function onceWrapper$1$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$1.prototype.once=function once(type,listener){checkListener$1$1(listener);this.on(type,_onceWrap$1$1(this,type,listener));return this;};EventEmitter$1$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1$1(listener);this.prependListener(type,_onceWrap$1$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$1.prototype.off=EventEmitter$1$1.prototype.removeListener;EventEmitter$1$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1$1(evlistener):arrayClone$1$1(evlistener,evlistener.length);}EventEmitter$1$1.prototype.listeners=function listeners(type){return _listeners$1$1(this,type,true);};EventEmitter$1$1.prototype.rawListeners=function rawListeners(type){return _listeners$1$1(this,type,false);};EventEmitter$1$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1$1.call(emitter,type);}};EventEmitter$1$1.prototype.listenerCount=listenerCount$1$1;function listenerCount$1$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1$1(this._events):[];};function arrayClone$1$1(arr,n){var copy=new Array(n);for(var i=0;ie.id===effect.id)){return;}// Load the effect. Because loading is asynchronous, keep track of the loading effects.\nthis.loadingEffects.set(effect.kind,effect);yield effect.load(this.outputTrack);// After loading, check whether or not we still want to use this effect. If another effect of\n// the same kind was added while this effect was loading, we only want to use the latest effect,\n// so dispose this one. If the effects list was cleared while this effect was loading, also\n// dispose it.\nif(effect!==this.loadingEffects.get(effect.kind)){yield effect.dispose();throw new WebrtcCoreError(WebrtcCoreErrorType.ADD_EFFECT_FAILED,\"Another effect with kind \".concat(effect.kind,\" was added while effect \").concat(effect.id,\" was loading, or the effects list was cleared.\"));}this.loadingEffects.delete(effect.kind);/**\n * Handle when the effect's output track has been changed. This will update the input of the\n * next effect in the effects list of the output of the stream.\n *\n * @param track - The new output track of the effect.\n */var handleEffectTrackUpdated=track=>{var _f;var effectIndex=this.effects.findIndex(e=>e.id===effect.id);if(effectIndex===this.effects.length-1){this.changeOutputTrack(track);}else if(effectIndex>=0){(_f=this.effects[effectIndex+1])===null||_f===void 0?void 0:_f.replaceInputTrack(track);}else {logger$3.error(\"Effect with ID \".concat(effect.id,\" not found in effects list.\"));}};/**\n * Handle when the effect has been disposed. This will remove all event listeners from the\n * effect.\n */var handleEffectDisposed=()=>{effect.off('track-updated',handleEffectTrackUpdated);effect.off('disposed',handleEffectDisposed);};// TODO: using EffectEvent.TrackUpdated or EffectEvent.Disposed will cause the entire\n// web-media-effects lib to be rebuilt and inflates the size of the webrtc-core build, so\n// we use type assertion here as a temporary workaround.\neffect.on('track-updated',handleEffectTrackUpdated);effect.on('disposed',handleEffectDisposed);// Add the effect to the effects list. If an effect of the same kind has already been added,\n// dispose the existing effect and replace it with the new effect. If the existing effect was\n// enabled, also enable the new effect.\nvar existingEffectIndex=this.effects.findIndex(e=>e.kind===effect.kind);if(existingEffectIndex>=0){var[existingEffect]=this.effects.splice(existingEffectIndex,1,effect);if(existingEffect.isEnabled){// If the existing effect is not the first effect in the effects list, then the input of the\n// new effect should be the output of the previous effect in the effects list. We know the\n// output track of the previous effect must exist because it must have been loaded (and all\n// loaded effects have an output track).\nvar inputTrack=existingEffectIndex===0?this.inputTrack:this.effects[existingEffectIndex-1].getOutputTrack();yield effect.replaceInputTrack(inputTrack);// Enabling the new effect will trigger the track-updated event, which will handle the new\n// effect's updated output track.\nyield effect.enable();}yield existingEffect.dispose();}else {this.effects.push(effect);}// Emit an event with the effect so others can listen to the effect events.\nthis[LocalStreamEventNames.EffectAdded].emit(effect);});}/**\n * Get an effect from the effects list by ID.\n *\n * @param id - The id of the effect you want to get.\n * @returns The effect or undefined.\n */getEffectById(id){return this.effects.find(effect=>effect.id===id);}/**\n * Get an effect from the effects list by kind.\n *\n * @param kind - The kind of the effect you want to get.\n * @returns The effect or undefined.\n */getEffectByKind(kind){return this.effects.find(effect=>effect.kind===kind);}/**\n * Get all the effects from the effects list.\n *\n * @returns A list of effects.\n */getEffects(){return this.effects;}/**\n * Method to serialize data about input, output streams\n * and also effects from LocalStream.\n *\n * @returns - A JSON-compatible object representation with data from LocalStream.\n */toJSON(){return {muted:this.muted,label:this.label,readyState:this.readyState,inputStream:{active:this.inputStream.active,id:this.inputStream.id,enabled:this.inputTrack.enabled,muted:this.inputTrack.muted},outputStream:{active:this.outputStream.active,id:this.outputStream.id},effects:this.effects.map(effect=>{return {id:effect.id,kind:effect.kind,isEnabled:effect.isEnabled};})};}/**\n * Cleanup the local effects.\n */disposeEffects(){return __awaiter$2(this,void 0,void 0,function*(){this.loadingEffects.clear();// Dispose of any effects currently in use\nif(this.effects.length>0){this.changeOutputTrack(this.inputTrack);yield Promise.all(this.effects.map(effect=>effect.dispose()));this.effects=[];}});}}_a$1$1=LocalStreamEventNames.UserMuteStateChange,_b=LocalStreamEventNames.SystemMuteStateChange,_c=LocalStreamEventNames.ConstraintsChange,_d=LocalStreamEventNames.OutputTrackChange,_e=LocalStreamEventNames.EffectAdded;var LocalStream=AddEvents(_LocalStream);/**\n * An audio LocalStream.\n */class LocalAudioStream extends LocalStream{/**\n * Apply constraints to the stream.\n *\n * @param constraints - The constraints to apply.\n * @returns A promise which resolves when the constraints have been successfully applied.\n */applyConstraints(constraints){return __awaiter$2(this,void 0,void 0,function*(){logger$3.log(\"Applying constraints to local track:\",constraints);return this.inputTrack.applyConstraints(constraints).then(()=>{this[LocalStreamEventNames.ConstraintsChange].emit();});});}}/**\n * A video LocalStream.\n */class LocalVideoStream extends LocalStream{/**\n * Apply constraints to the stream.\n *\n * @param constraints - The constraints to apply.\n * @returns A promise which resolves when the constraints have been successfully applied.\n */applyConstraints(constraints){return __awaiter$2(this,void 0,void 0,function*(){logger$3.log(\"Applying constraints to local track:\",constraints);return this.inputTrack.applyConstraints(constraints).then(()=>{this[LocalStreamEventNames.ConstraintsChange].emit();});});}/**\n * Get the content hint for this stream.\n *\n * @returns The content hint setting for this stream, or undefined if none has been set.\n */get contentHint(){return this.inputTrack.contentHint;}/**\n * Set the content hint for this stream.\n *\n * @param hint - The content hint to set.\n */set contentHint(hint){this.inputTrack.contentHint=hint;}/**\n * Check the resolution and then return how many layers will be active.\n *\n * @returns The active layers count.\n */getNumActiveSimulcastLayers(){var activeSimulcastLayersNumber=0;var videoHeight=this.inputTrack.getSettings().height;if(videoHeight<=180){activeSimulcastLayersNumber=1;}else if(videoHeight<=360){activeSimulcastLayersNumber=2;}else {activeSimulcastLayersNumber=3;}return activeSimulcastLayersNumber;}}/**\n * A local camera stream.\n */class LocalCameraStream extends LocalVideoStream{}/**\n * A local display stream.\n */class LocalDisplayStream extends LocalVideoStream{}/**\n * A local microphone stream.\n */class LocalMicrophoneStream extends LocalAudioStream{}/**\n * A local system audio stream.\n */class LocalSystemAudioStream extends LocalAudioStream{}var _a$6$1;var RemoteMediaState;(function(RemoteMediaState){RemoteMediaState[\"Started\"]=\"started\";RemoteMediaState[\"Stopped\"]=\"stopped\";})(RemoteMediaState||(RemoteMediaState={}));var RemoteStreamEventNames;(function(RemoteStreamEventNames){RemoteStreamEventNames[\"MediaStateChange\"]=\"media-state-change\";})(RemoteStreamEventNames||(RemoteStreamEventNames={}));/**\n * A stream originating from a remote peer.\n */class _RemoteStream extends Stream{/**\n * Create a RemoteStream from the given values.\n *\n * @param stream - The initial output MediaStream for this Stream.\n */constructor(stream){super(stream);this[_a$6$1]=new TypedEvent$1();this.handleMediaStarted=this.handleMediaStarted.bind(this);this.handleMediaStopped=this.handleMediaStopped.bind(this);this.outputTrack.addEventListener('mute',this.handleMediaStopped);this.outputTrack.addEventListener('unmute',this.handleMediaStarted);}/**\n * @inheritdoc\n */handleMediaStarted(){this[RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Started);}/**\n * @inheritdoc\n */handleMediaStopped(){this[RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Stopped);}/**\n * Helper function to add event handlers to a MediaStreamTrack. See\n * {@link Stream.addTrackHandlersForStreamEvents} for why this is useful.\n *\n * @param track - The MediaStreamTrack.\n */addTrackHandlersForRemoteStreamEvents(track){track.addEventListener('mute',this.handleMediaStopped);track.addEventListener('unmute',this.handleMediaStarted);}/**\n * @inheritdoc\n */addTrackHandlers(track){super.addTrackHandlers(track);this.addTrackHandlersForRemoteStreamEvents(track);}/**\n * @inheritdoc\n */removeTrackHandlers(track){super.removeTrackHandlers(track);track.removeEventListener('mute',this.handleMediaStopped);track.removeEventListener('unmute',this.handleMediaStarted);}/**\n * Get whether the media on this stream has started or stopped.\n *\n * @returns The state of the media.\n */get mediaState(){return this.outputTrack.muted?RemoteMediaState.Stopped:RemoteMediaState.Started;}/**\n * @inheritdoc\n */getSettings(){return this.outputTrack.getSettings();}/**\n * Replace the existing track on the output stream for a new track.\n *\n * @param newTrack - The track to add to the stream.\n */replaceTrack(newTrack){var oldTrack=this.outputTrack;this.removeTrackHandlers(oldTrack);this.outputStream.removeTrack(oldTrack);this.outputStream.addTrack(newTrack);this.addTrackHandlers(newTrack);if(oldTrack.muted!==newTrack.muted){if(newTrack.muted){this.handleMediaStopped();}else {this.handleMediaStarted();}}// TODO: Chrome/React may not automatically refresh the media element with the new track when\n// the output track has changed, so we may need to emit an event here if this is the case.\n// this[StreamEventNames.OutputTrackChange].emit(newTrack);\n}/**\n * @inheritdoc\n */stop(){this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here\nthis[StreamEventNames.Ended].emit();}}_a$6$1=RemoteStreamEventNames.MediaStateChange;var RemoteStream=AddEvents(_RemoteStream);var commonjsGlobal$3=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$1(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$1={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,\"a\",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p=\"\",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return \"NT\";case\"XP\":return \"XP\";case\"NT 5.0\":return \"2000\";case\"NT 5.1\":return \"XP\";case\"NT 5.2\":return \"2003\";case\"NT 6.0\":return \"Vista\";case\"NT 6.1\":return \"7\";case\"NT 6.2\":return \"8\";case\"NT 6.3\":return \"8.1\";case\"NT 10.0\":return \"10\";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return \"Leopard\";case 6:return \"Snow Leopard\";case 7:return \"Lion\";case 8:return \"Mountain Lion\";case 9:return \"Mavericks\";case 10:return \"Yosemite\";case 11:return \"El Capitan\";case 12:return \"Sierra\";case 13:return \"High Sierra\";case 14:return \"Mojave\";case 15:return \"Catalina\";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0;},e.getVersionPrecision=function(e){return e.split(\".\").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),function(e){return new Array(20-e.length).join(\"0\")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]1?i-1:0),a=1;a0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return \">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\\/|opios/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function describe(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\\sedg\\//i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:\"bot\",vendor:\"Google\"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r;}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t};}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"blackberry\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"};}},{test:function test(e){return \"bada\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"windows phone\"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return \"android\"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return \"android\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"macos\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"};}},{test:function test(e){return \"windows\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"linux\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"playstation 4\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return \"roku\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return \"microsoft edge\"===e.getBrowserName(!0);},describe:function describe(e){if(/\\sedg\\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5$1);var Bowser$1=/*@__PURE__*/getDefaultExportFromCjs$1(es5$1.exports);var BrowserName$1;(function(BrowserName){BrowserName[\"CHROME\"]=\"Chrome\";BrowserName[\"FIREFOX\"]=\"Firefox\";BrowserName[\"EDGE\"]=\"Microsoft Edge\";BrowserName[\"SAFARI\"]=\"Safari\";})(BrowserName$1||(BrowserName$1={}));class BrowserInfo$1{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$1.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$1.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$1.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$1.SAFARI;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">=\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<=\".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"~\".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo$1.browser=Bowser$1.getParser(window.navigator.userAgent);var CapabilityState$1;(function(CapabilityState){CapabilityState[\"NOT_CAPABLE\"]=\"not capable\";CapabilityState[\"CAPABLE\"]=\"capable\";CapabilityState[\"UNKNOWN\"]=\"unknown\";})(CapabilityState$1||(CapabilityState$1={}));var events$2={exports:{}};var R$2=typeof Reflect==='object'?Reflect:null;var ReflectApply$2=R$2&&typeof R$2.apply==='function'?R$2.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$2;if(R$2&&typeof R$2.ownKeys==='function'){ReflectOwnKeys$2=R$2.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$2=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$2=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$2(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$2=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1$2(){EventEmitter$1$2.init.call(this);}events$2.exports=EventEmitter$1$2;events$2.exports.once=once$3;// Backwards-compat with node 0.10.x\nEventEmitter$1$2.EventEmitter=EventEmitter$1$2;EventEmitter$1$2.prototype._events=undefined;EventEmitter$1$2.prototype._eventsCount=0;EventEmitter$1$2.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners$2=10;function checkListener$2(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1$2,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$2;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$2(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$2=arg;}});EventEmitter$1$2.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1$2.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$2(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$2(that){if(that._maxListeners===undefined)return EventEmitter$1$2.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$2.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$2(this);};EventEmitter$1$2.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$2(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$2(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$2(w);}}return target;}EventEmitter$1$2.prototype.addListener=function addListener(type,listener){return _addListener$2(this,type,listener,false);};EventEmitter$1$2.prototype.on=EventEmitter$1$2.prototype.addListener;EventEmitter$1$2.prototype.prependListener=function prependListener(type,listener){return _addListener$2(this,type,listener,true);};function onceWrapper$2(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$2(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$2.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$2.prototype.once=function once(type,listener){checkListener$2(listener);this.on(type,_onceWrap$2(this,type,listener));return this;};EventEmitter$1$2.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$2(listener);this.prependListener(type,_onceWrap$2(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1$2.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$2(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$2(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$2.prototype.off=EventEmitter$1$2.prototype.removeListener;EventEmitter$1$2.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$2(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$2(evlistener):arrayClone$2(evlistener,evlistener.length);}EventEmitter$1$2.prototype.listeners=function listeners(type){return _listeners$2(this,type,true);};EventEmitter$1$2.prototype.rawListeners=function rawListeners(type){return _listeners$2(this,type,false);};EventEmitter$1$2.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$2.call(emitter,type);}};EventEmitter$1$2.prototype.listenerCount=listenerCount$2;function listenerCount$2(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$2.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$2(this._events):[];};function arrayClone$2(arr,n){var copy=new Array(n);for(var i=0;ivalue==='new')){mediaConnectionState=ConnectionState.New;}else if(connectionStates.some(value=>value==='closed')){mediaConnectionState=ConnectionState.Closed;}else if(connectionStates.some(value=>value==='failed')){mediaConnectionState=ConnectionState.Failed;}else if(connectionStates.some(value=>value==='disconnected')){mediaConnectionState=ConnectionState.Disconnected;}else if(connectionStates.every(value=>value==='connected'||value==='completed')){mediaConnectionState=ConnectionState.Connected;}else {mediaConnectionState=ConnectionState.Connecting;}logger$3.log(\"iceConnectionState=\".concat(iceState,\" connectionState=\").concat(connectionState,\" => \").concat(mediaConnectionState));return mediaConnectionState;}/**\n * Gets current connection state.\n *\n * @returns Current connection state.\n */getPeerConnectionState(){var{connectionState}=this.getCurrentStatesCallback();return connectionState;}/**\n * Gets current ice connection state.\n *\n * @returns Current ice connection state.\n */getIceConnectionState(){var{iceState}=this.getCurrentStatesCallback();return iceState;}/**\n * Gets current overall connection state.\n *\n * @returns Current overall connection state.\n */getConnectionState(){return this.evaluateMediaConnectionState();}}ConnectionStateHandler.Events=ConnectionStateEvents;/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */var logDisabled_$1=true;var deprecationWarnings_$1=true;/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */function extractVersion$1(uastring,expr,pos){var match=uastring.match(expr);return match&&match.length>=pos&&parseInt(match[pos],10);}// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent$1(window,eventNameToWrap,wrapper){if(!window.RTCPeerConnection){return;}var proto=window.RTCPeerConnection.prototype;var nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap){return nativeAddEventListener.apply(this,arguments);}var wrappedCallback=e=>{var modifiedEvent=wrapper(e);if(modifiedEvent){if(cb.handleEvent){cb.handleEvent(modifiedEvent);}else {cb(modifiedEvent);}}};this._eventMap=this._eventMap||{};if(!this._eventMap[eventNameToWrap]){this._eventMap[eventNameToWrap]=new Map();}this._eventMap[eventNameToWrap].set(cb,wrappedCallback);return nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback]);};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[eventNameToWrap]){return nativeRemoveEventListener.apply(this,arguments);}if(!this._eventMap[eventNameToWrap].has(cb)){return nativeRemoveEventListener.apply(this,arguments);}var unwrappedCb=this._eventMap[eventNameToWrap].get(cb);this._eventMap[eventNameToWrap].delete(cb);if(this._eventMap[eventNameToWrap].size===0){delete this._eventMap[eventNameToWrap];}if(Object.keys(this._eventMap).length===0){delete this._eventMap;}return nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb]);};Object.defineProperty(proto,'on'+eventNameToWrap,{get(){return this['_on'+eventNameToWrap];},set(cb){if(this['_on'+eventNameToWrap]){this.removeEventListener(eventNameToWrap,this['_on'+eventNameToWrap]);delete this['_on'+eventNameToWrap];}if(cb){this.addEventListener(eventNameToWrap,this['_on'+eventNameToWrap]=cb);}},enumerable:true,configurable:true});}function disableLog$1(bool){if(typeof bool!=='boolean'){return new Error('Argument type: '+typeof bool+'. Please use a boolean.');}logDisabled_$1=bool;return bool?'adapter.js logging disabled':'adapter.js logging enabled';}/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */function disableWarnings$1(bool){if(typeof bool!=='boolean'){return new Error('Argument type: '+typeof bool+'. Please use a boolean.');}deprecationWarnings_$1=!bool;return 'adapter.js deprecation warnings '+(bool?'disabled':'enabled');}function log$2(){if(typeof window==='object'){if(logDisabled_$1){return;}if(typeof console!=='undefined'&&typeof console.log==='function'){console.log.apply(console,arguments);}}}/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */function deprecated$1(oldMethod,newMethod){if(!deprecationWarnings_$1){return;}console.warn(oldMethod+' is deprecated, please use '+newMethod+' instead.');}/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */function detectBrowser$1(window){// Returned result object.\nvar result={browser:null,version:null};// Fail early if it's not a browser\nif(typeof window==='undefined'||!window.navigator){result.browser='Not a browser.';return result;}var{navigator}=window;if(navigator.mozGetUserMedia){// Firefox.\nresult.browser='firefox';result.version=extractVersion$1(navigator.userAgent,/Firefox\\/(\\d+)\\./,1);}else if(navigator.webkitGetUserMedia||window.isSecureContext===false&&window.webkitRTCPeerConnection){// Chrome, Chromium, Webview, Opera.\n// Version matches Chrome/WebRTC version.\n// Chrome 74 removed webkitGetUserMedia on http as well so we need the\n// more complicated fallback to webkitRTCPeerConnection.\nresult.browser='chrome';result.version=extractVersion$1(navigator.userAgent,/Chrom(e|ium)\\/(\\d+)\\./,2);}else if(window.RTCPeerConnection&&navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)){// Safari.\nresult.browser='safari';result.version=extractVersion$1(navigator.userAgent,/AppleWebKit\\/(\\d+)\\./,1);result.supportsUnifiedPlan=window.RTCRtpTransceiver&&'currentDirection'in window.RTCRtpTransceiver.prototype;}else {// Default fallthrough: not supported.\nresult.browser='Not a supported browser.';return result;}return result;}/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */function isObject$1(val){return Object.prototype.toString.call(val)==='[object Object]';}/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */function compactObject$1(data){if(!isObject$1(data)){return data;}return Object.keys(data).reduce(function(accumulator,key){var isObj=isObject$1(data[key]);var value=isObj?compactObject$1(data[key]):data[key];var isEmptyObject=isObj&&!Object.keys(value).length;if(value===undefined||isEmptyObject){return accumulator;}return Object.assign(accumulator,{[key]:value});},{});}/* iterates the stats graph recursively. */function walkStats$1(stats,base,resultSet){if(!base||resultSet.has(base.id)){return;}resultSet.set(base.id,base);Object.keys(base).forEach(name=>{if(name.endsWith('Id')){walkStats$1(stats,stats.get(base[name]),resultSet);}else if(name.endsWith('Ids')){base[name].forEach(id=>{walkStats$1(stats,stats.get(id),resultSet);});}});}/* filter getStats for a sender/receiver track. */function filterStats$1(result,track,outbound){var streamStatsType=outbound?'outbound-rtp':'inbound-rtp';var filteredResult=new Map();if(track===null){return filteredResult;}var trackStats=[];result.forEach(value=>{if(value.type==='track'&&value.trackIdentifier===track.id){trackStats.push(value);}});trackStats.forEach(trackStat=>{result.forEach(stats=>{if(stats.type===streamStatsType&&stats.trackId===trackStat.id){walkStats$1(result,stats,filteredResult);}});});return filteredResult;}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */var logging$1=log$2;function shimGetUserMedia$2$1(window,browserDetails){var navigator=window&&window.navigator;if(!navigator.mediaDevices){return;}var constraintsToChrome_=function constraintsToChrome_(c){if(typeof c!=='object'||c.mandatory||c.optional){return c;}var cc={};Object.keys(c).forEach(key=>{if(key==='require'||key==='advanced'||key==='mediaSource'){return;}var r=typeof c[key]==='object'?c[key]:{ideal:c[key]};if(r.exact!==undefined&&typeof r.exact==='number'){r.min=r.max=r.exact;}var oldname_=function oldname_(prefix,name){if(prefix){return prefix+name.charAt(0).toUpperCase()+name.slice(1);}return name==='deviceId'?'sourceId':name;};if(r.ideal!==undefined){cc.optional=cc.optional||[];var oc={};if(typeof r.ideal==='number'){oc[oldname_('min',key)]=r.ideal;cc.optional.push(oc);oc={};oc[oldname_('max',key)]=r.ideal;cc.optional.push(oc);}else {oc[oldname_('',key)]=r.ideal;cc.optional.push(oc);}}if(r.exact!==undefined&&typeof r.exact!=='number'){cc.mandatory=cc.mandatory||{};cc.mandatory[oldname_('',key)]=r.exact;}else {['min','max'].forEach(mix=>{if(r[mix]!==undefined){cc.mandatory=cc.mandatory||{};cc.mandatory[oldname_(mix,key)]=r[mix];}});}});if(c.advanced){cc.optional=(cc.optional||[]).concat(c.advanced);}return cc;};var shimConstraints_=function shimConstraints_(constraints,func){if(browserDetails.version>=61){return func(constraints);}constraints=JSON.parse(JSON.stringify(constraints));if(constraints&&typeof constraints.audio==='object'){var remap=function remap(obj,a,b){if(a in obj&&!(b in obj)){obj[b]=obj[a];delete obj[a];}};constraints=JSON.parse(JSON.stringify(constraints));remap(constraints.audio,'autoGainControl','googAutoGainControl');remap(constraints.audio,'noiseSuppression','googNoiseSuppression');constraints.audio=constraintsToChrome_(constraints.audio);}if(constraints&&typeof constraints.video==='object'){// Shim facingMode for mobile & surface pro.\nvar face=constraints.video.facingMode;face=face&&(typeof face==='object'?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version<66;if(face&&(face.exact==='user'||face.exact==='environment'||face.ideal==='user'||face.ideal==='environment')&&!(navigator.mediaDevices.getSupportedConstraints&&navigator.mediaDevices.getSupportedConstraints().facingMode&&!getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches;if(face.exact==='environment'||face.ideal==='environment'){matches=['back','rear'];}else if(face.exact==='user'||face.ideal==='user'){matches=['front'];}if(matches){// Look for matches in label, or use last cam for back (typical).\nreturn navigator.mediaDevices.enumerateDevices().then(devices=>{devices=devices.filter(d=>d.kind==='videoinput');var dev=devices.find(d=>matches.some(match=>d.label.toLowerCase().includes(match)));if(!dev&&devices.length&&matches.includes('back')){dev=devices[devices.length-1];// more likely the back cam\n}if(dev){constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId};}constraints.video=constraintsToChrome_(constraints.video);logging$1('chrome: '+JSON.stringify(constraints));return func(constraints);});}}constraints.video=constraintsToChrome_(constraints.video);}logging$1('chrome: '+JSON.stringify(constraints));return func(constraints);};var shimError_=function shimError_(e){if(browserDetails.version>=64){return e;}return {name:{PermissionDeniedError:'NotAllowedError',PermissionDismissedError:'NotAllowedError',InvalidStateError:'NotAllowedError',DevicesNotFoundError:'NotFoundError',ConstraintNotSatisfiedError:'OverconstrainedError',TrackStartError:'NotReadableError',MediaDeviceFailedDueToShutdown:'NotAllowedError',MediaDeviceKillSwitchOn:'NotAllowedError',TabCaptureError:'AbortError',ScreenCaptureError:'AbortError',DeviceCaptureError:'AbortError'}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&': ')+this.message;}};};var getUserMedia_=function getUserMedia_(constraints,onSuccess,onError){shimConstraints_(constraints,c=>{navigator.webkitGetUserMedia(c,onSuccess,e=>{if(onError){onError(shimError_(e));}});});};navigator.getUserMedia=getUserMedia_.bind(navigator);// Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n// function which returns a Promise, it does not accept spec-style\n// constraints.\nif(navigator.mediaDevices.getUserMedia){var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(cs){return shimConstraints_(cs,c=>origGetUserMedia(c).then(stream=>{if(c.audio&&!stream.getAudioTracks().length||c.video&&!stream.getVideoTracks().length){stream.getTracks().forEach(track=>{track.stop();});throw new DOMException('','NotFoundError');}return stream;},e=>Promise.reject(shimError_(e))));};}}/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimGetDisplayMedia$1$1(window,getSourceId){if(window.navigator.mediaDevices&&'getDisplayMedia'in window.navigator.mediaDevices){return;}if(!window.navigator.mediaDevices){return;}// getSourceId is a function that returns a promise resolving with\n// the sourceId of the screen/window/tab to be shared.\nif(typeof getSourceId!=='function'){console.error('shimGetDisplayMedia: getSourceId argument is not '+'a function');return;}window.navigator.mediaDevices.getDisplayMedia=function getDisplayMedia(constraints){return getSourceId(constraints).then(sourceId=>{var widthSpecified=constraints.video&&constraints.video.width;var heightSpecified=constraints.video&&constraints.video.height;var frameRateSpecified=constraints.video&&constraints.video.frameRate;constraints.video={mandatory:{chromeMediaSource:'desktop',chromeMediaSourceId:sourceId,maxFrameRate:frameRateSpecified||3}};if(widthSpecified){constraints.video.mandatory.maxWidth=widthSpecified;}if(heightSpecified){constraints.video.mandatory.maxHeight=heightSpecified;}return window.navigator.mediaDevices.getUserMedia(constraints);});};}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimMediaStream$1(window){window.MediaStream=window.MediaStream||window.webkitMediaStream;}function shimOnTrack$1$1(window){if(typeof window==='object'&&window.RTCPeerConnection&&!('ontrack'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'ontrack',{get(){return this._ontrack;},set(f){if(this._ontrack){this.removeEventListener('track',this._ontrack);}this.addEventListener('track',this._ontrack=f);},enumerable:true,configurable:true});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){if(!this._ontrackpoly){this._ontrackpoly=e=>{// onaddstream does not fire when a track is added to an existing\n// stream. But stream.onaddtrack is implemented so we use that.\ne.stream.addEventListener('addtrack',te=>{var receiver;if(window.RTCPeerConnection.prototype.getReceivers){receiver=this.getReceivers().find(r=>r.track&&r.track.id===te.track.id);}else {receiver={track:te.track};}var event=new Event('track');event.track=te.track;event.receiver=receiver;event.transceiver={receiver};event.streams=[e.stream];this.dispatchEvent(event);});e.stream.getTracks().forEach(track=>{var receiver;if(window.RTCPeerConnection.prototype.getReceivers){receiver=this.getReceivers().find(r=>r.track&&r.track.id===track.id);}else {receiver={track};}var event=new Event('track');event.track=track;event.receiver=receiver;event.transceiver={receiver};event.streams=[e.stream];this.dispatchEvent(event);});};this.addEventListener('addstream',this._ontrackpoly);}return origSetRemoteDescription.apply(this,arguments);};}else {// even if RTCRtpTransceiver is in window, it is only used and\n// emitted in unified-plan. Unfortunately this means we need\n// to unconditionally wrap the event.\nwrapPeerConnectionEvent$1(window,'track',e=>{if(!e.transceiver){Object.defineProperty(e,'transceiver',{value:{receiver:e.receiver}});}return e;});}}function shimGetSendersWithDtmf$1(window){// Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\nif(typeof window==='object'&&window.RTCPeerConnection&&!('getSenders'in window.RTCPeerConnection.prototype)&&'createDTMFSender'in window.RTCPeerConnection.prototype){var shimSenderWithDtmf=function shimSenderWithDtmf(pc,track){return {track,get dtmf(){if(this._dtmf===undefined){if(track.kind==='audio'){this._dtmf=pc.createDTMFSender(track);}else {this._dtmf=null;}}return this._dtmf;},_pc:pc};};// augment addTrack when getSenders is not available.\nif(!window.RTCPeerConnection.prototype.getSenders){window.RTCPeerConnection.prototype.getSenders=function getSenders(){this._senders=this._senders||[];return this._senders.slice();// return a copy of the internal state.\n};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function addTrack(track,stream){var sender=origAddTrack.apply(this,arguments);if(!sender){sender=shimSenderWithDtmf(this,track);this._senders.push(sender);}return sender;};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function removeTrack(sender){origRemoveTrack.apply(this,arguments);var idx=this._senders.indexOf(sender);if(idx!==-1){this._senders.splice(idx,1);}};}var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function addStream(stream){this._senders=this._senders||[];origAddStream.apply(this,[stream]);stream.getTracks().forEach(track=>{this._senders.push(shimSenderWithDtmf(this,track));});};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){this._senders=this._senders||[];origRemoveStream.apply(this,[stream]);stream.getTracks().forEach(track=>{var sender=this._senders.find(s=>s.track===track);if(sender){// remove sender\nthis._senders.splice(this._senders.indexOf(sender),1);}});};}else if(typeof window==='object'&&window.RTCPeerConnection&&'getSenders'in window.RTCPeerConnection.prototype&&'createDTMFSender'in window.RTCPeerConnection.prototype&&window.RTCRtpSender&&!('dtmf'in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;window.RTCPeerConnection.prototype.getSenders=function getSenders(){var senders=origGetSenders.apply(this,[]);senders.forEach(sender=>sender._pc=this);return senders;};Object.defineProperty(window.RTCRtpSender.prototype,'dtmf',{get(){if(this._dtmf===undefined){if(this.track.kind==='audio'){this._dtmf=this._pc.createDTMFSender(this.track);}else {this._dtmf=null;}}return this._dtmf;}});}}function shimGetStats$1(window){if(!window.RTCPeerConnection){return;}var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function getStats(){var[selector,onSucc,onErr]=arguments;// If selector is a function then we are in the old style stats so just\n// pass back the original getStats format to avoid breaking old users.\nif(arguments.length>0&&typeof selector==='function'){return origGetStats.apply(this,arguments);}// When spec-style getStats is supported, return those when called with\n// either no arguments or the selector argument is null.\nif(origGetStats.length===0&&(arguments.length===0||typeof selector!=='function')){return origGetStats.apply(this,[]);}var fixChromeStats_=function fixChromeStats_(response){var standardReport={};var reports=response.result();reports.forEach(report=>{var standardStats={id:report.id,timestamp:report.timestamp,type:{localcandidate:'local-candidate',remotecandidate:'remote-candidate'}[report.type]||report.type};report.names().forEach(name=>{standardStats[name]=report.stat(name);});standardReport[standardStats.id]=standardStats;});return standardReport;};// shim getStats with maplike support\nvar makeMapStats=function makeMapStats(stats){return new Map(Object.keys(stats).map(key=>[key,stats[key]]));};if(arguments.length>=2){var successCallbackWrapper_=function successCallbackWrapper_(response){onSucc(makeMapStats(fixChromeStats_(response)));};return origGetStats.apply(this,[successCallbackWrapper_,selector]);}// promise-support\nreturn new Promise((resolve,reject)=>{origGetStats.apply(this,[function(response){resolve(makeMapStats(fixChromeStats_(response)));},reject]);}).then(onSucc,onErr);};}function shimSenderReceiverGetStats$1(window){if(!(typeof window==='object'&&window.RTCPeerConnection&&window.RTCRtpSender&&window.RTCRtpReceiver)){return;}// shim sender stats.\nif(!('getStats'in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;if(origGetSenders){window.RTCPeerConnection.prototype.getSenders=function getSenders(){var senders=origGetSenders.apply(this,[]);senders.forEach(sender=>sender._pc=this);return senders;};}var origAddTrack=window.RTCPeerConnection.prototype.addTrack;if(origAddTrack){window.RTCPeerConnection.prototype.addTrack=function addTrack(){var sender=origAddTrack.apply(this,arguments);sender._pc=this;return sender;};}window.RTCRtpSender.prototype.getStats=function getStats(){var sender=this;return this._pc.getStats().then(result=>/* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */filterStats$1(result,sender.track,true));};}// shim receiver stats.\nif(!('getStats'in window.RTCRtpReceiver.prototype)){var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;if(origGetReceivers){window.RTCPeerConnection.prototype.getReceivers=function getReceivers(){var receivers=origGetReceivers.apply(this,[]);receivers.forEach(receiver=>receiver._pc=this);return receivers;};}wrapPeerConnectionEvent$1(window,'track',e=>{e.receiver._pc=e.srcElement;return e;});window.RTCRtpReceiver.prototype.getStats=function getStats(){var receiver=this;return this._pc.getStats().then(result=>filterStats$1(result,receiver.track,false));};}if(!('getStats'in window.RTCRtpSender.prototype&&'getStats'in window.RTCRtpReceiver.prototype)){return;}// shim RTCPeerConnection.getStats(track).\nvar origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function getStats(){if(arguments.length>0&&arguments[0]instanceof window.MediaStreamTrack){var track=arguments[0];var sender;var receiver;var err;this.getSenders().forEach(s=>{if(s.track===track){if(sender){err=true;}else {sender=s;}}});this.getReceivers().forEach(r=>{if(r.track===track){if(receiver){err=true;}else {receiver=r;}}return r.track===track;});if(err||sender&&receiver){return Promise.reject(new DOMException('There are more than one sender or receiver for the track.','InvalidAccessError'));}else if(sender){return sender.getStats();}else if(receiver){return receiver.getStats();}return Promise.reject(new DOMException('There is no sender or receiver for the track.','InvalidAccessError'));}return origGetStats.apply(this,arguments);};}function shimAddTrackRemoveTrackWithNative$1(window){// shim addTrack/removeTrack with native variants in order to make\n// the interactions with legacy getLocalStreams behave as in other browsers.\n// Keeps a mapping stream.id => [stream, rtpsenders...]\nwindow.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){this._shimmedLocalStreams=this._shimmedLocalStreams||{};return Object.keys(this._shimmedLocalStreams).map(streamId=>this._shimmedLocalStreams[streamId][0]);};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function addTrack(track,stream){if(!stream){return origAddTrack.apply(this,arguments);}this._shimmedLocalStreams=this._shimmedLocalStreams||{};var sender=origAddTrack.apply(this,arguments);if(!this._shimmedLocalStreams[stream.id]){this._shimmedLocalStreams[stream.id]=[stream,sender];}else if(this._shimmedLocalStreams[stream.id].indexOf(sender)===-1){this._shimmedLocalStreams[stream.id].push(sender);}return sender;};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function addStream(stream){this._shimmedLocalStreams=this._shimmedLocalStreams||{};stream.getTracks().forEach(track=>{var alreadyExists=this.getSenders().find(s=>s.track===track);if(alreadyExists){throw new DOMException('Track already exists.','InvalidAccessError');}});var existingSenders=this.getSenders();origAddStream.apply(this,arguments);var newSenders=this.getSenders().filter(newSender=>existingSenders.indexOf(newSender)===-1);this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders);};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){this._shimmedLocalStreams=this._shimmedLocalStreams||{};delete this._shimmedLocalStreams[stream.id];return origRemoveStream.apply(this,arguments);};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function removeTrack(sender){this._shimmedLocalStreams=this._shimmedLocalStreams||{};if(sender){Object.keys(this._shimmedLocalStreams).forEach(streamId=>{var idx=this._shimmedLocalStreams[streamId].indexOf(sender);if(idx!==-1){this._shimmedLocalStreams[streamId].splice(idx,1);}if(this._shimmedLocalStreams[streamId].length===1){delete this._shimmedLocalStreams[streamId];}});}return origRemoveTrack.apply(this,arguments);};}function shimAddTrackRemoveTrack$1(window,browserDetails){if(!window.RTCPeerConnection){return;}// shim addTrack and removeTrack.\nif(window.RTCPeerConnection.prototype.addTrack&&browserDetails.version>=65){return shimAddTrackRemoveTrackWithNative$1(window);}// also shim pc.getLocalStreams when addTrack is shimmed\n// to return the original streams.\nvar origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){var nativeStreams=origGetLocalStreams.apply(this);this._reverseStreams=this._reverseStreams||{};return nativeStreams.map(stream=>this._reverseStreams[stream.id]);};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function addStream(stream){this._streams=this._streams||{};this._reverseStreams=this._reverseStreams||{};stream.getTracks().forEach(track=>{var alreadyExists=this.getSenders().find(s=>s.track===track);if(alreadyExists){throw new DOMException('Track already exists.','InvalidAccessError');}});// Add identity mapping for consistency with addTrack.\n// Unless this is being used with a stream from addTrack.\nif(!this._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());this._streams[stream.id]=newStream;this._reverseStreams[newStream.id]=stream;stream=newStream;}origAddStream.apply(this,[stream]);};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){this._streams=this._streams||{};this._reverseStreams=this._reverseStreams||{};origRemoveStream.apply(this,[this._streams[stream.id]||stream]);delete this._reverseStreams[this._streams[stream.id]?this._streams[stream.id].id:stream.id];delete this._streams[stream.id];};window.RTCPeerConnection.prototype.addTrack=function addTrack(track,stream){if(this.signalingState==='closed'){throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.','InvalidStateError');}var streams=[].slice.call(arguments,1);if(streams.length!==1||!streams[0].getTracks().find(t=>t===track)){// this is not fully correct but all we can manage without\n// [[associated MediaStreams]] internal slot.\nthrow new DOMException('The adapter.js addTrack polyfill only supports a single '+' stream which is associated with the specified track.','NotSupportedError');}var alreadyExists=this.getSenders().find(s=>s.track===track);if(alreadyExists){throw new DOMException('Track already exists.','InvalidAccessError');}this._streams=this._streams||{};this._reverseStreams=this._reverseStreams||{};var oldStream=this._streams[stream.id];if(oldStream){// this is using odd Chrome behaviour, use with caution:\n// https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n// Note: we rely on the high-level addTrack/dtmf shim to\n// create the sender with a dtmf sender.\noldStream.addTrack(track);// Trigger ONN async.\nPromise.resolve().then(()=>{this.dispatchEvent(new Event('negotiationneeded'));});}else {var newStream=new window.MediaStream([track]);this._streams[stream.id]=newStream;this._reverseStreams[newStream.id]=stream;this.addStream(newStream);}return this.getSenders().find(s=>s.track===track);};// replace the internal stream id with the external one and\n// vice versa.\nfunction replaceInternalStreamId(pc,description){var sdp=description.sdp;Object.keys(pc._reverseStreams||[]).forEach(internalId=>{var externalStream=pc._reverseStreams[internalId];var internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,'g'),externalStream.id);});return new RTCSessionDescription({type:description.type,sdp});}function replaceExternalStreamId(pc,description){var sdp=description.sdp;Object.keys(pc._reverseStreams||[]).forEach(internalId=>{var externalStream=pc._reverseStreams[internalId];var internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,'g'),internalStream.id);});return new RTCSessionDescription({type:description.type,sdp});}['createOffer','createAnswer'].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];var methodObj={[method](){var args=arguments;var isLegacyCall=arguments.length&&typeof arguments[0]==='function';if(isLegacyCall){return nativeMethod.apply(this,[description=>{var desc=replaceInternalStreamId(this,description);args[0].apply(null,[desc]);},err=>{if(args[1]){args[1].apply(null,err);}},arguments[2]]);}return nativeMethod.apply(this,arguments).then(description=>replaceInternalStreamId(this,description));}};window.RTCPeerConnection.prototype[method]=methodObj[method];});var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function setLocalDescription(){if(!arguments.length||!arguments[0].type){return origSetLocalDescription.apply(this,arguments);}arguments[0]=replaceExternalStreamId(this,arguments[0]);return origSetLocalDescription.apply(this,arguments);};// TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\nvar origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,'localDescription');Object.defineProperty(window.RTCPeerConnection.prototype,'localDescription',{get(){var description=origLocalDescription.get.apply(this);if(description.type===''){return description;}return replaceInternalStreamId(this,description);}});window.RTCPeerConnection.prototype.removeTrack=function removeTrack(sender){if(this.signalingState==='closed'){throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.','InvalidStateError');}// We can not yet check for sender instanceof RTCRtpSender\n// since we shim RTPSender. So we check if sender._pc is set.\nif(!sender._pc){throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack '+'does not implement interface RTCRtpSender.','TypeError');}var isLocal=sender._pc===this;if(!isLocal){throw new DOMException('Sender was not created by this connection.','InvalidAccessError');}// Search for the native stream the senders track belongs to.\nthis._streams=this._streams||{};var stream;Object.keys(this._streams).forEach(streamid=>{var hasTrack=this._streams[streamid].getTracks().find(track=>sender.track===track);if(hasTrack){stream=this._streams[streamid];}});if(stream){if(stream.getTracks().length===1){// if this is the last track of the stream, remove the stream. This\n// takes care of any shimmed _senders.\nthis.removeStream(this._reverseStreams[stream.id]);}else {// relying on the same odd chrome behaviour as above.\nstream.removeTrack(sender.track);}this.dispatchEvent(new Event('negotiationneeded'));}};}function shimPeerConnection$1$1(window,browserDetails){if(!window.RTCPeerConnection&&window.webkitRTCPeerConnection){// very basic support for old versions.\nwindow.RTCPeerConnection=window.webkitRTCPeerConnection;}if(!window.RTCPeerConnection){return;}// shim implicit creation of RTCSessionDescription/RTCIceCandidate\nif(browserDetails.version<53){['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];var methodObj={[method](){arguments[0]=new(method==='addIceCandidate'?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]);return nativeMethod.apply(this,arguments);}};window.RTCPeerConnection.prototype[method]=methodObj[method];});}}// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded$1(window,browserDetails){wrapPeerConnectionEvent$1(window,'negotiationneeded',e=>{var pc=e.target;if(browserDetails.version<72||pc.getConfiguration&&pc.getConfiguration().sdpSemantics==='plan-b'){if(pc.signalingState!=='stable'){return;}}return e;});}var chromeShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimMediaStream:shimMediaStream$1,shimOnTrack:shimOnTrack$1$1,shimGetSendersWithDtmf:shimGetSendersWithDtmf$1,shimGetStats:shimGetStats$1,shimSenderReceiverGetStats:shimSenderReceiverGetStats$1,shimAddTrackRemoveTrackWithNative:shimAddTrackRemoveTrackWithNative$1,shimAddTrackRemoveTrack:shimAddTrackRemoveTrack$1,shimPeerConnection:shimPeerConnection$1$1,fixNegotiationNeeded:fixNegotiationNeeded$1,shimGetUserMedia:shimGetUserMedia$2$1,shimGetDisplayMedia:shimGetDisplayMedia$1$1});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimGetUserMedia$1$1(window,browserDetails){var navigator=window&&window.navigator;var MediaStreamTrack=window&&window.MediaStreamTrack;navigator.getUserMedia=function(constraints,onSuccess,onError){// Replace Firefox 44+'s deprecation warning with unprefixed version.\ndeprecated$1('navigator.getUserMedia','navigator.mediaDevices.getUserMedia');navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError);};if(!(browserDetails.version>55&&'autoGainControl'in navigator.mediaDevices.getSupportedConstraints())){var remap=function remap(obj,a,b){if(a in obj&&!(b in obj)){obj[b]=obj[a];delete obj[a];}};var nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(c){if(typeof c==='object'&&typeof c.audio==='object'){c=JSON.parse(JSON.stringify(c));remap(c.audio,'autoGainControl','mozAutoGainControl');remap(c.audio,'noiseSuppression','mozNoiseSuppression');}return nativeGetUserMedia(c);};if(MediaStreamTrack&&MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);remap(obj,'mozAutoGainControl','autoGainControl');remap(obj,'mozNoiseSuppression','noiseSuppression');return obj;};}if(MediaStreamTrack&&MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){if(this.kind==='audio'&&typeof c==='object'){c=JSON.parse(JSON.stringify(c));remap(c,'autoGainControl','mozAutoGainControl');remap(c,'noiseSuppression','mozNoiseSuppression');}return nativeApplyConstraints.apply(this,[c]);};}}}/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimGetDisplayMedia$2(window,preferredMediaSource){if(window.navigator.mediaDevices&&'getDisplayMedia'in window.navigator.mediaDevices){return;}if(!window.navigator.mediaDevices){return;}window.navigator.mediaDevices.getDisplayMedia=function getDisplayMedia(constraints){if(!(constraints&&constraints.video)){var err=new DOMException('getDisplayMedia without video '+'constraints is undefined');err.name='NotFoundError';// from https://heycam.github.io/webidl/#idl-DOMException-error-names\nerr.code=8;return Promise.reject(err);}if(constraints.video===true){constraints.video={mediaSource:preferredMediaSource};}else {constraints.video.mediaSource=preferredMediaSource;}return window.navigator.mediaDevices.getUserMedia(constraints);};}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimOnTrack$2(window){if(typeof window==='object'&&window.RTCTrackEvent&&'receiver'in window.RTCTrackEvent.prototype&&!('transceiver'in window.RTCTrackEvent.prototype)){Object.defineProperty(window.RTCTrackEvent.prototype,'transceiver',{get(){return {receiver:this.receiver};}});}}function shimPeerConnection$2(window,browserDetails){if(typeof window!=='object'||!(window.RTCPeerConnection||window.mozRTCPeerConnection)){return;// probably media.peerconnection.enabled=false in about:config\n}if(!window.RTCPeerConnection&&window.mozRTCPeerConnection){// very basic support for old versions.\nwindow.RTCPeerConnection=window.mozRTCPeerConnection;}if(browserDetails.version<53){// shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];var methodObj={[method](){arguments[0]=new(method==='addIceCandidate'?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]);return nativeMethod.apply(this,arguments);}};window.RTCPeerConnection.prototype[method]=methodObj[method];});}var modernStatsTypes={inboundrtp:'inbound-rtp',outboundrtp:'outbound-rtp',candidatepair:'candidate-pair',localcandidate:'local-candidate',remotecandidate:'remote-candidate'};var nativeGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function getStats(){var[selector,onSucc,onErr]=arguments;return nativeGetStats.apply(this,[selector||null]).then(stats=>{if(browserDetails.version<53&&!onSucc){// Shim only promise getStats with spec-hyphens in type names\n// Leave callback version alone; misc old uses of forEach before Map\ntry{stats.forEach(stat=>{stat.type=modernStatsTypes[stat.type]||stat.type;});}catch(e){if(e.name!=='TypeError'){throw e;}// Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\nstats.forEach((stat,i)=>{stats.set(i,Object.assign({},stat,{type:modernStatsTypes[stat.type]||stat.type}));});}}return stats;}).then(onSucc,onErr);};}function shimSenderGetStats$1(window){if(!(typeof window==='object'&&window.RTCPeerConnection&&window.RTCRtpSender)){return;}if(window.RTCRtpSender&&'getStats'in window.RTCRtpSender.prototype){return;}var origGetSenders=window.RTCPeerConnection.prototype.getSenders;if(origGetSenders){window.RTCPeerConnection.prototype.getSenders=function getSenders(){var senders=origGetSenders.apply(this,[]);senders.forEach(sender=>sender._pc=this);return senders;};}var origAddTrack=window.RTCPeerConnection.prototype.addTrack;if(origAddTrack){window.RTCPeerConnection.prototype.addTrack=function addTrack(){var sender=origAddTrack.apply(this,arguments);sender._pc=this;return sender;};}window.RTCRtpSender.prototype.getStats=function getStats(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map());};}function shimReceiverGetStats$1(window){if(!(typeof window==='object'&&window.RTCPeerConnection&&window.RTCRtpSender)){return;}if(window.RTCRtpSender&&'getStats'in window.RTCRtpReceiver.prototype){return;}var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;if(origGetReceivers){window.RTCPeerConnection.prototype.getReceivers=function getReceivers(){var receivers=origGetReceivers.apply(this,[]);receivers.forEach(receiver=>receiver._pc=this);return receivers;};}wrapPeerConnectionEvent$1(window,'track',e=>{e.receiver._pc=e.srcElement;return e;});window.RTCRtpReceiver.prototype.getStats=function getStats(){return this._pc.getStats(this.track);};}function shimRemoveStream$1(window){if(!window.RTCPeerConnection||'removeStream'in window.RTCPeerConnection.prototype){return;}window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){deprecated$1('removeStream','removeTrack');this.getSenders().forEach(sender=>{if(sender.track&&stream.getTracks().includes(sender.track)){this.removeTrack(sender);}});};}function shimRTCDataChannel$1(window){// rename DataChannel to RTCDataChannel (native fix in FF60):\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\nif(window.DataChannel&&!window.RTCDataChannel){window.RTCDataChannel=window.DataChannel;}}function shimAddTransceiver$1(window){// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n// Firefox ignores the init sendEncodings options passed to addTransceiver\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\nif(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origAddTransceiver=window.RTCPeerConnection.prototype.addTransceiver;if(origAddTransceiver){window.RTCPeerConnection.prototype.addTransceiver=function addTransceiver(){this.setParametersPromises=[];// WebIDL input coercion and validation\nvar sendEncodings=arguments[1]&&arguments[1].sendEncodings;if(sendEncodings===undefined){sendEncodings=[];}sendEncodings=[...sendEncodings];var shouldPerformCheck=sendEncodings.length>0;if(shouldPerformCheck){// If sendEncodings params are provided, validate grammar\nsendEncodings.forEach(encodingParam=>{if('rid'in encodingParam){var ridRegex=/^[a-z0-9]{0,16}$/i;if(!ridRegex.test(encodingParam.rid)){throw new TypeError('Invalid RID value provided.');}}if('scaleResolutionDownBy'in encodingParam){if(!(parseFloat(encodingParam.scaleResolutionDownBy)>=1.0)){throw new RangeError('scale_resolution_down_by must be >= 1.0');}}if('maxFramerate'in encodingParam){if(!(parseFloat(encodingParam.maxFramerate)>=0)){throw new RangeError('max_framerate must be >= 0.0');}}});}var transceiver=origAddTransceiver.apply(this,arguments);if(shouldPerformCheck){// Check if the init options were applied. If not we do this in an\n// asynchronous way and save the promise reference in a global object.\n// This is an ugly hack, but at the same time is way more robust than\n// checking the sender parameters before and after the createOffer\n// Also note that after the createoffer we are not 100% sure that\n// the params were asynchronously applied so we might miss the\n// opportunity to recreate offer.\nvar{sender}=transceiver;var params=sender.getParameters();if(!('encodings'in params)||// Avoid being fooled by patched getParameters() below.\nparams.encodings.length===1&&Object.keys(params.encodings[0]).length===0){params.encodings=sendEncodings;sender.sendEncodings=sendEncodings;this.setParametersPromises.push(sender.setParameters(params).then(()=>{delete sender.sendEncodings;}).catch(()=>{delete sender.sendEncodings;}));}}return transceiver;};}}function shimGetParameters$1(window){if(!(typeof window==='object'&&window.RTCRtpSender)){return;}var origGetParameters=window.RTCRtpSender.prototype.getParameters;if(origGetParameters){window.RTCRtpSender.prototype.getParameters=function getParameters(){var params=origGetParameters.apply(this,arguments);if(!('encodings'in params)){params.encodings=[].concat(this.sendEncodings||[{}]);}return params;};}}function shimCreateOffer$1(window){// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n// Firefox ignores the init sendEncodings options passed to addTransceiver\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\nif(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function createOffer(){if(this.setParametersPromises&&this.setParametersPromises.length){return Promise.all(this.setParametersPromises).then(()=>{return origCreateOffer.apply(this,arguments);}).finally(()=>{this.setParametersPromises=[];});}return origCreateOffer.apply(this,arguments);};}function shimCreateAnswer$1(window){// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n// Firefox ignores the init sendEncodings options passed to addTransceiver\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\nif(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origCreateAnswer=window.RTCPeerConnection.prototype.createAnswer;window.RTCPeerConnection.prototype.createAnswer=function createAnswer(){if(this.setParametersPromises&&this.setParametersPromises.length){return Promise.all(this.setParametersPromises).then(()=>{return origCreateAnswer.apply(this,arguments);}).finally(()=>{this.setParametersPromises=[];});}return origCreateAnswer.apply(this,arguments);};}var firefoxShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimOnTrack:shimOnTrack$2,shimPeerConnection:shimPeerConnection$2,shimSenderGetStats:shimSenderGetStats$1,shimReceiverGetStats:shimReceiverGetStats$1,shimRemoveStream:shimRemoveStream$1,shimRTCDataChannel:shimRTCDataChannel$1,shimAddTransceiver:shimAddTransceiver$1,shimGetParameters:shimGetParameters$1,shimCreateOffer:shimCreateOffer$1,shimCreateAnswer:shimCreateAnswer$1,shimGetUserMedia:shimGetUserMedia$1$1,shimGetDisplayMedia:shimGetDisplayMedia$2});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimLocalStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getLocalStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){if(!this._localStreams){this._localStreams=[];}return this._localStreams;};}if(!('addStream'in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function addStream(stream){if(!this._localStreams){this._localStreams=[];}if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}// Try to emulate Chrome's behaviour of adding in audio-video order.\n// Safari orders by track id.\nstream.getAudioTracks().forEach(track=>_addTrack.call(this,track,stream));stream.getVideoTracks().forEach(track=>_addTrack.call(this,track,stream));};window.RTCPeerConnection.prototype.addTrack=function addTrack(track){for(var _len2=arguments.length,streams=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){streams[_key2-1]=arguments[_key2];}if(streams){streams.forEach(stream=>{if(!this._localStreams){this._localStreams=[stream];}else if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}});}return _addTrack.apply(this,arguments);};}if(!('removeStream'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){if(!this._localStreams){this._localStreams=[];}var index=this._localStreams.indexOf(stream);if(index===-1){return;}this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach(sender=>{if(tracks.includes(sender.track)){this.removeTrack(sender);}});};}}function shimRemoteStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getRemoteStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getRemoteStreams=function getRemoteStreams(){return this._remoteStreams?this._remoteStreams:[];};}if(!('onaddstream'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'onaddstream',{get(){return this._onaddstream;},set(f){if(this._onaddstream){this.removeEventListener('addstream',this._onaddstream);this.removeEventListener('track',this._onaddstreampoly);}this.addEventListener('addstream',this._onaddstream=f);this.addEventListener('track',this._onaddstreampoly=e=>{e.streams.forEach(stream=>{if(!this._remoteStreams){this._remoteStreams=[];}if(this._remoteStreams.includes(stream)){return;}this._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;this.dispatchEvent(event);});});}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){var pc=this;if(!this._onaddstreampoly){this.addEventListener('track',this._onaddstreampoly=function(e){e.streams.forEach(stream=>{if(!pc._remoteStreams){pc._remoteStreams=[];}if(pc._remoteStreams.indexOf(stream)>=0){return;}pc._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;pc.dispatchEvent(event);});});}return origSetRemoteDescription.apply(pc,arguments);};}}function shimCallbacksAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}var prototype=window.RTCPeerConnection.prototype;var origCreateOffer=prototype.createOffer;var origCreateAnswer=prototype.createAnswer;var setLocalDescription=prototype.setLocalDescription;var setRemoteDescription=prototype.setRemoteDescription;var addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function createOffer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateOffer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.createAnswer=function createAnswer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateAnswer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};var withCallback=function withCallback(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setLocalDescription=withCallback;withCallback=function withCallback(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setRemoteDescription=withCallback;withCallback=function withCallback(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.addIceCandidate=withCallback;}function shimGetUserMedia$3(window){var navigator=window&&window.navigator;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){// shim not needed in Safari 12.1\nvar mediaDevices=navigator.mediaDevices;var _getUserMedia=mediaDevices.getUserMedia.bind(mediaDevices);navigator.mediaDevices.getUserMedia=constraints=>{return _getUserMedia(shimConstraints$1(constraints));};}if(!navigator.getUserMedia&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){navigator.getUserMedia=function getUserMedia(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb);}.bind(navigator);}}function shimConstraints$1(constraints){if(constraints&&constraints.video!==undefined){return Object.assign({},constraints,{video:compactObject$1(constraints.video)});}return constraints;}function shimRTCIceServerUrls$1(window){if(!window.RTCPeerConnection){return;}// migrate from non-spec RTCIceServer.url to RTCIceServer.urls\nvar OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function RTCPeerConnection(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){var newIceServers=[];for(var i=0;itransceiver.receiver.track.kind==='audio');if(offerOptions.offerToReceiveAudio===false&&audioTransceiver){if(audioTransceiver.direction==='sendrecv'){if(audioTransceiver.setDirection){audioTransceiver.setDirection('sendonly');}else {audioTransceiver.direction='sendonly';}}else if(audioTransceiver.direction==='recvonly'){if(audioTransceiver.setDirection){audioTransceiver.setDirection('inactive');}else {audioTransceiver.direction='inactive';}}}else if(offerOptions.offerToReceiveAudio===true&&!audioTransceiver){this.addTransceiver('audio',{direction:'recvonly'});}if(typeof offerOptions.offerToReceiveVideo!=='undefined'){// support bit values\nofferOptions.offerToReceiveVideo=!!offerOptions.offerToReceiveVideo;}var videoTransceiver=this.getTransceivers().find(transceiver=>transceiver.receiver.track.kind==='video');if(offerOptions.offerToReceiveVideo===false&&videoTransceiver){if(videoTransceiver.direction==='sendrecv'){if(videoTransceiver.setDirection){videoTransceiver.setDirection('sendonly');}else {videoTransceiver.direction='sendonly';}}else if(videoTransceiver.direction==='recvonly'){if(videoTransceiver.setDirection){videoTransceiver.setDirection('inactive');}else {videoTransceiver.direction='inactive';}}}else if(offerOptions.offerToReceiveVideo===true&&!videoTransceiver){this.addTransceiver('video',{direction:'recvonly'});}}return origCreateOffer.apply(this,arguments);};}function shimAudioContext$1(window){if(typeof window!=='object'||window.AudioContext){return;}window.AudioContext=window.webkitAudioContext;}var safariShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimLocalStreamsAPI:shimLocalStreamsAPI$1,shimRemoteStreamsAPI:shimRemoteStreamsAPI$1,shimCallbacksAPI:shimCallbacksAPI$1,shimGetUserMedia:shimGetUserMedia$3,shimConstraints:shimConstraints$1,shimRTCIceServerUrls:shimRTCIceServerUrls$1,shimTrackEventTransceiver:shimTrackEventTransceiver$1,shimCreateOfferLegacy:shimCreateOfferLegacy$1,shimAudioContext:shimAudioContext$1});var sdp$1$1={exports:{}};/* eslint-env node */(function(module){// SDP helpers.\nvar SDPUtils={};// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier=function(){return Math.random().toString(36).substr(2,10);};// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName=SDPUtils.generateIdentifier();// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines=function(blob){return blob.trim().split('\\n').map(line=>line.trim());};// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections=function(blob){var parts=blob.split('\\nm=');return parts.map((part,index)=>(index>0?'m='+part:part).trim()+'\\r\\n');};// Returns the session description.\nSDPUtils.getDescription=function(blob){var sections=SDPUtils.splitSections(blob);return sections&§ions[0];};// Returns the individual media sections.\nSDPUtils.getMediaSections=function(blob){var sections=SDPUtils.splitSections(blob);sections.shift();return sections;};// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter(line=>line.indexOf(prefix)===0);};// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate=function(line){var parts;// Parse both variants.\nif(line.indexOf('a=candidate:')===0){parts=line.substring(12).split(' ');}else {parts=line.substring(10).split(' ');}var candidate={foundation:parts[0],component:{1:'rtp',2:'rtcp'}[parts[1]]||parts[1],protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],address:parts[4],// address is an alias for ip.\nport:parseInt(parts[5],10),// skip parts[6] == 'typ'\ntype:parts[7]};for(var i=8;i0?parts[0].split('/')[1]:'sendrecv',uri:parts[1]};};// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap=function(headerExtension){return 'a=extmap:'+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&&headerExtension.direction!=='sendrecv'?'/'+headerExtension.direction:'')+' '+headerExtension.uri+'\\r\\n';};// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp=function(line){var parsed={};var kv;var parts=line.substr(line.indexOf(' ')+1).split(';');for(var j=0;j{if(codec.parameters[param]!==undefined){params.push(param+'='+codec.parameters[param]);}else {params.push(param);}});line+='a=fmtp:'+pt+' '+params.join(';')+'\\r\\n';}return line;};// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb=function(line){var parts=line.substr(line.indexOf(' ')+1).split(' ');return {type:parts.shift(),parameter:parts.join(' ')};};// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb=function(codec){var lines='';var pt=codec.payloadType;if(codec.preferredPayloadType!==undefined){pt=codec.preferredPayloadType;}if(codec.rtcpFeedback&&codec.rtcpFeedback.length){// FIXME: special handling for trr-int?\ncodec.rtcpFeedback.forEach(fb=>{lines+='a=rtcp-fb:'+pt+' '+fb.type+(fb.parameter&&fb.parameter.length?' '+fb.parameter:'')+'\\r\\n';});}return lines;};// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia=function(line){var sp=line.indexOf(' ');var parts={ssrc:parseInt(line.substr(7,sp-7),10)};var colon=line.indexOf(':',sp);if(colon>-1){parts.attribute=line.substr(sp+1,colon-sp-1);parts.value=line.substr(colon+1);}else {parts.attribute=line.substr(sp+1);}return parts;};// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup=function(line){var parts=line.substr(13).split(' ');return {semantics:parts.shift(),ssrcs:parts.map(ssrc=>parseInt(ssrc,10))};};// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid=function(mediaSection){var mid=SDPUtils.matchPrefix(mediaSection,'a=mid:')[0];if(mid){return mid.substr(6);}};// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint=function(line){var parts=line.substr(14).split(' ');return {algorithm:parts[0].toLowerCase(),// algorithm is case-sensitive in Edge.\nvalue:parts[1].toUpperCase()// the definition is upper-case in RFC 4572.\n};};// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters=function(mediaSection,sessionpart){var lines=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=fingerprint:');// Note: a=setup line is ignored since we use the 'auto' role in Edge.\nreturn {role:'auto',fingerprints:lines.map(SDPUtils.parseFingerprint)};};// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters=function(params,setupType){var sdp='a=setup:'+setupType+'\\r\\n';params.fingerprints.forEach(fp=>{sdp+='a=fingerprint:'+fp.algorithm+' '+fp.value+'\\r\\n';});return sdp;};// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine=function(line){var parts=line.substr(9).split(' ');return {tag:parseInt(parts[0],10),cryptoSuite:parts[1],keyParams:parts[2],sessionParams:parts.slice(3)};};SDPUtils.writeCryptoLine=function(parameters){return 'a=crypto:'+parameters.tag+' '+parameters.cryptoSuite+' '+(typeof parameters.keyParams==='object'?SDPUtils.writeCryptoKeyParams(parameters.keyParams):parameters.keyParams)+(parameters.sessionParams?' '+parameters.sessionParams.join(' '):'')+'\\r\\n';};// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams=function(keyParams){if(keyParams.indexOf('inline:')!==0){return null;}var parts=keyParams.substr(7).split('|');return {keyMethod:'inline',keySalt:parts[0],lifeTime:parts[1],mkiValue:parts[2]?parts[2].split(':')[0]:undefined,mkiLength:parts[2]?parts[2].split(':')[1]:undefined};};SDPUtils.writeCryptoKeyParams=function(keyParams){return keyParams.keyMethod+':'+keyParams.keySalt+(keyParams.lifeTime?'|'+keyParams.lifeTime:'')+(keyParams.mkiValue&&keyParams.mkiLength?'|'+keyParams.mkiValue+':'+keyParams.mkiLength:'');};// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters=function(mediaSection,sessionpart){var lines=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=crypto:');return lines.map(SDPUtils.parseCryptoLine);};// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters=function(mediaSection,sessionpart){var ufrag=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=ice-ufrag:')[0];var pwd=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=ice-pwd:')[0];if(!(ufrag&&pwd)){return null;}return {usernameFragment:ufrag.substr(12),password:pwd.substr(10)};};// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters=function(params){var sdp='a=ice-ufrag:'+params.usernameFragment+'\\r\\n'+'a=ice-pwd:'+params.password+'\\r\\n';if(params.iceLite){sdp+='a=ice-lite\\r\\n';}return sdp;};// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters=function(mediaSection){var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]};var lines=SDPUtils.splitLines(mediaSection);var mline=lines[0].split(' ');for(var i=3;i is considered.\ncodec.parameters=fmtps.length?SDPUtils.parseFmtp(fmtps[0]):{};codec.rtcpFeedback=SDPUtils.matchPrefix(mediaSection,'a=rtcp-fb:'+pt+' ').map(SDPUtils.parseRtcpFb);description.codecs.push(codec);// parse FEC mechanisms from rtpmap lines.\nswitch(codec.name.toUpperCase()){case'RED':case'ULPFEC':description.fecMechanisms.push(codec.name.toUpperCase());break;}}}SDPUtils.matchPrefix(mediaSection,'a=extmap:').forEach(line=>{description.headerExtensions.push(SDPUtils.parseExtmap(line));});// FIXME: parse rtcp.\nreturn description;};// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription=function(kind,caps){var sdp='';// Build the mline.\nsdp+='m='+kind+' ';sdp+=caps.codecs.length>0?'9':'0';// reject if no codecs.\nsdp+=' UDP/TLS/RTP/SAVPF ';sdp+=caps.codecs.map(codec=>{if(codec.preferredPayloadType!==undefined){return codec.preferredPayloadType;}return codec.payloadType;}).join(' ')+'\\r\\n';sdp+='c=IN IP4 0.0.0.0\\r\\n';sdp+='a=rtcp:9 IN IP4 0.0.0.0\\r\\n';// Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\ncaps.codecs.forEach(codec=>{sdp+=SDPUtils.writeRtpMap(codec);sdp+=SDPUtils.writeFmtp(codec);sdp+=SDPUtils.writeRtcpFb(codec);});var maxptime=0;caps.codecs.forEach(codec=>{if(codec.maxptime>maxptime){maxptime=codec.maxptime;}});if(maxptime>0){sdp+='a=maxptime:'+maxptime+'\\r\\n';}if(caps.headerExtensions){caps.headerExtensions.forEach(extension=>{sdp+=SDPUtils.writeExtmap(extension);});}// FIXME: write fecMechanisms.\nreturn sdp;};// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters=function(mediaSection){var encodingParameters=[];var description=SDPUtils.parseRtpParameters(mediaSection);var hasRed=description.fecMechanisms.indexOf('RED')!==-1;var hasUlpfec=description.fecMechanisms.indexOf('ULPFEC')!==-1;// filter a=ssrc:... cname:, ignore PlanB-msid\nvar ssrcs=SDPUtils.matchPrefix(mediaSection,'a=ssrc:').map(line=>SDPUtils.parseSsrcMedia(line)).filter(parts=>parts.attribute==='cname');var primarySsrc=ssrcs.length>0&&ssrcs[0].ssrc;var secondarySsrc;var flows=SDPUtils.matchPrefix(mediaSection,'a=ssrc-group:FID').map(line=>{var parts=line.substr(17).split(' ');return parts.map(part=>parseInt(part,10));});if(flows.length>0&&flows[0].length>1&&flows[0][0]===primarySsrc){secondarySsrc=flows[0][1];}description.codecs.forEach(codec=>{if(codec.name.toUpperCase()==='RTX'&&codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10)};if(primarySsrc&&secondarySsrc){encParam.rtx={ssrc:secondarySsrc};}encodingParameters.push(encParam);if(hasRed){encParam=JSON.parse(JSON.stringify(encParam));encParam.fec={ssrc:primarySsrc,mechanism:hasUlpfec?'red+ulpfec':'red'};encodingParameters.push(encParam);}}});if(encodingParameters.length===0&&primarySsrc){encodingParameters.push({ssrc:primarySsrc});}// we support both b=AS and b=TIAS but interpret AS as TIAS.\nvar bandwidth=SDPUtils.matchPrefix(mediaSection,'b=');if(bandwidth.length){if(bandwidth[0].indexOf('b=TIAS:')===0){bandwidth=parseInt(bandwidth[0].substr(7),10);}else if(bandwidth[0].indexOf('b=AS:')===0){// use formula from JSEP to convert b=AS to TIAS value.\nbandwidth=parseInt(bandwidth[0].substr(5),10)*1000*0.95-50*40*8;}else {bandwidth=undefined;}encodingParameters.forEach(params=>{params.maxBitrate=bandwidth;});}return encodingParameters;};// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={};// Gets the first SSRC. Note that with RTX there might be multiple\n// SSRCs.\nvar remoteSsrc=SDPUtils.matchPrefix(mediaSection,'a=ssrc:').map(line=>SDPUtils.parseSsrcMedia(line)).filter(obj=>obj.attribute==='cname')[0];if(remoteSsrc){rtcpParameters.cname=remoteSsrc.value;rtcpParameters.ssrc=remoteSsrc.ssrc;}// Edge uses the compound attribute instead of reducedSize\n// compound is !reducedSize\nvar rsize=SDPUtils.matchPrefix(mediaSection,'a=rtcp-rsize');rtcpParameters.reducedSize=rsize.length>0;rtcpParameters.compound=rsize.length===0;// parses the rtcp-mux attrÑ–bute.\n// Note that Edge does not support unmuxed RTCP.\nvar mux=SDPUtils.matchPrefix(mediaSection,'a=rtcp-mux');rtcpParameters.mux=mux.length>0;return rtcpParameters;};SDPUtils.writeRtcpParameters=function(rtcpParameters){var sdp='';if(rtcpParameters.reducedSize){sdp+='a=rtcp-rsize\\r\\n';}if(rtcpParameters.mux){sdp+='a=rtcp-mux\\r\\n';}if(rtcpParameters.ssrc!==undefined&&rtcpParameters.cname){sdp+='a=ssrc:'+rtcpParameters.ssrc+' cname:'+rtcpParameters.cname+'\\r\\n';}return sdp;};// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid=function(mediaSection){var parts;var spec=SDPUtils.matchPrefix(mediaSection,'a=msid:');if(spec.length===1){parts=spec[0].substr(7).split(' ');return {stream:parts[0],track:parts[1]};}var planB=SDPUtils.matchPrefix(mediaSection,'a=ssrc:').map(line=>SDPUtils.parseSsrcMedia(line)).filter(msidParts=>msidParts.attribute==='msid');if(planB.length>0){parts=planB[0].value.split(' ');return {stream:parts[0],track:parts[1]};}};// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription=function(mediaSection){var mline=SDPUtils.parseMLine(mediaSection);var maxSizeLine=SDPUtils.matchPrefix(mediaSection,'a=max-message-size:');var maxMessageSize;if(maxSizeLine.length>0){maxMessageSize=parseInt(maxSizeLine[0].substr(19),10);}if(isNaN(maxMessageSize)){maxMessageSize=65536;}var sctpPort=SDPUtils.matchPrefix(mediaSection,'a=sctp-port:');if(sctpPort.length>0){return {port:parseInt(sctpPort[0].substr(12),10),protocol:mline.fmt,maxMessageSize};}var sctpMapLines=SDPUtils.matchPrefix(mediaSection,'a=sctpmap:');if(sctpMapLines.length>0){var parts=sctpMapLines[0].substr(10).split(' ');return {port:parseInt(parts[0],10),protocol:parts[1],maxMessageSize};}};// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription=function(media,sctp){var output=[];if(media.protocol!=='DTLS/SCTP'){output=['m='+media.kind+' 9 '+media.protocol+' '+sctp.protocol+'\\r\\n','c=IN IP4 0.0.0.0\\r\\n','a=sctp-port:'+sctp.port+'\\r\\n'];}else {output=['m='+media.kind+' 9 '+media.protocol+' '+sctp.port+'\\r\\n','c=IN IP4 0.0.0.0\\r\\n','a=sctpmap:'+sctp.port+' '+sctp.protocol+' 65535\\r\\n'];}if(sctp.maxMessageSize!==undefined){output.push('a=max-message-size:'+sctp.maxMessageSize+'\\r\\n');}return output.join('');};// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21);};// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate=function(sessId,sessVer,sessUser){var sessionId;var version=sessVer!==undefined?sessVer:2;if(sessId){sessionId=sessId;}else {sessionId=SDPUtils.generateSessionId();}var user=sessUser||'thisisadapterortc';// FIXME: sess-id should be an NTP timestamp.\nreturn 'v=0\\r\\n'+'o='+user+' '+sessionId+' '+version+' IN IP4 127.0.0.1\\r\\n'+'s=-\\r\\n'+'t=0 0\\r\\n';};// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection=function(mediaSection,sessionpart){// Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\nvar lines=SDPUtils.splitLines(mediaSection);for(var i=0;i{if(e.candidate){Object.defineProperty(e,'candidate',{value:new window.RTCIceCandidate(e.candidate),writable:'false'});}return e;});}function shimMaxMessageSize$1(window,browserDetails){if(!window.RTCPeerConnection){return;}if(!('sctp'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'sctp',{get(){return typeof this._sctp==='undefined'?null:this._sctp;}});}var sctpInDescription=function sctpInDescription(description){if(!description||!description.sdp){return false;}var sections=SDPUtils$1.splitSections(description.sdp);sections.shift();return sections.some(mediaSection=>{var mLine=SDPUtils$1.parseMLine(mediaSection);return mLine&&mLine.kind==='application'&&mLine.protocol.indexOf('SCTP')!==-1;});};var getRemoteFirefoxVersion=function getRemoteFirefoxVersion(description){// TODO: Is there a better solution for detecting Firefox?\nvar match=description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);if(match===null||match.length<2){return -1;}var version=parseInt(match[1],10);// Test for NaN (yes, this is ugly)\nreturn version!==version?-1:version;};var getCanSendMaxMessageSize=function getCanSendMaxMessageSize(remoteIsFirefox){// Every implementation we know can send at least 64 KiB.\n// Note: Although Chrome is technically able to send up to 256 KiB, the\n// data does not reach the other peer reliably.\n// See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\nvar canSendMaxMessageSize=65536;if(browserDetails.browser==='firefox'){if(browserDetails.version<57){if(remoteIsFirefox===-1){// FF < 57 will send in 16 KiB chunks using the deprecated PPID\n// fragmentation.\ncanSendMaxMessageSize=16384;}else {// However, other FF (and RAWRTC) can reassemble PPID-fragmented\n// messages. Thus, supporting ~2 GiB when sending.\ncanSendMaxMessageSize=2147483637;}}else if(browserDetails.version<60){// Currently, all FF >= 57 will reset the remote maximum message size\n// to the default value when a data channel is created at a later\n// stage. :(\n// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\ncanSendMaxMessageSize=browserDetails.version===57?65535:65536;}else {// FF >= 60 supports sending ~2 GiB\ncanSendMaxMessageSize=2147483637;}}return canSendMaxMessageSize;};var getMaxMessageSize=function getMaxMessageSize(description,remoteIsFirefox){// Note: 65536 bytes is the default value from the SDP spec. Also,\n// every implementation we know supports receiving 65536 bytes.\nvar maxMessageSize=65536;// FF 57 has a slightly incorrect default remote max message size, so\n// we need to adjust it here to avoid a failure when sending.\n// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\nif(browserDetails.browser==='firefox'&&browserDetails.version===57){maxMessageSize=65535;}var match=SDPUtils$1.matchPrefix(description.sdp,'a=max-message-size:');if(match.length>0){maxMessageSize=parseInt(match[0].substr(19),10);}else if(browserDetails.browser==='firefox'&&remoteIsFirefox!==-1){// If the maximum message size is not present in the remote SDP and\n// both local and remote are Firefox, the remote peer can receive\n// ~2 GiB.\nmaxMessageSize=2147483637;}return maxMessageSize;};var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){this._sctp=null;// Chrome decided to not expose .sctp in plan-b mode.\n// As usual, adapter.js has to do an 'ugly worakaround'\n// to cover up the mess.\nif(browserDetails.browser==='chrome'&&browserDetails.version>=76){var{sdpSemantics}=this.getConfiguration();if(sdpSemantics==='plan-b'){Object.defineProperty(this,'sctp',{get(){return typeof this._sctp==='undefined'?null:this._sctp;},enumerable:true,configurable:true});}}if(sctpInDescription(arguments[0])){// Check if the remote is FF.\nvar isFirefox=getRemoteFirefoxVersion(arguments[0]);// Get the maximum message size the local peer is capable of sending\nvar canSendMMS=getCanSendMaxMessageSize(isFirefox);// Get the maximum message size of the remote peer.\nvar remoteMMS=getMaxMessageSize(arguments[0],isFirefox);// Determine final maximum message size\nvar maxMessageSize;if(canSendMMS===0&&remoteMMS===0){maxMessageSize=Number.POSITIVE_INFINITY;}else if(canSendMMS===0||remoteMMS===0){maxMessageSize=Math.max(canSendMMS,remoteMMS);}else {maxMessageSize=Math.min(canSendMMS,remoteMMS);}// Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n// attribute.\nvar sctp={};Object.defineProperty(sctp,'maxMessageSize',{get(){return maxMessageSize;}});this._sctp=sctp;}return origSetRemoteDescription.apply(this,arguments);};}function shimSendThrowTypeError$1(window){if(!(window.RTCPeerConnection&&'createDataChannel'in window.RTCPeerConnection.prototype)){return;}// Note: Although Firefox >= 57 has a native implementation, the maximum\n// message size can be reset for all data channels at a later stage.\n// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\nfunction wrapDcSend(dc,pc){var origDataChannelSend=dc.send;dc.send=function send(){var data=arguments[0];var length=data.length||data.size||data.byteLength;if(dc.readyState==='open'&&pc.sctp&&length>pc.sctp.maxMessageSize){throw new TypeError('Message too large (can send a maximum of '+pc.sctp.maxMessageSize+' bytes)');}return origDataChannelSend.apply(dc,arguments);};}var origCreateDataChannel=window.RTCPeerConnection.prototype.createDataChannel;window.RTCPeerConnection.prototype.createDataChannel=function createDataChannel(){var dataChannel=origCreateDataChannel.apply(this,arguments);wrapDcSend(dataChannel,this);return dataChannel;};wrapPeerConnectionEvent$1(window,'datachannel',e=>{wrapDcSend(e.channel,e.target);return e;});}/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */function shimConnectionState$1(window){if(!window.RTCPeerConnection||'connectionState'in window.RTCPeerConnection.prototype){return;}var proto=window.RTCPeerConnection.prototype;Object.defineProperty(proto,'connectionState',{get(){return {completed:'connected',checking:'connecting'}[this.iceConnectionState]||this.iceConnectionState;},enumerable:true,configurable:true});Object.defineProperty(proto,'onconnectionstatechange',{get(){return this._onconnectionstatechange||null;},set(cb){if(this._onconnectionstatechange){this.removeEventListener('connectionstatechange',this._onconnectionstatechange);delete this._onconnectionstatechange;}if(cb){this.addEventListener('connectionstatechange',this._onconnectionstatechange=cb);}},enumerable:true,configurable:true});['setLocalDescription','setRemoteDescription'].forEach(method=>{var origMethod=proto[method];proto[method]=function(){if(!this._connectionstatechangepoly){this._connectionstatechangepoly=e=>{var pc=e.target;if(pc._lastConnectionState!==pc.connectionState){pc._lastConnectionState=pc.connectionState;var newEvent=new Event('connectionstatechange',e);pc.dispatchEvent(newEvent);}return e;};this.addEventListener('iceconnectionstatechange',this._connectionstatechangepoly);}return origMethod.apply(this,arguments);};});}function removeExtmapAllowMixed$1(window,browserDetails){/* remove a=extmap-allow-mixed for webrtc.org < M71 */if(!window.RTCPeerConnection){return;}if(browserDetails.browser==='chrome'&&browserDetails.version>=71){return;}if(browserDetails.browser==='safari'&&browserDetails.version>=605){return;}var nativeSRD=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(desc){if(desc&&desc.sdp&&desc.sdp.indexOf('\\na=extmap-allow-mixed')!==-1){var _sdp=desc.sdp.split('\\n').filter(line=>{return line.trim()!=='a=extmap-allow-mixed';}).join('\\n');// Safari enforces read-only-ness of RTCSessionDescription fields.\nif(window.RTCSessionDescription&&desc instanceof window.RTCSessionDescription){arguments[0]=new window.RTCSessionDescription({type:desc.type,sdp:_sdp});}else {desc.sdp=_sdp;}}return nativeSRD.apply(this,arguments);};}function shimAddIceCandidateNullOrEmpty$1(window,browserDetails){// Support for addIceCandidate(null or undefined)\n// as well as addIceCandidate({candidate: \"\", ...})\n// https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n// Note: must be called before other polyfills which change the signature.\nif(!(window.RTCPeerConnection&&window.RTCPeerConnection.prototype)){return;}var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;if(!nativeAddIceCandidate||nativeAddIceCandidate.length===0){return;}window.RTCPeerConnection.prototype.addIceCandidate=function addIceCandidate(){if(!arguments[0]){if(arguments[1]){arguments[1].apply(null);}return Promise.resolve();}// Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n// in older versions.\n// Native support for ignoring exists for Chrome M77+.\n// Safari ignores as well, exact version unknown but works in the same\n// version that also ignores addIceCandidate(null).\nif((browserDetails.browser==='chrome'&&browserDetails.version<78||browserDetails.browser==='firefox'&&browserDetails.version<68||browserDetails.browser==='safari')&&arguments[0]&&arguments[0].candidate===''){return Promise.resolve();}return nativeAddIceCandidate.apply(this,arguments);};}// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription$1(window,browserDetails){if(!(window.RTCPeerConnection&&window.RTCPeerConnection.prototype)){return;}var nativeSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;if(!nativeSetLocalDescription||nativeSetLocalDescription.length===0){return;}window.RTCPeerConnection.prototype.setLocalDescription=function setLocalDescription(){var desc=arguments[0]||{};if(typeof desc!=='object'||desc.type&&desc.sdp){return nativeSetLocalDescription.apply(this,arguments);}// The remaining steps should technically happen when SLD comes off the\n// RTCPeerConnection's operations chain (not ahead of going on it), but\n// this is too difficult to shim. Instead, this shim only covers the\n// common case where the operations chain is empty. This is imperfect, but\n// should cover many cases. Rationale: Even if we can't reduce the glare\n// window to zero on imperfect implementations, there's value in tapping\n// into the perfect negotiation pattern that several browsers support.\ndesc={type:desc.type,sdp:desc.sdp};if(!desc.type){switch(this.signalingState){case'stable':case'have-local-offer':case'have-remote-pranswer':desc.type='offer';break;default:desc.type='answer';break;}}if(desc.sdp||desc.type!=='offer'&&desc.type!=='answer'){return nativeSetLocalDescription.apply(this,[desc]);}var func=desc.type==='offer'?this.createOffer:this.createAnswer;return func.apply(this).then(d=>nativeSetLocalDescription.apply(this,[d]));};}var commonShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimRTCIceCandidate:shimRTCIceCandidate$1,shimMaxMessageSize:shimMaxMessageSize$1,shimSendThrowTypeError:shimSendThrowTypeError$1,shimConnectionState:shimConnectionState$1,removeExtmapAllowMixed:removeExtmapAllowMixed$1,shimAddIceCandidateNullOrEmpty:shimAddIceCandidateNullOrEmpty$1,shimParameterlessSetLocalDescription:shimParameterlessSetLocalDescription$1});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ // Shimming starts here.\nfunction adapterFactory$1(){var{window}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{shimChrome:true,shimFirefox:true,shimSafari:true};// Utils.\nvar logging=log$2;var browserDetails=detectBrowser$1(window);var adapter={browserDetails,commonShim: commonShim$1,extractVersion:extractVersion$1,disableLog:disableLog$1,disableWarnings:disableWarnings$1,// Expose sdp as a convenience. For production apps include directly.\nsdp: sdp$2};// Shim browser if found.\nswitch(browserDetails.browser){case'chrome':if(!chromeShim$1||!shimPeerConnection$1$1||!options.shimChrome){logging('Chrome shim is not included in this adapter release.');return adapter;}if(browserDetails.version===null){logging('Chrome shim can not determine version, not shimming.');return adapter;}logging('adapter.js shimming chrome.');// Export to the adapter global object visible in the browser.\nadapter.browserShim=chromeShim$1;// Must be called before shimPeerConnection.\nshimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLocalDescription$1(window);shimGetUserMedia$2$1(window,browserDetails);shimMediaStream$1(window);shimPeerConnection$1$1(window,browserDetails);shimOnTrack$1$1(window);shimAddTrackRemoveTrack$1(window,browserDetails);shimGetSendersWithDtmf$1(window);shimGetStats$1(window);shimSenderReceiverGetStats$1(window);fixNegotiationNeeded$1(window,browserDetails);shimRTCIceCandidate$1(window);shimConnectionState$1(window);shimMaxMessageSize$1(window,browserDetails);shimSendThrowTypeError$1(window);removeExtmapAllowMixed$1(window,browserDetails);break;case'firefox':if(!firefoxShim$1||!shimPeerConnection$2||!options.shimFirefox){logging('Firefox shim is not included in this adapter release.');return adapter;}logging('adapter.js shimming firefox.');// Export to the adapter global object visible in the browser.\nadapter.browserShim=firefoxShim$1;// Must be called before shimPeerConnection.\nshimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLocalDescription$1(window);shimGetUserMedia$1$1(window,browserDetails);shimPeerConnection$2(window,browserDetails);shimOnTrack$2(window);shimRemoveStream$1(window);shimSenderGetStats$1(window);shimReceiverGetStats$1(window);shimRTCDataChannel$1(window);shimAddTransceiver$1(window);shimGetParameters$1(window);shimCreateOffer$1(window);shimCreateAnswer$1(window);shimRTCIceCandidate$1(window);shimConnectionState$1(window);shimMaxMessageSize$1(window,browserDetails);shimSendThrowTypeError$1(window);break;case'safari':if(!safariShim$1||!options.shimSafari){logging('Safari shim is not included in this adapter release.');return adapter;}logging('adapter.js shimming safari.');// Export to the adapter global object visible in the browser.\nadapter.browserShim=safariShim$1;// Must be called before shimCallbackAPI.\nshimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLocalDescription$1(window);shimRTCIceServerUrls$1(window);shimCreateOfferLegacy$1(window);shimCallbacksAPI$1(window);shimLocalStreamsAPI$1(window);shimRemoteStreamsAPI$1(window);shimTrackEventTransceiver$1(window);shimGetUserMedia$3(window);shimAudioContext$1(window);shimRTCIceCandidate$1(window);shimMaxMessageSize$1(window,browserDetails);shimSendThrowTypeError$1(window);removeExtmapAllowMixed$1(window,browserDetails);break;default:logging('Unsupported browser!');break;}return adapter;}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */adapterFactory$1({window:typeof window==='undefined'?undefined:window});/**\n * Creates an RTCPeerConnection.\n *\n * @param configuration - Config to the RTCPeerConnection constructor.\n * @returns An RTCPeerConnection instance.\n */function createRTCPeerConnection(configuration){return new RTCPeerConnection(configuration);}/**\n * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.\n */var MediaStreamTrackKind;(function(MediaStreamTrackKind){MediaStreamTrackKind[\"Audio\"]=\"audio\";MediaStreamTrackKind[\"Video\"]=\"video\";})(MediaStreamTrackKind||(MediaStreamTrackKind={}));var PeerConnectionEvents;(function(PeerConnectionEvents){PeerConnectionEvents[\"IceGatheringStateChange\"]=\"icegatheringstatechange\";PeerConnectionEvents[\"IceCandidate\"]=\"icecandidate\";PeerConnectionEvents[\"IceCandidateError\"]=\"icecandidateerror\";PeerConnectionEvents[\"PeerConnectionStateChange\"]=\"peerconnectionstatechange\";PeerConnectionEvents[\"IceConnectionStateChange\"]=\"iceconnectionstatechange\";PeerConnectionEvents[\"CreateOfferOnSuccess\"]=\"createofferonsuccess\";PeerConnectionEvents[\"CreateAnswerOnSuccess\"]=\"createansweronsuccess\";PeerConnectionEvents[\"SetLocalDescriptionOnSuccess\"]=\"setlocaldescriptiononsuccess\";PeerConnectionEvents[\"SetRemoteDescriptionOnSuccess\"]=\"setremotedescriptiononsuccess\";})(PeerConnectionEvents||(PeerConnectionEvents={}));/**\n * Manages a single RTCPeerConnection with the server.\n */class PeerConnection extends EventEmitter$4{/**\n * Creates an instance of the RTCPeerConnection.\n *\n * @param configuration - Config to the RTCPeerConnection constructor.\n */constructor(configuration){super();logger$3.log('PeerConnection init');this.pc=createRTCPeerConnection(configuration);this.connectionStateHandler=new ConnectionStateHandler(()=>{return {connectionState:this.pc.connectionState,iceState:this.pc.iceConnectionState};});this.connectionStateHandler.on(ConnectionStateHandler.Events.PeerConnectionStateChanged,state=>{this.emit(PeerConnection.Events.PeerConnectionStateChange,state);});this.connectionStateHandler.on(ConnectionStateHandler.Events.IceConnectionStateChanged,state=>{this.emit(PeerConnection.Events.IceConnectionStateChange,state);});// Forward the connection state related events to connection state handler\n// eslint-disable-next-line jsdoc/require-jsdoc\nthis.pc.oniceconnectionstatechange=()=>this.connectionStateHandler.onIceConnectionStateChange();// eslint-disable-next-line jsdoc/require-jsdoc\nthis.pc.onconnectionstatechange=()=>this.connectionStateHandler.onPeerConnectionStateChange();// Subscribe to underlying PeerConnection events and emit them via the EventEmitter\n/* eslint-disable jsdoc/require-jsdoc */this.pc.onicegatheringstatechange=ev=>{this.emit(PeerConnection.Events.IceGatheringStateChange,ev);};/* eslint-disable jsdoc/require-jsdoc */this.pc.onicecandidate=ev=>{this.emit(PeerConnection.Events.IceCandidate,ev);};this.pc.onicecandidateerror=ev=>{this.emit(PeerConnection.Events.IceCandidateError,ev);};}/**\n * Get the underlying RTCPeerConnection.\n *\n * @returns The underlying RTCPeerConnection.\n */getUnderlyingRTCPeerConnection(){return this.pc;}/**\n * Gets the overall connection state of the underlying RTCPeerConnection.\n *\n * @returns The underlying connection's overall state.\n */getConnectionState(){return this.connectionStateHandler.getConnectionState();}/**\n * Gets the connection state of the underlying RTCPeerConnection.\n *\n * @returns The underlying RTCPeerConnection connection state.\n */getPeerConnectionState(){return this.connectionStateHandler.getPeerConnectionState();}/**\n * Gets the ICE connection state of the underlying RTCPeerConnection.\n *\n * @returns The underlying RTCPeerConnection ICE connection state.\n */getIceConnectionState(){return this.connectionStateHandler.getIceConnectionState();}/**\n * Adds a new media track to the set of tracks which will be transmitted to the other peer.\n *\n * @param track - A MediaStreamTrack object representing the media track to add to the peer connection.\n * @param streams - (Optional) One or more local MediaStream objects to which the track should be\n * added.\n * @returns The RTCRtpSender object which will be used to transmit the media data, or null if\n * there is no underlying track when a track is added.\n */addTrack(track){for(var _len3=arguments.length,streams=new Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++){streams[_key3-1]=arguments[_key3];}return this.pc.addTrack(track,...streams);}/**\n * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the\n * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender\n * and an RTCRtpReceiver associated with it.\n *\n * @param trackOrKind - A MediaStreamTrack to associate with the transceiver, or a string which is used\n * as the kind of the receiver's track, and by extension the RTCRtpReceiver itself.\n * @param init - Options that you may wish to specify when creating the new transceiver.\n * @returns - The created RTCRtpTransceiver object.\n */addTransceiver(trackOrKind,init){return this.pc.addTransceiver(trackOrKind,init);}/**\n * Tell the local end of the connection to stop sending media from the specified track, without\n * actually removing the corresponding RTCRtpSender from the list of senders as reported by\n * RTCPeerConnection.getSenders(). If the track is already stopped, or is not in the connection's\n * senders list, the method has no effect.\n *\n * If the connection has already been negotiated (signalingState is set to 'stable'), it is marked\n * as needing to be negotiated again; the remote peer won't experience the change until this\n * negotiation occurs. A negotiatedneeded event is sent to the RTCPeerConnection to let the local\n * end know this negotiation must occur.\n *\n * @param sender - An RTCRtpSender specifying the sender to remove from the connection.\n */removeTrack(sender){this.pc.removeTrack(sender);}/**\n * Creates a new data channel linked with the remote peer.\n *\n * @param label - A human-readable name for the channel. May not be longer than 65,535 bytes.\n * @param options - An object providing configuration options for the data channel.\n * @returns An RTCDataChannel object.\n */createDataChannel(label,options){return this.pc.createDataChannel(label,options);}/**\n * Creates an SDP answer to an offer received from a remote peer during the offer/answer\n * negotiation of a WebRTC connection.\n *\n * @param options - (Optional) An object which contains options which customize the answer; this\n * is based on the RTCAnswerOptions dictionary.\n * @returns A Promise whose fulfillment handler is called with an object conforming to the\n * RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the\n * other peer.\n */createAnswer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createAnswer(options).then(answer=>{this.emit(PeerConnection.Events.CreateAnswerOnSuccess,answer);return answer;});});}/**\n * Initiates the creation of an SDP offer for the purpose of starting a new WebRTC connection to a\n * remote peer.\n *\n * @param options - (Optional) An RTCOfferOptions dictionary providing options requested for the\n * offer.\n * @returns A Promise whose fulfillment handler will receive an object conforming to the\n * RTCSessionDescriptionInit dictionary which contains the SDP describing the generated offer.\n * That received offer should be delivered through the signaling server to a remote peer.\n */createOffer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createOffer(options).then(offer=>{this.emit(PeerConnection.Events.CreateOfferOnSuccess,offer);return offer;});});}/**\n * Changes the local description associated with the connection.\n *\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\n * configuration to be applied to the local end of the connection.\n * @returns A Promise which is fulfilled once the value of RTCPeerConnection.localDescription is\n * successfully changed or rejected if the change cannot be applied.\n */setLocalDescription(description){return __awaiter$2(this,void 0,void 0,function*(){var _a;// In Firefox, setLocalDescription will not throw an error if an m-line has no codecs, even\n// though it violates https://datatracker.ietf.org/doc/html/rfc8866. See\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1857612. So, we check the media lines here to\n// preemptively throw an error on Firefox.\nif(BrowserInfo$1.isFirefox()){(_a=description===null||description===void 0?void 0:description.sdp)===null||_a===void 0?void 0:_a.split(/(\\r\\n|\\r|\\n)/).filter(line=>line.startsWith('m')).forEach(mediaLine=>{if(mediaLine.trim().split(' ').length<4){throw new Error(\"Invalid media line \".concat(mediaLine,\", expected at least 4 fields\"));}});}return this.pc.setLocalDescription(description).then(()=>{if(description){this.emit(PeerConnection.Events.SetLocalDescriptionOnSuccess,description);}});});}/**\n * Sets the specified session description as the remote peer's current offer or answer.\n *\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\n * remote peer's current offer or answer.\n * @returns A Promise which is fulfilled once the value of the connection's remoteDescription is\n * successfully changed or rejected if the change cannot be applied (for example, if the\n * specified description is incompatible with one or both of the peers on the connection).\n */setRemoteDescription(description){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.setRemoteDescription(description).then(()=>{this.emit(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description);});});}/**\n * Closes the current peer connection.\n */close(){this.pc.close();}/**\n * Get the local description from this PeerConnection.\n *\n * @returns An RTCSessionDescription representing the local description, or null if none has been set.\n */getLocalDescription(){return this.pc.localDescription;}/**\n * Get the remote description from this PeerConnection.\n *\n * @returns An RTCSessionDescription representing the remote description, or null if none has been set.\n */getRemoteDescription(){return this.pc.remoteDescription;}/**\n * Returns an array of RTCRtpSender objects, each of which represents the RTP sender responsible\n * for transmitting one track's data. A sender object provides methods and properties for\n * examining and controlling the encoding and transmission of the track's data.\n *\n * @returns An array of RTCRtpSender objects, one for each track on the connection. The array is\n * empty if there are no RTP senders on the connection.\n */getSenders(){return this.pc.getSenders();}/**\n * Get the list of RTCRtpTransceiver objects being used to send and receive data on the\n * connection.\n *\n * @returns - An array of the RTCRtpTransceiver objects representing the transceivers handling\n * sending and receiving all media on the PeerConnection. The list is in the order in which the\n * transceivers were added to the connection.\n */getTransceivers(){return this.pc.getTransceivers();}/**\n * Get statistics about either the overall connection or about the specified MediaStreamTrack.\n *\n * @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,\n * statistics will be gathered for the entire underlying RTCPeerConnection.\n * @returns - A Promise which resolves with an RTCStatsReport object providing connection\n * statistics.\n */getStats(selector){return this.pc.getStats(selector);}/**\n * Returns a string that describes the connections' ICE gathering state.\n *\n * @returns - The ICE gathering state.\n */get iceGatheringState(){return this.pc.iceGatheringState;}/**\n * Returns the type of a connection that has been established.\n *\n * @returns The connection type which would be `ConnectionType`.\n */getCurrentConnectionType(){return __awaiter$2(this,void 0,void 0,function*(){var _a;// make sure this method only can be called when the ice connection is established;\nvar isIceConnected=this.pc.iceConnectionState==='connected'||this.pc.iceConnectionState==='completed';if(!isIceConnected){throw new Error('Ice connection is not established');}var succeededLocalCandidateIds=new Set();// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar localCandidateStatsReports=[];(yield this.pc.getStats()).forEach(report=>{var _a;// collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.\nif(report.type==='candidate-pair'&&((_a=report.state)===null||_a===void 0?void 0:_a.toLowerCase())==='succeeded'){succeededLocalCandidateIds.add(report.localCandidateId);}// collect all `local-candidate` stats.\nif(report.type==='local-candidate'){localCandidateStatsReports.push(report);}});// find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.\nvar localCandidate=localCandidateStatsReports.find(report=>succeededLocalCandidateIds.has(report.id));if(!localCandidate){return 'unknown';}if(localCandidate.relayProtocol){return \"TURN-\".concat(localCandidate.relayProtocol.toUpperCase());}return (_a=localCandidate.protocol)===null||_a===void 0?void 0:_a.toUpperCase();});}}PeerConnection.Events=PeerConnectionEvents;var commonjsGlobal$2=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$2={exports:{}};/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */(function(module){(function(global){// Top level module for the global, static logger instance.\nvar Logger={};// For those that are at home that are keeping score.\nLogger.VERSION=\"1.6.1\";// Function which handles all incoming log messages.\nvar logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\nvar contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.\nvar bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\nvar merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.\ninvoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.\nvar globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.\n(function(){// Shortcut for optimisers.\nvar L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!\nL.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\n// object with the supplied log messages and the second being a context object which contains a hash of stateful\n// parameters which the logging function can consume.\nLogger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\n// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\nLogger.setLevel=function(level){// Set the globalLogger's level.\nglobalLogger.setLevel(level);// Apply this level to all registered contextual loggers.\nfor(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level\nLogger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\n// default context and log handler.\nLogger.get=function(name){// All logger instances are cached so they can be configured ahead of use.\nreturn contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\n// write to the window's console object (if present); the optional options object can be used to customise the\n// formatter used to format each log message.\nLogger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.\nif(context.name){messages.unshift(\"[\"+context.name+\"]\");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\n// that don't offer a native console method.\nvar timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)\nvar invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.\nif(typeof console===\"undefined\"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.\nmessages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.\nif(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The\n// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\nLogger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\nLogger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.\nif(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$2);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift(\"[\".concat(context.name,\"] \"));}});var MediaFamily;(function(MediaFamily){MediaFamily[\"Audio\"]=\"AUDIO\";MediaFamily[\"Video\"]=\"VIDEO\";})(MediaFamily||(MediaFamily={}));var MediaContent;(function(MediaContent){MediaContent[\"Main\"]=\"MAIN\";MediaContent[\"Slides\"]=\"SLIDES\";})(MediaContent||(MediaContent={}));var Policy;(function(Policy){Policy[\"ActiveSpeaker\"]=\"active-speaker\";Policy[\"ReceiverSelected\"]=\"receiver-selected\";})(Policy||(Policy={}));var MediaType;(function(MediaType){MediaType[\"VideoMain\"]=\"VIDEO-MAIN\";MediaType[\"VideoSlides\"]=\"VIDEO-SLIDES\";MediaType[\"AudioMain\"]=\"AUDIO-MAIN\";MediaType[\"AudioSlides\"]=\"AUDIO-SLIDES\";})(MediaType||(MediaType={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===MediaFamily.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===MediaFamily.Video&&mediaContent===MediaContent.Main){return MediaType.VideoMain;}if(mediaFamily===MediaFamily.Video&&mediaContent===MediaContent.Slides){return MediaType.VideoSlides;}if(mediaFamily===MediaFamily.Audio&&mediaContent===MediaContent.Main){return MediaType.AudioMain;}return MediaType.AudioSlides;}function getMediaFamily(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?MediaFamily.Video:MediaFamily.Audio;}function getMediaContent(mediaType){return [MediaType.VideoMain,MediaType.AudioMain].includes(mediaType)?MediaContent.Main:MediaContent.Slides;}var truthyOrZero=value=>value===0||value;function arraysAreEqual(left,right,predicate){if(left.length!==right.length){return false;}for(var i=0;il.type===r.type&&l.value===r.value);}function areActiveSpeakerInfosEqual(left,right){return left.priority===right.priority&&left.crossPriorityDuplication===right.crossPriorityDuplication&&left.crossPolicyDuplication===right.crossPolicyDuplication&&left.preferLiveVideo===right.preferLiveVideo&&areNamedMediaGroupArraysEqual(left.namedMediaGroups,right.namedMediaGroups);}function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}var HomerMsgType;(function(HomerMsgType){HomerMsgType[\"Multistream\"]=\"multistream\";})(HomerMsgType||(HomerMsgType={}));class HomerMsg{constructor(msgType,payload){this.msgType=msgType;this.payload=payload;}static fromJson(data){if(!data.msgType||!data.payload){return null;}return new HomerMsg(data.msgType,data.payload);}}var JmpMsgType;(function(JmpMsgType){JmpMsgType[\"MediaRequest\"]=\"mediaRequest\";JmpMsgType[\"MediaRequestAck\"]=\"mediaRequestAck\";JmpMsgType[\"MediaRequestStatus\"]=\"mediaRequestStatus\";JmpMsgType[\"MediaRequestStatusAck\"]=\"mediaRequestStatusAck\";JmpMsgType[\"SourceAdvertisement\"]=\"sourceAdvertisement\";JmpMsgType[\"SourceAdvertisementAck\"]=\"sourceAdvertisementAck\";JmpMsgType[\"ActiveSpeakerNotification\"]=\"activeSpeakerNotification\";})(JmpMsgType||(JmpMsgType={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return \"JmpMsg(mediaFamily=\".concat(this.mediaFamily,\", mediaContent=\").concat(this.mediaContent,\", payload=\").concat(this.payload,\")\");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class MediaRequestMsg{constructor(seqNum,requests){this.seqNum=seqNum;this.requests=requests;}toString(){return \"JmpMediaMsg(seqNum=\".concat(this.seqNum,\", requests=[\").concat(this.requests,\"])\");}}function isValidMediaRequestMsg(msg){var maybeMediaRequestMsg=msg;return Boolean(maybeMediaRequestMsg.seqNum&&maybeMediaRequestMsg.requests);}class MediaRequestAckMsg{constructor(mediaRequestSeqNum){this.mediaRequestSeqNum=mediaRequestSeqNum;}toString(){return \"MediaRequestAckMsg(seqNum=\".concat(this.mediaRequestSeqNum,\")\");}}function isValidMediaRequestAckMsg(msg){var maybeMediaRequestAckMsg=msg;return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);}function isValidStreamId(obj){var maybeStreamId=obj;if(maybeStreamId.mid&&maybeStreamId.ssrc){return false;}return Boolean(maybeStreamId.mid)||Boolean(maybeStreamId.ssrc);}function compareStreamIds(id1,id2){var keys1=Object.keys(id1);var keys2=Object.keys(id2);if(keys1.length!==keys2.length){return false;}return keys1.every(key=>id1[key]===id2[key]);}function isValidStreamInfo(obj){var maybeStreamInfo=obj;return Boolean(maybeStreamInfo.id&&isValidStreamId(maybeStreamInfo.id)&&['no source','invalid source','live','avatar','bandwidth disabled'].includes(maybeStreamInfo.state));}class MediaRequestStatusMsg{constructor(seqNum,streamStates){this.seqNum=seqNum;this.streamStates=streamStates;}}function isValidMediaRequestStatusMsg(msg){var maybeMediaRequestStatusMsg=msg;return Boolean(maybeMediaRequestStatusMsg.seqNum)&&maybeMediaRequestStatusMsg.streamStates&&maybeMediaRequestStatusMsg.streamStates.every(streamInfo=>isValidStreamInfo(streamInfo));}function compareStreamStateArrays(streamStates1,streamStates2){var _a,_b;if(streamStates1.length!==streamStates2.length){return false;}for(var i=0;i4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.ids=ids;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}toString(){return \"Request(policy=\".concat(this.policy,\", info=\").concat(this.policySpecificInfo,\", ids=[\").concat(this.ids,\"], maxPayloadBitsPerSecond=[\").concat(this.maxPayloadBitsPerSecond,\"], codecInfos=[\").concat(this.codecInfos,\"])\");}}function arePolicySpecificInfosEqual(left,right){if(isValidActiveSpeakerInfo(left)){if(!isValidActiveSpeakerInfo(right)){return false;}return areActiveSpeakerInfosEqual(left,right);}if(isValidReceiverSelectedInfo(left)){if(!isValidReceiverSelectedInfo(right)){return false;}return areReceiverSelectedInfosEqual(left,right);}throw new Error('Invalid PolicySpecificInfo');}function areCodecInfoArraysEqual(left,right){return arraysAreEqual(left,right,areCodecInfosEqual);}function areStreamIdArraysEqual(left,right){return arraysAreEqual(left,right,compareStreamIds);}function areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areStreamIdArraysEqual(left.ids,right.ids)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}if(!areCodecInfoArraysEqual(left.codecInfos,right.codecInfos)){return false;}return true;}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents;(function(JmpSessionEvents){JmpSessionEvents[\"ActiveSpeaker\"]=\"active-speaker\";JmpSessionEvents[\"MediaRequestReceived\"]=\"media-request-received\";JmpSessionEvents[\"MediaRequestStatusReceived\"]=\"media-request-status-received\";JmpSessionEvents[\"SourceAdvertisementReceived\"]=\"source-advertisement-received\";})(JmpSessionEvents||(JmpSessionEvents={}));function areStreamRequestArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:200;var retransmitIntervalMs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:250;super();this.currMediaRequestSeqNum=1;this.currSourceAdvertisementSeqNum=1;this.currMediaRequestStatusSeqNum=1;this.txCallback=undefined;this.lastSentMediaRequest=undefined;this.lastSentMediaRequestAck=undefined;this.lastReceivedMediaRequest=undefined;this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.logger=Logger$1.get(\"JmpSession \".concat(this.mediaFamily,\"-\").concat(this.mediaContent));this.maxNumRetransmits=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;}getLogger(){return this.logger;}sendRequests(requests){var _a;var mediaRequestMsg=new MediaRequestMsg(this.currMediaRequestSeqNum,requests);if(!this.lastSentMediaRequest||!areStreamRequestArraysEqual(this.lastSentMediaRequest.msg.requests,requests)){this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info(\"Retransmitting previously sent MediaRequest...\");this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);},expiredJmpMsg=>{this.logger.warn(\"Retransmits for message expired: \".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}else {this.logger.info(\"Duplicate MediaRequest detected and will not be sent: \".concat(mediaRequestMsg));}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var _a;var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);if(!this.lastSentSourceAdvertisement||!compareSourceAdvertisementMsgs(this.lastSentSourceAdvertisement.msg,sourceAdvertisementMsg)){this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.cancel();this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info(\"Retransmitting previously sent SourceAdvertisement...\");this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);},expiredMsg=>{this.logger.warn(\"Retransmits for message expired: \",expiredMsg);});this.currSourceAdvertisementSeqNum++;}else {this.logger.info(\"Duplicate SourceAdvertisement detected and will not be sent: \",sourceAdvertisementMsg);}}sendMediaRequestStatus(streamStates){var _a,_b;var filteredStreamStates=streamStates.filter(streamState=>{var _a;return (_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.requests.some(req=>req.ids.find(streamId=>compareStreamIds(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!compareStreamStateArrays(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates)){this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info(\"Retransmitting previously sent MediaRequestStatus...\");this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);},expiredMsg=>{this.logger.warn(\"Retransmits for message expired: \",expiredMsg);});this.currMediaRequestStatusSeqNum++;}else {this.logger.info(\"Duplicate MediaRequestStatus detected and will not be sent: \",mediaRequestStatus);}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error(\"JmpMsg \".concat(JSON.stringify(jmpMsg),\" sent to incorrect JmpSession\"));return;}this.logger.debug(\"Received JmpMsg\",JSON.stringify(jmpMsg));var{payload}=jmpMsg;if(payload.msgType===JmpMsgType.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error(\"Received invalid MediaRequest:\",JSON.stringify(mediaRequestMsg));return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error(\"Received invalid MediaRequest ACK:\",JSON.stringify(mediaRequestAckMsg));return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info(\"Received invalid Active Speaker Notification:\",JSON.stringify(activeSpeakerNotification));return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error(\"Received invalid SourceAdvertisementMsg:\",JSON.stringify(sourceAdvertisement));return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error(\"Received invalid SourceAdvertisementAckMsg:\",JSON.stringify(sourceAdvertisementAck));return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error(\"Received invalid MediaRequestStatusMsg:\",JSON.stringify(mediaRequestStatus));return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error(\"Received invalid MediaRequestStatusAckMsg:\",JSON.stringify(mediaRequestStatusAck));return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error(\"Received unknown JmpMsg\");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a,_b,_c;this.logger.info(\"closing\");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMsg);(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,JSON.stringify(homerMsg));}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info(\"Received old MediaRequest, ignoring\");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info(\"Received duplicate MediaRequest, re-sending ACK\");this.sendJmpMsg(JmpMsgType.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn(\"Received duplicate MediaRequest, but there was no ACK previously sent\");}}else {this.logger.info(\"Received new MediaRequest, sending ACK\");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info(\"Received ACK for last sent MediaRequest\");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info(\"Received ACK for old MediaRequest\");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug(\"Received Active Speaker Notification:\",activeSpeakerNotification);this.emit(JmpSessionEvents.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$1={exports:{}};/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */(function(module){(function(global){// Top level module for the global, static logger instance.\nvar Logger={};// For those that are at home that are keeping score.\nLogger.VERSION=\"1.6.1\";// Function which handles all incoming log messages.\nvar logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\nvar contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.\nvar bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\nvar merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.\ninvoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.\nvar globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.\n(function(){// Shortcut for optimisers.\nvar L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!\nL.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\n// object with the supplied log messages and the second being a context object which contains a hash of stateful\n// parameters which the logging function can consume.\nLogger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\n// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\nLogger.setLevel=function(level){// Set the globalLogger's level.\nglobalLogger.setLevel(level);// Apply this level to all registered contextual loggers.\nfor(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level\nLogger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\n// default context and log handler.\nLogger.get=function(name){// All logger instances are cached so they can be configured ahead of use.\nreturn contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\n// write to the window's console object (if present); the optional options object can be used to customise the\n// formatter used to format each log message.\nLogger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.\nif(context.name){messages.unshift(\"[\"+context.name+\"]\");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\n// that don't offer a native console method.\nvar timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)\nvar invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.\nif(typeof console===\"undefined\"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.\nmessages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.\nif(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The\n// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\nLogger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\nLogger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.\nif(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1);})(logger$1);var Logger=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger=Logger.get(DEFAULT_LOGGER_NAME);logger.setLevel(Logger.DEBUG);function logErrorAndThrow(errorType,message){logger.error(message);throw new WcmeError(errorType,message);}function setLogHandler(logHandler){Logger.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}var MediaCodecMimeType;(function(MediaCodecMimeType){MediaCodecMimeType[\"H264\"]=\"video/H264\";MediaCodecMimeType[\"AV1\"]=\"video/AV1\";MediaCodecMimeType[\"OPUS\"]=\"audio/opus\";})(MediaCodecMimeType||(MediaCodecMimeType={}));var defaultMaxVideoEncodeFrameSize=8160;var defaultMaxVideoEncodeMbps=244800;var RecommendedOpusBitrates;(function(RecommendedOpusBitrates){RecommendedOpusBitrates[RecommendedOpusBitrates[\"NB\"]=12000]=\"NB\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"WB\"]=20000]=\"WB\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"FB\"]=40000]=\"FB\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"FB_MONO_MUSIC\"]=64000]=\"FB_MONO_MUSIC\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"FB_STEREO_MUSIC\"]=128000]=\"FB_STEREO_MUSIC\";})(RecommendedOpusBitrates||(RecommendedOpusBitrates={}));var maxFrameSizeToMaxBitrateMap=new Map([[60,99000],[240,199000],[576,300000],[920,640000],[1296,720000],[2304,880000],[3600,2500000],[8160,4000000]]);function areProfileLevelIdsCompatible(senderProfileLevelId,receiverProfileLevelId,levelAsymmetryAllowed){var senderProfile=Number.parseInt(\"0x\".concat(senderProfileLevelId),16);var recvProfile=Number.parseInt(\"0x\".concat(receiverProfileLevelId),16);var senderProfileIdc=senderProfile>>16;var recvProfileIdc=recvProfile>>16;var senderProfileIop=(senderProfile&0x00ff00)>>8;var recvProfileIop=(recvProfile&0x00ff00)>>8;var senderLevelIdc=senderProfile&0x0000ff;var recvLevelIdc=recvProfile&0x0000ff;var areProfileCompatible=senderProfileIdc===recvProfileIdc&&senderProfileIop===recvProfileIop||senderProfileIdc===0x42&&recvProfileIdc===0x42&&(senderProfileIop&0x40)===(recvProfileIop&0x40);var isLevelIdcCompatible=levelAsymmetryAllowed?true:senderLevelIdc<=recvLevelIdc;return areProfileCompatible&&isLevelIdcCompatible;}function areCodecsCompatible(senderCodec,receiverCodec){return Object.keys(receiverCodec).every(key=>{if(key==='clockRate'||key==='name'){return senderCodec[key]===receiverCodec[key];}if(key==='fmtParams'){var fmtpForSender=senderCodec[key];var fmtpForReceiver=receiverCodec[key];var levelAsymmetryAllowed=[...fmtpForSender.keys()].some(senderFmtpParamKey=>{return senderFmtpParamKey==='level-asymmetry-allowed'&&fmtpForReceiver.get(senderFmtpParamKey)==='1'&&fmtpForSender.get(senderFmtpParamKey)==='1';});return [...fmtpForSender.keys()].every(senderFmtpParamKey=>{if(fmtpForReceiver.get(senderFmtpParamKey)){if(senderFmtpParamKey==='profile-level-id'){return areProfileLevelIdsCompatible(fmtpForSender.get(senderFmtpParamKey),fmtpForReceiver.get(senderFmtpParamKey),levelAsymmetryAllowed);}}if(senderFmtpParamKey==='packetization-mode'){return fmtpForSender.get(senderFmtpParamKey)===fmtpForReceiver.get(senderFmtpParamKey);}return true;});}return true;});}function gcd(a,b){return b===0?a:gcd(b,a%b);}function getFrameHeightByMaxFs(sourceAspectRatio,requestedMaxFs){var _gcd=gcd(sourceAspectRatio[0],sourceAspectRatio[1]);var minNumberRatiosForWidth=sourceAspectRatio[0]/_gcd;var minNumberRatiosForHeight=sourceAspectRatio[1]/_gcd;return Math.floor(Math.sqrt(requestedMaxFs*16*16/(minNumberRatiosForWidth*minNumberRatiosForHeight)))*minNumberRatiosForHeight;}function getScaleDownRatio(sourceWidth,sourceHeight,maxFs,maxWidth,maxHeight){if(!sourceWidth||!sourceHeight||!maxFs){return undefined;}var scaleDownRatio=Math.max(sourceHeight/getFrameHeightByMaxFs([sourceWidth,sourceHeight],maxFs),1.0);if(maxWidth&&maxHeight){scaleDownRatio=Math.max(sourceWidth/maxWidth,sourceHeight/maxHeight,scaleDownRatio);}return scaleDownRatio;}function getRecommendedMaxBitrateForFrameSize(requestedMaxFs){if(requestedMaxFs<60){logErrorAndThrow(WcmeErrorType.GET_MAX_BITRATE_FAILED,\"Requested max video frame size cannot be less than 60.\");}var expectedHeight=[...maxFrameSizeToMaxBitrateMap.keys()].sort((a,b)=>b-a).find(h=>requestedMaxFs>=h);return maxFrameSizeToMaxBitrateMap.get(expectedHeight);}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */function __awaiter$1(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator[\"throw\"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var rtcstats={};var __awaiter=commonjsGlobal$1&&commonjsGlobal$1.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator[\"throw\"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});};var __generator=commonjsGlobal$1&&commonjsGlobal$1.__generator||function(thisArg,body){var _={label:0,sent:function sent(){if(t[0]&1)throw t[1];return t[1];},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),\"throw\":verb(1),\"return\":verb(2)},typeof Symbol===\"function\"&&(g[Symbol.iterator]=function(){return this;}),g;function verb(n){return function(v){return step([n,v]);};}function step(op){if(f)throw new TypeError(\"Generator is already executing.\");while(g&&(g=0,op[0]&&(_=0)),_){try{if(f=1,y&&(t=op[0]&2?y[\"return\"]:op[0]?y[\"throw\"]||((t=y[\"return\"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return {value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue;}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]timestamp){timestamp=report.timestamp;}});// Delete the timestamps on each item.\nObject.keys(updatedStats).forEach(function(id){var report=updatedStats[id];if(report.timestamp===timestamp){delete report.timestamp;}});updatedStats.timestamp=timestamp;return updatedStats;};/**\n * Format the stats report into an array.\n *\n * @param report - A WebRTC stats report.\n * @returns - An array of Stats Report items.\n */var formatStatsReport=function formatStatsReport(report){return Object.keys(report).filter(function(name){return name!=='timestamp';}).map(function(name){return JSON.stringify(report[name]);});};/**\n * Parametrize a single string event to contain type and an (empty) id.\n *\n * @param value - The value to parametrize.\n * @returns An event object.\n */var makeEvent=function makeEvent(value){return [JSON.stringify({value:value,type:'string',id:''})];};/**\n * Attach a Peer Connection to periodically get updated on events and stats.\n *\n * @param pc - Peer Connection in which we attach.\n * @param logger - Logging function to log events and stats.\n * @param intervalTime - Time between each `getStats` check.\n * @param statsPreProcessor - Optional function that modifies stats.\n */var rtcStats=function rtcStats(pc,logger,intervalTime,statsPreProcessor){if(statsPreProcessor===void 0){statsPreProcessor=function statsPreProcessor(){return Promise.resolve();};}var prev={};/**\n * Log stats or event data with additional tracking information.\n *\n * @param name - Name of the event to log.\n * @param payload - Log data pertaining to the event.\n * @param timestamp - Time the event happened in milliseconds.\n */var trace=function trace(name,payload,timestamp){logger({timestamp:timestamp?Math.round(timestamp):Date.now(),name:name,payload:payload});};var origPeerConnection=window.RTCPeerConnection;pc.addEventListener('icecandidate',function(e){if(e.candidate){trace('onicecandidate',makeEvent(JSON.stringify(e.candidate)));}});pc.addEventListener('icecandidateerror',function(event){var url=event.url,errorCode=event.errorCode,errorText=event.errorText;trace('onicecandidateerror',makeEvent(\"[\".concat(url,\"] \").concat(errorCode,\": \").concat(errorText)));});pc.addEventListener('track',function(e){trace('ontrack',makeEvent(\"\".concat(e.track.kind,\":\").concat(e.track.id,\" \").concat(e.streams.map(function(stream){return \"stream:\".concat(stream.id);}).join(' '))));});pc.addEventListener('signalingstatechange',function(){trace('onsignalingstatechange',makeEvent(pc.signalingState));});pc.addEventListener('iceconnectionstatechange',function(){trace('oniceconnectionstatechange',makeEvent(pc.iceConnectionState));});pc.addEventListener('icegatheringstatechange',function(){trace('onicegatheringstatechange',makeEvent(pc.iceGatheringState));});pc.addEventListener('connectionstatechange',function(){trace('onconnectionstatechange',makeEvent(pc.connectionState));});pc.addEventListener('negotiationneeded',function(){trace('onnegotiationneeded',makeEvent('negotiationneeded'));});pc.addEventListener('datachannel',function(event){trace('ondatachannel',makeEvent(\"\".concat(event.channel.id,\": \").concat(event.channel.label)));});['createDataChannel','close'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){trace(\"on\".concat(method),makeEvent(method));return nativeMethod.apply(this,arguments);};}});['addStream','removeStream'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var stream=arguments[0];var streamInfo=stream.getTracks().map(function(t){return \"\".concat(t.kind,\":\").concat(t.id);}).join(',');trace(\"on\".concat(method),makeEvent(\"\".concat(stream.id,\" \").concat(streamInfo)));return nativeMethod.apply(this,arguments);};}});['addTrack'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var track=arguments[0];var streams=[].slice.call(arguments,1);trace(\"on\".concat(method),makeEvent(\"\".concat(track.kind,\":\").concat(track.id,\" \").concat(streams.map(function(s){return \"stream:\".concat(s.id);}).join(';')||'-')));return nativeMethod.apply(this,arguments);};}});['removeTrack'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var track=arguments[0].track;trace(\"on\".concat(method),makeEvent(track?\"\".concat(track.kind,\":\").concat(track.id):'null'));return nativeMethod.apply(this,arguments);};}});['createOffer','createAnswer'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var opts;var args=arguments;if(arguments.length===1&&typeof arguments[0]==='object'){// eslint-disable-next-line prefer-destructuring\nopts=arguments[0];}else if(arguments.length===3&&typeof arguments[2]==='object'){// eslint-disable-next-line prefer-destructuring\nopts=arguments[2];}trace(\"on\".concat(method),makeEvent(opts||''));return nativeMethod.apply(this,opts?[opts]:undefined).then(function(description){trace(\"on\".concat(method,\"OnSuccess\"),makeEvent(description.sdp));if(args.length>0&&typeof args[0]==='function'){args[0].apply(null,[description]);return undefined;}return description;},function(err){trace(\"on\".concat(method,\"OnFailure\"),makeEvent(err.toString()));if(args.length>1&&typeof args[1]==='function'){args[1].apply(null,[err]);return;}throw err;});};}});['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var _this=this;var args=arguments;trace(\"on\".concat(method),makeEvent(method==='addIceCandidate'?arguments[0]:arguments[0].sdp));return nativeMethod.apply(this,[arguments[0]]).then(function(){var _a;trace(\"on\".concat(method,\"OnSuccess\"),makeEvent('success'));if(method.endsWith('Description')){if(!_this.transportEventsPreviouslyAdded){var senders=_this.getSenders();var _loop_1=function _loop_1(sender){if(sender.transport){sender.transport.addEventListener('statechange',function(){if(sender&&sender.transport){trace(\"ondtlsStateChange\",makeEvent(sender.transport.state));}});sender.transport.addEventListener('error',function(error){var errorEvent=error;trace(\"ondtlsError\",makeEvent(errorEvent.error.errorDetail));});if(sender.transport.iceTransport){sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',function(){var _a,_b,_c,_d,_e,_f;if(sender.transport&&sender.transport.iceTransport){var pair=sender.transport.iceTransport.getSelectedCandidatePair();var localCandidate=\"\".concat((_a=pair===null||pair===void 0?void 0:pair.local)===null||_a===void 0?void 0:_a.address,\":\").concat((_b=pair===null||pair===void 0?void 0:pair.local)===null||_b===void 0?void 0:_b.port,\"/\").concat((_c=pair===null||pair===void 0?void 0:pair.local)===null||_c===void 0?void 0:_c.protocol);var remoteCandidate=\"\".concat((_d=pair===null||pair===void 0?void 0:pair.remote)===null||_d===void 0?void 0:_d.address,\":\").concat((_e=pair===null||pair===void 0?void 0:pair.remote)===null||_e===void 0?void 0:_e.port,\"/\").concat((_f=pair===null||pair===void 0?void 0:pair.remote)===null||_f===void 0?void 0:_f.protocol);var pairString=\"local: \".concat(localCandidate,\", remote: \").concat(remoteCandidate);trace('onselectedCandidatePairChange',makeEvent(pairString));}});}_this.transportEventsPreviouslyAdded=true;if(pc.getConfiguration().bundlePolicy==='max-bundle'){return \"break\";}}};for(var _i=0,senders_1=senders;_i=2&&typeof args[1]==='function'){args[1].apply(null,[]);return undefined;}return undefined;},function(err){trace(\"on\".concat(method,\"OnFailure\"),makeEvent(err.toString()));if(args.length>=3&&typeof args[2]==='function'){args[2].apply(null,[err]);return undefined;}throw err;});};}});if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var origGetUserMedia_1=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);var gum=function gum(){trace('onnavigator.mediaDevices.getUserMedia',makeEvent(JSON.stringify(arguments[0])));return origGetUserMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getUserMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getUserMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getUserMedia=gum.bind(navigator.mediaDevices);}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var origGetDisplayMedia_1=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);var gdm=function gdm(){trace('onnavigator.mediaDevices.getDisplayMedia',makeEvent(JSON.stringify(arguments[0])));return origGetDisplayMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getDisplayMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getDisplayMedia=gdm.bind(navigator.mediaDevices);}var getStatsReport=function getStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,pc.getStats(null).then(function(res){// Convert from stats report to js Map in order to have values set in `statsPreProcessor`\nvar statsMap=new Map();res.forEach(function(stats,key){return statsMap.set(key,stats);});return statsPreProcessor(statsMap).then(function(){var now=map2obj(statsMap);var base=deepCopy$1(now);// our new prev\nvar compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\\\d+';var SDP_TOKEN$1=\"[!#$%&'*+\\\\-.^_`{|}~a-zA-Z0-9]+\";var ANY_NON_WS$1='\\\\S+';var SP$1='\\\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return \"b=\".concat(this.bandwidthType,\":\").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp(\"^(\".concat(_a$5$1.BW_TYPE_REGEX,\"):(\").concat(NUM$1,\")\"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return \"a=group:BUNDLE \".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp(\"^group:BUNDLE (\".concat(REST$1,\")\"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+=\"a=candidate:\".concat(this.foundation,\" \").concat(this.componentId,\" \").concat(this.transport,\" \").concat(this.priority,\" \").concat(this.connectionAddress,\" \").concat(this.port,\" typ \").concat(this.candidateType);if(this.relAddr){str+=\" raddr \".concat(this.relAddr);}if(this.relPort){str+=\" rport \".concat(this.relPort);}if(this.candidateExtensions){str+=\" \".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS=\"[a-zA-Z0-9+/]+\";CandidateLine$1.regex=new RegExp(\"^candidate:(\".concat(_a$4$1.ICE_CHARS,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(NUM$1,\") typ (\").concat(ANY_NON_WS$1,\")(?: raddr (\").concat(ANY_NON_WS$1,\"))?(?: rport (\").concat(NUM$1,\"))?(?: (\").concat(REST$1,\"))?\"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return \"c=\".concat(this.netType,\" \").concat(this.addrType,\" \").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp(\"^(\".concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\")\"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return \"a=content:\".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp(\"^content:(\".concat(REST$1,\")$\"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return \"a=\".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+=\"a=extmap:\".concat(this.id);if(this.direction){str+=\"/\".concat(this.direction);}str+=\" \".concat(this.uri);if(this.extensionAttributes){str+=\" \".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION=\"sendonly|recvonly|sendrecv|inactive\";ExtMapLine$1.regex=new RegExp(\"^extmap:(\".concat(NUM$1,\")(?:/(\").concat(_a$3$1.EXTMAP_DIRECTION,\"))? (\").concat(ANY_NON_WS$1,\")(?: (\").concat(REST$1,\"))?\"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return \"a=fingerprint:\".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp(\"^fingerprint:(\".concat(REST$1,\")\"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\\d+\\x20/,'');var fmtpObj=new Map();if(/^\\d+([,/-]\\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&¶m.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error(\"Fmtp params is invalid with \".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return \"\".concat(key,\"=\").concat(this.params.get(key));}return \"\".concat(key);}).join(';');return \"a=fmtp:\".concat(this.payloadType,\" \").concat(fmtParams);}}FmtpLine$1.regex=new RegExp(\"^fmtp:(\".concat(NUM$1,\") (\").concat(REST$1,\")\"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return \"a=ice-options:\".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp(\"^ice-options:(\".concat(REST$1,\")$\"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return \"a=ice-pwd:\".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp(\"^ice-pwd:(\".concat(ANY_NON_WS$1,\")$\"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return \"a=ice-ufrag:\".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp(\"^ice-ufrag:(\".concat(ANY_NON_WS$1,\")$\"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return \"a=max-message-size:\".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp(\"^max-message-size:(\".concat(NUM$1,\")\"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return \"m=\".concat(this.type,\" \").concat(this.port,\" \").concat(this.protocol,\" \").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp(\"^(\".concat(_a$2$2.MEDIA_TYPE,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(REST$1,\")\"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return \"a=mid:\".concat(this.mid);}}MidLine$1.regex=new RegExp(\"^mid:(\".concat(ANY_NON_WS$1,\")$\"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return \"o=\".concat(this.username,\" \").concat(this.sessionId,\" \").concat(this.sessionVersion,\" \").concat(this.netType,\" \").concat(this.addrType,\" \").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp(\"^(\".concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\")\"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+=\"a=rid:\".concat(this.id,\" \").concat(this.direction);if(this.params){str+=\" \".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID=\"[\\\\w-]+\";RidLine$1.RID_DIRECTION=\"\\\\bsend\\\\b|\\\\brecv\\\\b\";RidLine$1.regex=new RegExp(\"^rid:(\".concat(_a$1$2.RID_ID,\") (\").concat(_a$1$2.RID_DIRECTION,\")(?:\").concat(SP$1,\"(\").concat(REST$1,\"))?\"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return \"a=rtcp-mux\";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return \"a=rtcp-fb:\".concat(this.payloadType,\" \").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp(\"^rtcp-fb:(\".concat(NUM$1,\") (\").concat(REST$1,\")\"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+=\"a=rtpmap:\".concat(this.payloadType,\" \").concat(this.encodingName,\"/\").concat(this.clockRate);if(this.encodingParams){str+=\"/\".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\\\s/]+';RtpMapLine$1.regex=new RegExp(\"^rtpmap:(\".concat(NUM$1,\") (\").concat(_a$7.NON_SLASH_TOKEN,\")/(\").concat(_a$7.NON_SLASH_TOKEN,\")(?:/(\").concat(_a$7.NON_SLASH_TOKEN,\"))?\"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return \"a=sctp-port:\".concat(this.port);}}SctpPortLine$1.regex=new RegExp(\"^sctp-port:(\".concat(NUM$1,\")\"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return \"i=\".concat(this.info);}}SessionInformationLine$1.regex=new RegExp(\"(\".concat(REST$1,\")\"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return \"s=\".concat(this.name);}}SessionNameLine$1.regex=new RegExp(\"^(\".concat(REST$1,\")\"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return \"a=setup:\".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?\"~\".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+=\"send \".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=\" \";}}if(this.recvLayers.length){str+=\"recv \".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp(\"^simulcast:(send|recv) (\".concat(ANY_NON_WS$1,\")(?: (send|recv) (\").concat(ANY_NON_WS$1,\"))?\"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str=\"a=ssrc:\".concat(this.ssrcId,\" \").concat(this.attribute);if(this.attributeValue){str+=\":\".concat(this.attributeValue);}if(this.attributeData){str+=\" \".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp(\"^ssrc:(\".concat(NUM$1,\") (\").concat(SDP_TOKEN$1,\")(?::(\").concat(SDP_TOKEN$1,\")?(?: (\").concat(ANY_NON_WS$1,\"))?)?$\"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return \"a=ssrc-group:\".concat(this.semantics,\" \").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp(\"^ssrc-group:(SIM|FID|FEC) ((?:\".concat(NUM$1).concat(SP$1,\"*)+)\"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return \"t=\".concat(this.startTime,\" \").concat(this.stopTime);}}TimingLine$1.regex=new RegExp(\"^(\".concat(NUM$1,\") (\").concat(NUM$1,\")\"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return \"v=\".concat(this.version);}}VersionLine$1.regex=new RegExp(\"^(\".concat(NUM$1,\")$\"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return \"\".concat(this.value);}}UnknownLine$1.regex=new RegExp(\"(\".concat(REST$1,\")\"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error(\"Error: bundle group line not allowed in media description\");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>\"\".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error(\"Tried to extension with duplicate ID: an extension already exists with ID \".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error(\"Error: got line for unknown codec: \".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error(\"Extension with ID \".concat(id,\" already exists\"));}if(extId===0){throw new Error(\"Extension ID 0 is reserved\");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return \"\".concat(lines.map(l=>l.toSdpLine()).join('\\r\\n'),\"\\r\\n\");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error(\"Unhandled media type: \".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\\r\\n|\\r|\\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function retainCodecs(av,predicate){var filtered=false;av.codecs.forEach(codecInfo=>{if(!predicate(codecInfo)){av.removePt(codecInfo.pt);filtered=true;}});return filtered;}function retainCodecsByCodecName(av,allowedCodecNames){var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());return retainCodecs(av,codecInfo=>!!codecInfo.name&&allowedLowerCase.includes(codecInfo.name.toLowerCase()));}function retainCandidates(sdpOrMedia,predicate){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(predicate(candidate)){return true;}filtered=true;return false;});});return filtered;}function retainCandidatesByTransportType(sdpOrMedia,allowedTransportTypes){var allowedLowerCase=allowedTransportTypes.map(s=>s.toLowerCase());return retainCandidates(sdpOrMedia,candidate=>allowedLowerCase.includes(candidate.transport.toLowerCase()));}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var commonjsGlobal$4=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$2(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$2={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$4,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,\"a\",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p=\"\",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return \"NT\";case\"XP\":return \"XP\";case\"NT 5.0\":return \"2000\";case\"NT 5.1\":return \"XP\";case\"NT 5.2\":return \"2003\";case\"NT 6.0\":return \"Vista\";case\"NT 6.1\":return \"7\";case\"NT 6.2\":return \"8\";case\"NT 6.3\":return \"8.1\";case\"NT 10.0\":return \"10\";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return \"Leopard\";case 6:return \"Snow Leopard\";case 7:return \"Lion\";case 8:return \"Mountain Lion\";case 9:return \"Mavericks\";case 10:return \"Yosemite\";case 11:return \"El Capitan\";case 12:return \"Sierra\";case 13:return \"High Sierra\";case 14:return \"Mojave\";case 15:return \"Catalina\";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0;},e.getVersionPrecision=function(e){return e.split(\".\").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),function(e){return new Array(20-e.length).join(\"0\")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]1?i-1:0),a=1;a0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return \">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\\/|opios/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function describe(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\\sedg\\//i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:\"bot\",vendor:\"Google\"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r;}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t};}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"blackberry\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"};}},{test:function test(e){return \"bada\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"windows phone\"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return \"android\"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return \"android\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"macos\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"};}},{test:function test(e){return \"windows\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"linux\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"playstation 4\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return \"roku\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return \"microsoft edge\"===e.getBrowserName(!0);},describe:function describe(e){if(/\\sedg\\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5$2);var Bowser$2=/*@__PURE__*/getDefaultExportFromCjs$2(es5$2.exports);var BrowserName$2;(function(BrowserName){BrowserName[\"CHROME\"]=\"Chrome\";BrowserName[\"FIREFOX\"]=\"Firefox\";BrowserName[\"EDGE\"]=\"Microsoft Edge\";BrowserName[\"SAFARI\"]=\"Safari\";})(BrowserName$2||(BrowserName$2={}));var OSName$1;(function(OSName){OSName[\"WINDOWS\"]=\"Windows\";OSName[\"MAC\"]=\"macOS\";OSName[\"LINUX\"]=\"Linux\";})(OSName$1||(OSName$1={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$2.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$2.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$2.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$2.SAFARI;}static isWindows(){return this.browser.getOSName()===OSName$1.WINDOWS;}static isMac(){return this.browser.getOSName()===OSName$1.MAC;}static isLinux(){return this.browser.getOSName()===OSName$1.LINUX;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">=\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<=\".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"~\".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser$2.getParser(window.navigator.userAgent);var CapabilityState$2;(function(CapabilityState){CapabilityState[\"NOT_CAPABLE\"]=\"not capable\";CapabilityState[\"CAPABLE\"]=\"capable\";CapabilityState[\"UNKNOWN\"]=\"unknown\";})(CapabilityState$2||(CapabilityState$2={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return \"a=jmp:\".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return \"a=jmp-stream-id-mode:\".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line=\"a=jmp-source:\".concat(this.source);if(this.csi){line+=\" csi=\".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp(\"^jmp-source:(\".concat(ANY_NON_WS$1,\") (?:csi=(\").concat(ANY_NON_WS$1,\"))\"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.)(\\d{1,3}\\b)/g;var ipv6Regex=/(\\b[\\da-fA-F]{1,4}(:[\\da-fA-F]{1,4}){7}\\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,\"Named media groups can only be set for audio.\");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,\"Answer is missing a non-AV media description for MID \".concat(offerMediaDescription.mid,\".\"));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,\"Answer has no media description of type \".concat(offerMediaDescription.type,\", can't generate synthetic answer media description for MID \").concat(offerMediaDescription.mid,\".\"));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType.AudioMain);var videoMainMids=midMap.get(MediaType.VideoMain);var audioContentMids=midMap.get(MediaType.AudioSlides);var videoContentMids=midMap.get(MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoContentMids));}}}function filterRecvOnlyMediaDescriptions(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(media=>{if(media instanceof ApplicationMediaDescription$1||media instanceof AvMediaDescription$1&&media.direction!=='recvonly'){filteredMids.push(media.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentType(mediaDescription,mediaContent){if(mediaContent===MediaContent.Slides){mediaDescription.addLine(new ContentLine$1(['slides']));}}function injectJmpAttributes(mediaDescription,csi,streamSignalingMode){if(!mediaDescription.otherLines.find(line=>line instanceof JmpLine)){mediaDescription.addLine(new JmpLine(['v1']));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpSourceLine)){mediaDescription.addLine(new JmpSourceLine(mediaDescription.mid,csi.toString()));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mediaDescription.addLine(new JmpStreamIdModeLine(streamSignalingMode));}}function injectDummyCandidates(mediaDescription){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return \"\".concat(firstOctets,\"0\");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,\"\".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(options){this.streamIds=[];this.customCodecParameters=new Map();this.egressMungerOptions=options;}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecsByCodecName(mediaDescription,['h264','opus','rtx']);if(options.forceSoftwareEncoder){var isH264Cbp=codecInfo=>{var _a;if(((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())==='h264'){var profileLevelId=codecInfo.fmtParams.get('profile-level-id');return !!profileLevelId&&/^42[^0]/.test(profileLevelId);}return false;};if([...mediaDescription.codecs.values()].some(isH264Cbp)){retainCodecs(mediaDescription,codecInfo=>{var _a;return ((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())!=='h264'||isH264Cbp(codecInfo);});}else {logger.log(\"No H.264 CBP present in m-line with MID \".concat(mediaDescription.mid,\", so all H.264 codecs have been retained.\"));}}if(mediaDescription.codecs.size===0){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_MISSING_CODECS,\"No codecs present in m-line with MID \".concat(mediaDescription.mid,\" after filtering.\"));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,\"Expected \".concat(numStreams,\" RTX SSRC groups, got \").concat(rtxSsrcGroups.length,\".\"));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',\"\".concat(rtpSsrc,\"-cname\")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',\"\".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',\"\".concat(rtpSsrc,\"-cname\")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',\"\".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(!this.egressMungerOptions.doFullIce){injectDummyCandidates(mediaDescription);}if(mediaDescription.type==='video'){var ssrcGroup=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{mediaDescription.addLine(new SsrcLine$1(ssrc,'fmtp',\"* max-fs=\".concat(simulcastMaxFrameSizes[index])));});}}}mungeRemoteDescription(mediaDescription){if(retainCandidatesByTransportType(mediaDescription,['udp','tcp'])){logger.log(\"Some unsupported remote candidates have been removed from mid \".concat(mediaDescription.mid));}mediaDescription.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref2=>{var[param,value]=_ref2;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}var events$1={exports:{}};var R$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1=R$1&&typeof R$1.apply==='function'?R$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1;if(R$1&&typeof R$1.ownKeys==='function'){ReflectOwnKeys$1=R$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$3(){EventEmitter$3.init.call(this);}events$1.exports=EventEmitter$3;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x\nEventEmitter$3.EventEmitter=EventEmitter$3;EventEmitter$3.prototype._events=undefined;EventEmitter$3.prototype._eventsCount=0;EventEmitter$3.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners$1=10;function checkListener$1(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$3,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1=arg;}});EventEmitter$3.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$3.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1(that){if(that._maxListeners===undefined)return EventEmitter$3.defaultMaxListeners;return that._maxListeners;}EventEmitter$3.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1(this);};EventEmitter$3.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1(w);}}return target;}EventEmitter$3.prototype.addListener=function addListener(type,listener){return _addListener$1(this,type,listener,false);};EventEmitter$3.prototype.on=EventEmitter$3.prototype.addListener;EventEmitter$3.prototype.prependListener=function prependListener(type,listener){return _addListener$1(this,type,listener,true);};function onceWrapper$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$3.prototype.once=function once(type,listener){checkListener$1(listener);this.on(type,_onceWrap$1(this,type,listener));return this;};EventEmitter$3.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1(listener);this.prependListener(type,_onceWrap$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$3.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$3.prototype.off=EventEmitter$3.prototype.removeListener;EventEmitter$3.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1(evlistener):arrayClone$1(evlistener,evlistener.length);}EventEmitter$3.prototype.listeners=function listeners(type){return _listeners$1(this,type,true);};EventEmitter$3.prototype.rawListeners=function rawListeners(type){return _listeners$1(this,type,false);};EventEmitter$3.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1.call(emitter,type);}};EventEmitter$3.prototype.listenerCount=listenerCount$1;function listenerCount$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$3.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1(this._events):[];};function arrayClone$1(arr,n){var copy=new Array(n);for(var i=0;i{ci.fmtParams.set('x-google-start-bitrate','60000');});}reset(){this.ssrc=generateSsrc();}}class MidPredictor{constructor(){this.currentMid=0;this.midMap=new Map();}getNextMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push(\"\".concat(mid));this.midMap.set(mediaType,mids);return \"\".concat(mid);}allocateMidForDatachannel(){this.currentMid+=1;}reset(){this.midMap=new Map();this.currentMid=0;}getMidMap(){return this.midMap;}}var OveruseState;(function(OveruseState){OveruseState[OveruseState[\"NOT_OVERUSED\"]=0]=\"NOT_OVERUSED\";OveruseState[OveruseState[\"OVERUSED\"]=1]=\"OVERUSED\";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}var ReceiveSlotEvents;(function(ReceiveSlotEvents){ReceiveSlotEvents[\"MediaStarted\"]=\"media-started\";ReceiveSlotEvents[\"MediaStopped\"]=\"media-stopped\";ReceiveSlotEvents[\"MediaEnded\"]=\"media-ended\";ReceiveSlotEvents[\"SourceUpdate\"]=\"source-update\";})(ReceiveSlotEvents||(ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter$2{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleStreamMediaStateChange=this.handleStreamMediaStateChange.bind(this);this.handleStreamEnded=this.handleStreamEnded.bind(this);this._stream=new RemoteStream(new MediaStream([track]));this._sourceState=track.kind===MediaStreamTrackKind.Video?'no source':undefined;this._stream.on(RemoteStreamEventNames.MediaStateChange,this.handleStreamMediaStateChange);this._stream.on(StreamEventNames.Ended,this.handleStreamEnded);}handleStreamMediaStateChange(state){if(state===RemoteMediaState.Stopped){this.emit(ReceiveSlotEvents.MediaStopped);}else {this.emit(ReceiveSlotEvents.MediaStarted);}}handleStreamEnded(){this.emit(ReceiveSlotEvents.MediaEnded);}_replaceTrack(newTrack){this._stream.replaceTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.off(RemoteStreamEventNames.MediaStateChange,this.handleStreamMediaStateChange);this._stream.off(StreamEventNames.Ended,this.handleStreamEnded);}get id(){return this._idGetter();}get stream(){return this._stream.outputStream;}get currentRxCsi(){return this._currentRxCsi;}get sourceState(){return this._sourceState;}}ReceiveSlot.Events=ReceiveSlotEvents;function getCurrentTimestamp(){return performance.timeOrigin+performance.now();}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter$1(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}class Transceiver{constructor(rtcRtpTransceiver,mid){this.twccDisabled=false;this._rtcRtpTransceiver=rtcRtpTransceiver;this.mid=mid;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,munger){super(rtcRtpTransceiver,mid);this.metadata={isRequested:false,isActiveSpeaker:false};this.munger=munger;this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return this.munger.getReceiverId();},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot._replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.receiver.getStats();statsReport.forEach((stats,key)=>{if(stats.type==='inbound-rtp'){stats.mid=this.mid;stats.csi=this.receiveSlot.currentRxCsi;stats.sourceState=this.receiveSlot.sourceState;stats.calliopeMediaType=this.metadata.mediaType;stats.requestedBitrate=this.metadata.requestedBitrate;stats.requestedFrameSize=this.metadata.requestedFrameSize;stats.isRequested=this.metadata.isRequested;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestamp;stats.isActiveSpeaker=this.metadata.isActiveSpeaker;stats.lastActiveSpeakerUpdateTimestamp=this.metadata.lastActiveSpeakerUpdateTimestamp;Object.assign(stats,this.receiverId);}statsMap.set(key,stats);});return statsMap;});}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{twccDisabled:this.twccDisabled});}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get receiverId(){return this.munger.getReceiverId();}resetSdpMunger(){this.munger.reset();}handleRequested(streamRequest){var _a,_b;if(!this.metadata.isRequested){this.metadata.isRequested=true;this.metadata.lastRequestedUpdateTimestamp=getCurrentTimestamp();}this.metadata.requestedBitrate=streamRequest.maxPayloadBitsPerSecond;this.metadata.requestedFrameSize=(_b=(_a=streamRequest.codecInfos[0])===null||_a===void 0?void 0:_a.h264)===null||_b===void 0?void 0:_b.maxFs;}handleUnrequested(){if(this.metadata.isRequested){this.metadata.isRequested=false;this.metadata.lastRequestedUpdateTimestamp=getCurrentTimestamp();}this.metadata.requestedBitrate=undefined;this.metadata.requestedFrameSize=undefined;this.receiveSlot._updateSource('no source',undefined);}handleActiveSpeakerUpdate(value){if(this.metadata.isActiveSpeaker!==value){this.metadata.isActiveSpeaker=value;this.metadata.lastActiveSpeakerUpdateTimestamp=getCurrentTimestamp();}}}ReceiveOnlyTransceiver.rid='1';var events={exports:{}};var R=typeof Reflect==='object'?Reflect:null;var ReflectApply=R&&typeof R.apply==='function'?R.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys;if(R&&typeof R.ownKeys==='function'){ReflectOwnKeys=R.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1(){EventEmitter$1.init.call(this);}events.exports=EventEmitter$1;events.exports.once=once$1;// Backwards-compat with node 0.10.x\nEventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=undefined;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners=10;function checkListener(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners=arg;}});EventEmitter$1.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners(that){if(that._maxListeners===undefined)return EventEmitter$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners(this);};EventEmitter$1.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply(handler,this,args);}else {var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning(w);}}return target;}EventEmitter$1.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false);};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true);};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1.prototype.once=function once(type,listener){checkListener(listener);this.on(type,_onceWrap(this,type,listener));return this;};EventEmitter$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener(listener);this.prependListener(type,_onceWrap(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length);}EventEmitter$1.prototype.listeners=function listeners(type){return _listeners(this,type,true);};EventEmitter$1.prototype.rawListeners=function rawListeners(type){return _listeners(this,type,false);};EventEmitter$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount.call(emitter,type);}};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys(this._events):[];};function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */function initialParams(fn){return function(){for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}var callback=args.pop();return fn.call(this,args,callback);};}/* istanbul ignore file */var hasQueueMicrotask=typeof queueMicrotask==='function'&&queueMicrotask;var hasSetImmediate=typeof setImmediate==='function'&&setImmediate;var hasNextTick=typeof browser$1==='object'&&typeof browser$1.nextTick==='function';function fallback(fn){setTimeout(fn,0);}function wrap(defer){return function(fn){for(var _len6=arguments.length,args=new Array(_len6>1?_len6-1:0),_key6=1;_key6<_len6;_key6++){args[_key6-1]=arguments[_key6];}return defer(()=>fn(...args));};}var _defer;if(hasQueueMicrotask){_defer=queueMicrotask;}else if(hasSetImmediate){_defer=setImmediate;}else if(hasNextTick){_defer=browser$1.nextTick;}else {_defer=fallback;}var setImmediate$1=wrap(_defer);/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */function asyncify(func){if(isAsync(func)){return function(){for(var _len7=arguments.length,args=new Array(_len7),_key7=0;_key7<_len7;_key7++){args[_key7]=arguments[_key7];}var callback=args.pop();var promise=func.apply(this,args);return handlePromise(promise,callback);};}return initialParams(function(args,callback){var result;try{result=func.apply(this,args);}catch(e){return callback(e);}// if result is Promise object\nif(result&&typeof result.then==='function'){return handlePromise(result,callback);}else {callback(null,result);}});}function handlePromise(promise,callback){return promise.then(value=>{invokeCallback(callback,null,value);},err=>{invokeCallback(callback,err&&err.message?err:new Error(err));});}function invokeCallback(callback,error,value){try{callback(error,value);}catch(err){setImmediate$1(e=>{throw e;},err);}}function isAsync(fn){return fn[Symbol.toStringTag]==='AsyncFunction';}function isAsyncGenerator(fn){return fn[Symbol.toStringTag]==='AsyncGenerator';}function isAsyncIterable(obj){return typeof obj[Symbol.asyncIterator]==='function';}function wrapAsync(asyncFn){if(typeof asyncFn!=='function')throw new Error('expected a function');return isAsync(asyncFn)?asyncify(asyncFn):asyncFn;}// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify(asyncFn){var arity=arguments.length>1&&arguments[1]!==undefined?arguments[1]:asyncFn.length;if(!arity)throw new Error('arity is undefined');function awaitable(){for(var _len8=arguments.length,args=new Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}if(typeof args[arity-1]==='function'){return asyncFn.apply(this,args);}return new Promise((resolve,reject)=>{args[arity-1]=function(err){if(err)return reject(err);for(var _len9=arguments.length,cbArgs=new Array(_len9>1?_len9-1:0),_key9=1;_key9<_len9;_key9++){cbArgs[_key9-1]=arguments[_key9];}resolve(cbArgs.length>1?cbArgs:cbArgs[0]);};asyncFn.apply(this,args);});}return awaitable;}function _asyncMap(eachfn,arr,iteratee,callback){arr=arr||[];var results=[];var counter=0;var _iteratee=wrapAsync(iteratee);return eachfn(arr,(value,_,iterCb)=>{var index=counter++;_iteratee(value,(err,v)=>{results[index]=v;iterCb(err);});},err=>{callback(err,results);});}function isArrayLike(value){return value&&typeof value.length==='number'&&value.length>=0&&value.length%1===0;}// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nvar breakLoop={};function once(fn){function wrapper(){if(fn===null)return;var callFn=fn;fn=null;for(var _len10=arguments.length,args=new Array(_len10),_key10=0;_key10<_len10;_key10++){args[_key10]=arguments[_key10];}callFn.apply(this,args);}Object.assign(wrapper,fn);return wrapper;}function getIterator(coll){return coll[Symbol.iterator]&&coll[Symbol.iterator]();}function createArrayIterator(coll){var i=-1;var len=coll.length;return function next(){return ++i=limit||awaiting||done)return;//console.log('replenish awaiting')\nawaiting=true;generator.next().then(_ref3=>{var{value,done:iterDone}=_ref3;//console.log('got value', value)\nif(canceled||done)return;awaiting=false;if(iterDone){done=true;if(running<=0){//console.log('done nextCb')\ncallback(null);}return;}running++;iteratee(value,idx,iterateeCallback);idx++;replenish();}).catch(handleError);}function iterateeCallback(err,result){//console.log('iterateeCallback')\nrunning-=1;if(canceled)return;if(err)return handleError(err);if(err===false){done=true;canceled=true;return;}if(result===breakLoop||done&&running<=0){done=true;//console.log('done iterCb')\nreturn callback(null);}replenish();}function handleError(err){if(canceled)return;awaiting=false;done=true;callback(err);}replenish();}var eachOfLimit=limit=>{return (obj,iteratee,callback)=>{callback=once(callback);if(limit<=0){throw new RangeError('concurrency limit cannot be less than 1');}if(!obj){return callback(null);}if(isAsyncGenerator(obj)){return asyncEachOfLimit(obj,limit,iteratee,callback);}if(isAsyncIterable(obj)){return asyncEachOfLimit(obj[Symbol.asyncIterator](),limit,iteratee,callback);}var nextElem=createIterator(obj);var done=false;var canceled=false;var running=0;var looping=false;function iterateeCallback(err,value){if(canceled)return;running-=1;if(err){done=true;callback(err);}else if(err===false){done=true;canceled=true;}else if(value===breakLoop||done&&running<=0){done=true;return callback(null);}else if(!looping){replenish();}}function replenish(){looping=true;while(running {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n * console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * }).catch( err => {\n * console.error(err);\n * // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.forEachOf(validConfigFileMap, parseFile);\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * //Error handing\n * async () => {\n * try {\n * let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n * console.log(configs);\n * }\n * catch (err) {\n * console.log(err);\n * // JSON parse error exception\n * }\n * }\n *\n */function eachOf(coll,iteratee,callback){var eachOfImplementation=isArrayLike(coll)?eachOfArrayLike:eachOfGeneric;return eachOfImplementation(coll,wrapAsync(iteratee),callback);}var eachOf$1=awaitify(eachOf,3);/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callbacks\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array. The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.map(fileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.map(fileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.map(fileList, getFileSizeInBytes);\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.map(withMissingFileList, getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */function map(coll,iteratee,callback){return _asyncMap(eachOf$1,coll,iteratee,callback);}var map$1=awaitify(map,3);/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */function eachOfSeries(coll,iteratee,callback){return eachOfLimit$2(coll,1,iteratee,callback);}var eachOfSeries$1=awaitify(eachOfSeries,3);/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function mapSeries(coll,iteratee,callback){return _asyncMap(eachOfSeries$1,coll,iteratee,callback);}awaitify(mapSeries,3);// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nclass DLL{constructor(){this.head=this.tail=null;this.length=0;}removeLink(node){if(node.prev)node.prev.next=node.next;else this.head=node.next;if(node.next)node.next.prev=node.prev;else this.tail=node.prev;node.prev=node.next=null;this.length-=1;return node;}empty(){while(this.head){this.shift();}return this;}insertAfter(node,newNode){newNode.prev=node;newNode.next=node.next;if(node.next)node.next.prev=newNode;else this.tail=newNode;node.next=newNode;this.length+=1;}insertBefore(node,newNode){newNode.prev=node.prev;newNode.next=node;if(node.prev)node.prev.next=newNode;else this.head=newNode;node.prev=newNode;this.length+=1;}unshift(node){if(this.head)this.insertBefore(this.head,node);else setInitial(this,node);}push(node){if(this.tail)this.insertAfter(this.tail,node);else setInitial(this,node);}shift(){return this.head&&this.removeLink(this.head);}pop(){return this.tail&&this.removeLink(this.tail);}toArray(){return [...this];}*[Symbol.iterator](){var cur=this.head;while(cur){yield cur.data;cur=cur.next;}}remove(testFn){var curr=this.head;while(curr){var{next}=curr;if(testFn(curr)){this.removeLink(curr);}curr=next;}return this;}}function setInitial(dll,node){dll.length=1;dll.head=dll.tail=node;}function queue(worker,concurrency,payload){if(concurrency==null){concurrency=1;}else if(concurrency===0){throw new RangeError('Concurrency must not be zero');}var _worker=wrapAsync(worker);var numRunning=0;var workersList=[];var events={error:[],drain:[],saturated:[],unsaturated:[],empty:[]};function on(event,handler){events[event].push(handler);}function once(event,handler){var handleAndRemove=function handleAndRemove(){off(event,handleAndRemove);handler(...arguments);};events[event].push(handleAndRemove);}function off(event,handler){if(!event)return Object.keys(events).forEach(ev=>events[ev]=[]);if(!handler)return events[event]=[];events[event]=events[event].filter(ev=>ev!==handler);}function trigger(event){for(var _len12=arguments.length,args=new Array(_len12>1?_len12-1:0),_key12=1;_key12<_len12;_key12++){args[_key12-1]=arguments[_key12];}events[event].forEach(handler=>handler(...args));}var processingScheduled=false;function _insert(data,insertAtFront,rejectOnError,callback){if(callback!=null&&typeof callback!=='function'){throw new Error('task callback must be a function');}q.started=true;var res,rej;function promiseCallback(err){// we don't care about the error, let the global error handler\n// deal with it\nif(err)return rejectOnError?rej(err):res();for(var _len13=arguments.length,args=new Array(_len13>1?_len13-1:0),_key13=1;_key13<_len13;_key13++){args[_key13-1]=arguments[_key13];}if(args.length<=1)return res(args[0]);res(args);}var item=q._createTaskItem(data,rejectOnError?promiseCallback:callback||promiseCallback);if(insertAtFront){q._tasks.unshift(item);}else {q._tasks.push(item);}if(!processingScheduled){processingScheduled=true;setImmediate$1(()=>{processingScheduled=false;q.process();});}if(rejectOnError||!callback){return new Promise((resolve,reject)=>{res=resolve;rej=reject;});}}function _createCB(tasks){return function(err){numRunning-=1;for(var _len14=arguments.length,args=new Array(_len14>1?_len14-1:0),_key14=1;_key14<_len14;_key14++){args[_key14-1]=arguments[_key14];}for(var i=0,l=tasks.length;i0){workersList.splice(index,1);}task.callback(err,...args);if(err!=null){trigger('error',err,task.data);}}if(numRunning<=q.concurrency-q.buffer){trigger('unsaturated');}if(q.idle()){trigger('drain');}q.process();};}function _maybeDrain(data){if(data.length===0&&q.idle()){// call drain immediately if there are no tasks\nsetImmediate$1(()=>trigger('drain'));return true;}return false;}var eventMethod=name=>handler=>{if(!handler){return new Promise((resolve,reject)=>{once(name,(err,data)=>{if(err)return reject(err);resolve(data);});});}off(name);on(name,handler);};var isProcessing=false;var q={_tasks:new DLL(),_createTaskItem(data,callback){return {data,callback};},*[Symbol.iterator](){yield*q._tasks[Symbol.iterator]();},concurrency,payload,buffer:concurrency/4,started:false,paused:false,push(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,false,false,callback));}return _insert(data,false,false,callback);},pushAsync(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,false,true,callback));}return _insert(data,false,true,callback);},kill(){off();q._tasks.empty();},unshift(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,true,false,callback));}return _insert(data,true,false,callback);},unshiftAsync(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,true,true,callback));}return _insert(data,true,true,callback);},remove(testFn){q._tasks.remove(testFn);},process(){// Avoid trying to start too many processing operations. This can occur\n// when callbacks resolve synchronously (#1267).\nif(isProcessing){return;}isProcessing=true;while(!q.paused&&numRunning {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */function reduce(coll,memo,iteratee,callback){callback=once(callback);var _iteratee=wrapAsync(iteratee);return eachOfSeries$1(coll,(x,i,iterCb)=>{_iteratee(memo,x,(err,v)=>{memo=v;iterCb(err);});},err=>callback(err,memo));}awaitify(reduce,4);/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function mapLimit(coll,limit,iteratee,callback){return _asyncMap(eachOfLimit(limit),coll,iteratee,callback);}var mapLimit$1=awaitify(mapLimit,4);/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapLimit\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */function concatLimit(coll,limit,iteratee,callback){var _iteratee=wrapAsync(iteratee);return mapLimit$1(coll,limit,(val,iterCb)=>{_iteratee(val,function(err){if(err)return iterCb(err);for(var _len15=arguments.length,args=new Array(_len15>1?_len15-1:0),_key15=1;_key15<_len15;_key15++){args[_key15-1]=arguments[_key15];}return iterCb(err,args);});},(err,mapResults)=>{var result=[];for(var i=0;i {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * }).catch(err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.concat(directoryList, fs.readdir);\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * } catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.concat(withMissingDirectoryList, fs.readdir);\n * console.log(results);\n * } catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * }\n * }\n *\n */function concat(coll,iteratee,callback){return concatLimit$1(coll,Infinity,iteratee,callback);}awaitify(concat,3);/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapSeries\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */function concatSeries(coll,iteratee,callback){return concatLimit$1(coll,1,iteratee,callback);}awaitify(concatSeries,3);function _createTester(check,getResult){return (eachfn,arr,_iteratee,cb)=>{var testPassed=false;var testResult;var iteratee=wrapAsync(_iteratee);eachfn(arr,(value,_,callback)=>{iteratee(value,(err,result)=>{if(err||err===false)return callback(err);if(check(result)&&!testResult){testPassed=true;testResult=getResult(true,value);return callback(null,breakLoop);}callback();});},err=>{if(err)return cb(err);cb(null,testPassed?testResult:getResult(false));});};}/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }\n *);\n *\n * // Using Promises\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n * .then(result => {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the file in the list that exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function detect(coll,iteratee,callback){return _createTester(bool=>bool,(res,item)=>item)(eachOf$1,coll,iteratee,callback);}awaitify(detect,3);/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */function detectLimit(coll,limit,iteratee,callback){return _createTester(bool=>bool,(res,item)=>item)(eachOfLimit(limit),coll,iteratee,callback);}awaitify(detectLimit,4);/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */function detectSeries(coll,iteratee,callback){return _createTester(bool=>bool,(res,item)=>item)(eachOfLimit(1),coll,iteratee,callback);}awaitify(detectSeries,3);/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */function doWhilst(iteratee,test,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results;function next(err){if(err)return callback(err);if(err===false)return;for(var _len16=arguments.length,args=new Array(_len16>1?_len16-1:0),_key16=1;_key16<_len16;_key16++){args[_key16-1]=arguments[_key16];}results=args;_test(...args,check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return check(null,true);}awaitify(doWhilst,3);function _withoutIndex(iteratee){return (value,index,callback)=>iteratee(value,callback);}/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n *\n * // asynchronous function that deletes a file\n * const deleteFile = function(file, callback) {\n * fs.unlink(file, callback);\n * };\n *\n * // Using callbacks\n * async.each(fileList, deleteFile, function(err) {\n * if( err ) {\n * console.log(err);\n * } else {\n * console.log('All files have been deleted successfully');\n * }\n * });\n *\n * // Error Handling\n * async.each(withMissingFileList, deleteFile, function(err){\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using Promises\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * await async.each(files, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * await async.each(withMissingFileList, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * }\n * }\n *\n */function eachLimit(coll,iteratee,callback){return eachOf$1(coll,_withoutIndex(wrapAsync(iteratee)),callback);}awaitify(eachLimit,3);/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */function eachLimit$1(coll,limit,iteratee,callback){return eachOfLimit(limit)(coll,_withoutIndex(wrapAsync(iteratee)),callback);}var eachLimit$2=awaitify(eachLimit$1,4);/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */function eachSeries(coll,iteratee,callback){return eachLimit$2(coll,1,iteratee,callback);}var eachSeries$1=awaitify(eachSeries,3);/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop. If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n * if (cache[arg]) {\n * return callback(null, cache[arg]); // this would be synchronous!!\n * } else {\n * doSomeIO(arg, callback); // this IO would be asynchronous\n * }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */function ensureAsync(fn){if(isAsync(fn))return fn;return function(){for(var _len17=arguments.length,args=new Array(_len17),_key17=0;_key17<_len17;_key17++){args[_key17]=arguments[_key17];}var callback=args.pop();var sync=true;args.push(function(){for(var _len18=arguments.length,innerArgs=new Array(_len18),_key18=0;_key18<_len18;_key18++){innerArgs[_key18]=arguments[_key18];}if(sync){setImmediate$1(()=>callback(...innerArgs));}else {callback(...innerArgs);}});fn.apply(this,args);sync=false;};}/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.every(fileList, fileExists, function(err, result) {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * });\n *\n * async.every(withMissingFileList, fileExists, function(err, result) {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * });\n *\n * // Using Promises\n * async.every(fileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.every(withMissingFileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.every(fileList, fileExists);\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.every(withMissingFileList, fileExists);\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function every(coll,iteratee,callback){return _createTester(bool=>!bool,res=>!res)(eachOf$1,coll,iteratee,callback);}awaitify(every,3);/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function everyLimit(coll,limit,iteratee,callback){return _createTester(bool=>!bool,res=>!res)(eachOfLimit(limit),coll,iteratee,callback);}awaitify(everyLimit,4);/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function everySeries(coll,iteratee,callback){return _createTester(bool=>!bool,res=>!res)(eachOfSeries$1,coll,iteratee,callback);}awaitify(everySeries,3);function filterArray(eachfn,arr,iteratee,callback){var truthValues=new Array(arr.length);eachfn(arr,(x,index,iterCb)=>{iteratee(x,(err,v)=>{truthValues[index]=!!v;iterCb(err);});},err=>{if(err)return callback(err);var results=[];for(var i=0;i{iteratee(x,(err,v)=>{if(err)return iterCb(err);if(v){results.push({index,value:x});}iterCb(err);});},err=>{if(err)return callback(err);callback(null,results.sort((a,b)=>a.index-b.index).map(v=>v.value));});}function _filter(eachfn,coll,iteratee,callback){var filter=isArrayLike(coll)?filterArray:filterGeneric;return filter(eachfn,coll,wrapAsync(iteratee),callback);}/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.filter(files, fileExists, function(err, results) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * });\n *\n * // Using Promises\n * async.filter(files, fileExists)\n * .then(results => {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.filter(files, fileExists);\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function filter(coll,iteratee,callback){return _filter(eachOf$1,coll,iteratee,callback);}awaitify(filter,3);/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n */function filterLimit(coll,limit,iteratee,callback){return _filter(eachOfLimit(limit),coll,iteratee,callback);}awaitify(filterLimit,4);/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n * @returns {Promise} a promise, if no callback provided\n */function filterSeries(coll,iteratee,callback){return _filter(eachOfSeries$1,coll,iteratee,callback);}awaitify(filterSeries,3);/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @returns {Promise} a promise that rejects if an error occurs and an errback\n * is not passed\n * @example\n *\n * async.forever(\n * function(next) {\n * // next is suitable for passing to things that need a callback(err [, whatever]);\n * // it will result in this function being called again.\n * },\n * function(err) {\n * // if next is called with a value in its first parameter, it will appear\n * // in here as 'err', and execution will stop.\n * }\n * );\n */function forever(fn,errback){var done=onlyOnce(errback);var task=wrapAsync(ensureAsync(fn));function next(err){if(err)return done(err);if(err===false)return;task(next);}return next();}awaitify(forever,2);/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */function groupByLimit(coll,limit,iteratee,callback){var _iteratee=wrapAsync(iteratee);return mapLimit$1(coll,limit,(val,iterCb)=>{_iteratee(val,(err,key)=>{if(err)return iterCb(err);return iterCb(err,{key,val});});},(err,mapResults)=>{var result={};// from MDN, handle object having an `hasOwnProperty` prop\nvar{hasOwnProperty}=Object.prototype;for(var i=0;i{_iteratee(val,key,(err,result)=>{if(err)return next(err);newObj[key]=result;next(err);});},err=>callback(err,newObj));}awaitify(mapValuesLimit,4);if(hasNextTick){browser$1.nextTick;}else if(hasSetImmediate){setImmediate;}else;awaitify((eachfn,tasks,callback)=>{var results=isArrayLike(tasks)?[]:{};eachfn(tasks,(task,key,taskCb)=>{wrapAsync(task)(function(err){for(var _len19=arguments.length,result=new Array(_len19>1?_len19-1:0),_key19=1;_key19<_len19;_key19++){result[_key19-1]=arguments[_key19];}if(result.length<2){[result]=result;}results[key]=result;taskCb(err);});},err=>callback(err,results));},3);/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Iterable} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {number} payload - an integer that specifies how many items are\n * passed to the worker function at a time. only applies if this is a\n * [cargo]{@link module:ControlFlow.cargo} object\n * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n * a promise that rejects if an error occurs.\n * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n * a promise that rejects if an error occurs.\n * @property {Function} remove - remove items from the queue that match a test\n * function. The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a function that sets a callback that is\n * called when the number of running workers hits the `concurrency` limit, and\n * further tasks will be queued. If the callback is omitted, `q.saturated()`\n * returns a promise for the next occurrence.\n * @property {Function} unsaturated - a function that sets a callback that is\n * called when the number of running workers is less than the `concurrency` &\n * `buffer` limits, and further tasks will not be queued. If the callback is\n * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a function that sets a callback that is called\n * when the last item from the `queue` is given to a `worker`. If the callback\n * is omitted, `q.empty()` returns a promise for the next occurrence.\n * @property {Function} drain - a function that sets a callback that is called\n * when the last item from the `queue` has returned from the `worker`. If the\n * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n * @property {Function} error - a function that sets a callback that is called\n * when a task errors. Has the signature `function(error, task)`. If the\n * callback is omitted, `error()` returns a promise that rejects on the next\n * error.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n *\n * @example\n * const q = async.queue(worker, 2)\n * q.push(item1)\n * q.push(item2)\n * q.push(item3)\n * // queues are iterable, spread into an array to inspect\n * const items = [...q] // [item1, item2, item3]\n * // or use for of\n * for (let item of q) {\n * console.log(item)\n * }\n *\n * q.drain(() => {\n * console.log('all done')\n * })\n * // or\n * await q.drain()\n */ /**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n * console.log('hello ' + task.name);\n * callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain(function() {\n * console.log('all items have been processed');\n * });\n * // or await the end\n * await q.drain()\n *\n * // assign an error callback\n * q.error(function(err, task) {\n * console.error('task experienced an error');\n * });\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * // callback is optional\n * q.push({name: 'bar'});\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n * console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n * console.log('finished processing bar');\n * });\n */function queue$1(worker,concurrency){var _worker=wrapAsync(worker);return queue((items,cb)=>{_worker(items[0],cb);},concurrency,1);}/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.race([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ],\n * // main callback\n * function(err, result) {\n * // the result will be equal to 'two' as it finishes earlier\n * });\n */function race(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new TypeError('First argument to race must be an array of functions'));if(!tasks.length)return callback();for(var i=0,l=tasks.length;i{iteratee(value,(err,v)=>{cb(err,!v);});},callback);}/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.reject(fileList, fileExists, function(err, results) {\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * });\n *\n * // Using Promises\n * async.reject(fileList, fileExists)\n * .then( results => {\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.reject(fileList, fileExists);\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function reject$1(coll,iteratee,callback){return reject(eachOf$1,coll,iteratee,callback);}awaitify(reject$1,3);/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function rejectLimit(coll,limit,iteratee,callback){return reject(eachOfLimit(limit),coll,iteratee,callback);}awaitify(rejectLimit,4);/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function rejectSeries(coll,iteratee,callback){return reject(eachOfSeries$1,coll,iteratee,callback);}awaitify(rejectSeries,3);/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n *);\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n *);\n *\n * // Using Promises\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function some(coll,iteratee,callback){return _createTester(Boolean,res=>res)(eachOf$1,coll,iteratee,callback);}awaitify(some,3);/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function someLimit(coll,limit,iteratee,callback){return _createTester(Boolean,res=>res)(eachOfLimit(limit),coll,iteratee,callback);}awaitify(someLimit,4);/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function someSeries(coll,iteratee,callback){return _createTester(Boolean,res=>res)(eachOfSeries$1,coll,iteratee,callback);}awaitify(someSeries,3);/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback passed\n * @example\n *\n * // bigfile.txt is a file that is 251100 bytes in size\n * // mediumfile.txt is a file that is 11000 bytes in size\n * // smallfile.txt is a file that is 121 bytes in size\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) return callback(getFileSizeErr);\n * callback(null, fileSize);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // descending order\n * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) {\n * return callback(getFileSizeErr);\n * }\n * callback(null, fileSize * -1);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n * }\n * }\n * );\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * }\n * );\n *\n * // Using Promises\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * // Error handling\n * async () => {\n * try {\n * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */function sortBy(coll,iteratee,callback){var _iteratee=wrapAsync(iteratee);return map$1(coll,(x,iterCb)=>{_iteratee(x,(err,criteria)=>{if(err)return iterCb(err);iterCb(err,{value:x,criteria});});},(err,results)=>{if(err)return callback(err);callback(null,results.sort(comparator).map(v=>v.value));});function comparator(left,right){var a=left.criteria,b=right.criteria;return ab?1:0;}}awaitify(sortBy,3);/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n * async.tryEach([\n * function getDataFromFirstWebsite(callback) {\n * // Try getting the data from the first website\n * callback(err, data);\n * },\n * function getDataFromSecondWebsite(callback) {\n * // First website failed,\n * // Try getting the data from the backup website\n * callback(err, data);\n * }\n * ],\n * // optional callback\n * function(err, results) {\n * Now do something with the data.\n * });\n *\n */function tryEach(tasks,callback){var error=null;var result;return eachSeries$1(tasks,(task,taskCb)=>{wrapAsync(task)(function(err){if(err===false)return taskCb(err);for(var _len20=arguments.length,args=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++){args[_key20-1]=arguments[_key20];}if(args.length<2){[result]=args;}else {result=args;}error=err;taskCb(err?null:{});});},()=>callback(error,result));}awaitify(tryEach);/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * var count = 0;\n * async.whilst(\n * function test(cb) { cb(null, count < 5); },\n * function iter(callback) {\n * count++;\n * setTimeout(function() {\n * callback(null, count);\n * }, 1000);\n * },\n * function (err, n) {\n * // 5 seconds have passed, n = 5\n * }\n * );\n */function whilst(test,iteratee,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results=[];function next(err){if(err)return callback(err);for(var _len21=arguments.length,rest=new Array(_len21>1?_len21-1:0),_key21=1;_key21<_len21;_key21++){rest[_key21-1]=arguments[_key21];}results=rest;if(err===false)return;_test(check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return _test(check);}awaitify(whilst,3);/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter$1(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType[\"LocalOnly\"]=0]=\"LocalOnly\";OfferAnswerType[OfferAnswerType[\"Remote\"]=1]=\"Remote\";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,csi,munger,mediaType){super(rtcRtpTransceiver,mid);this.rtxEnabled=false;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);this.munger=munger;this.mediaType=mediaType;}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log(\"Sender source for \".concat(this.mediaType,\" replaced with track ID \").concat(trackOrNull.id));}else {logger.log(\"Sender source for \".concat(this.mediaType,\" set to null, sender stopped\"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==MediaType.AudioMain){logErrorAndThrow(WcmeErrorType.SET_NMG_FAILED,\"Named media groups can only be set for audio.\");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);logger.log(\"Sender parameters for \".concat(this.mediaType,\" set to \").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled,forceSoftwareEncoder:this.mediaType===MediaType.VideoSlides&&(BrowserInfo.isWindows()||BrowserInfo.isMac())&&(BrowserInfo.isChrome()||BrowserInfo.isEdge())});}mungeLocalDescriptionForRemoteServer(mediaDescription){this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref4=>{var[mediaType,transceiver]=_ref4;return __awaiter$1(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref5=>{var[mediaType,transceivers]=_ref5;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});function toMediaStreamTrackKind(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?MediaStreamTrackKind.Video:MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames[\"VideoSourceCountUpdate\"]=\"video-source-count-update\";MultistreamConnectionEventNames[\"AudioSourceCountUpdate\"]=\"audio-source-count-update\";MultistreamConnectionEventNames[\"ActiveSpeakerNotification\"]=\"active-speaker-notification\";MultistreamConnectionEventNames[\"PeerConnectionStateUpdate\"]=\"peer-connection-state-update\";MultistreamConnectionEventNames[\"IceConnectionStateUpdate\"]=\"ice-connection-state-update\";MultistreamConnectionEventNames[\"IceGatheringStateUpdate\"]=\"ice-gathering-state-update\";MultistreamConnectionEventNames[\"NegotiationNeeded\"]=\"negotiation-needed\";MultistreamConnectionEventNames[\"CreateOfferOnSuccess\"]=\"createofferonsuccess\";MultistreamConnectionEventNames[\"CreateAnswerOnSuccess\"]=\"createansweronsuccess\";MultistreamConnectionEventNames[\"SetLocalDescriptionOnSuccess\"]=\"setlocaldescriptiononsuccess\";MultistreamConnectionEventNames[\"SetRemoteDescriptionOnSuccess\"]=\"setremotedescriptiononsuccess\";MultistreamConnectionEventNames[\"IceCandidate\"]=\"icecandidate\";MultistreamConnectionEventNames[\"IceCandidateError\"]=\"icecandidateerror\";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox()};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info(\"Creating multistream connection with options \".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(MediaContent.Slides);this.createSendTransceiver(MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType.AudioMain,mainSceneId);this.createSendTransceiver(MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{this.emit(MultistreamConnectionEventNames.IceCandidate,candidate);});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error(\"addTransceiver failed due to : \".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger({doFullIce:this.options.doFullIce});var transceiver=new SendOnlyTransceiver(rtcTransceiver,mid,csi,munger,mediaType);if(getMediaFamily(mediaType)===MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':\"\".concat(defaultMaxVideoEncodeMbps),'max-fs':\"\".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.twccDisabled=getMediaFamily(mediaType)===MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.active=false;transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.active=active;return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error(\"DataChannel not created or not connected. Unable to send JMP message.\");return;}try{logger.info(\"Sending JMP message (size: \".concat(msg.length,\"): \").concat(msg));this.dataChannel.send(msg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(WcmeErrorType.DATA_CHANNEL_SEND_FAILED,\"Sending JMP message failed with error: \".concat(err,\",\\nMessage size: \").concat(msg.length,\",\\nData Channel State: \").concat(readyState,\",\\nData Channel Buffered amount: \").concat(bufferedAmount,\",\\nSCTP State: \").concat(state,\",\\nSCTP Max Message Size: \").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log(\"SourceAdvertisement received: \".concat(JSON.stringify(data)));if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log(\"MediaRequestStatus received: \".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn(\"Got MediaRequestStatus for unknown receive slot: \".concat(JSON.stringify(s.id)));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log(\"MediaRequest received: \".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c;if(ids.length>1){logErrorAndThrow(WcmeErrorType.INVALID_STREAM_REQUEST,\"Stream request cannot have more than one ID.\");}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=sendTransceiver.senderIds.some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn(\"\".concat(mediaType,\": Unable to get encoding index for stream ID: \").concat(JSON.stringify(id)));}}else {logger.warn(\"\".concat(mediaType,\": Unable to find matching stream ID for requested ID: \").concat(JSON.stringify(id)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info(\"Flushing pending JMP task queue\");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error(\"Error parsing datachannel JSON: \".concat(err));return;}logger.debug('DataChannel got msg:',e.data);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error(\"Received invalid datachannel message: \".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error(\"Received invalid JMP msg: \".concat(JSON.stringify(jmpMsg)));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error(\"Unable to find JMP session for media type \".concat(mediaType,\".\"));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,mediaType===MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var _a;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var published=!!sendTransceiver.publishedStream;var muted=(_a=sendTransceiver.publishedStream)===null||_a===void 0?void 0:_a.muted;return sendTransceiver.senderIds.map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var transceiverMid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,transceiverMid,munger);recvOnlyTransceiver.metadata.mediaType=mediaType;recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;itransceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){logErrorAndThrow(WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,\"Sender codecs or receiver codecs is undefined or empty.\");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){logErrorAndThrow(WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,\"Cannot find matching receiver codec for the given mediaType/mimeType.\");}return targetCodec.pt;}waitForIceGatheringComplete(){return __awaiter$1(this,void 0,void 0,function*(){return new Promise(resolve=>{if(this.pc.iceGatheringState==='complete'){resolve();}else {this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{if(this.pc.iceGatheringState==='complete'){resolve();}});}});});}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});if(this.options.doFullIce){yield this.waitForIceGatheringComplete();}var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(WcmeErrorType.SET_ANSWER_FAILED,\"Call to setAnswer without having previously called createOffer.\");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug(\"setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription\");}})).catch(error=>{logErrorAndThrow(WcmeErrorType.SET_ANSWER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av);});if(!this.options.doFullIce){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){var{candidates}=parsedOffer.media[0].iceInfo;parsedOffer.media.forEach(media=>{media.iceInfo.candidates=candidates;});}if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidatesByTransportType(media,['udp','tcp'])){logger.log(\"Some unsupported remote candidates have been removed from mid \".concat(media.mid));}});if(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(WcmeErrorType.GET_TRANSCEIVER_FAILED,\"Unable to find send transceiver for media type \".concat(mediaType,\".\"));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(WcmeErrorType.GET_TRANSCEIVER_FAILED,\"Unable to find send transceiver with MID \".concat(mid,\".\"));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(WcmeErrorType.GET_TRANSCEIVER_FAILED,\"Unable to find recv transceiver with MID \".concat(mid,\".\"));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error(\"Unable to find jmp session for \".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error(\"Stream id duplicate found \".concat(JSON.stringify(slot.id),\".\"));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>compareStreamIds(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger.info(\"Renewing multistream connection with options \".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType.AudioMain),audioSlides:this.getCsiByMediaType(MediaType.AudioSlides),videoMain:this.getCsiByMediaType(MediaType.VideoMain),videoSlides:this.getCsiByMediaType(MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}\n\nvar defaultLogger = {\n info: function info() {\n return console.info(...arguments);\n },\n log: function log() {\n return console.log(...arguments);\n },\n error: function error() {\n return console.error(...arguments);\n },\n warn: function warn() {\n return console.warn(...arguments);\n },\n trace: function trace() {\n return console.trace(...arguments);\n },\n debug: function debug() {\n return console.debug(...arguments);\n }\n};\nvar currentLogger = defaultLogger;\nvar getLogger = () => currentLogger;\nvar configureWcmeLogger = debugId => {\n var logger = getLogger();\n setLogHandler((messages, context) => {\n var logMessages = Array.from(messages).map(message => typeof message === 'object' ? JSON.stringify(message) : message);\n logMessages.unshift(\"\".concat(debugId || '', \":[\").concat(context.name, \"]\"));\n switch (context.level.name) {\n case 'TRACE':\n logger.trace(...logMessages);\n break;\n case 'DEBUG':\n logger.debug(...logMessages);\n break;\n case 'INFO':\n logger.info(...logMessages);\n break;\n case 'WARN':\n logger.warn(...logMessages);\n break;\n case 'ERROR':\n logger.error(...logMessages);\n break;\n }\n });\n};\nvar setLogger = newLogger => {\n if (newLogger) {\n currentLogger = newLogger;\n } else {\n currentLogger = defaultLogger;\n }\n configureWcmeLogger();\n};\nvar getErrorDescription = error => {\n return error ? error.stack ? \"\".concat(error.message, \": \").concat(error.stack) : \"\".concat(error) : '';\n};\n\nvar NUM = '\\\\d+';\nvar SDP_TOKEN = \"[!#$%&'*+\\\\-.^_`{|}~a-zA-Z0-9]+\";\nvar ANY_NON_WS = '\\\\S+';\nvar SP = '\\\\s';\nvar REST = '.+';\nclass Line {}\nvar _a$5;\nclass BandwidthLine extends Line {\n constructor(bandwidthType, bandwidth) {\n super();\n this.bandwidthType = bandwidthType;\n this.bandwidth = bandwidth;\n }\n static fromSdpLine(line) {\n if (!BandwidthLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(BandwidthLine.regex);\n var bandwidthType = tokens[1];\n var bandwidth = parseInt(tokens[2], 10);\n return new BandwidthLine(bandwidthType, bandwidth);\n }\n toSdpLine() {\n return \"b=\".concat(this.bandwidthType, \":\").concat(this.bandwidth);\n }\n}\n_a$5 = BandwidthLine;\nBandwidthLine.BW_TYPE_REGEX = 'CT|AS|TIAS';\nBandwidthLine.regex = new RegExp(\"^(\".concat(_a$5.BW_TYPE_REGEX, \"):(\").concat(NUM, \")\"));\nclass BundleGroupLine extends Line {\n constructor(mids) {\n super();\n this.mids = mids;\n }\n static fromSdpLine(line) {\n if (!BundleGroupLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(BundleGroupLine.regex);\n var mids = tokens[1].split(' ');\n return new BundleGroupLine(mids);\n }\n toSdpLine() {\n return \"a=group:BUNDLE \".concat(this.mids.join(' '));\n }\n}\nBundleGroupLine.regex = new RegExp(\"^group:BUNDLE (\".concat(REST, \")\"));\nvar _a$4;\nclass CandidateLine extends Line {\n constructor(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions) {\n super();\n this.foundation = foundation;\n this.componentId = componentId;\n this.transport = transport;\n this.priority = priority;\n this.connectionAddress = connectionAddress;\n this.port = port;\n this.candidateType = candidateType;\n this.relAddr = relAddr;\n this.relPort = relPort;\n this.candidateExtensions = candidateExtensions;\n }\n static fromSdpLine(line) {\n if (!CandidateLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(CandidateLine.regex);\n var foundation = tokens[1];\n var componentId = parseInt(tokens[2], 10);\n var transport = tokens[3];\n var priority = parseInt(tokens[4], 10);\n var connectionAddress = tokens[5];\n var port = parseInt(tokens[6], 10);\n var candidateType = tokens[7];\n var relAddr = tokens[8];\n var relPort = tokens[9] ? parseInt(tokens[9], 10) : undefined;\n var candidateExtensions = tokens[10];\n return new CandidateLine(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions);\n }\n toSdpLine() {\n var str = '';\n str += \"a=candidate:\".concat(this.foundation, \" \").concat(this.componentId, \" \").concat(this.transport, \" \").concat(this.priority, \" \").concat(this.connectionAddress, \" \").concat(this.port, \" typ \").concat(this.candidateType);\n if (this.relAddr) {\n str += \" raddr \".concat(this.relAddr);\n }\n if (this.relPort) {\n str += \" rport \".concat(this.relPort);\n }\n if (this.candidateExtensions) {\n str += \" \".concat(this.candidateExtensions);\n }\n return str;\n }\n}\n_a$4 = CandidateLine;\nCandidateLine.ICE_CHARS = \"[a-zA-Z0-9+/]+\";\nCandidateLine.regex = new RegExp(\"^candidate:(\".concat(_a$4.ICE_CHARS, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(NUM, \") typ (\").concat(ANY_NON_WS, \")(?: raddr (\").concat(ANY_NON_WS, \"))?(?: rport (\").concat(NUM, \"))?(?: (\").concat(REST, \"))?\"));\nclass ConnectionLine extends Line {\n constructor(netType, addrType, ipAddr) {\n super();\n this.netType = netType;\n this.addrType = addrType;\n this.ipAddr = ipAddr;\n }\n static fromSdpLine(line) {\n if (!ConnectionLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(ConnectionLine.regex);\n var netType = tokens[1];\n var addrType = tokens[2];\n var ipAddr = tokens[3];\n return new ConnectionLine(netType, addrType, ipAddr);\n }\n toSdpLine() {\n return \"c=\".concat(this.netType, \" \").concat(this.addrType, \" \").concat(this.ipAddr);\n }\n}\nConnectionLine.regex = new RegExp(\"^(\".concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \")\"));\nclass ContentLine extends Line {\n constructor(values) {\n super();\n this.values = values;\n }\n static fromSdpLine(line) {\n if (!ContentLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(ContentLine.regex);\n var values = tokens[1].split(',');\n return new ContentLine(values);\n }\n toSdpLine() {\n return \"a=content:\".concat(this.values.join(','));\n }\n}\nContentLine.regex = new RegExp(\"^content:(\".concat(REST, \")$\"));\nclass DirectionLine extends Line {\n constructor(direction) {\n super();\n this.direction = direction;\n }\n static fromSdpLine(line) {\n if (!DirectionLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(DirectionLine.regex);\n var direction = tokens[1];\n return new DirectionLine(direction);\n }\n toSdpLine() {\n return \"a=\".concat(this.direction);\n }\n}\nDirectionLine.regex = /^(sendrecv|sendonly|recvonly|inactive)$/;\nvar _a$3;\nclass ExtMapLine extends Line {\n constructor(id, uri, direction, extensionAttributes) {\n super();\n this.id = id;\n this.uri = uri;\n this.direction = direction;\n this.extensionAttributes = extensionAttributes;\n }\n static fromSdpLine(line) {\n if (!ExtMapLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(ExtMapLine.regex);\n var id = parseInt(tokens[1], 10);\n var direction = tokens[2];\n var uri = tokens[3];\n var extensionAttributes = tokens[4];\n return new ExtMapLine(id, uri, direction, extensionAttributes);\n }\n toSdpLine() {\n var str = '';\n str += \"a=extmap:\".concat(this.id);\n if (this.direction) {\n str += \"/\".concat(this.direction);\n }\n str += \" \".concat(this.uri);\n if (this.extensionAttributes) {\n str += \" \".concat(this.extensionAttributes);\n }\n return str;\n }\n}\n_a$3 = ExtMapLine;\nExtMapLine.EXTMAP_DIRECTION = \"sendonly|recvonly|sendrecv|inactive\";\nExtMapLine.regex = new RegExp(\"^extmap:(\".concat(NUM, \")(?:/(\").concat(_a$3.EXTMAP_DIRECTION, \"))? (\").concat(ANY_NON_WS, \")(?: (\").concat(REST, \"))?\"));\nclass FingerprintLine extends Line {\n constructor(fingerprint) {\n super();\n this.fingerprint = fingerprint;\n }\n static fromSdpLine(line) {\n if (!FingerprintLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(FingerprintLine.regex);\n var fingerprint = tokens[1];\n return new FingerprintLine(fingerprint);\n }\n toSdpLine() {\n return \"a=fingerprint:\".concat(this.fingerprint);\n }\n}\nFingerprintLine.regex = new RegExp(\"^fingerprint:(\".concat(REST, \")\"));\nfunction parseFmtpParams(fmtpParams) {\n fmtpParams = fmtpParams.replace(/^a=fmtp:\\d+\\x20/, '');\n var fmtpObj = new Map();\n if (/^\\d+([,/-]\\d+)+$/.test(fmtpParams)) {\n fmtpObj.set(fmtpParams, undefined);\n return fmtpObj;\n }\n fmtpParams.split(';').forEach(param => {\n var paramArr = param && param.split('=');\n if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {\n throw new Error(\"Fmtp params is invalid with \".concat(fmtpParams));\n }\n fmtpObj.set(paramArr[0], paramArr[1]);\n });\n return fmtpObj;\n}\nclass FmtpLine extends Line {\n constructor(payloadType, params) {\n super();\n this.payloadType = payloadType;\n this.params = params;\n }\n static fromSdpLine(line) {\n if (!FmtpLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(FmtpLine.regex);\n var payloadType = parseInt(tokens[1], 10);\n var params = tokens[2];\n return new FmtpLine(payloadType, parseFmtpParams(params));\n }\n toSdpLine() {\n var fmtParams = Array.from(this.params.keys()).map(key => {\n if (this.params.get(key) !== undefined) {\n return \"\".concat(key, \"=\").concat(this.params.get(key));\n }\n return \"\".concat(key);\n }).join(';');\n return \"a=fmtp:\".concat(this.payloadType, \" \").concat(fmtParams);\n }\n}\nFmtpLine.regex = new RegExp(\"^fmtp:(\".concat(NUM, \") (\").concat(REST, \")\"));\nclass IceOptionsLine extends Line {\n constructor(options) {\n super();\n this.options = options;\n }\n static fromSdpLine(line) {\n if (!IceOptionsLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(IceOptionsLine.regex);\n var options = tokens[1].split(' ');\n return new IceOptionsLine(options);\n }\n toSdpLine() {\n return \"a=ice-options:\".concat(this.options.join(' '));\n }\n}\nIceOptionsLine.regex = new RegExp(\"^ice-options:(\".concat(REST, \")$\"));\nclass IcePwdLine extends Line {\n constructor(pwd) {\n super();\n this.pwd = pwd;\n }\n static fromSdpLine(line) {\n if (!IcePwdLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(IcePwdLine.regex);\n var pwd = tokens[1];\n return new IcePwdLine(pwd);\n }\n toSdpLine() {\n return \"a=ice-pwd:\".concat(this.pwd);\n }\n}\nIcePwdLine.regex = new RegExp(\"^ice-pwd:(\".concat(ANY_NON_WS, \")$\"));\nclass IceUfragLine extends Line {\n constructor(ufrag) {\n super();\n this.ufrag = ufrag;\n }\n static fromSdpLine(line) {\n if (!IceUfragLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(IceUfragLine.regex);\n var ufrag = tokens[1];\n return new IceUfragLine(ufrag);\n }\n toSdpLine() {\n return \"a=ice-ufrag:\".concat(this.ufrag);\n }\n}\nIceUfragLine.regex = new RegExp(\"^ice-ufrag:(\".concat(ANY_NON_WS, \")$\"));\nclass MaxMessageSizeLine extends Line {\n constructor(maxMessageSize) {\n super();\n this.maxMessageSize = maxMessageSize;\n }\n static fromSdpLine(line) {\n if (!MaxMessageSizeLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(MaxMessageSizeLine.regex);\n var maxMessageSize = parseInt(tokens[1], 10);\n return new MaxMessageSizeLine(maxMessageSize);\n }\n toSdpLine() {\n return \"a=max-message-size:\".concat(this.maxMessageSize);\n }\n}\nMaxMessageSizeLine.regex = new RegExp(\"^max-message-size:(\".concat(NUM, \")\"));\nvar _a$2;\nclass MediaLine extends Line {\n constructor(type, port, protocol, formats) {\n super();\n this.type = type;\n this.port = port;\n this.protocol = protocol;\n this.formats = formats;\n }\n static fromSdpLine(line) {\n if (!MediaLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(MediaLine.regex);\n var type = tokens[1];\n var port = parseInt(tokens[2], 10);\n var protocol = tokens[3];\n var formats = tokens[4].split(' ');\n return new MediaLine(type, port, protocol, formats);\n }\n toSdpLine() {\n return \"m=\".concat(this.type, \" \").concat(this.port, \" \").concat(this.protocol, \" \").concat(this.formats.join(' '));\n }\n}\n_a$2 = MediaLine;\nMediaLine.MEDIA_TYPE = 'audio|video|application';\nMediaLine.regex = new RegExp(\"^(\".concat(_a$2.MEDIA_TYPE, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(REST, \")\"));\nclass MidLine extends Line {\n constructor(mid) {\n super();\n this.mid = mid;\n }\n static fromSdpLine(line) {\n if (!MidLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(MidLine.regex);\n var mid = tokens[1];\n return new MidLine(mid);\n }\n toSdpLine() {\n return \"a=mid:\".concat(this.mid);\n }\n}\nMidLine.regex = new RegExp(\"^mid:(\".concat(ANY_NON_WS, \")$\"));\nclass OriginLine extends Line {\n constructor(username, sessionId, sessionVersion, netType, addrType, ipAddr) {\n super();\n this.username = username;\n this.sessionId = sessionId;\n this.sessionVersion = sessionVersion;\n this.netType = netType;\n this.addrType = addrType;\n this.ipAddr = ipAddr;\n }\n static fromSdpLine(line) {\n if (!OriginLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(OriginLine.regex);\n var username = tokens[1];\n var sessionId = tokens[2];\n var sessionVersion = parseInt(tokens[3], 10);\n var netType = tokens[4];\n var addrType = tokens[5];\n var ipAddr = tokens[6];\n return new OriginLine(username, sessionId, sessionVersion, netType, addrType, ipAddr);\n }\n toSdpLine() {\n return \"o=\".concat(this.username, \" \").concat(this.sessionId, \" \").concat(this.sessionVersion, \" \").concat(this.netType, \" \").concat(this.addrType, \" \").concat(this.ipAddr);\n }\n}\nOriginLine.regex = new RegExp(\"^(\".concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \")\"));\nvar _a$1;\nclass RidLine extends Line {\n constructor(id, direction, params) {\n super();\n this.id = id;\n this.direction = direction;\n this.params = params;\n }\n static fromSdpLine(line) {\n if (!RidLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(RidLine.regex);\n var id = tokens[1];\n var direction = tokens[2];\n var params = tokens[3];\n return new RidLine(id, direction, params);\n }\n toSdpLine() {\n var str = '';\n str += \"a=rid:\".concat(this.id, \" \").concat(this.direction);\n if (this.params) {\n str += \" \".concat(this.params);\n }\n return str;\n }\n}\n_a$1 = RidLine;\nRidLine.RID_ID = \"[\\\\w-]+\";\nRidLine.RID_DIRECTION = \"\\\\bsend\\\\b|\\\\brecv\\\\b\";\nRidLine.regex = new RegExp(\"^rid:(\".concat(_a$1.RID_ID, \") (\").concat(_a$1.RID_DIRECTION, \")(?:\").concat(SP, \"(\").concat(REST, \"))?\"));\nclass RtcpMuxLine extends Line {\n static fromSdpLine(line) {\n if (!RtcpMuxLine.regex.test(line)) {\n return undefined;\n }\n return new RtcpMuxLine();\n }\n toSdpLine() {\n return \"a=rtcp-mux\";\n }\n}\nRtcpMuxLine.regex = /^rtcp-mux$/;\nclass RtcpFbLine extends Line {\n constructor(payloadType, feedback) {\n super();\n this.payloadType = payloadType;\n this.feedback = feedback;\n }\n static fromSdpLine(line) {\n if (!RtcpFbLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(RtcpFbLine.regex);\n var payloadType = parseInt(tokens[1], 10);\n var feedback = tokens[2];\n return new RtcpFbLine(payloadType, feedback);\n }\n toSdpLine() {\n return \"a=rtcp-fb:\".concat(this.payloadType, \" \").concat(this.feedback);\n }\n}\nRtcpFbLine.regex = new RegExp(\"^rtcp-fb:(\".concat(NUM, \") (\").concat(REST, \")\"));\nvar _a$6;\nclass RtpMapLine extends Line {\n constructor(payloadType, encodingName, clockRate, encodingParams) {\n super();\n this.payloadType = payloadType;\n this.encodingName = encodingName;\n this.clockRate = clockRate;\n this.encodingParams = encodingParams;\n }\n static fromSdpLine(line) {\n if (!RtpMapLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(RtpMapLine.regex);\n var payloadType = parseInt(tokens[1], 10);\n var encodingName = tokens[2];\n var clockRate = parseInt(tokens[3], 10);\n var encodingParams = tokens[4];\n return new RtpMapLine(payloadType, encodingName, clockRate, encodingParams);\n }\n toSdpLine() {\n var str = '';\n str += \"a=rtpmap:\".concat(this.payloadType, \" \").concat(this.encodingName, \"/\").concat(this.clockRate);\n if (this.encodingParams) {\n str += \"/\".concat(this.encodingParams);\n }\n return str;\n }\n}\n_a$6 = RtpMapLine;\nRtpMapLine.NON_SLASH_TOKEN = '[^\\\\s/]+';\nRtpMapLine.regex = new RegExp(\"^rtpmap:(\".concat(NUM, \") (\").concat(_a$6.NON_SLASH_TOKEN, \")/(\").concat(_a$6.NON_SLASH_TOKEN, \")(?:/(\").concat(_a$6.NON_SLASH_TOKEN, \"))?\"));\nclass SctpPortLine extends Line {\n constructor(port) {\n super();\n this.port = port;\n }\n static fromSdpLine(line) {\n if (!SctpPortLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SctpPortLine.regex);\n var port = parseInt(tokens[1], 10);\n return new SctpPortLine(port);\n }\n toSdpLine() {\n return \"a=sctp-port:\".concat(this.port);\n }\n}\nSctpPortLine.regex = new RegExp(\"^sctp-port:(\".concat(NUM, \")\"));\nclass SessionInformationLine extends Line {\n constructor(info) {\n super();\n this.info = info;\n }\n static fromSdpLine(line) {\n if (!SessionInformationLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SessionInformationLine.regex);\n var info = tokens[1];\n return new SessionInformationLine(info);\n }\n toSdpLine() {\n return \"i=\".concat(this.info);\n }\n}\nSessionInformationLine.regex = new RegExp(\"(\".concat(REST, \")\"));\nclass SessionNameLine extends Line {\n constructor(name) {\n super();\n this.name = name;\n }\n static fromSdpLine(line) {\n if (!SessionNameLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SessionNameLine.regex);\n var name = tokens[1];\n return new SessionNameLine(name);\n }\n toSdpLine() {\n return \"s=\".concat(this.name);\n }\n}\nSessionNameLine.regex = new RegExp(\"^(\".concat(REST, \")\"));\nclass SetupLine extends Line {\n constructor(setup) {\n super();\n this.setup = setup;\n }\n static fromSdpLine(line) {\n if (!SetupLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SetupLine.regex);\n var setup = tokens[1];\n return new SetupLine(setup);\n }\n toSdpLine() {\n return \"a=setup:\".concat(this.setup);\n }\n}\nSetupLine.regex = /^setup:(actpass|active|passive)$/;\nclass SimulcastLayer {\n constructor(id, paused) {\n this.id = id;\n this.paused = paused;\n }\n toString() {\n return this.paused ? \"~\".concat(this.id) : this.id;\n }\n}\nclass SimulcastLayerList {\n constructor() {\n this.layers = [];\n }\n addLayer(layer) {\n this.layers.push([layer]);\n }\n addLayerWithAlternatives(alternatives) {\n this.layers.push(alternatives);\n }\n get length() {\n return this.layers.length;\n }\n get(index) {\n return this.layers[index];\n }\n static fromString(str) {\n var layerList = new SimulcastLayerList();\n var tokens = str.split(';');\n if (tokens.length === 1 && !tokens[0].trim()) {\n throw new Error('simulcast stream list empty');\n }\n tokens.forEach(token => {\n if (!token) {\n throw new Error('simulcast layer list empty');\n }\n var ridTokens = token.split(',');\n var layers = [];\n ridTokens.forEach(ridToken => {\n if (!ridToken || ridToken === '~') {\n throw new Error('rid empty');\n }\n var paused = ridToken[0] === '~';\n var rid = paused ? ridToken.substring(1) : ridToken;\n layers.push(new SimulcastLayer(rid, paused));\n });\n layerList.addLayerWithAlternatives(layers);\n });\n return layerList;\n }\n toString() {\n return this.layers.map(altArray => altArray.map(v => v.toString()).join(',')).join(';');\n }\n}\nclass SimulcastLine extends Line {\n constructor(sendLayers, recvLayers) {\n super();\n this.sendLayers = sendLayers;\n this.recvLayers = recvLayers;\n }\n static fromSdpLine(line) {\n if (!SimulcastLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SimulcastLine.regex);\n var bidirectional = tokens[3] && tokens[4];\n var firstDirection = tokens[1];\n var layerList1 = SimulcastLayerList.fromString(tokens[2]);\n var layerList2 = new SimulcastLayerList();\n if (bidirectional) {\n var secondDirection = tokens[3];\n if (firstDirection === secondDirection) {\n return undefined;\n }\n layerList2 = SimulcastLayerList.fromString(tokens[4]);\n }\n var sendLayerList;\n var recvLayerList;\n if (firstDirection === 'send') {\n sendLayerList = layerList1;\n recvLayerList = layerList2;\n } else {\n sendLayerList = layerList2;\n recvLayerList = layerList1;\n }\n return new SimulcastLine(sendLayerList, recvLayerList);\n }\n toSdpLine() {\n var str = 'a=simulcast:';\n if (this.sendLayers.length) {\n str += \"send \".concat(this.sendLayers.toString());\n if (this.recvLayers.length) {\n str += \" \";\n }\n }\n if (this.recvLayers.length) {\n str += \"recv \".concat(this.recvLayers.toString());\n }\n return str;\n }\n}\nSimulcastLine.regex = new RegExp(\"^simulcast:(send|recv) (\".concat(ANY_NON_WS, \")(?: (send|recv) (\").concat(ANY_NON_WS, \"))?\"));\nclass SsrcLine extends Line {\n constructor(ssrcId, attribute) {\n var attributeValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n var attributeData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;\n super();\n this.ssrcId = ssrcId;\n this.attribute = attribute;\n this.attributeValue = attributeValue;\n this.attributeData = attributeData;\n }\n static fromSdpLine(line) {\n if (!SsrcLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SsrcLine.regex);\n var ssrcId = parseInt(tokens[1], 10);\n var attribute = tokens[2];\n var attributeValue = tokens[3];\n var attributeData = tokens[4];\n return new SsrcLine(ssrcId, attribute, attributeValue, attributeData);\n }\n toSdpLine() {\n var str = \"a=ssrc:\".concat(this.ssrcId, \" \").concat(this.attribute);\n if (this.attributeValue) {\n str += \":\".concat(this.attributeValue);\n }\n if (this.attributeData) {\n str += \" \".concat(this.attributeData);\n }\n return str;\n }\n}\nSsrcLine.regex = new RegExp(\"^ssrc:(\".concat(NUM, \") (\").concat(SDP_TOKEN, \")(?::(\").concat(SDP_TOKEN, \")?(?: (\").concat(ANY_NON_WS, \"))?)?$\"));\nclass SsrcGroupLine extends Line {\n constructor(semantics, ssrcs) {\n super();\n this.semantics = semantics;\n this.ssrcs = ssrcs;\n }\n static fromSdpLine(line) {\n if (!SsrcGroupLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SsrcGroupLine.regex);\n var semantics = tokens[1];\n var ssrcs = tokens[2].split(' ').map(ssrcStr => parseInt(ssrcStr, 10));\n return new SsrcGroupLine(semantics, ssrcs);\n }\n toSdpLine() {\n return \"a=ssrc-group:\".concat(this.semantics, \" \").concat(this.ssrcs.join(' '));\n }\n}\nSsrcGroupLine.regex = new RegExp(\"^ssrc-group:(SIM|FID|FEC) ((?:\".concat(NUM).concat(SP, \"*)+)\"));\nclass TimingLine extends Line {\n constructor(startTime, stopTime) {\n super();\n this.startTime = startTime;\n this.stopTime = stopTime;\n }\n static fromSdpLine(line) {\n if (!TimingLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(TimingLine.regex);\n var startTime = parseInt(tokens[1], 10);\n var stopTime = parseInt(tokens[2], 10);\n return new TimingLine(startTime, stopTime);\n }\n toSdpLine() {\n return \"t=\".concat(this.startTime, \" \").concat(this.stopTime);\n }\n}\nTimingLine.regex = new RegExp(\"^(\".concat(NUM, \") (\").concat(NUM, \")\"));\nclass VersionLine extends Line {\n constructor(version) {\n super();\n this.version = version;\n }\n static fromSdpLine(line) {\n if (!VersionLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(VersionLine.regex);\n var version = parseInt(tokens[1], 10);\n return new VersionLine(version);\n }\n toSdpLine() {\n return \"v=\".concat(this.version);\n }\n}\nVersionLine.regex = new RegExp(\"^(\".concat(NUM, \")$\"));\nclass UnknownLine extends Line {\n constructor(value) {\n super();\n this.value = value;\n }\n static fromSdpLine(line) {\n var tokens = line.match(UnknownLine.regex);\n var value = tokens[1];\n return new UnknownLine(value);\n }\n toSdpLine() {\n return \"\".concat(this.value);\n }\n}\nUnknownLine.regex = new RegExp(\"(\".concat(REST, \")\"));\nclass IceInfo {\n constructor() {\n this.candidates = [];\n }\n addLine(line) {\n if (line instanceof IceUfragLine) {\n this.ufrag = line;\n return true;\n }\n if (line instanceof IcePwdLine) {\n this.pwd = line;\n return true;\n }\n if (line instanceof IceOptionsLine) {\n this.options = line;\n return true;\n }\n if (line instanceof CandidateLine) {\n this.candidates.push(line);\n return true;\n }\n return false;\n }\n toLines() {\n var lines = [];\n if (this.ufrag) {\n lines.push(this.ufrag);\n }\n if (this.pwd) {\n lines.push(this.pwd);\n }\n if (this.options) {\n lines.push(this.options);\n }\n this.candidates.forEach(candidate => lines.push(candidate));\n return lines;\n }\n}\nclass MediaDescription {\n constructor(type, port, protocol) {\n this.iceInfo = new IceInfo();\n this.otherLines = [];\n this.type = type;\n this.port = port;\n this.protocol = protocol;\n }\n findOtherLine(ty) {\n return this.otherLines.find(line => line instanceof ty);\n }\n addLine(line) {\n if (line instanceof BundleGroupLine) {\n throw new Error(\"Error: bundle group line not allowed in media description\");\n }\n if (line instanceof BandwidthLine) {\n this.bandwidth = line;\n return true;\n }\n if (line instanceof MidLine) {\n this.mid = line.mid;\n return true;\n }\n if (line instanceof FingerprintLine) {\n this.fingerprint = line.fingerprint;\n return true;\n }\n if (line instanceof SetupLine) {\n this.setup = line.setup;\n return true;\n }\n if (line instanceof ConnectionLine) {\n this.connection = line;\n return true;\n }\n if (line instanceof ContentLine) {\n this.content = line;\n return true;\n }\n return this.iceInfo.addLine(line);\n }\n}\nclass ApplicationMediaDescription extends MediaDescription {\n constructor(mediaLine) {\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\n this.fmts = [];\n this.fmts = mediaLine.formats;\n }\n toLines() {\n var lines = [];\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.fmts));\n if (this.connection) {\n lines.push(this.connection);\n }\n if (this.bandwidth) {\n lines.push(this.bandwidth);\n }\n lines.push(...this.iceInfo.toLines());\n if (this.fingerprint) {\n lines.push(new FingerprintLine(this.fingerprint));\n }\n if (this.setup) {\n lines.push(new SetupLine(this.setup));\n }\n if (this.mid) {\n lines.push(new MidLine(this.mid));\n }\n if (this.content) {\n lines.push(this.content);\n }\n if (this.sctpPort) {\n lines.push(new SctpPortLine(this.sctpPort));\n }\n if (this.maxMessageSize) {\n lines.push(new MaxMessageSizeLine(this.maxMessageSize));\n }\n lines.push(...this.otherLines);\n return lines;\n }\n addLine(line) {\n if (super.addLine(line)) {\n return true;\n }\n if (line instanceof MediaLine) {\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\n }\n if (line instanceof SctpPortLine) {\n this.sctpPort = line.port;\n return true;\n }\n if (line instanceof MaxMessageSizeLine) {\n this.maxMessageSize = line.maxMessageSize;\n return true;\n }\n this.otherLines.push(line);\n return true;\n }\n}\nclass CodecInfo {\n constructor(pt) {\n this.fmtParams = new Map();\n this.feedback = [];\n this.pt = pt;\n }\n addLine(line) {\n if (line instanceof RtpMapLine) {\n this.name = line.encodingName;\n this.clockRate = line.clockRate;\n this.encodingParams = line.encodingParams;\n return true;\n }\n if (line instanceof FmtpLine) {\n this.fmtParams = new Map([...Array.from(this.fmtParams.entries()), ...Array.from(line.params.entries())]);\n if (line.params.has('apt')) {\n var apt = line.params.get('apt');\n this.primaryCodecPt = parseInt(apt, 10);\n }\n return true;\n }\n if (line instanceof RtcpFbLine) {\n this.feedback.push(line.feedback);\n return true;\n }\n return false;\n }\n toLines() {\n var lines = [];\n if (this.name && this.clockRate) {\n lines.push(new RtpMapLine(this.pt, this.name, this.clockRate, this.encodingParams));\n }\n this.feedback.forEach(fb => {\n lines.push(new RtcpFbLine(this.pt, fb));\n });\n if (this.fmtParams.size > 0) {\n lines.push(new FmtpLine(this.pt, this.fmtParams));\n }\n return lines;\n }\n}\nclass AvMediaDescription extends MediaDescription {\n constructor(mediaLine) {\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\n this.pts = [];\n this.extMaps = new Map();\n this.rids = [];\n this.codecs = new Map();\n this.rtcpMux = false;\n this.ssrcs = [];\n this.ssrcGroups = [];\n this.pts = mediaLine.formats.map(fmt => {\n return parseInt(fmt, 10);\n });\n this.pts.forEach(pt => this.codecs.set(pt, new CodecInfo(pt)));\n }\n toLines() {\n var lines = [];\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.pts.map(pt => \"\".concat(pt))));\n if (this.connection) {\n lines.push(this.connection);\n }\n if (this.bandwidth) {\n lines.push(this.bandwidth);\n }\n lines.push(...this.iceInfo.toLines());\n if (this.fingerprint) {\n lines.push(new FingerprintLine(this.fingerprint));\n }\n if (this.setup) {\n lines.push(new SetupLine(this.setup));\n }\n if (this.mid) {\n lines.push(new MidLine(this.mid));\n }\n if (this.rtcpMux) {\n lines.push(new RtcpMuxLine());\n }\n if (this.content) {\n lines.push(this.content);\n }\n this.extMaps.forEach(extMap => lines.push(extMap));\n this.rids.forEach(rid => lines.push(rid));\n if (this.simulcast) {\n lines.push(this.simulcast);\n }\n if (this.direction) {\n lines.push(new DirectionLine(this.direction));\n }\n this.codecs.forEach(codec => lines.push(...codec.toLines()));\n lines.push(...this.ssrcs);\n lines.push(...this.ssrcGroups);\n lines.push(...this.otherLines);\n return lines;\n }\n addLine(line) {\n if (super.addLine(line)) {\n return true;\n }\n if (line instanceof MediaLine) {\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\n }\n if (line instanceof DirectionLine) {\n this.direction = line.direction;\n return true;\n }\n if (line instanceof ExtMapLine) {\n if (this.extMaps.has(line.id)) {\n throw new Error(\"Tried to extension with duplicate ID: an extension already exists with ID \".concat(line.id));\n }\n this.extMaps.set(line.id, line);\n return true;\n }\n if (line instanceof RidLine) {\n this.rids.push(line);\n return true;\n }\n if (line instanceof RtcpMuxLine) {\n this.rtcpMux = true;\n return true;\n }\n if (line instanceof SimulcastLine) {\n this.simulcast = line;\n return true;\n }\n if (line instanceof RtpMapLine || line instanceof FmtpLine || line instanceof RtcpFbLine) {\n var codec = this.codecs.get(line.payloadType);\n if (!codec) {\n throw new Error(\"Error: got line for unknown codec: \".concat(line.toSdpLine()));\n }\n codec.addLine(line);\n return true;\n }\n if (line instanceof SsrcLine) {\n this.ssrcs.push(line);\n return true;\n }\n if (line instanceof SsrcGroupLine) {\n this.ssrcGroups.push(line);\n return true;\n }\n this.otherLines.push(line);\n return true;\n }\n getCodecByPt(pt) {\n return this.codecs.get(pt);\n }\n removePt(pt) {\n var associatedPts = [...this.codecs.values()].filter(ci => ci.primaryCodecPt === pt).map(ci => ci.pt);\n var allPtsToRemove = [pt, ...associatedPts];\n allPtsToRemove.forEach(ptToRemove => {\n this.codecs.delete(ptToRemove);\n });\n this.pts = this.pts.filter(existingPt => allPtsToRemove.indexOf(existingPt) === -1);\n }\n addExtension(_ref) {\n var {\n uri,\n direction,\n attributes,\n id\n } = _ref;\n var getFirstFreeId = () => {\n var freeId = 1;\n for (;;) {\n if (!this.extMaps.has(freeId)) {\n break;\n }\n freeId += 1;\n }\n return freeId;\n };\n var extId = id || getFirstFreeId();\n if (this.extMaps.has(extId)) {\n throw new Error(\"Extension with ID \".concat(id, \" already exists\"));\n }\n if (extId === 0) {\n throw new Error(\"Extension ID 0 is reserved\");\n }\n this.extMaps.set(extId, new ExtMapLine(extId, uri, direction, attributes));\n }\n}\nclass SessionDescription {\n constructor() {\n this.groups = [];\n this.otherLines = [];\n }\n addLine(line) {\n if (line instanceof VersionLine) {\n this.version = line;\n return true;\n }\n if (line instanceof OriginLine) {\n this.origin = line;\n return true;\n }\n if (line instanceof SessionNameLine) {\n this.sessionName = line;\n return true;\n }\n if (line instanceof SessionInformationLine) {\n this.information = line;\n return true;\n }\n if (line instanceof TimingLine) {\n this.timing = line;\n return true;\n }\n if (line instanceof ConnectionLine) {\n this.connection = line;\n return true;\n }\n if (line instanceof BandwidthLine) {\n this.bandwidth = line;\n return true;\n }\n if (line instanceof BundleGroupLine) {\n this.groups.push(line);\n return true;\n }\n this.otherLines.push(line);\n return true;\n }\n toLines() {\n var lines = [];\n if (this.version) {\n lines.push(this.version);\n }\n if (this.origin) {\n lines.push(this.origin);\n }\n if (this.sessionName) {\n lines.push(this.sessionName);\n }\n if (this.information) {\n lines.push(this.information);\n }\n if (this.connection) {\n lines.push(this.connection);\n }\n if (this.bandwidth) {\n lines.push(this.bandwidth);\n }\n if (this.timing) {\n lines.push(this.timing);\n }\n if (this.groups) {\n lines.push(...this.groups);\n }\n lines.push(...this.otherLines);\n return lines;\n }\n}\nclass Sdp {\n constructor() {\n this.session = new SessionDescription();\n this.media = [];\n }\n get avMedia() {\n return this.media.filter(mi => mi instanceof AvMediaDescription);\n }\n toString() {\n var lines = [];\n lines.push(...this.session.toLines());\n this.media.forEach(m => lines.push(...m.toLines()));\n return \"\".concat(lines.map(l => l.toSdpLine()).join('\\r\\n'), \"\\r\\n\");\n }\n}\nclass Grammar {\n constructor() {\n this.parsers = new Map();\n }\n addParser(lineType, parser) {\n var parsers = this.parsers.get(lineType) || [];\n parsers.push(parser);\n this.parsers.set(lineType, parsers);\n }\n getParsers(lineType) {\n return this.parsers.get(lineType) || [];\n }\n}\nclass SdpGrammar extends Grammar {\n constructor() {\n super();\n this.addParser('v', VersionLine.fromSdpLine);\n this.addParser('o', OriginLine.fromSdpLine);\n this.addParser('c', ConnectionLine.fromSdpLine);\n this.addParser('i', SessionInformationLine.fromSdpLine);\n this.addParser('m', MediaLine.fromSdpLine);\n this.addParser('s', SessionNameLine.fromSdpLine);\n this.addParser('t', TimingLine.fromSdpLine);\n this.addParser('b', BandwidthLine.fromSdpLine);\n this.addParser('a', RtpMapLine.fromSdpLine);\n this.addParser('a', RtcpFbLine.fromSdpLine);\n this.addParser('a', FmtpLine.fromSdpLine);\n this.addParser('a', DirectionLine.fromSdpLine);\n this.addParser('a', ExtMapLine.fromSdpLine);\n this.addParser('a', MidLine.fromSdpLine);\n this.addParser('a', IceUfragLine.fromSdpLine);\n this.addParser('a', IcePwdLine.fromSdpLine);\n this.addParser('a', IceOptionsLine.fromSdpLine);\n this.addParser('a', FingerprintLine.fromSdpLine);\n this.addParser('a', SetupLine.fromSdpLine);\n this.addParser('a', SctpPortLine.fromSdpLine);\n this.addParser('a', MaxMessageSizeLine.fromSdpLine);\n this.addParser('a', RtcpMuxLine.fromSdpLine);\n this.addParser('a', BundleGroupLine.fromSdpLine);\n this.addParser('a', ContentLine.fromSdpLine);\n this.addParser('a', RidLine.fromSdpLine);\n this.addParser('a', CandidateLine.fromSdpLine);\n this.addParser('a', SimulcastLine.fromSdpLine);\n this.addParser('a', SsrcLine.fromSdpLine);\n this.addParser('a', SsrcGroupLine.fromSdpLine);\n }\n}\nvar DefaultSdpGrammar = new SdpGrammar();\nfunction isValidLine(line) {\n return line.length > 2;\n}\nfunction parseToModel(lines) {\n var sdp = new Sdp();\n var currBlock = sdp.session;\n lines.forEach(l => {\n if (l instanceof MediaLine) {\n var mediaInfo;\n if (l.type === 'audio' || l.type === 'video') {\n mediaInfo = new AvMediaDescription(l);\n } else if (l.type === 'application') {\n mediaInfo = new ApplicationMediaDescription(l);\n } else {\n throw new Error(\"Unhandled media type: \".concat(l.type));\n }\n sdp.media.push(mediaInfo);\n currBlock = mediaInfo;\n } else {\n currBlock.addLine(l);\n }\n });\n return sdp;\n}\nfunction parseToLines(sdp, grammar) {\n var lines = [];\n sdp.split(/(\\r\\n|\\r|\\n)/).filter(isValidLine).forEach(l => {\n var lineType = l[0];\n var lineValue = l.slice(2);\n var parsers = grammar.getParsers(lineType);\n for (var parser of parsers) {\n var _result = parser(lineValue);\n if (_result) {\n lines.push(_result);\n return;\n }\n }\n var result = UnknownLine.fromSdpLine(l);\n lines.push(result);\n });\n return lines;\n}\nfunction parse(sdp) {\n var grammar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DefaultSdpGrammar;\n var lines = parseToLines(sdp, grammar);\n var parsed = parseToModel(lines);\n return parsed;\n}\n\nfunction getLocalTrackInfo(kind, direction, localTrack) {\n return {\n trackOrKind: localTrack || kind,\n direction\n };\n}\nfunction hasH264Codec(mediaLine) {\n for (var codec of mediaLine.codecs.values()) {\n var _codec$name;\n if (((_codec$name = codec.name) === null || _codec$name === void 0 ? void 0 : _codec$name.toUpperCase()) === 'H264') {\n return true;\n }\n }\n return false;\n}\nfunction checkSdpForErrors(options, sdp) {\n if (!sdp) {\n return new Error('SDP is missing');\n }\n var parsedSdp = parse(sdp);\n for (var mediaLine of parsedSdp.avMedia) {\n if (!mediaLine.iceInfo.candidates.length) {\n return new IceGatheringError(\"ice candidates missing for m-line with mid=\".concat(mediaLine.mid));\n }\n if (!options.allowPort0 && mediaLine.port === 0) {\n return new SdpError(\"Found invalid port number 0 at m-line with mid=\".concat(mediaLine.mid));\n }\n if (!mediaLine.iceInfo.pwd || !mediaLine.iceInfo.ufrag) {\n return new IceGatheringError(\"ice ufrag and password not found for m-line with mid=\".concat(mediaLine.mid));\n }\n if (options.requireH264 && mediaLine.type === 'video' && !hasH264Codec(mediaLine)) {\n return new SdpError(\"H264 codec is missing for video media description with mid=\".concat(mediaLine.mid));\n }\n }\n return false;\n}\nfunction convertCLineToIPv4(sdp) {\n var convertConnectionProp = connection => {\n if ((connection === null || connection === void 0 ? void 0 : connection.addrType) === 'IP6') {\n connection.addrType = 'IP4';\n connection.ipAddr = '0.0.0.0';\n }\n };\n convertConnectionProp(sdp.session.connection);\n sdp.media.forEach(media => {\n convertConnectionProp(media.connection);\n });\n}\nfunction convertPort9to0(sdp) {\n sdp.media.forEach(media => {\n if (media.port === 9) {\n media.port = 0;\n }\n });\n}\nfunction setContentSlides(sdp) {\n var videoMediaDescriptions = sdp.avMedia.filter(media => media.type === 'video');\n if (videoMediaDescriptions.length === 2) {\n videoMediaDescriptions[1].addLine(new ContentLine(['slides']));\n }\n}\nclass AnyLine extends Line {\n constructor(value) {\n super();\n _defineProperty(this, \"value\", void 0);\n this.value = value;\n }\n static fromSdpLine() {\n return undefined;\n }\n toSdpLine() {\n return \"a=\".concat(this.value);\n }\n}\nfunction addBandwidthLimits(sdp, limits) {\n sdp.avMedia.forEach(media => {\n if (media.type === 'audio') {\n media.addLine(new BandwidthLine('TIAS', limits.audio));\n } else if (media.type === 'video') {\n media.addLine(new BandwidthLine('TIAS', limits.video));\n }\n });\n}\nfunction addPeriodicKeyframes(sdp, value) {\n sdp.avMedia.forEach(media => {\n if (media.type === 'video') {\n media.addLine(new AnyLine(\"periodic-keyframes:\".concat(value)));\n }\n });\n}\nfunction disableExtmap(sdp) {\n sdp.avMedia.forEach(media => {\n media.extMaps.clear();\n });\n}\nfunction updateH264fmtpParams(sdp, paramsToUpdate) {\n sdp.avMedia.forEach(media => {\n if (media.type === 'video') {\n media.codecs.forEach(codec => {\n var _codec$name2;\n if (((_codec$name2 = codec.name) === null || _codec$name2 === void 0 ? void 0 : _codec$name2.toUpperCase()) === 'H264') {\n paramsToUpdate.forEach((value, key) => codec.fmtParams.set(key, value));\n }\n });\n }\n });\n}\nfunction adjustH264Profile(sdp, maxFsValue) {\n var maxFsForProfileLevel = {\n 10: 99,\n 11: 396,\n 12: 396,\n 13: 396,\n 20: 396,\n 21: 792,\n 22: 1620,\n 30: 1620,\n 31: 3600,\n 32: 5120,\n 40: 8192,\n 41: 8192,\n 42: 8704,\n 50: 22080,\n 51: 36864,\n 52: 36864,\n 60: 139264,\n 61: 139264,\n 62: 139264\n };\n var framesPerSecond = 30;\n sdp.avMedia.forEach(media => {\n if (media.type === 'video') {\n media.codecs.forEach(codec => {\n var _codec$name3;\n if (((_codec$name3 = codec.name) === null || _codec$name3 === void 0 ? void 0 : _codec$name3.toUpperCase()) === 'H264') {\n var profileLevelIdValue = codec.fmtParams.get('profile-level-id');\n if (profileLevelIdValue) {\n var profile = profileLevelIdValue.substring(0, 4).toLowerCase();\n var levelId = parseInt(profileLevelIdValue.substring(4, 6), 16);\n if (!maxFsForProfileLevel[levelId]) {\n throw new Error(\"found unsupported h264 profile level id value in the SDP: \".concat(levelId));\n }\n if (maxFsForProfileLevel[levelId] === maxFsValue) {\n return;\n }\n if (maxFsForProfileLevel[levelId] < maxFsValue) {\n codec.fmtParams.set('max-fs', \"\".concat(maxFsValue));\n codec.fmtParams.set('max-mbps', \"\".concat(maxFsValue * framesPerSecond));\n return;\n }\n var newLevelId = Object.keys(maxFsForProfileLevel).reverse().find(key => maxFsForProfileLevel[key] === maxFsValue);\n if (newLevelId) {\n var newLevelIdHex = parseInt(newLevelId, 10).toString(16);\n codec.fmtParams.set('profile-level-id', \"\".concat(profile).concat(newLevelIdHex));\n codec.fmtParams.set('max-mbps', \"\".concat(maxFsValue * framesPerSecond));\n return;\n }\n throw new Error(\"unsupported maxFsValue: \".concat(maxFsValue));\n }\n }\n });\n }\n });\n}\nfunction disableRtx(sdp) {\n sdp.avMedia.forEach(media => {\n var payloadTypesToRemove = [];\n media.codecs.forEach((codec, codecPt) => {\n if (codec.name === 'rtx' && codec.primaryCodecPt) {\n payloadTypesToRemove.push(codecPt);\n }\n });\n payloadTypesToRemove.forEach(pt => media.codecs.delete(pt));\n media.pts = media.pts.filter(pt => !payloadTypesToRemove.includes(pt));\n });\n}\nfunction mungeLocalSdpForBrowser(config, sdp) {\n var parsedSdp = parse(sdp);\n if (config.disableRtx) {\n disableRtx(parsedSdp);\n }\n return parsedSdp.toString();\n}\nfunction mungeLocalSdp(config, sdp) {\n var parsedSdp = parse(sdp);\n if (config.convertCLineToIPv4) {\n convertCLineToIPv4(parsedSdp);\n }\n if (config.bandwidthLimits) {\n addBandwidthLimits(parsedSdp, config.bandwidthLimits);\n }\n if (config.periodicKeyframes) {\n addPeriodicKeyframes(parsedSdp, config.periodicKeyframes);\n }\n if (config.convertPort9to0) {\n convertPort9to0(parsedSdp);\n }\n if (config.addContentSlides) {\n setContentSlides(parsedSdp);\n }\n if (config.disableExtmap) {\n disableExtmap(parsedSdp);\n }\n if (config.h264MaxFs) {\n adjustH264Profile(parsedSdp, config.h264MaxFs);\n }\n return parsedSdp.toString();\n}\nfunction setStartBitrate(sdp, startBitrate) {\n updateH264fmtpParams(sdp, new Map([['x-google-start-bitrate', startBitrate.toString()]]));\n}\nfunction removeXtlsIceCandidates(sdp) {\n sdp.media.forEach(media => {\n media.iceInfo.candidates = media.iceInfo.candidates.filter(candidate => candidate.transport.toLowerCase() !== 'xtls');\n });\n}\nfunction mungeRemoteSdp(config, sdp) {\n var parsedSdp = parse(sdp);\n if (config.startBitrate) {\n setStartBitrate(parsedSdp, config.startBitrate);\n }\n if (config.disableExtmap) {\n disableExtmap(parsedSdp);\n }\n removeXtlsIceCandidates(parsedSdp);\n return parsedSdp.toString();\n}\n\nvar MediaConnectionEventNames;\n(function (MediaConnectionEventNames) {\n MediaConnectionEventNames[\"ICE_GATHERING_STATE_CHANGED\"] = \"iceGatheringState:changed\";\n MediaConnectionEventNames[\"PEER_CONNECTION_STATE_CHANGED\"] = \"peerConnectionState:changed\";\n MediaConnectionEventNames[\"ICE_CONNECTION_STATE_CHANGED\"] = \"iceConnectionState:changed\";\n MediaConnectionEventNames[\"REMOTE_TRACK_ADDED\"] = \"remoteTrack:added\";\n MediaConnectionEventNames[\"ROAP_MESSAGE_TO_SEND\"] = \"roap:messageToSend\";\n MediaConnectionEventNames[\"ROAP_STARTED\"] = \"roap:started\";\n MediaConnectionEventNames[\"ROAP_FAILURE\"] = \"roap:failure\";\n MediaConnectionEventNames[\"ROAP_DONE\"] = \"roap:done\";\n MediaConnectionEventNames[\"DTMF_TONE_CHANGED\"] = \"dtmfTone:changed\";\n MediaConnectionEventNames[\"ACTIVE_SPEAKERS_CHANGED\"] = \"activeSpeakers:changed\";\n MediaConnectionEventNames[\"VIDEO_SOURCES_COUNT_CHANGED\"] = \"videoSourcesCount:changed\";\n MediaConnectionEventNames[\"AUDIO_SOURCES_COUNT_CHANGED\"] = \"audioSourcesCount:changed\";\n MediaConnectionEventNames[\"REMOTE_SDP_ANSWER_PROCESSED\"] = \"remoteSdpAnswer:processed\";\n MediaConnectionEventNames[\"REMOTE_SDP_OFFER_PROCESSED\"] = \"remoteSdpOffer:processed\";\n MediaConnectionEventNames[\"LOCAL_SDP_OFFER_GENERATED\"] = \"localSdpOffer:processed\";\n MediaConnectionEventNames[\"LOCAL_SDP_ANSWER_GENERATED\"] = \"localSdpAnswer:processed\";\n MediaConnectionEventNames[\"ICE_CANDIDATE\"] = \"iceCandidate\";\n MediaConnectionEventNames[\"ICE_CANDIDATE_ERROR\"] = \"iceCandidate:error\";\n})(MediaConnectionEventNames || (MediaConnectionEventNames = {}));\nvar RemoteTrackType;\n(function (RemoteTrackType) {\n RemoteTrackType[\"AUDIO\"] = \"audio\";\n RemoteTrackType[\"VIDEO\"] = \"video\";\n RemoteTrackType[\"SCREENSHARE_VIDEO\"] = \"screenShareVideo\";\n})(RemoteTrackType || (RemoteTrackType = {}));\nvar ErrorType;\n(function (ErrorType) {\n ErrorType[\"DOUBLECONFLICT\"] = \"DOUBLECONFLICT\";\n ErrorType[\"CONFLICT\"] = \"CONFLICT\";\n ErrorType[\"FAILED\"] = \"FAILED\";\n ErrorType[\"INVALID_STATE\"] = \"INVALID_STATE\";\n ErrorType[\"NOMATCH\"] = \"NOMATCH\";\n ErrorType[\"OUT_OF_ORDER\"] = \"OUT_OF_ORDER\";\n ErrorType[\"REFUSED\"] = \"REFUSED\";\n ErrorType[\"RETRY\"] = \"RETRY\";\n ErrorType[\"TIMEOUT\"] = \"TIMEOUT\";\n})(ErrorType || (ErrorType = {}));\n\nfunction ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar localTrackTypes = [{\n type: 'audio',\n kind: 'audio'\n}, {\n type: 'video',\n kind: 'video'\n}, {\n type: 'screenShareVideo',\n kind: 'video'\n}];\nclass MediaConnection extends EventEmitter$5 {\n constructor(mediaConnectionConfig, options, debugId) {\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"pc\", void 0);\n _defineProperty(this, \"localTracks\", void 0);\n _defineProperty(this, \"transceivers\", void 0);\n _defineProperty(this, \"mediaDirection\", void 0);\n _defineProperty(this, \"remoteQualityLevel\", void 0);\n this.config = mediaConnectionConfig;\n this.mediaDirection = _objectSpread$4({}, options.direction);\n this.localTracks = _objectSpread$4({}, options.localTracks);\n this.remoteQualityLevel = options.remoteQualityLevel;\n this.id = debugId || 'MediaConnection';\n this.transceivers = {};\n this.pc = new window.RTCPeerConnection({\n iceServers: this.config.iceServers,\n bundlePolicy: 'max-compat'\n });\n this.pc.ontrack = this.onTrack.bind(this);\n this.pc.oniceconnectionstatechange = this.onIceConnectionStateChange.bind(this);\n this.pc.onconnectionstatechange = this.onPeerConnectionStateChange.bind(this);\n this.pc.addEventListener('icecandidate', event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE, {\n candidate: event.candidate\n });\n });\n this.pc.addEventListener('icecandidateerror', event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {\n error: event\n });\n });\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n warn(action, description) {\n getLogger().warn(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n createTransceivers() {\n localTrackTypes.forEach(_ref => {\n var {\n type,\n kind\n } = _ref;\n var trackType = type;\n var transceiverType = type;\n var trackInfo = getLocalTrackInfo(kind, this.mediaDirection[trackType], this.localTracks[trackType]);\n if (!this.config.skipInactiveTransceivers || trackInfo.direction !== 'inactive') {\n this.transceivers[transceiverType] = this.pc.addTransceiver(trackInfo.trackOrKind, {\n direction: trackInfo.direction\n });\n }\n });\n this.setupTransceiverListeners();\n }\n initializeTransceivers(incomingOffer) {\n if (this.pc.getTransceivers().length > 0) {\n this.error('initiateOffer()', 'SDP negotiation already started');\n throw new Error('SDP negotiation already started');\n }\n if (incomingOffer) {\n this.addLocalTracks();\n } else {\n this.createTransceivers();\n }\n }\n close() {\n this.pc.close();\n this.pc.ontrack = null;\n this.pc.oniceconnectionstatechange = null;\n this.pc.onconnectionstatechange = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.onicecandidate = null;\n this.pc.onicecandidateerror = null;\n }\n getConfig() {\n return this.config;\n }\n getSendReceiveOptions() {\n return {\n localTracks: this.localTracks,\n direction: this.mediaDirection,\n remoteQualityLevel: this.remoteQualityLevel\n };\n }\n updateRemoteQualityLevel(newValue) {\n if (newValue !== this.remoteQualityLevel) {\n this.remoteQualityLevel = newValue;\n return true;\n }\n return false;\n }\n updateTransceivers(options) {\n var newOfferNeeded = false;\n this.mediaDirection.audio = options.direction.audio;\n this.mediaDirection.video = options.direction.video;\n this.mediaDirection.screenShareVideo = options.direction.screenShareVideo;\n this.identifyTransceivers();\n localTrackTypes.forEach(_ref2 => {\n var {\n type,\n kind\n } = _ref2;\n var trackType = type;\n var transceiverType = type;\n var track = options.localTracks[trackType];\n var transceiver = this.transceivers[transceiverType];\n if (track !== undefined && track !== this.localTracks[trackType]) {\n this.localTracks[trackType] = track;\n if (transceiver) {\n this.log('updateTransceivers()', \"replacing sender track on \\\"\".concat(type, \"\\\" transceiver\"));\n transceiver.sender.replaceTrack(track);\n }\n }\n if (transceiver) {\n var trackInfo = getLocalTrackInfo(kind, this.mediaDirection[trackType], this.localTracks[trackType]);\n if (transceiver.direction !== trackInfo.direction) {\n this.log('updateTransceivers()', \"updating direction to \".concat(trackInfo.direction, \" on \\\"\").concat(type, \"\\\" transceiver\"));\n transceiver.direction = trackInfo.direction;\n newOfferNeeded = true;\n }\n }\n });\n return newOfferNeeded;\n }\n updateLocalTracks(tracks) {\n return this.updateTransceivers({\n localTracks: tracks,\n direction: _objectSpread$4({}, this.mediaDirection)\n });\n }\n updateDirection(direction) {\n return this.updateTransceivers({\n localTracks: this.localTracks,\n direction\n });\n }\n update(options) {\n var sdpNegotiationNeeded = false;\n if (this.updateRemoteQualityLevel(options.remoteQualityLevel)) {\n sdpNegotiationNeeded = true;\n }\n if (this.updateTransceivers(options)) {\n sdpNegotiationNeeded = true;\n }\n return sdpNegotiationNeeded;\n }\n getPeerConnectionState() {\n return this.pc.connectionState;\n }\n getIceConnectionState() {\n return this.pc.iceConnectionState;\n }\n getConnectionState() {\n var mediaConnectionState = this.evaluateMediaConnectionState();\n this.log('getConnectionState()', \"called, returning \".concat(mediaConnectionState));\n return mediaConnectionState;\n }\n getIceGatheringState() {\n return this.pc.iceGatheringState;\n }\n getStats() {\n return this.pc.getStats();\n }\n getTransceiverStats() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var result = {\n audio: {\n senders: [],\n receivers: []\n },\n video: {\n senders: [],\n receivers: []\n },\n screenShareAudio: {\n senders: [],\n receivers: []\n },\n screenShareVideo: {\n senders: [],\n receivers: []\n }\n };\n var _loop = function* _loop(type) {\n var transceiver = _this.transceivers[type];\n if (transceiver) {\n yield transceiver.sender.getStats().then(statsReport => {\n var _transceiver$sender, _transceiver$sender$t;\n result[type].senders.push({\n report: statsReport,\n currentDirection: transceiver.currentDirection,\n localTrackLabel: (_transceiver$sender = transceiver.sender) === null || _transceiver$sender === void 0 ? void 0 : (_transceiver$sender$t = _transceiver$sender.track) === null || _transceiver$sender$t === void 0 ? void 0 : _transceiver$sender$t.label\n });\n });\n yield transceiver.receiver.getStats().then(statsReport => {\n var _transceiver$sender2, _transceiver$sender2$;\n result[type].receivers.push({\n report: statsReport,\n currentDirection: transceiver.currentDirection,\n localTrackLabel: (_transceiver$sender2 = transceiver.sender) === null || _transceiver$sender2 === void 0 ? void 0 : (_transceiver$sender2$ = _transceiver$sender2.track) === null || _transceiver$sender2$ === void 0 ? void 0 : _transceiver$sender2$.label\n });\n });\n }\n };\n for (var {\n type\n } of localTrackTypes) {\n yield* _loop(type);\n }\n return result;\n })();\n }\n insertDTMF(tones, duration, interToneGap) {\n if (!this.transceivers.audio) {\n throw new Error('audio transceiver missing');\n }\n if (!this.transceivers.audio.sender) {\n throw new Error('this.transceivers.audio.sender is null');\n }\n if (!this.transceivers.audio.sender.dtmf) {\n throw new Error('this.transceivers.audio.sender.dtmf is null');\n }\n this.transceivers.audio.sender.dtmf.insertDTMF(tones.toUpperCase(), duration, interToneGap);\n }\n setupTransceiverListeners() {\n var _this$transceivers$au, _this$transceivers$au2;\n if ((_this$transceivers$au = this.transceivers.audio) !== null && _this$transceivers$au !== void 0 && (_this$transceivers$au2 = _this$transceivers$au.sender) !== null && _this$transceivers$au2 !== void 0 && _this$transceivers$au2.dtmf) {\n this.transceivers.audio.sender.dtmf.ontonechange = this.onToneChange.bind(this);\n }\n }\n onToneChange(event) {\n this.log('onToneChange()', \"emitting Event.DTMF_TONE_CHANGED with tone=\\\"\".concat(event.tone, \"\\\"\"));\n this.emit(MediaConnectionEventNames.DTMF_TONE_CHANGED, {\n tone: event.tone\n });\n }\n identifyTransceivers() {\n if (!this.transceivers.audio && !this.transceivers.video && !this.transceivers.screenShareVideo) {\n var transceivers = this.pc.getTransceivers();\n this.log('identifyTransceivers()', \"transceivers.length=\".concat(transceivers.length));\n transceivers.forEach((transceiver, idx) => {\n this.log('identifyTransceivers()', \"transceiver[\".concat(idx, \"].mid=\").concat(transceiver.mid));\n });\n [this.transceivers.audio, this.transceivers.video, this.transceivers.screenShareVideo] = transceivers;\n this.setupTransceiverListeners();\n }\n }\n onTrack(event) {\n var _event$transceiver, _this$transceivers$au3, _this$transceivers$au4, _this$transceivers$au5, _this$transceivers$vi, _this$transceivers$vi2, _this$transceivers$vi3, _this$transceivers$sc, _this$transceivers$sc2, _this$transceivers$sc3;\n this.log('onTrack()', \"callback called: event=\".concat(JSON.stringify(event)));\n var MEDIA_ID = {\n AUDIO_TRACK: '0',\n VIDEO_TRACK: '1',\n SHARE_TRACK: '2'\n };\n var {\n track\n } = event;\n var trackMediaID = null;\n this.identifyTransceivers();\n if ((_event$transceiver = event.transceiver) !== null && _event$transceiver !== void 0 && _event$transceiver.mid) {\n this.log('onTrack()', 'identifying track by event.transceiver.mid');\n trackMediaID = event.transceiver.mid;\n } else if (track.id === ((_this$transceivers$au3 = this.transceivers.audio) === null || _this$transceivers$au3 === void 0 ? void 0 : (_this$transceivers$au4 = _this$transceivers$au3.receiver) === null || _this$transceivers$au4 === void 0 ? void 0 : (_this$transceivers$au5 = _this$transceivers$au4.track) === null || _this$transceivers$au5 === void 0 ? void 0 : _this$transceivers$au5.id)) {\n trackMediaID = MEDIA_ID.AUDIO_TRACK;\n } else if (track.id === ((_this$transceivers$vi = this.transceivers.video) === null || _this$transceivers$vi === void 0 ? void 0 : (_this$transceivers$vi2 = _this$transceivers$vi.receiver) === null || _this$transceivers$vi2 === void 0 ? void 0 : (_this$transceivers$vi3 = _this$transceivers$vi2.track) === null || _this$transceivers$vi3 === void 0 ? void 0 : _this$transceivers$vi3.id)) {\n trackMediaID = MEDIA_ID.VIDEO_TRACK;\n } else if (track.id === ((_this$transceivers$sc = this.transceivers.screenShareVideo) === null || _this$transceivers$sc === void 0 ? void 0 : (_this$transceivers$sc2 = _this$transceivers$sc.receiver) === null || _this$transceivers$sc2 === void 0 ? void 0 : (_this$transceivers$sc3 = _this$transceivers$sc2.track) === null || _this$transceivers$sc3 === void 0 ? void 0 : _this$transceivers$sc3.id)) {\n trackMediaID = MEDIA_ID.SHARE_TRACK;\n } else {\n trackMediaID = null;\n }\n this.log('onTrack()', \"trackMediaID=\".concat(trackMediaID));\n switch (trackMediaID) {\n case MEDIA_ID.AUDIO_TRACK:\n this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=AUDIO');\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {\n type: RemoteTrackType.AUDIO,\n track\n });\n break;\n case MEDIA_ID.VIDEO_TRACK:\n this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=VIDEO');\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {\n type: RemoteTrackType.VIDEO,\n track\n });\n break;\n case MEDIA_ID.SHARE_TRACK:\n this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=SCREENSHARE_VIDEO');\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {\n type: RemoteTrackType.SCREENSHARE_VIDEO,\n track\n });\n break;\n default:\n {\n this.error('onTrack()', \"failed to match remote track media id: \".concat(trackMediaID));\n }\n }\n }\n addLocalTracks() {\n this.log('addLocalTracks()', \"adding tracks \".concat(JSON.stringify(this.localTracks)));\n if (this.localTracks.audio) {\n this.pc.addTrack(this.localTracks.audio);\n }\n if (this.localTracks.video) {\n this.pc.addTrack(this.localTracks.video);\n }\n if (this.localTracks.screenShareVideo) {\n this.pc.addTrack(this.localTracks.screenShareVideo);\n }\n }\n onPeerConnectionStateChange() {\n this.log('onPeerConnectionStateChange()', \"callback called: peerConnectionState=\".concat(this.pc.connectionState));\n this.emit(MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {\n state: this.pc.connectionState\n });\n }\n onIceConnectionStateChange() {\n this.log('onIceConnectionStateChange()', \"callback called: iceConnectionState=\".concat(this.pc.iceConnectionState));\n this.emit(MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {\n state: this.pc.iceConnectionState\n });\n }\n evaluateMediaConnectionState() {\n var rtcPcConnectionState = this.pc.connectionState;\n var iceState = this.pc.iceConnectionState;\n var connectionStates = [rtcPcConnectionState, iceState];\n var mediaConnectionState;\n if (connectionStates.some(value => value === 'closed')) {\n mediaConnectionState = ConnectionState.Closed;\n } else if (connectionStates.some(value => value === 'failed')) {\n mediaConnectionState = ConnectionState.Failed;\n } else if (connectionStates.some(value => value === 'disconnected')) {\n mediaConnectionState = ConnectionState.Disconnected;\n } else if (connectionStates.every(value => value === 'connected' || value === 'completed')) {\n mediaConnectionState = ConnectionState.Connected;\n } else if (connectionStates.every(value => value === 'new')) {\n mediaConnectionState = ConnectionState.New;\n } else {\n mediaConnectionState = ConnectionState.Connecting;\n }\n this.log('evaluateConnectionState', \"iceConnectionState=\".concat(iceState, \" rtcPcConnectionState=\").concat(rtcPcConnectionState, \" => mediaConnectionState=\").concat(mediaConnectionState));\n return mediaConnectionState;\n }\n createSdpMungingConfig() {\n if (this.remoteQualityLevel) {\n var maxFsValues = {\n LOW: 1620,\n MEDIUM: 3600,\n HIGH: 8192\n };\n if (!maxFsValues[this.remoteQualityLevel]) {\n throw new Error(\"invalid value for receiveOptions.remoteQualityLevel: \".concat(this.remoteQualityLevel));\n }\n if (this.config.sdpMunging.h264MaxFs) {\n this.warn('createSdpMungingConfig', 'conflict: both config.sdpMunging.h264MaxFs and receiveOptions.remoteQualityLevel are set, remoteQualityLevel will override the config');\n }\n return _objectSpread$4(_objectSpread$4({}, this.config.sdpMunging), {}, {\n h264MaxFs: maxFsValues[this.remoteQualityLevel]\n });\n }\n return this.config.sdpMunging;\n }\n createLocalOffer() {\n var sdpMungingConfig = this.createSdpMungingConfig();\n return this.pc.createOffer().then(description => {\n this.log('createLocalOffer', 'local SDP offer created');\n var mungedDescription = {\n type: description.type,\n sdp: mungeLocalSdpForBrowser(sdpMungingConfig, (description === null || description === void 0 ? void 0 : description.sdp) || '')\n };\n return this.pc.setLocalDescription(mungedDescription);\n }).then(() => this.waitForIceCandidates()).then(() => {\n var _this$pc$localDescrip;\n var mungedSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip = this.pc.localDescription) === null || _this$pc$localDescrip === void 0 ? void 0 : _this$pc$localDescrip.sdp) || '');\n this.emit(MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);\n return {\n sdp: mungedSdp\n };\n }).catch(error => {\n if (error instanceof IceGatheringError || error instanceof SdpError) {\n throw error;\n } else {\n throw new SdpOfferCreationError(\"createLocalOffer() failure: \".concat(error.message), {\n cause: error\n });\n }\n });\n }\n handleRemoteOffer(sdp) {\n this.log('handleRemoteOffer', 'called');\n if (!sdp) {\n return Promise.reject(new SdpOfferHandlingError('SDP missing'));\n }\n var mungedRemoteSdp = mungeRemoteSdp(this.config.sdpMunging, sdp);\n var sdpMungingConfig = this.createSdpMungingConfig();\n return this.pc.setRemoteDescription(new window.RTCSessionDescription({\n type: 'offer',\n sdp: mungedRemoteSdp\n })).then(() => this.emit(MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED)).then(() => this.pc.createAnswer()).then(answer => {\n var mungedAnswer = {\n type: answer.type,\n sdp: mungeLocalSdpForBrowser(sdpMungingConfig, (answer === null || answer === void 0 ? void 0 : answer.sdp) || '')\n };\n return this.pc.setLocalDescription(mungedAnswer);\n }).then(() => this.waitForIceCandidates()).then(() => {\n var _this$pc$localDescrip2;\n var mungedLocalSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip2 = this.pc.localDescription) === null || _this$pc$localDescrip2 === void 0 ? void 0 : _this$pc$localDescrip2.sdp) || '');\n this.emit(MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);\n return {\n sdp: mungedLocalSdp\n };\n }).catch(error => {\n if (error instanceof IceGatheringError || error instanceof SdpError) {\n throw error;\n } else {\n throw new SdpOfferHandlingError(\"handleRemoteOffer() failure: \".concat(error.message), {\n cause: error\n });\n }\n });\n }\n handleRemoteAnswer(sdp) {\n this.log('handleRemoteAnswer', 'called');\n if (!sdp) {\n return Promise.reject(new SdpAnswerHandlingError('SDP answer missing'));\n }\n var mungedRemoteSdp = mungeRemoteSdp(this.config.sdpMunging, sdp);\n return this.pc.setRemoteDescription(new window.RTCSessionDescription({\n type: 'answer',\n sdp: mungedRemoteSdp\n })).then(result => {\n this.emit(MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);\n return result;\n }).catch(error => {\n throw new SdpAnswerHandlingError(\"handleRemoteAnswer() failure: \".concat(error.message), {\n cause: error\n });\n });\n }\n waitForIceCandidates() {\n return new Promise((resolve, reject) => {\n var startTime = performance.now();\n var done = false;\n var timeoutId;\n var runSdpCheckForErrors = () => {\n var _this$pc$localDescrip3;\n return checkSdpForErrors({\n allowPort0: !!this.config.sdpMunging.convertPort9to0,\n requireH264: !!this.config.requireH264\n }, (_this$pc$localDescrip3 = this.pc.localDescription) === null || _this$pc$localDescrip3 === void 0 ? void 0 : _this$pc$localDescrip3.sdp);\n };\n var doneGatheringIceCandidates = () => {\n if (!done) {\n var milliseconds = performance.now() - startTime;\n this.log('waitForIceCandidates()', \"checking SDP...\");\n var sdpError = runSdpCheckForErrors();\n if (sdpError) {\n var _this$pc$localDescrip4;\n this.error('waitForIceCandidates()', \"SDP not valid after waiting: \\\"\".concat(sdpError.message, \"\\\", sdp=\").concat((_this$pc$localDescrip4 = this.pc.localDescription) === null || _this$pc$localDescrip4 === void 0 ? void 0 : _this$pc$localDescrip4.sdp));\n reject(sdpError);\n }\n this.log('waitForIceCandidates()', \"It took \".concat(milliseconds, \" milliseconds to gather ice candidates\"));\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n done = true;\n this.pc.onicegatheringstatechange = null;\n this.pc.onicecandidate = null;\n this.pc.onicecandidateerror = null;\n resolve();\n }\n };\n if (this.pc.iceGatheringState === 'complete' && runSdpCheckForErrors() === false) {\n this.log('waitForIceCandidates()', 'iceGatheringState is already \"complete\" and local SDP is valid');\n resolve();\n return;\n }\n this.log('waitForIceCandidates()', 'waiting for ICE candidates to be gathered...');\n if (this.config.iceCandidatesTimeout) {\n timeoutId = setTimeout(() => {\n if (!done) {\n this.log('waitForIceCandidates()', \"timeout of \".concat(this.config.iceCandidatesTimeout, \" milliseconds reached\"));\n doneGatheringIceCandidates();\n }\n }, this.config.iceCandidatesTimeout);\n }\n this.pc.onicegatheringstatechange = () => {\n this.log('waitForIceCandidates()', \"iceGatheringState changed to \".concat(this.pc.iceGatheringState));\n this.emit(MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {\n state: this.pc.iceGatheringState\n });\n if (this.pc.iceGatheringState === 'complete') {\n doneGatheringIceCandidates();\n }\n };\n this.pc.onicecandidate = evt => {\n if (evt.candidate === null) {\n this.log('waitForIceCandidates()', 'evt.candidate === null received');\n doneGatheringIceCandidates();\n } else {\n var _evt$candidate, _evt$candidate2;\n this.log('waitForIceCandidates()', \"ICE Candidate(\".concat((_evt$candidate = evt.candidate) === null || _evt$candidate === void 0 ? void 0 : _evt$candidate.sdpMLineIndex, \"): \").concat((_evt$candidate2 = evt.candidate) === null || _evt$candidate2 === void 0 ? void 0 : _evt$candidate2.candidate));\n }\n };\n this.pc.onicecandidateerror = event => {\n this.warn('waitForIceCandidates()', \"onicecandidateerror: \".concat(event));\n };\n });\n }\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nvar logDisabled_ = true;\nvar deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n var match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n var nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n var wrappedCallback = e => {\n var modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n };\n var nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n var unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n };\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log$1() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n var result = {\n browser: null,\n version: null\n };\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n var {\n navigator\n } = window;\n if (navigator.mozGetUserMedia) {\n // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else {\n // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n return Object.keys(data).reduce(function (accumulator, key) {\n var isObj = isObject(data[key]);\n var value = isObj ? compactObject(data[key]) : data[key];\n var isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {\n [key]: value\n });\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n var filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n var trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' && value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nvar logging = log$1;\nfunction shimGetUserMedia$2(window, browserDetails) {\n var navigator = window && window.navigator;\n if (!navigator.mediaDevices) {\n return;\n }\n var constraintsToChrome_ = function constraintsToChrome_(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n var cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = typeof c[key] === 'object' ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n var oldname_ = function oldname_(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return name === 'deviceId' ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n var shimConstraints_ = function shimConstraints_(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n var face = constraints.video.facingMode;\n face = face && (typeof face === 'object' ? face : {\n ideal: face\n });\n var getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n var matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n var dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n\n if (dev) {\n constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n var shimError_ = function shimError_(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetDisplayMedia$1(window, getSourceId) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n return getSourceId(constraints).then(sourceId => {\n var widthSpecified = constraints.video && constraints.video.width;\n var heightSpecified = constraints.video && constraints.video.height;\n var frameRateSpecified = constraints.video && constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack$1(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = e => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {\n track: te.track\n };\n }\n var event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver\n };\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {\n track\n };\n }\n var event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver\n };\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver', {\n value: {\n receiver: e.receiver\n }\n });\n }\n return e;\n });\n }\n}\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n var idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n var sender = this._senders.find(s => s.track === track);\n if (sender) {\n // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n var fixChromeStats_ = function fixChromeStats_(response) {\n var standardReport = {};\n var reports = response.result();\n reports.forEach(report => {\n var standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n return standardReport;\n };\n\n // shim getStats with maplike support\n var makeMapStats = function makeMapStats(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n if (arguments.length >= 2) {\n var successCallbackWrapper_ = function successCallbackWrapper_(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n return origGetStats.apply(this, [successCallbackWrapper_, selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [function (response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n var sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n var receiver = this;\n return this._pc.getStats().then(result => filterStats(result, receiver.track, false));\n };\n }\n if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n var track = arguments[0];\n var sender;\n var receiver;\n var err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || sender && receiver) {\n return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n var sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach(track => {\n var alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n var existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n var newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n var idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach(track => {\n var alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n var newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n var streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n }\n var alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n var oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n var newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = {\n [method]() {\n var args = arguments;\n var isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [description => {\n var desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n }, err => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]]);\n }\n return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n get() {\n var description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n var isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n var stream;\n Object.keys(this._streams).forEach(streamid => {\n var hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\nfunction shimPeerConnection$1(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = {\n [method]() {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n var pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n\nvar chromeShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimMediaStream: shimMediaStream,\n shimOnTrack: shimOnTrack$1,\n shimGetSendersWithDtmf: shimGetSendersWithDtmf,\n shimGetStats: shimGetStats,\n shimSenderReceiverGetStats: shimSenderReceiverGetStats,\n shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,\n shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,\n shimPeerConnection: shimPeerConnection$1,\n fixNegotiationNeeded: fixNegotiationNeeded,\n shimGetUserMedia: shimGetUserMedia$2,\n shimGetDisplayMedia: shimGetDisplayMedia$1\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimGetUserMedia$1(window, browserDetails) {\n var navigator = window && window.navigator;\n var MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function (constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function () {\n var obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function (c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {\n mediaSource: preferredMediaSource\n };\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = {\n [method]() {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n var modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null]).then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n var sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n var shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach(encodingParam => {\n if ('rid' in encodingParam) {\n var ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n var transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n var {\n sender\n } = transceiver;\n var params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n }\n}\nfunction shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n var origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters = function getParameters() {\n var params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(() => {\n return origCreateOffer.apply(this, arguments);\n }).finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(() => {\n return origCreateAnswer.apply(this, arguments);\n }).finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\nvar firefoxShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimOnTrack: shimOnTrack,\n shimPeerConnection: shimPeerConnection,\n shimSenderGetStats: shimSenderGetStats,\n shimReceiverGetStats: shimReceiverGetStats,\n shimRemoveStream: shimRemoveStream,\n shimRTCDataChannel: shimRTCDataChannel,\n shimAddTransceiver: shimAddTransceiver,\n shimGetParameters: shimGetParameters,\n shimCreateOffer: shimCreateOffer,\n shimCreateAnswer: shimCreateAnswer,\n shimGetUserMedia: shimGetUserMedia$1,\n shimGetDisplayMedia: shimGetDisplayMedia\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n streams[_key - 1] = arguments[_key];\n }\n if (streams) {\n streams.forEach(stream => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n var index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n var tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\nfunction shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = e => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n var prototype = window.RTCPeerConnection.prototype;\n var origCreateOffer = prototype.createOffer;\n var origCreateAnswer = prototype.createAnswer;\n var setLocalDescription = prototype.setLocalDescription;\n var setRemoteDescription = prototype.setRemoteDescription;\n var addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n var withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function withCallback(candidate, successCallback, failureCallback) {\n var promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n var navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n var mediaDevices = navigator.mediaDevices;\n var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = constraints => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }.bind(navigator);\n }\n}\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({}, constraints, {\n video: compactObject(constraints.video)\n });\n }\n return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n var OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n var newIceServers = [];\n for (var i = 0; i < pcConfig.iceServers.length; i++) {\n var server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimCreateOfferLegacy(window) {\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n }\n var audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n this.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n }\n var videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n this.addTransceiver('video', {\n direction: 'recvonly'\n });\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\nvar safariShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimLocalStreamsAPI: shimLocalStreamsAPI,\n shimRemoteStreamsAPI: shimRemoteStreamsAPI,\n shimCallbacksAPI: shimCallbacksAPI,\n shimGetUserMedia: shimGetUserMedia,\n shimConstraints: shimConstraints,\n shimRTCIceServerUrls: shimRTCIceServerUrls,\n shimTrackEventTransceiver: shimTrackEventTransceiver,\n shimCreateOfferLegacy: shimCreateOfferLegacy,\n shimAudioContext: shimAudioContext\n});\n\nvar sdp$1 = {exports: {}};\n\n/* eslint-env node */\n(function (module) {\n\n // SDP helpers.\n var SDPUtils = {};\n\n // Generate an alphanumeric identifier for cname or mids.\n // TODO: use UUIDs instead? https://gist.github.com/jed/982883\n SDPUtils.generateIdentifier = function () {\n return Math.random().toString(36).substr(2, 10);\n };\n\n // The RTCP CNAME used by all peerconnections from the same JS.\n SDPUtils.localCName = SDPUtils.generateIdentifier();\n\n // Splits SDP into lines, dealing with both CRLF and LF.\n SDPUtils.splitLines = function (blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n };\n // Splits SDP into sessionpart and mediasections. Ensures CRLF.\n SDPUtils.splitSections = function (blob) {\n var parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n };\n\n // Returns the session description.\n SDPUtils.getDescription = function (blob) {\n var sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n };\n\n // Returns the individual media sections.\n SDPUtils.getMediaSections = function (blob) {\n var sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n };\n\n // Returns lines that start with a certain prefix.\n SDPUtils.matchPrefix = function (blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n };\n\n // Parses an ICE candidate line. Sample input:\n // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n // rport 55996\"\n // Input can be prefixed with a=.\n SDPUtils.parseCandidate = function (line) {\n var parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n var candidate = {\n foundation: parts[0],\n component: {\n 1: 'rtp',\n 2: 'rtcp'\n }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4],\n // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n for (var i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n };\n\n // Translates a candidate object into SDP candidate attribute.\n // This does not include the a= prefix!\n SDPUtils.writeCandidate = function (candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n var component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n var type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n };\n\n // Parses an ice-options line, returns an array of option tags.\n // Sample input:\n // a=ice-options:foo bar\n SDPUtils.parseIceOptions = function (line) {\n return line.substr(14).split(' ');\n };\n\n // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n // a=rtpmap:111 opus/48000/2\n SDPUtils.parseRtpMap = function (line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n };\n\n // Generates a rtpmap line from RTCRtpCodecCapability or\n // RTCRtpCodecParameters.\n SDPUtils.writeRtpMap = function (codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n var channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n };\n\n // Parses a extmap line (headerextension from RFC 5285). Sample input:\n // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n SDPUtils.parseExtmap = function (line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1]\n };\n };\n\n // Generates an extmap line from RTCRtpHeaderExtensionParameters or\n // RTCRtpHeaderExtension.\n SDPUtils.writeExtmap = function (headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\\r\\n';\n };\n\n // Parses a fmtp line, returns dictionary. Sample input:\n // a=fmtp:96 vbr=on;cng=on\n // Also deals with vbr=on; cng=on\n SDPUtils.parseFmtp = function (line) {\n var parsed = {};\n var kv;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n };\n\n // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n SDPUtils.writeFmtp = function (codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n };\n\n // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n // a=rtcp-fb:98 nack rpsi\n SDPUtils.parseRtcpFb = function (line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n };\n\n // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n SDPUtils.writeRtcpFb = function (codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n });\n }\n return lines;\n };\n\n // Parses a RFC 5576 ssrc media attribute. Sample input:\n // a=ssrc:3735928559 cname:something\n SDPUtils.parseSsrcMedia = function (line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n };\n\n // Parse a ssrc-group line (see RFC 5576). Sample input:\n // a=ssrc-group:semantics 12 34\n SDPUtils.parseSsrcGroup = function (line) {\n var parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n };\n };\n\n // Extracts the MID (RFC 5888) from a media section.\n // Returns the MID or undefined if no mid line was found.\n SDPUtils.getMid = function (mediaSection) {\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n };\n\n // Parses a fingerprint line for DTLS-SRTP.\n SDPUtils.parseFingerprint = function (line) {\n var parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(),\n // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n };\n };\n\n // Extracts DTLS parameters from SDP media section or sessionpart.\n // FIXME: for consistency with other functions this should only\n // get the fingerprint line as input. See also getIceParameters.\n SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n };\n\n // Serializes DTLS parameters to SDP.\n SDPUtils.writeDtlsParameters = function (params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n };\n\n // Parses a=crypto lines into\n // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n SDPUtils.parseCryptoLine = function (line) {\n var parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n };\n SDPUtils.writeCryptoLine = function (parameters) {\n return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n };\n\n // Parses the crypto key parameters into\n // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n SDPUtils.parseCryptoKeyParams = function (keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n var parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n };\n };\n SDPUtils.writeCryptoKeyParams = function (keyParams) {\n return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n };\n\n // Extracts all SDES parameters.\n SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n };\n\n // Parses ICE information from SDP media section or sessionpart.\n // FIXME: for consistency with other functions this should only\n // get the ice-ufrag and ice-pwd lines as input.\n SDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10)\n };\n };\n\n // Serializes ICE parameters to SDP.\n SDPUtils.writeIceParameters = function (params) {\n var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n };\n\n // Parses the SDP media section and returns RTCRtpParameters.\n SDPUtils.parseRtpParameters = function (mediaSection) {\n var description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n for (var i = 3; i < mline.length; i++) {\n // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n };\n\n // Generates parts of the SDP media section describing the capabilities /\n // parameters.\n SDPUtils.writeRtpDescription = function (kind, caps) {\n var sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n var maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n };\n\n // Parses the SDP media section and returns an array of\n // RTCRtpEncodingParameters.\n SDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n var encodingParameters = [];\n var description = SDPUtils.parseRtpParameters(mediaSection);\n var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc;\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n var parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n var encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {\n ssrc: secondarySsrc\n };\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n };\n\n // parses http://draft.ortc.org/#rtcrtcpparameters*\n SDPUtils.parseRtcpParameters = function (mediaSection) {\n var rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrÑ–bute.\n // Note that Edge does not support unmuxed RTCP.\n var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n return rtcpParameters;\n };\n SDPUtils.writeRtcpParameters = function (rtcpParameters) {\n var sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n };\n\n // parses either a=msid: or a=ssrc:... msid lines and returns\n // the id of the MediaStream and MediaStreamTrack.\n SDPUtils.parseMsid = function (mediaSection) {\n var parts;\n var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n };\n\n // SCTP\n // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n // to draft-ietf-mmusic-sctp-sdp-05\n SDPUtils.parseSctpDescription = function (mediaSection) {\n var mline = SDPUtils.parseMLine(mediaSection);\n var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n var maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize\n };\n }\n var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n var parts = sctpMapLines[0].substr(10).split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize\n };\n }\n };\n\n // SCTP\n // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n // support by now receiving in this format, unless we originally parsed\n // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n // protocol of DTLS/SCTP -- without UDP/ or TCP/)\n SDPUtils.writeSctpDescription = function (media, sctp) {\n var output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n } else {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n };\n\n // Generate a session ID for SDP.\n // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n // recommends using a cryptographically random +ve 64-bit value\n // but right now this should be acceptable and within the right range\n SDPUtils.generateSessionId = function () {\n return Math.random().toString().substr(2, 21);\n };\n\n // Write boiler plate for start of SDP\n // sessId argument is optional - if not supplied it will\n // be generated randomly\n // sessVersion is optional and defaults to 2\n // sessUser is optional and defaults to 'thisisadapterortc'\n SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n var sessionId;\n var version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n var user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n };\n\n // Gets the direction from the mediaSection or the sessionpart.\n SDPUtils.getDirection = function (mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n var lines = SDPUtils.splitLines(mediaSection);\n for (var i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n // FIXME: What should happen here?\n }\n }\n\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n };\n SDPUtils.getKind = function (mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n return mline[0].substr(2);\n };\n SDPUtils.isRejected = function (mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n };\n SDPUtils.parseMLine = function (mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n };\n SDPUtils.parseOLine = function (mediaSection) {\n var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n var parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n };\n\n // a very naive interpretation of a valid SDP.\n SDPUtils.isValidSDP = function (blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n var lines = SDPUtils.splitLines(blob);\n for (var i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n\n return true;\n };\n\n // Expose public methods.\n {\n module.exports = SDPUtils;\n }\n})(sdp$1);\nvar SDPUtils = sdp$1.exports;\n\nvar sdp = /*#__PURE__*/_mergeNamespaces({\n __proto__: null,\n 'default': SDPUtils\n}, [sdp$1.exports]);\n\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n return;\n }\n var NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n var nativeCandidate = new NativeRTCIceCandidate(args);\n var parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n var sctpInDescription = function sctpInDescription(description) {\n if (!description || !description.sdp) {\n return false;\n }\n var sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n var mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) {\n // TODO: Is there a better solution for detecting Firefox?\n var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n var version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n var canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n var maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n var match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n var {\n sdpSemantics\n } = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n var maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n var sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n var origDataChannelSend = dc.send;\n dc.send = function send() {\n var data = arguments[0];\n var length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n var dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n ['setLocalDescription', 'setRemoteDescription'].forEach(method => {\n var origMethod = proto[method];\n proto[method] = function () {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n var pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n var newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n var sdp = desc.sdp.split('\\n').filter(line => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n var desc = arguments[0] || {};\n if (typeof desc !== 'object' || desc.type && desc.sdp) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n var func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n\nvar commonShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimRTCIceCandidate: shimRTCIceCandidate,\n shimMaxMessageSize: shimMaxMessageSize,\n shimSendThrowTypeError: shimSendThrowTypeError,\n shimConnectionState: shimConnectionState,\n removeExtmapAllowMixed: removeExtmapAllowMixed,\n shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty,\n shimParameterlessSetLocalDescription: shimParameterlessSetLocalDescription\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory() {\n var {\n window\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n };\n // Utils.\n var logging = log$1;\n var browserDetails = detectBrowser(window);\n var adapter = {\n browserDetails,\n commonShim,\n extractVersion: extractVersion,\n disableLog: disableLog,\n disableWarnings: disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimGetUserMedia$2(window, browserDetails);\n shimMediaStream(window);\n shimPeerConnection$1(window, browserDetails);\n shimOnTrack$1(window);\n shimAddTrackRemoveTrack(window, browserDetails);\n shimGetSendersWithDtmf(window);\n shimGetStats(window);\n shimSenderReceiverGetStats(window);\n fixNegotiationNeeded(window, browserDetails);\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimGetUserMedia$1(window, browserDetails);\n shimPeerConnection(window, browserDetails);\n shimOnTrack(window);\n shimRemoveStream(window);\n shimSenderGetStats(window);\n shimReceiverGetStats(window);\n shimRTCDataChannel(window);\n shimAddTransceiver(window);\n shimGetParameters(window);\n shimCreateOffer(window);\n shimCreateAnswer(window);\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimRTCIceServerUrls(window);\n shimCreateOfferLegacy(window);\n shimCallbacksAPI(window);\n shimLocalStreamsAPI(window);\n shimRemoteStreamsAPI(window);\n shimTrackEventTransceiver(window);\n shimGetUserMedia(window);\n shimAudioContext(window);\n shimRTCIceCandidate(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n return adapter;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nadapterFactory({\n window: typeof window === 'undefined' ? undefined : window\n});\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n return t;\n };\n return _assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nvar ActionTypes;\n(function (ActionTypes) {\n ActionTypes[\"Start\"] = \"xstate.start\";\n ActionTypes[\"Stop\"] = \"xstate.stop\";\n ActionTypes[\"Raise\"] = \"xstate.raise\";\n ActionTypes[\"Send\"] = \"xstate.send\";\n ActionTypes[\"Cancel\"] = \"xstate.cancel\";\n ActionTypes[\"NullEvent\"] = \"\";\n ActionTypes[\"Assign\"] = \"xstate.assign\";\n ActionTypes[\"After\"] = \"xstate.after\";\n ActionTypes[\"DoneState\"] = \"done.state\";\n ActionTypes[\"DoneInvoke\"] = \"done.invoke\";\n ActionTypes[\"Log\"] = \"xstate.log\";\n ActionTypes[\"Init\"] = \"xstate.init\";\n ActionTypes[\"Invoke\"] = \"xstate.invoke\";\n ActionTypes[\"ErrorExecution\"] = \"error.execution\";\n ActionTypes[\"ErrorCommunication\"] = \"error.communication\";\n ActionTypes[\"ErrorPlatform\"] = \"error.platform\";\n ActionTypes[\"ErrorCustom\"] = \"xstate.error\";\n ActionTypes[\"Update\"] = \"xstate.update\";\n ActionTypes[\"Pure\"] = \"xstate.pure\";\n ActionTypes[\"Choose\"] = \"xstate.choose\";\n})(ActionTypes || (ActionTypes = {}));\nvar SpecialTargets;\n(function (SpecialTargets) {\n SpecialTargets[\"Parent\"] = \"#_parent\";\n SpecialTargets[\"Internal\"] = \"#_internal\";\n})(SpecialTargets || (SpecialTargets = {}));\n\nvar start$1 = ActionTypes.Start;\nvar stop$1 = ActionTypes.Stop;\nvar raise$1 = ActionTypes.Raise;\nvar send$1 = ActionTypes.Send;\nvar cancel$1 = ActionTypes.Cancel;\nvar nullEvent = ActionTypes.NullEvent;\nvar assign$2 = ActionTypes.Assign;\nActionTypes.After;\nActionTypes.DoneState;\nvar log = ActionTypes.Log;\nvar init = ActionTypes.Init;\nvar invoke = ActionTypes.Invoke;\nActionTypes.ErrorExecution;\nvar errorPlatform = ActionTypes.ErrorPlatform;\nvar error$1 = ActionTypes.ErrorCustom;\nvar update = ActionTypes.Update;\nvar choose = ActionTypes.Choose;\nvar pure = ActionTypes.Pure;\n\nvar STATE_DELIMITER = '.';\nvar EMPTY_ACTIVITY_MAP = {};\nvar DEFAULT_GUARD_TYPE = 'xstate.guard';\nvar TARGETLESS_KEY = '';\n\nvar IS_PRODUCTION = browser$1.env.NODE_ENV === 'production';\n\nvar _a;\nfunction matchesState(parentStateId, childStateId, delimiter) {\n if (delimiter === void 0) {\n delimiter = STATE_DELIMITER;\n }\n var parentStateValue = toStateValue(parentStateId, delimiter);\n var childStateValue = toStateValue(childStateId, delimiter);\n if (isString(childStateValue)) {\n if (isString(parentStateValue)) {\n return childStateValue === parentStateValue;\n } // Parent more specific than child\n\n return false;\n }\n if (isString(parentStateValue)) {\n return parentStateValue in childStateValue;\n }\n return Object.keys(parentStateValue).every(function (key) {\n if (!(key in childStateValue)) {\n return false;\n }\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\nfunction getEventType(event) {\n try {\n return isString(event) || typeof event === 'number' ? \"\".concat(event) : event.type;\n } catch (e) {\n throw new Error('Events must be strings or objects with a string event.type property.');\n }\n}\nfunction toStatePath(stateId, delimiter) {\n try {\n if (isArray(stateId)) {\n return stateId;\n }\n return stateId.toString().split(delimiter);\n } catch (e) {\n throw new Error(\"'\".concat(stateId, \"' is not a valid state path.\"));\n }\n}\nfunction isStateLike(state) {\n return typeof state === 'object' && 'value' in state && 'context' in state && 'event' in state && '_event' in state;\n}\nfunction toStateValue(stateValue, delimiter) {\n if (isStateLike(stateValue)) {\n return stateValue.value;\n }\n if (isArray(stateValue)) {\n return pathToStateValue(stateValue);\n }\n if (typeof stateValue !== 'string') {\n return stateValue;\n }\n var statePath = toStatePath(stateValue, delimiter);\n return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n if (statePath.length === 1) {\n return statePath[0];\n }\n var value = {};\n var marker = value;\n for (var i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n marker[statePath[i]] = {};\n marker = marker[statePath[i]];\n }\n }\n return value;\n}\nfunction mapValues(collection, iteratee) {\n var result = {};\n var collectionKeys = Object.keys(collection);\n for (var i = 0; i < collectionKeys.length; i++) {\n var key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n return result;\n}\nfunction mapFilterValues(collection, iteratee, predicate) {\n var e_1, _a;\n var result = {};\n try {\n for (var _b = __values(Object.keys(collection)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var item = collection[key];\n if (!predicate(item)) {\n continue;\n }\n result[key] = iteratee(item, key, collection);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n return result;\n}\n/**\r\n * Retrieves a value at the given path.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nvar path = function path(props) {\n return function (object) {\n var e_2, _a;\n var result = object;\n try {\n for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n var prop = props_1_1.value;\n result = result[prop];\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n return result;\n };\n};\n/**\r\n * Retrieves a value at the given path via the nested accessor prop.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nfunction nestedPath(props, accessorProp) {\n return function (object) {\n var e_3, _a;\n var result = object;\n try {\n for (var props_2 = __values(props), props_2_1 = props_2.next(); !props_2_1.done; props_2_1 = props_2.next()) {\n var prop = props_2_1.value;\n result = result[accessorProp][prop];\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (props_2_1 && !props_2_1.done && (_a = props_2.return)) _a.call(props_2);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n return result;\n };\n}\nfunction toStatePaths(stateValue) {\n if (!stateValue) {\n return [[]];\n }\n if (isString(stateValue)) {\n return [[stateValue]];\n }\n var result = flatten(Object.keys(stateValue).map(function (key) {\n var subStateValue = stateValue[key];\n if (typeof subStateValue !== 'string' && (!subStateValue || !Object.keys(subStateValue).length)) {\n return [[key]];\n }\n return toStatePaths(stateValue[key]).map(function (subPath) {\n return [key].concat(subPath);\n });\n }));\n return result;\n}\nfunction flatten(array) {\n var _a;\n return (_a = []).concat.apply(_a, __spreadArray([], __read(array), false));\n}\nfunction toArrayStrict(value) {\n if (isArray(value)) {\n return value;\n }\n return [value];\n}\nfunction toArray(value) {\n if (value === undefined) {\n return [];\n }\n return toArrayStrict(value);\n}\nfunction mapContext(mapper, context, _event) {\n var e_5, _a;\n if (isFunction(mapper)) {\n return mapper(context, _event.data);\n }\n var result = {};\n try {\n for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var subMapper = mapper[key];\n if (isFunction(subMapper)) {\n result[key] = subMapper(context, _event.data);\n } else {\n result[key] = subMapper;\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n return result;\n}\nfunction isBuiltInEvent(eventType) {\n return /^(done|error)\\./.test(eventType);\n}\nfunction isPromiseLike(value) {\n if (value instanceof Promise) {\n return true;\n } // Check if shape matches the Promise/A+ specification for a \"thenable\".\n\n if (value !== null && (isFunction(value) || typeof value === 'object') && isFunction(value.then)) {\n return true;\n }\n return false;\n}\nfunction isBehavior(value) {\n return value !== null && typeof value === 'object' && 'transition' in value && typeof value.transition === 'function';\n}\nfunction partition(items, predicate) {\n var e_6, _a;\n var _b = __read([[], []], 2),\n truthy = _b[0],\n falsy = _b[1];\n try {\n for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n var item = items_1_1.value;\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item);\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n return [truthy, falsy];\n}\nfunction updateHistoryStates(hist, stateValue) {\n return mapValues(hist.states, function (subHist, key) {\n if (!subHist) {\n return undefined;\n }\n var subStateValue = (isString(stateValue) ? undefined : stateValue[key]) || (subHist ? subHist.current : undefined);\n if (!subStateValue) {\n return undefined;\n }\n return {\n current: subStateValue,\n states: updateHistoryStates(subHist, subStateValue)\n };\n });\n}\nfunction updateHistoryValue(hist, stateValue) {\n return {\n current: stateValue,\n states: updateHistoryStates(hist, stateValue)\n };\n}\nfunction updateContext(context, _event, assignActions, state) {\n if (!IS_PRODUCTION) {\n warn(!!context, 'Attempting to update undefined context');\n }\n var updatedContext = context ? assignActions.reduce(function (acc, assignAction) {\n var e_7, _a;\n var assignment = assignAction.assignment;\n var meta = {\n state: state,\n action: assignAction,\n _event: _event\n };\n var partialUpdate = {};\n if (isFunction(assignment)) {\n partialUpdate = assignment(acc, _event.data, meta);\n } else {\n try {\n for (var _b = __values(Object.keys(assignment)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var propAssignment = assignment[key];\n partialUpdate[key] = isFunction(propAssignment) ? propAssignment(acc, _event.data, meta) : propAssignment;\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n return Object.assign({}, acc, partialUpdate);\n }, context) : context;\n return updatedContext;\n} // tslint:disable-next-line:no-empty\n\nvar warn = function warn() {};\nif (!IS_PRODUCTION) {\n warn = function warn(condition, message) {\n var error = condition instanceof Error ? condition : undefined;\n if (!error && condition) {\n return;\n }\n if (console !== undefined) {\n var args = [\"Warning: \".concat(message)];\n if (error) {\n args.push(error);\n } // tslint:disable-next-line:no-console\n\n console.warn.apply(console, args);\n }\n };\n}\nfunction isArray(value) {\n return Array.isArray(value);\n} // tslint:disable-next-line:ban-types\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction toGuard(condition, guardMap) {\n if (!condition) {\n return undefined;\n }\n if (isString(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition,\n predicate: guardMap ? guardMap[condition] : undefined\n };\n }\n if (isFunction(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition.name,\n predicate: condition\n };\n }\n return condition;\n}\nfunction isObservable(value) {\n try {\n return 'subscribe' in value && isFunction(value.subscribe);\n } catch (e) {\n return false;\n }\n}\nvar symbolObservable = /*#__PURE__*/function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}(); // TODO: to be removed in v5, left it out just to minimize the scope of the change and maintain compatibility with older versions of integration paackages\n\n(_a = {}, _a[symbolObservable] = function () {\n return this;\n}, _a[Symbol.observable] = function () {\n return this;\n}, _a);\nfunction isMachine(value) {\n return !!value && '__xstatenode' in value;\n}\nfunction isActor$1(value) {\n return !!value && typeof value.send === 'function';\n}\nfunction toEventObject(event, payload // id?: TEvent['type']\n) {\n if (isString(event) || typeof event === 'number') {\n return _assign({\n type: event\n }, payload);\n }\n return event;\n}\nfunction toSCXMLEvent(event, scxmlEvent) {\n if (!isString(event) && '$$type' in event && event.$$type === 'scxml') {\n return event;\n }\n var eventObject = toEventObject(event);\n return _assign({\n name: eventObject.type,\n data: eventObject,\n $$type: 'scxml',\n type: 'external'\n }, scxmlEvent);\n}\nfunction toTransitionConfigArray(event, configLike) {\n var transitions = toArrayStrict(configLike).map(function (transitionLike) {\n if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isMachine(transitionLike)) {\n return {\n target: transitionLike,\n event: event\n };\n }\n return _assign(_assign({}, transitionLike), {\n event: event\n });\n });\n return transitions;\n}\nfunction normalizeTarget(target) {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n return toArray(target);\n}\nfunction reportUnhandledExceptionOnInvocation(originalError, currentError, id) {\n if (!IS_PRODUCTION) {\n var originalStackTrace = originalError.stack ? \" Stacktrace was '\".concat(originalError.stack, \"'\") : '';\n if (originalError === currentError) {\n // tslint:disable-next-line:no-console\n console.error(\"Missing onError handler for invocation '\".concat(id, \"', error was '\").concat(originalError, \"'.\").concat(originalStackTrace));\n } else {\n var stackTrace = currentError.stack ? \" Stacktrace was '\".concat(currentError.stack, \"'\") : ''; // tslint:disable-next-line:no-console\n\n console.error(\"Missing onError handler and/or unhandled exception/promise rejection for invocation '\".concat(id, \"'. \") + \"Original error: '\".concat(originalError, \"'. \").concat(originalStackTrace, \" Current error is '\").concat(currentError, \"'.\").concat(stackTrace));\n }\n }\n}\nfunction evaluateGuard(machine, guard, context, _event, state) {\n var guards = machine.options.guards;\n var guardMeta = {\n state: state,\n cond: guard,\n _event: _event\n }; // TODO: do not hardcode!\n\n if (guard.type === DEFAULT_GUARD_TYPE) {\n return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);\n }\n var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];\n if (!condFn) {\n throw new Error(\"Guard '\".concat(guard.type, \"' is not implemented on machine '\").concat(machine.id, \"'.\"));\n }\n return condFn(context, _event.data, guardMeta);\n}\nfunction toInvokeSource$1(src) {\n if (typeof src === 'string') {\n return {\n type: src\n };\n }\n return src;\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n var noop = function noop() {};\n var isObserver = typeof nextHandler === 'object';\n var self = isObserver ? nextHandler : null;\n return {\n next: ((isObserver ? nextHandler.next : nextHandler) || noop).bind(self),\n error: ((isObserver ? nextHandler.error : errorHandler) || noop).bind(self),\n complete: ((isObserver ? nextHandler.complete : completionHandler) || noop).bind(self)\n };\n}\nfunction createInvokeId(stateNodeId, index) {\n return \"\".concat(stateNodeId, \":invocation[\").concat(index, \"]\");\n}\n\nvar initEvent = /*#__PURE__*/toSCXMLEvent({\n type: init\n});\nfunction getActionFunction(actionType, actionFunctionMap) {\n return actionFunctionMap ? actionFunctionMap[actionType] || undefined : undefined;\n}\nfunction toActionObject(action, actionFunctionMap) {\n var actionObject;\n if (isString(action) || typeof action === 'number') {\n var exec = getActionFunction(action, actionFunctionMap);\n if (isFunction(exec)) {\n actionObject = {\n type: action,\n exec: exec\n };\n } else if (exec) {\n actionObject = exec;\n } else {\n actionObject = {\n type: action,\n exec: undefined\n };\n }\n } else if (isFunction(action)) {\n actionObject = {\n // Convert action to string if unnamed\n type: action.name || action.toString(),\n exec: action\n };\n } else {\n var exec = getActionFunction(action.type, actionFunctionMap);\n if (isFunction(exec)) {\n actionObject = _assign(_assign({}, action), {\n exec: exec\n });\n } else if (exec) {\n var actionType = exec.type || action.type;\n actionObject = _assign(_assign(_assign({}, exec), action), {\n type: actionType\n });\n } else {\n actionObject = action;\n }\n }\n return actionObject;\n}\nvar toActionObjects = function toActionObjects(action, actionFunctionMap) {\n if (!action) {\n return [];\n }\n var actions = isArray(action) ? action : [action];\n return actions.map(function (subAction) {\n return toActionObject(subAction, actionFunctionMap);\n });\n};\nfunction toActivityDefinition(action) {\n var actionObject = toActionObject(action);\n return _assign(_assign({\n id: isString(action) ? action : actionObject.id\n }, actionObject), {\n type: actionObject.type\n });\n}\n/**\r\n * Raises an event. This places the event in the internal event queue, so that\r\n * the event is immediately consumed by the machine in the current step.\r\n *\r\n * @param eventType The event to raise.\r\n */\n\nfunction raise(event) {\n if (!isString(event)) {\n return send(event, {\n to: SpecialTargets.Internal\n });\n }\n return {\n type: raise$1,\n event: event\n };\n}\nfunction resolveRaise(action) {\n return {\n type: raise$1,\n _event: toSCXMLEvent(action.event)\n };\n}\n/**\r\n * Sends an event. This returns an action that will be read by an interpreter to\r\n * send the event in the next step, after the current step is finished executing.\r\n *\r\n * @param event The event to send.\r\n * @param options Options to pass into the send event:\r\n * - `id` - The unique send event identifier (used with `cancel()`).\r\n * - `delay` - The number of milliseconds to delay the sending of the event.\r\n * - `to` - The target of this event (by default, the machine the event was sent from).\r\n */\n\nfunction send(event, options) {\n return {\n to: options ? options.to : undefined,\n type: send$1,\n event: isFunction(event) ? event : toEventObject(event),\n delay: options ? options.delay : undefined,\n id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : getEventType(event)\n };\n}\nfunction resolveSend(action, ctx, _event, delaysMap) {\n var meta = {\n _event: _event\n }; // TODO: helper function for resolving Expr\n\n var resolvedEvent = toSCXMLEvent(isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);\n var resolvedDelay;\n if (isString(action.delay)) {\n var configDelay = delaysMap && delaysMap[action.delay];\n resolvedDelay = isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;\n } else {\n resolvedDelay = isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;\n }\n var resolvedTarget = isFunction(action.to) ? action.to(ctx, _event.data, meta) : action.to;\n return _assign(_assign({}, action), {\n to: resolvedTarget,\n _event: resolvedEvent,\n event: resolvedEvent.data,\n delay: resolvedDelay\n });\n}\nvar resolveLog = function resolveLog(action, ctx, _event) {\n return _assign(_assign({}, action), {\n value: isString(action.expr) ? action.expr : action.expr(ctx, _event.data, {\n _event: _event\n })\n });\n};\n/**\r\n * Cancels an in-flight `send(...)` action. A canceled sent action will not\r\n * be executed, nor will its event be sent, unless it has already been sent\r\n * (e.g., if `cancel(...)` is called after the `send(...)` action's `delay`).\r\n *\r\n * @param sendId The `id` of the `send(...)` action to cancel.\r\n */\n\nvar cancel = function cancel(sendId) {\n return {\n type: cancel$1,\n sendId: sendId\n };\n};\n/**\r\n * Starts an activity.\r\n *\r\n * @param activity The activity to start.\r\n */\n\nfunction start(activity) {\n var activityDef = toActivityDefinition(activity);\n return {\n type: ActionTypes.Start,\n activity: activityDef,\n exec: undefined\n };\n}\n/**\r\n * Stops an activity.\r\n *\r\n * @param actorRef The activity to stop.\r\n */\n\nfunction stop(actorRef) {\n var activity = isFunction(actorRef) ? actorRef : toActivityDefinition(actorRef);\n return {\n type: ActionTypes.Stop,\n activity: activity,\n exec: undefined\n };\n}\nfunction resolveStop(action, context, _event) {\n var actorRefOrString = isFunction(action.activity) ? action.activity(context, _event.data) : action.activity;\n var resolvedActorRef = typeof actorRefOrString === 'string' ? {\n id: actorRefOrString\n } : actorRefOrString;\n var actionObject = {\n type: ActionTypes.Stop,\n activity: resolvedActorRef\n };\n return actionObject;\n}\n/**\r\n * Updates the current context of the machine.\r\n *\r\n * @param assignment An object that represents the partial context to update.\r\n */\n\nvar assign$1 = function assign(assignment) {\n return {\n type: assign$2,\n assignment: assignment\n };\n};\n/**\r\n * Returns an event type that represents an implicit event that\r\n * is sent after the specified `delay`.\r\n *\r\n * @param delayRef The delay in milliseconds\r\n * @param id The state node ID where this event is handled\r\n */\n\nfunction after(delayRef, id) {\n var idSuffix = id ? \"#\".concat(id) : '';\n return \"\".concat(ActionTypes.After, \"(\").concat(delayRef, \")\").concat(idSuffix);\n}\n/**\r\n * Returns an event that represents that a final state node\r\n * has been reached in the parent state node.\r\n *\r\n * @param id The final state node's parent state node `id`\r\n * @param data The data to pass into the event\r\n */\n\nfunction done(id, data) {\n var type = \"\".concat(ActionTypes.DoneState, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n eventObject.toString = function () {\n return type;\n };\n return eventObject;\n}\n/**\r\n * Returns an event that represents that an invoked service has terminated.\r\n *\r\n * An invoked service is terminated when it has reached a top-level final state node,\r\n * but not when it is canceled.\r\n *\r\n * @param id The final state node ID\r\n * @param data The data to pass into the event\r\n */\n\nfunction doneInvoke(id, data) {\n var type = \"\".concat(ActionTypes.DoneInvoke, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n eventObject.toString = function () {\n return type;\n };\n return eventObject;\n}\nfunction error(id, data) {\n var type = \"\".concat(ActionTypes.ErrorPlatform, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n eventObject.toString = function () {\n return type;\n };\n return eventObject;\n}\nfunction resolveActions(machine, currentState, currentContext, _event, actions, predictableExec, preserveActionOrder) {\n if (preserveActionOrder === void 0) {\n preserveActionOrder = false;\n }\n var _a = __read(preserveActionOrder ? [[], actions] : partition(actions, function (action) {\n return action.type === assign$2;\n }), 2),\n assignActions = _a[0],\n otherActions = _a[1];\n var updatedContext = assignActions.length ? updateContext(currentContext, _event, assignActions, currentState) : currentContext;\n var preservedContexts = preserveActionOrder ? [currentContext] : undefined;\n var resolvedActions = flatten(otherActions.map(function (actionObject) {\n var _a;\n switch (actionObject.type) {\n case raise$1:\n {\n return resolveRaise(actionObject);\n }\n case send$1:\n var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init\n\n if (!IS_PRODUCTION) {\n // warn after resolving as we can create better contextual message here\n warn(!isString(actionObject.delay) || typeof sendAction.delay === 'number',\n // tslint:disable-next-line:max-line-length\n \"No delay reference for delay expression '\".concat(actionObject.delay, \"' was found on machine '\").concat(machine.id, \"'\"));\n }\n if (sendAction.to !== SpecialTargets.Internal) {\n predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(sendAction, updatedContext, _event);\n }\n return sendAction;\n case log:\n {\n var resolved = resolveLog(actionObject, updatedContext, _event);\n predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);\n return resolved;\n }\n case choose:\n {\n var chooseAction = actionObject;\n var matchedActions = (_a = chooseAction.conds.find(function (condition) {\n var guard = toGuard(condition.cond, machine.options.guards);\n return !guard || evaluateGuard(machine, guard, updatedContext, _event, !predictableExec ? currentState : undefined);\n })) === null || _a === void 0 ? void 0 : _a.actions;\n if (!matchedActions) {\n return [];\n }\n var _b = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), predictableExec, preserveActionOrder), 2),\n resolvedActionsFromChoose = _b[0],\n resolvedContextFromChoose = _b[1];\n updatedContext = resolvedContextFromChoose;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromChoose;\n }\n case pure:\n {\n var matchedActions = actionObject.get(updatedContext, _event.data);\n if (!matchedActions) {\n return [];\n }\n var _c = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), predictableExec, preserveActionOrder), 2),\n resolvedActionsFromPure = _c[0],\n resolvedContext = _c[1];\n updatedContext = resolvedContext;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromPure;\n }\n case stop$1:\n {\n var resolved = resolveStop(actionObject, updatedContext, _event);\n predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);\n return resolved;\n }\n case assign$2:\n {\n updatedContext = updateContext(updatedContext, _event, [actionObject], !predictableExec ? currentState : undefined);\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n break;\n }\n default:\n var resolvedActionObject = toActionObject(actionObject, machine.options.actions);\n var exec_1 = resolvedActionObject.exec;\n if (predictableExec) {\n predictableExec(resolvedActionObject, updatedContext, _event);\n } else if (exec_1 && preservedContexts) {\n var contextIndex_1 = preservedContexts.length - 1;\n resolvedActionObject = _assign(_assign({}, resolvedActionObject), {\n exec: function exec(_ctx) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n exec_1.apply(void 0, __spreadArray([preservedContexts[contextIndex_1]], __read(args), false));\n }\n });\n }\n return resolvedActionObject;\n }\n }).filter(function (a) {\n return !!a;\n }));\n return [resolvedActions, updatedContext];\n}\n\n/**\r\n * Maintains a stack of the current service in scope.\r\n * This is used to provide the correct service to spawn().\r\n */\nvar provide = function provide(service, fn) {\n var result = fn(service);\n return result;\n};\n\nfunction createNullActor(id) {\n var _a;\n return _a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe() {\n return {\n unsubscribe: function unsubscribe() {\n return void 0;\n }\n };\n },\n getSnapshot: function getSnapshot() {\n return undefined;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a;\n}\n/**\r\n * Creates a deferred actor that is able to be invoked given the provided\r\n * invocation information in its `.meta` value.\r\n *\r\n * @param invokeDefinition The meta information needed to invoke the actor.\r\n */\n\nfunction createInvocableActor(invokeDefinition, machine, context, _event) {\n var _a;\n var invokeSrc = toInvokeSource$1(invokeDefinition.src);\n var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];\n var resolvedData = invokeDefinition.data ? mapContext(invokeDefinition.data, context, _event) : undefined;\n var tempActor = serviceCreator ? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData) : createNullActor(invokeDefinition.id); // @ts-ignore\n\n tempActor.meta = invokeDefinition;\n return tempActor;\n}\nfunction createDeferredActor(entity, id, data) {\n var tempActor = createNullActor(id); // @ts-ignore\n\n tempActor.deferred = true;\n if (isMachine(entity)) {\n // \"mute\" the existing service scope so potential spawned actors within the `.initialState` stay deferred here\n var initialState_1 = tempActor.state = provide(undefined, function () {\n return (data ? entity.withContext(data) : entity).initialState;\n });\n tempActor.getSnapshot = function () {\n return initialState_1;\n };\n }\n return tempActor;\n}\nfunction isActor(item) {\n try {\n return typeof item.send === 'function';\n } catch (e) {\n return false;\n }\n}\nfunction isSpawnedActor(item) {\n return isActor(item) && 'id' in item;\n} // TODO: refactor the return type, this could be written in a better way but it's best to avoid unneccessary breaking changes now\n\nfunction toActorRef(actorRefLike) {\n var _a;\n return _assign((_a = {\n subscribe: function subscribe() {\n return {\n unsubscribe: function unsubscribe() {\n return void 0;\n }\n };\n },\n id: 'anonymous',\n getSnapshot: function getSnapshot() {\n return undefined;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a), actorRefLike);\n}\n\nvar isLeafNode = function isLeafNode(stateNode) {\n return stateNode.type === 'atomic' || stateNode.type === 'final';\n};\nfunction getAllChildren(stateNode) {\n return Object.keys(stateNode.states).map(function (key) {\n return stateNode.states[key];\n });\n}\nfunction getChildren(stateNode) {\n return getAllChildren(stateNode).filter(function (sn) {\n return sn.type !== 'history';\n });\n}\nfunction getAllStateNodes(stateNode) {\n var stateNodes = [stateNode];\n if (isLeafNode(stateNode)) {\n return stateNodes;\n }\n return stateNodes.concat(flatten(getChildren(stateNode).map(getAllStateNodes)));\n}\nfunction getConfiguration(prevStateNodes, stateNodes) {\n var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n var prevConfiguration = new Set(prevStateNodes);\n var prevAdjList = getAdjList(prevConfiguration);\n var configuration = new Set(stateNodes);\n try {\n // add all ancestors\n for (var configuration_1 = __values(configuration), configuration_1_1 = configuration_1.next(); !configuration_1_1.done; configuration_1_1 = configuration_1.next()) {\n var s = configuration_1_1.value;\n var m = s.parent;\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (configuration_1_1 && !configuration_1_1.done && (_a = configuration_1.return)) _a.call(configuration_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n var adjList = getAdjList(configuration);\n try {\n // add descendants\n for (var configuration_2 = __values(configuration), configuration_2_1 = configuration_2.next(); !configuration_2_1.done; configuration_2_1 = configuration_2.next()) {\n var s = configuration_2_1.value; // if previously active, add existing child nodes\n\n if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n if (prevAdjList.get(s)) {\n prevAdjList.get(s).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n s.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n } else {\n if (s.type === 'parallel') {\n try {\n for (var _e = (e_3 = void 0, __values(getChildren(s))), _f = _e.next(); !_f.done; _f = _e.next()) {\n var child = _f.value;\n if (!configuration.has(child)) {\n configuration.add(child);\n if (prevAdjList.get(child)) {\n prevAdjList.get(child).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n child.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n }\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (configuration_2_1 && !configuration_2_1.done && (_b = configuration_2.return)) _b.call(configuration_2);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n try {\n // add all ancestors\n for (var configuration_3 = __values(configuration), configuration_3_1 = configuration_3.next(); !configuration_3_1.done; configuration_3_1 = configuration_3.next()) {\n var s = configuration_3_1.value;\n var m = s.parent;\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (configuration_3_1 && !configuration_3_1.done && (_d = configuration_3.return)) _d.call(configuration_3);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n return configuration;\n}\nfunction getValueFromAdj(baseNode, adjList) {\n var childStateNodes = adjList.get(baseNode);\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n\n if (baseNode.type === 'compound') {\n var childStateNode = childStateNodes[0];\n if (childStateNode) {\n if (isLeafNode(childStateNode)) {\n return childStateNode.key;\n }\n } else {\n return {};\n }\n }\n var stateValue = {};\n childStateNodes.forEach(function (csn) {\n stateValue[csn.key] = getValueFromAdj(csn, adjList);\n });\n return stateValue;\n}\nfunction getAdjList(configuration) {\n var e_5, _a;\n var adjList = new Map();\n try {\n for (var configuration_4 = __values(configuration), configuration_4_1 = configuration_4.next(); !configuration_4_1.done; configuration_4_1 = configuration_4.next()) {\n var s = configuration_4_1.value;\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n if (s.parent) {\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n adjList.get(s.parent).push(s);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (configuration_4_1 && !configuration_4_1.done && (_a = configuration_4.return)) _a.call(configuration_4);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n return adjList;\n}\nfunction getValue(rootNode, configuration) {\n var config = getConfiguration([rootNode], configuration);\n return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction has(iterable, item) {\n if (Array.isArray(iterable)) {\n return iterable.some(function (member) {\n return member === item;\n });\n }\n if (iterable instanceof Set) {\n return iterable.has(item);\n }\n return false; // TODO: fix\n}\n\nfunction nextEvents(configuration) {\n return __spreadArray([], __read(new Set(flatten(__spreadArray([], __read(configuration.map(function (sn) {\n return sn.ownEvents;\n })), false)))), false);\n}\nfunction isInFinalState(configuration, stateNode) {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(function (s) {\n return s.type === 'final' && has(configuration, s);\n });\n }\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every(function (sn) {\n return isInFinalState(configuration, sn);\n });\n }\n return false;\n}\nfunction getMeta(configuration) {\n if (configuration === void 0) {\n configuration = [];\n }\n return configuration.reduce(function (acc, stateNode) {\n if (stateNode.meta !== undefined) {\n acc[stateNode.id] = stateNode.meta;\n }\n return acc;\n }, {});\n}\nfunction getTagsFromConfiguration(configuration) {\n return new Set(flatten(configuration.map(function (sn) {\n return sn.tags;\n })));\n}\n\nfunction stateValuesEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a === undefined || b === undefined) {\n return false;\n }\n if (isString(a) || isString(b)) {\n return a === b;\n }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys.every(function (key) {\n return stateValuesEqual(a[key], b[key]);\n });\n}\nfunction isStateConfig(state) {\n if (typeof state !== 'object' || state === null) {\n return false;\n }\n return 'value' in state && '_event' in state;\n}\nfunction bindActionToState(action, state) {\n var exec = action.exec;\n var boundAction = _assign(_assign({}, action), {\n exec: exec !== undefined ? function () {\n return exec(state.context, state.event, {\n action: action,\n state: state,\n _event: state._event\n });\n } : undefined\n });\n return boundAction;\n}\nvar State = /*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new State instance.\r\n * @param value The state value\r\n * @param context The extended state\r\n * @param historyValue The tree representing historical values of the state nodes\r\n * @param history The previous state\r\n * @param actions An array of action objects to execute as side-effects\r\n * @param activities A mapping of activities and whether they are started (`true`) or stopped (`false`).\r\n * @param meta\r\n * @param events Internal event queue. Should be empty with run-to-completion semantics.\r\n * @param configuration\r\n */\n function State(config) {\n var _this = this;\n var _a;\n this.actions = [];\n this.activities = EMPTY_ACTIVITY_MAP;\n this.meta = {};\n this.events = [];\n this.value = config.value;\n this.context = config.context;\n this._event = config._event;\n this._sessionid = config._sessionid;\n this.event = this._event.data;\n this.historyValue = config.historyValue;\n this.history = config.history;\n this.actions = config.actions || [];\n this.activities = config.activities || EMPTY_ACTIVITY_MAP;\n this.meta = getMeta(config.configuration);\n this.events = config.events || [];\n this.matches = this.matches.bind(this);\n this.toStrings = this.toStrings.bind(this);\n this.configuration = config.configuration;\n this.transitions = config.transitions;\n this.children = config.children;\n this.done = !!config.done;\n this.tags = (_a = Array.isArray(config.tags) ? new Set(config.tags) : config.tags) !== null && _a !== void 0 ? _a : new Set();\n this.machine = config.machine;\n Object.defineProperty(this, 'nextEvents', {\n get: function get() {\n return nextEvents(_this.configuration);\n }\n });\n }\n /**\r\n * Creates a new State instance for the given `stateValue` and `context`.\r\n * @param stateValue\r\n * @param context\r\n */\n\n State.from = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (stateValue.context !== context) {\n return new State({\n value: stateValue.value,\n context: context,\n _event: stateValue._event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n actions: [],\n activities: stateValue.activities,\n meta: {},\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n }\n return stateValue;\n }\n var _event = initEvent;\n return new State({\n value: stateValue,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: undefined,\n history: undefined,\n actions: [],\n activities: undefined,\n meta: undefined,\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n };\n /**\r\n * Creates a new State instance for the given `config`.\r\n * @param config The state config\r\n */\n\n State.create = function (config) {\n return new State(config);\n };\n /**\r\n * Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).\r\n * @param stateValue\r\n * @param context\r\n */\n\n State.inert = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (!stateValue.actions.length) {\n return stateValue;\n }\n var _event = initEvent;\n return new State({\n value: stateValue.value,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n activities: stateValue.activities,\n configuration: stateValue.configuration,\n transitions: [],\n children: {}\n });\n }\n return State.from(stateValue, context);\n };\n /**\r\n * Returns an array of all the string leaf state node paths.\r\n * @param stateValue\r\n * @param delimiter The character(s) that separate each subpath in the string state node path.\r\n */\n\n State.prototype.toStrings = function (stateValue, delimiter) {\n var _this = this;\n if (stateValue === void 0) {\n stateValue = this.value;\n }\n if (delimiter === void 0) {\n delimiter = '.';\n }\n if (isString(stateValue)) {\n return [stateValue];\n }\n var valueKeys = Object.keys(stateValue);\n return valueKeys.concat.apply(valueKeys, __spreadArray([], __read(valueKeys.map(function (key) {\n return _this.toStrings(stateValue[key], delimiter).map(function (s) {\n return key + delimiter + s;\n });\n })), false));\n };\n State.prototype.toJSON = function () {\n var _a = this;\n _a.configuration;\n _a.transitions;\n var tags = _a.tags;\n _a.machine;\n var jsonValues = __rest(_a, [\"configuration\", \"transitions\", \"tags\", \"machine\"]);\n return _assign(_assign({}, jsonValues), {\n tags: Array.from(tags)\n });\n };\n State.prototype.matches = function (parentStateValue) {\n return matchesState(parentStateValue, this.value);\n };\n /**\r\n * Whether the current state configuration has a state node with the specified `tag`.\r\n * @param tag\r\n */\n\n State.prototype.hasTag = function (tag) {\n return this.tags.has(tag);\n };\n /**\r\n * Determines whether sending the `event` will cause a non-forbidden transition\r\n * to be selected, even if the transitions have no actions nor\r\n * change the state value.\r\n *\r\n * @param event The event to test\r\n * @returns Whether the event will cause a transition\r\n */\n\n State.prototype.can = function (event) {\n var _a;\n if (IS_PRODUCTION) {\n warn(!!this.machine, \"state.can(...) used outside of a machine-created State object; this will always return false.\");\n }\n var transitionData = (_a = this.machine) === null || _a === void 0 ? void 0 : _a.getTransitionData(this, event);\n return !!(transitionData === null || transitionData === void 0 ? void 0 : transitionData.transitions.length) &&\n // Check that at least one transition is not forbidden\n transitionData.transitions.some(function (t) {\n return t.target !== undefined || t.actions.length;\n });\n };\n return State;\n}();\n\nvar defaultOptions = {\n deferEvents: false\n};\nvar Scheduler = /*#__PURE__*/\n\n/** @class */\nfunction () {\n function Scheduler(options) {\n this.processingEvent = false;\n this.queue = [];\n this.initialized = false;\n this.options = _assign(_assign({}, defaultOptions), options);\n }\n Scheduler.prototype.initialize = function (callback) {\n this.initialized = true;\n if (callback) {\n if (!this.options.deferEvents) {\n this.schedule(callback);\n return;\n }\n this.process(callback);\n }\n this.flushEvents();\n };\n Scheduler.prototype.schedule = function (task) {\n if (!this.initialized || this.processingEvent) {\n this.queue.push(task);\n return;\n }\n if (this.queue.length !== 0) {\n throw new Error('Event queue should be empty when it is not processing events');\n }\n this.process(task);\n this.flushEvents();\n };\n Scheduler.prototype.clear = function () {\n this.queue = [];\n };\n Scheduler.prototype.flushEvents = function () {\n var nextCallback = this.queue.shift();\n while (nextCallback) {\n this.process(nextCallback);\n nextCallback = this.queue.shift();\n }\n };\n Scheduler.prototype.process = function (callback) {\n this.processingEvent = true;\n try {\n callback();\n } catch (e) {\n // there is no use to keep the future events\n // as the situation is not anymore the same\n this.clear();\n throw e;\n } finally {\n this.processingEvent = false;\n }\n };\n return Scheduler;\n}();\n\nvar children = /*#__PURE__*/new Map();\nvar sessionIdIndex = 0;\nvar registry = {\n bookId: function bookId() {\n return \"x:\".concat(sessionIdIndex++);\n },\n register: function register(id, actor) {\n children.set(id, actor);\n return id;\n },\n get: function get(id) {\n return children.get(id);\n },\n free: function free(id) {\n children.delete(id);\n }\n};\n\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global$1 !== 'undefined') {\n return global$1;\n }\n if (!IS_PRODUCTION) {\n console.warn('XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues');\n }\n}\nfunction getDevTools() {\n var global = getGlobal();\n if (global && '__xstate__' in global) {\n return global.__xstate__;\n }\n return undefined;\n}\nfunction registerService(service) {\n if (!getGlobal()) {\n return;\n }\n var devTools = getDevTools();\n if (devTools) {\n devTools.register(service);\n }\n}\n\nfunction spawnBehavior(behavior, options) {\n if (options === void 0) {\n options = {};\n }\n var state = behavior.initialState;\n var observers = new Set();\n var mailbox = [];\n var flushing = false;\n var flush = function flush() {\n if (flushing) {\n return;\n }\n flushing = true;\n while (mailbox.length > 0) {\n var event_1 = mailbox.shift();\n state = behavior.transition(state, event_1, actorCtx);\n observers.forEach(function (observer) {\n return observer.next(state);\n });\n }\n flushing = false;\n };\n var actor = toActorRef({\n id: options.id,\n send: function send(event) {\n mailbox.push(event);\n flush();\n },\n getSnapshot: function getSnapshot() {\n return state;\n },\n subscribe: function subscribe(next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n observers.add(observer);\n observer.next(state);\n return {\n unsubscribe: function unsubscribe() {\n observers.delete(observer);\n }\n };\n }\n });\n var actorCtx = {\n parent: options.parent,\n self: actor,\n id: options.id || 'anonymous',\n observers: observers\n };\n state = behavior.start ? behavior.start(actorCtx) : state;\n return actor;\n}\n\nvar DEFAULT_SPAWN_OPTIONS = {\n sync: false,\n autoForward: false\n};\nvar InterpreterStatus;\n(function (InterpreterStatus) {\n InterpreterStatus[InterpreterStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n InterpreterStatus[InterpreterStatus[\"Running\"] = 1] = \"Running\";\n InterpreterStatus[InterpreterStatus[\"Stopped\"] = 2] = \"Stopped\";\n})(InterpreterStatus || (InterpreterStatus = {}));\nvar Interpreter = /*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new Interpreter instance (i.e., service) for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to be interpreted\r\n * @param options Interpreter options\r\n */\n function Interpreter(machine, options) {\n var _this = this;\n if (options === void 0) {\n options = Interpreter.defaultOptions;\n }\n this.machine = machine;\n this.delayedEventsMap = {};\n this.listeners = new Set();\n this.contextListeners = new Set();\n this.stopListeners = new Set();\n this.doneListeners = new Set();\n this.eventListeners = new Set();\n this.sendListeners = new Set();\n /**\r\n * Whether the service is started.\r\n */\n\n this.initialized = false;\n this.status = InterpreterStatus.NotStarted;\n this.children = new Map();\n this.forwardTo = new Set();\n /**\r\n * Alias for Interpreter.prototype.start\r\n */\n\n this.init = this.start;\n /**\r\n * Sends an event to the running interpreter to trigger a transition.\r\n *\r\n * An array of events (batched) can be sent as well, which will send all\r\n * batched events to the running interpreter. The listeners will be\r\n * notified only **once** when all events are processed.\r\n *\r\n * @param event The event(s) to send\r\n */\n\n this.send = function (event, payload) {\n if (isArray(event)) {\n _this.batch(event);\n return _this.state;\n }\n var _event = toSCXMLEvent(toEventObject(event, payload));\n if (_this.status === InterpreterStatus.Stopped) {\n // do nothing\n if (!IS_PRODUCTION) {\n warn(false, \"Event \\\"\".concat(_event.name, \"\\\" was sent to stopped service \\\"\").concat(_this.machine.id, \"\\\". This service has already reached its final state, and will not transition.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n return _this.state;\n }\n if (_this.status !== InterpreterStatus.Running && !_this.options.deferEvents) {\n throw new Error(\"Event \\\"\".concat(_event.name, \"\\\" was sent to uninitialized service \\\"\").concat(_this.machine.id // tslint:disable-next-line:max-line-length\n , \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n _this.scheduler.schedule(function () {\n // Forward copy of event to child actors\n _this.forward(_event);\n var nextState = _this.nextState(_event);\n _this.update(nextState, _event);\n });\n return _this._state; // TODO: deprecate (should return void)\n // tslint:disable-next-line:semicolon\n };\n\n this.sendTo = function (event, to) {\n var isParent = _this.parent && (to === SpecialTargets.Parent || _this.parent.id === to);\n var target = isParent ? _this.parent : isString(to) ? _this.children.get(to) || registry.get(to) : isActor$1(to) ? to : undefined;\n if (!target) {\n if (!isParent) {\n throw new Error(\"Unable to send event to child '\".concat(to, \"' from service '\").concat(_this.id, \"'.\"));\n } // tslint:disable-next-line:no-console\n\n if (!IS_PRODUCTION) {\n warn(false, \"Service '\".concat(_this.id, \"' has no parent: unable to send event \").concat(event.type));\n }\n return;\n }\n if ('machine' in target) {\n // perhaps those events should be rejected in the parent\n // but atm it doesn't have easy access to all of the information that is required to do it reliably\n if (_this.status !== InterpreterStatus.Stopped || _this.parent !== target ||\n // we need to send events to the parent from exit handlers of a machine that reached its final state\n _this.state.done) {\n // Send SCXML events to machines\n target.send(_assign(_assign({}, event), {\n name: event.name === error$1 ? \"\".concat(error(_this.id)) : event.name,\n origin: _this.sessionId\n }));\n }\n } else {\n // Send normal events to other targets\n target.send(event.data);\n }\n };\n this._exec = function (action, context, _event, actionFunctionMap) {\n if (actionFunctionMap === void 0) {\n actionFunctionMap = _this.machine.options.actions;\n }\n var actionOrExec = action.exec || getActionFunction(action.type, actionFunctionMap);\n var exec = isFunction(actionOrExec) ? actionOrExec : actionOrExec ? actionOrExec.exec : action.exec;\n if (exec) {\n try {\n return exec(context, _event.data, !_this.machine.config.predictableActionArguments ? {\n action: action,\n state: _this.state,\n _event: _event\n } : {\n action: action,\n _event: _event\n });\n } catch (err) {\n if (_this.parent) {\n _this.parent.send({\n type: 'xstate.error',\n data: err\n });\n }\n throw err;\n }\n }\n switch (action.type) {\n case send$1:\n var sendAction = action;\n if (typeof sendAction.delay === 'number') {\n _this.defer(sendAction);\n return;\n } else {\n if (sendAction.to) {\n _this.sendTo(sendAction._event, sendAction.to);\n } else {\n _this.send(sendAction._event);\n }\n }\n break;\n case cancel$1:\n _this.cancel(action.sendId);\n break;\n case start$1:\n {\n if (_this.status !== InterpreterStatus.Running) {\n return;\n }\n var activity = action.activity; // If the activity will be stopped right after it's started\n // (such as in transient states)\n // don't bother starting the activity.\n\n if (\n // in v4 with `predictableActionArguments` invokes are called eagerly when the `this.state` still points to the previous state\n !_this.machine.config.predictableActionArguments && !_this.state.activities[activity.id || activity.type]) {\n break;\n } // Invoked services\n\n if (activity.type === ActionTypes.Invoke) {\n var invokeSource = toInvokeSource$1(activity.src);\n var serviceCreator = _this.machine.options.services ? _this.machine.options.services[invokeSource.type] : undefined;\n var id = activity.id,\n data = activity.data;\n if (!IS_PRODUCTION) {\n warn(!('forward' in activity),\n // tslint:disable-next-line:max-line-length\n \"`forward` property is deprecated (found in invocation of '\".concat(activity.src, \"' in in machine '\").concat(_this.machine.id, \"'). \") + \"Please use `autoForward` instead.\");\n }\n var autoForward = 'autoForward' in activity ? activity.autoForward : !!activity.forward;\n if (!serviceCreator) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"No service found for invocation '\".concat(activity.src, \"' in machine '\").concat(_this.machine.id, \"'.\"));\n }\n return;\n }\n var resolvedData = data ? mapContext(data, context, _event) : undefined;\n if (typeof serviceCreator === 'string') {\n // TODO: warn\n return;\n }\n var source = isFunction(serviceCreator) ? serviceCreator(context, _event.data, {\n data: resolvedData,\n src: invokeSource,\n meta: activity.meta\n }) : serviceCreator;\n if (!source) {\n // TODO: warn?\n return;\n }\n var options = void 0;\n if (isMachine(source)) {\n source = resolvedData ? source.withContext(resolvedData) : source;\n options = {\n autoForward: autoForward\n };\n }\n _this.spawn(source, id, options);\n } else {\n _this.spawnActivity(activity);\n }\n break;\n }\n case stop$1:\n {\n _this.stopChild(action.activity.id);\n break;\n }\n case log:\n var label = action.label,\n value = action.value;\n if (label) {\n _this.logger(label, value);\n } else {\n _this.logger(value);\n }\n break;\n default:\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for action type '\".concat(action.type, \"'\"));\n }\n break;\n }\n };\n var resolvedOptions = _assign(_assign({}, Interpreter.defaultOptions), options);\n var clock = resolvedOptions.clock,\n logger = resolvedOptions.logger,\n parent = resolvedOptions.parent,\n id = resolvedOptions.id;\n var resolvedId = id !== undefined ? id : machine.id;\n this.id = resolvedId;\n this.logger = logger;\n this.clock = clock;\n this.parent = parent;\n this.options = resolvedOptions;\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n this.sessionId = registry.bookId();\n }\n Object.defineProperty(Interpreter.prototype, \"initialState\", {\n get: function get() {\n var _this = this;\n if (this._initialState) {\n return this._initialState;\n }\n return provide(this, function () {\n _this._initialState = _this.machine.initialState;\n return _this._initialState;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Interpreter.prototype, \"state\", {\n get: function get() {\n if (!IS_PRODUCTION) {\n warn(this.status !== InterpreterStatus.NotStarted, \"Attempted to read state from uninitialized service '\".concat(this.id, \"'. Make sure the service is started first.\"));\n }\n return this._state;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Executes the actions of the given state, with that state's `context` and `event`.\r\n *\r\n * @param state The state whose actions will be executed\r\n * @param actionsConfig The action implementations to use\r\n */\n\n Interpreter.prototype.execute = function (state, actionsConfig) {\n var e_1, _a;\n try {\n for (var _b = __values(state.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n var action = _c.value;\n this.exec(action, state, actionsConfig);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n Interpreter.prototype.update = function (state, _event) {\n var e_2, _a, e_3, _b, e_4, _c, e_5, _d;\n var _this = this; // Attach session ID to state\n\n state._sessionid = this.sessionId; // Update state\n\n this._state = state; // Execute actions\n\n if ((!this.machine.config.predictableActionArguments ||\n // this is currently required to execute initial actions as the `initialState` gets cached\n // we can't just recompute it (and execute actions while doing so) because we try to preserve identity of actors created within initial assigns\n _event === initEvent) && this.options.execute) {\n this.execute(this.state);\n } // Update children\n\n this.children.forEach(function (child) {\n _this.state.children[child.id] = child;\n }); // Dev tools\n\n if (this.devTools) {\n this.devTools.send(_event.data, state);\n } // Execute listeners\n\n if (state.event) {\n try {\n for (var _e = __values(this.eventListeners), _f = _e.next(); !_f.done; _f = _e.next()) {\n var listener = _f.value;\n listener(state.event);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n try {\n for (var _g = __values(this.listeners), _h = _g.next(); !_h.done; _h = _g.next()) {\n var listener = _h.value;\n listener(state, state.event);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n try {\n for (var _j = __values(this.contextListeners), _k = _j.next(); !_k.done; _k = _j.next()) {\n var contextListener = _k.value;\n contextListener(this.state.context, this.state.history ? this.state.history.context : undefined);\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n if (this.state.done) {\n // get final child state node\n var finalChildStateNode = state.configuration.find(function (sn) {\n return sn.type === 'final' && sn.parent === _this.machine;\n });\n var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;\n try {\n for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {\n var listener = _m.value;\n listener(doneInvoke(this.id, doneData));\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n this._stop();\n }\n };\n /*\r\n * Adds a listener that is notified whenever a state transition happens. The listener is called with\r\n * the next state and the event object that caused the state transition.\r\n *\r\n * @param listener The state listener\r\n */\n\n Interpreter.prototype.onTransition = function (listener) {\n this.listeners.add(listener); // Send current state to listener\n\n if (this.status === InterpreterStatus.Running) {\n listener(this.state, this.state.event);\n }\n return this;\n };\n Interpreter.prototype.subscribe = function (nextListenerOrObserver, _,\n // TODO: error listener\n completeListener) {\n var _this = this;\n var observer = toObserver(nextListenerOrObserver, _, completeListener);\n this.listeners.add(observer.next); // Send current state to listener\n\n if (this.status !== InterpreterStatus.NotStarted) {\n observer.next(this.state);\n }\n var completeOnce = function completeOnce() {\n _this.doneListeners.delete(completeOnce);\n _this.stopListeners.delete(completeOnce);\n observer.complete();\n };\n if (this.status === InterpreterStatus.Stopped) {\n observer.complete();\n } else {\n this.onDone(completeOnce);\n this.onStop(completeOnce);\n }\n return {\n unsubscribe: function unsubscribe() {\n _this.listeners.delete(observer.next);\n _this.doneListeners.delete(completeOnce);\n _this.stopListeners.delete(completeOnce);\n }\n };\n };\n /**\r\n * Adds an event listener that is notified whenever an event is sent to the running interpreter.\r\n * @param listener The event listener\r\n */\n\n Interpreter.prototype.onEvent = function (listener) {\n this.eventListeners.add(listener);\n return this;\n };\n /**\r\n * Adds an event listener that is notified whenever a `send` event occurs.\r\n * @param listener The event listener\r\n */\n\n Interpreter.prototype.onSend = function (listener) {\n this.sendListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a context listener that is notified whenever the state context changes.\r\n * @param listener The context listener\r\n */\n\n Interpreter.prototype.onChange = function (listener) {\n this.contextListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a listener that is notified when the machine is stopped.\r\n * @param listener The listener\r\n */\n\n Interpreter.prototype.onStop = function (listener) {\n this.stopListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a state listener that is notified when the statechart has reached its final state.\r\n * @param listener The state listener\r\n */\n\n Interpreter.prototype.onDone = function (listener) {\n this.doneListeners.add(listener);\n return this;\n };\n /**\r\n * Removes a listener.\r\n * @param listener The listener to remove\r\n */\n\n Interpreter.prototype.off = function (listener) {\n this.listeners.delete(listener);\n this.eventListeners.delete(listener);\n this.sendListeners.delete(listener);\n this.stopListeners.delete(listener);\n this.doneListeners.delete(listener);\n this.contextListeners.delete(listener);\n return this;\n };\n /**\r\n * Starts the interpreter from the given state, or the initial state.\r\n * @param initialState The state to start the statechart from\r\n */\n\n Interpreter.prototype.start = function (initialState) {\n var _this = this;\n if (this.status === InterpreterStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n } // yes, it's a hack but we need the related cache to be populated for some things to work (like delayed transitions)\n // this is usually called by `machine.getInitialState` but if we rehydrate from a state we might bypass this call\n // we also don't want to call this method here as it resolves the full initial state which might involve calling assign actions\n // and that could potentially lead to some unwanted side-effects (even such as creating some rogue actors)\n\n this.machine._init();\n registry.register(this.sessionId, this);\n this.initialized = true;\n this.status = InterpreterStatus.Running;\n var resolvedState = initialState === undefined ? this.initialState : provide(this, function () {\n return isStateConfig(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.from(initialState, _this.machine.context));\n });\n if (this.options.devTools) {\n this.attachDev();\n }\n this.scheduler.initialize(function () {\n _this.update(resolvedState, initEvent);\n });\n return this;\n };\n Interpreter.prototype._stop = function () {\n var e_6, _a, e_7, _b, e_8, _c, e_9, _d, e_10, _e;\n try {\n for (var _f = __values(this.listeners), _g = _f.next(); !_g.done; _g = _f.next()) {\n var listener = _g.value;\n this.listeners.delete(listener);\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n try {\n for (var _h = __values(this.stopListeners), _j = _h.next(); !_j.done; _j = _h.next()) {\n var listener = _j.value; // call listener, then remove\n\n listener();\n this.stopListeners.delete(listener);\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n try {\n for (var _k = __values(this.contextListeners), _l = _k.next(); !_l.done; _l = _k.next()) {\n var listener = _l.value;\n this.contextListeners.delete(listener);\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n try {\n for (var _m = __values(this.doneListeners), _o = _m.next(); !_o.done; _o = _m.next()) {\n var listener = _o.value;\n this.doneListeners.delete(listener);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (_o && !_o.done && (_d = _m.return)) _d.call(_m);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n if (!this.initialized) {\n // Interpreter already stopped; do nothing\n return this;\n }\n this.initialized = false;\n this.status = InterpreterStatus.Stopped;\n this._initialState = undefined;\n try {\n // we are going to stop within the current sync frame\n // so we can safely just cancel this here as nothing async should be fired anyway\n for (var _p = __values(Object.keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {\n var key = _q.value;\n this.clock.clearTimeout(this.delayedEventsMap[key]);\n }\n } catch (e_10_1) {\n e_10 = {\n error: e_10_1\n };\n } finally {\n try {\n if (_q && !_q.done && (_e = _p.return)) _e.call(_p);\n } finally {\n if (e_10) throw e_10.error;\n }\n } // clear everything that might be enqueued\n\n this.scheduler.clear();\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n };\n /**\r\n * Stops the interpreter and unsubscribe all listeners.\r\n *\r\n * This will also notify the `onStop` listeners.\r\n */\n\n Interpreter.prototype.stop = function () {\n // TODO: add warning for stopping non-root interpreters\n var _this = this; // grab the current scheduler as it will be replaced in _stop\n\n var scheduler = this.scheduler;\n this._stop(); // let what is currently processed to be finished\n\n scheduler.schedule(function () {\n // it feels weird to handle this here but we need to handle this even slightly \"out of band\"\n var _event = toSCXMLEvent({\n type: 'xstate.stop'\n });\n var nextState = provide(_this, function () {\n var exitActions = flatten(__spreadArray([], __read(_this.state.configuration), false).sort(function (a, b) {\n return b.order - a.order;\n }).map(function (stateNode) {\n return toActionObjects(stateNode.onExit, _this.machine.options.actions);\n }));\n var _a = __read(resolveActions(_this.machine, _this.state, _this.state.context, _event, exitActions, _this.machine.config.predictableActionArguments ? _this._exec : undefined, _this.machine.config.predictableActionArguments || _this.machine.config.preserveActionOrder), 2),\n resolvedActions = _a[0],\n updatedContext = _a[1];\n var newState = new State({\n value: _this.state.value,\n context: updatedContext,\n _event: _event,\n _sessionid: _this.sessionId,\n historyValue: undefined,\n history: _this.state,\n actions: resolvedActions.filter(function (action) {\n return action.type !== raise$1 && (action.type !== send$1 || !!action.to && action.to !== SpecialTargets.Internal);\n }),\n activities: {},\n events: [],\n configuration: [],\n transitions: [],\n children: {},\n done: _this.state.done,\n tags: _this.state.tags,\n machine: _this.machine\n });\n newState.changed = true;\n return newState;\n });\n _this.update(nextState, _event); // TODO: think about converting those to actions\n // Stop all children\n\n _this.children.forEach(function (child) {\n if (isFunction(child.stop)) {\n child.stop();\n }\n });\n _this.children.clear();\n registry.free(_this.sessionId);\n });\n return this;\n };\n Interpreter.prototype.batch = function (events) {\n var _this = this;\n if (this.status === InterpreterStatus.NotStarted && this.options.deferEvents) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\" and are deferred. Make sure .start() is called for this service.\\nEvent: \").concat(JSON.stringify(event)));\n }\n } else if (this.status !== InterpreterStatus.Running) {\n throw new Error(\n // tslint:disable-next-line:max-line-length\n \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\"));\n }\n this.scheduler.schedule(function () {\n var e_11, _a;\n var nextState = _this.state;\n var batchChanged = false;\n var batchedActions = [];\n var _loop_1 = function _loop_1(event_1) {\n var _event = toSCXMLEvent(event_1);\n _this.forward(_event);\n nextState = provide(_this, function () {\n return _this.machine.transition(nextState, _event);\n });\n batchedActions.push.apply(batchedActions, __spreadArray([], __read(nextState.actions.map(function (a) {\n return bindActionToState(a, nextState);\n })), false));\n batchChanged = batchChanged || !!nextState.changed;\n };\n try {\n for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {\n var event_1 = events_1_1.value;\n _loop_1(event_1);\n }\n } catch (e_11_1) {\n e_11 = {\n error: e_11_1\n };\n } finally {\n try {\n if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);\n } finally {\n if (e_11) throw e_11.error;\n }\n }\n nextState.changed = batchChanged;\n nextState.actions = batchedActions;\n _this.update(nextState, toSCXMLEvent(events[events.length - 1]));\n });\n };\n /**\r\n * Returns a send function bound to this interpreter instance.\r\n *\r\n * @param event The event to be sent by the sender.\r\n */\n\n Interpreter.prototype.sender = function (event) {\n return this.send.bind(this, event);\n };\n Interpreter.prototype._nextState = function (event) {\n var _this = this;\n var _event = toSCXMLEvent(event);\n if (_event.name.indexOf(errorPlatform) === 0 && !this.state.nextEvents.some(function (nextEvent) {\n return nextEvent.indexOf(errorPlatform) === 0;\n })) {\n throw _event.data.data;\n }\n var nextState = provide(this, function () {\n return _this.machine.transition(_this.state, _event, undefined, _this.machine.config.predictableActionArguments ? _this._exec : undefined);\n });\n return nextState;\n };\n /**\r\n * Returns the next state given the interpreter's current state and the event.\r\n *\r\n * This is a pure method that does _not_ update the interpreter's state.\r\n *\r\n * @param event The event to determine the next state\r\n */\n\n Interpreter.prototype.nextState = function (event) {\n return this._nextState(event);\n };\n Interpreter.prototype.forward = function (event) {\n var e_12, _a;\n try {\n for (var _b = __values(this.forwardTo), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n var child = this.children.get(id);\n if (!child) {\n throw new Error(\"Unable to forward event '\".concat(event, \"' from interpreter '\").concat(this.id, \"' to nonexistant child '\").concat(id, \"'.\"));\n }\n child.send(event);\n }\n } catch (e_12_1) {\n e_12 = {\n error: e_12_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_12) throw e_12.error;\n }\n }\n };\n Interpreter.prototype.defer = function (sendAction) {\n var _this = this;\n this.delayedEventsMap[sendAction.id] = this.clock.setTimeout(function () {\n if (sendAction.to) {\n _this.sendTo(sendAction._event, sendAction.to);\n } else {\n _this.send(sendAction._event);\n }\n }, sendAction.delay);\n };\n Interpreter.prototype.cancel = function (sendId) {\n this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n delete this.delayedEventsMap[sendId];\n };\n Interpreter.prototype.exec = function (action, state, actionFunctionMap) {\n if (actionFunctionMap === void 0) {\n actionFunctionMap = this.machine.options.actions;\n }\n this._exec(action, state.context, state._event, actionFunctionMap);\n };\n Interpreter.prototype.removeChild = function (childId) {\n var _a;\n this.children.delete(childId);\n this.forwardTo.delete(childId); // this.state might not exist at the time this is called,\n // such as when a child is added then removed while initializing the state\n\n (_a = this.state) === null || _a === void 0 ? true : delete _a.children[childId];\n };\n Interpreter.prototype.stopChild = function (childId) {\n var child = this.children.get(childId);\n if (!child) {\n return;\n }\n this.removeChild(childId);\n if (isFunction(child.stop)) {\n child.stop();\n }\n };\n Interpreter.prototype.spawn = function (entity, name, options) {\n if (this.status !== InterpreterStatus.Running) {\n return createDeferredActor(entity, name);\n }\n if (isPromiseLike(entity)) {\n return this.spawnPromise(Promise.resolve(entity), name);\n } else if (isFunction(entity)) {\n return this.spawnCallback(entity, name);\n } else if (isSpawnedActor(entity)) {\n return this.spawnActor(entity, name);\n } else if (isObservable(entity)) {\n return this.spawnObservable(entity, name);\n } else if (isMachine(entity)) {\n return this.spawnMachine(entity, _assign(_assign({}, options), {\n id: name\n }));\n } else if (isBehavior(entity)) {\n return this.spawnBehavior(entity, name);\n } else {\n throw new Error(\"Unable to spawn entity \\\"\".concat(name, \"\\\" of type \\\"\").concat(typeof entity, \"\\\".\"));\n }\n };\n Interpreter.prototype.spawnMachine = function (machine, options) {\n var _this = this;\n if (options === void 0) {\n options = {};\n }\n var childService = new Interpreter(machine, _assign(_assign({}, this.options), {\n parent: this,\n id: options.id || machine.id\n }));\n var resolvedOptions = _assign(_assign({}, DEFAULT_SPAWN_OPTIONS), options);\n if (resolvedOptions.sync) {\n childService.onTransition(function (state) {\n _this.send(update, {\n state: state,\n id: childService.id\n });\n });\n }\n var actor = childService;\n this.children.set(childService.id, actor);\n if (resolvedOptions.autoForward) {\n this.forwardTo.add(childService.id);\n }\n childService.onDone(function (doneEvent) {\n _this.removeChild(childService.id);\n _this.send(toSCXMLEvent(doneEvent, {\n origin: childService.id\n }));\n }).start();\n return actor;\n };\n Interpreter.prototype.spawnBehavior = function (behavior, id) {\n var actorRef = spawnBehavior(behavior, {\n id: id,\n parent: this\n });\n this.children.set(id, actorRef);\n return actorRef;\n };\n Interpreter.prototype.spawnPromise = function (promise, id) {\n var _a;\n var _this = this;\n var canceled = false;\n var resolvedData;\n promise.then(function (response) {\n if (!canceled) {\n resolvedData = response;\n _this.removeChild(id);\n _this.send(toSCXMLEvent(doneInvoke(id, response), {\n origin: id\n }));\n }\n }, function (errorData) {\n if (!canceled) {\n _this.removeChild(id);\n var errorEvent = error(id, errorData);\n try {\n // Send \"error.platform.id\" to this (parent).\n _this.send(toSCXMLEvent(errorEvent, {\n origin: id\n }));\n } catch (error) {\n reportUnhandledExceptionOnInvocation(errorData, error, id);\n if (_this.devTools) {\n _this.devTools.send(errorEvent, _this.state);\n }\n if (_this.machine.strict) {\n // it would be better to always stop the state machine if unhandled\n // exception/promise rejection happens but because we don't want to\n // break existing code so enforce it on strict mode only especially so\n // because documentation says that onError is optional\n _this.stop();\n }\n }\n }\n });\n var actor = (_a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe(next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n var unsubscribed = false;\n promise.then(function (response) {\n if (unsubscribed) {\n return;\n }\n observer.next(response);\n if (unsubscribed) {\n return;\n }\n observer.complete();\n }, function (err) {\n if (unsubscribed) {\n return;\n }\n observer.error(err);\n });\n return {\n unsubscribe: function unsubscribe() {\n return unsubscribed = true;\n }\n };\n },\n stop: function stop() {\n canceled = true;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n },\n getSnapshot: function getSnapshot() {\n return resolvedData;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n Interpreter.prototype.spawnCallback = function (callback, id) {\n var _a;\n var _this = this;\n var canceled = false;\n var receivers = new Set();\n var listeners = new Set();\n var emitted;\n var receive = function receive(e) {\n emitted = e;\n listeners.forEach(function (listener) {\n return listener(e);\n });\n if (canceled) {\n return;\n }\n _this.send(toSCXMLEvent(e, {\n origin: id\n }));\n };\n var callbackStop;\n try {\n callbackStop = callback(receive, function (newListener) {\n receivers.add(newListener);\n });\n } catch (err) {\n this.send(error(id, err));\n }\n if (isPromiseLike(callbackStop)) {\n // it turned out to be an async function, can't reliably check this before calling `callback`\n // because transpiled async functions are not recognizable\n return this.spawnPromise(callbackStop, id);\n }\n var actor = (_a = {\n id: id,\n send: function send(event) {\n return receivers.forEach(function (receiver) {\n return receiver(event);\n });\n },\n subscribe: function subscribe(next) {\n var observer = toObserver(next);\n listeners.add(observer.next);\n return {\n unsubscribe: function unsubscribe() {\n listeners.delete(observer.next);\n }\n };\n },\n stop: function stop() {\n canceled = true;\n if (isFunction(callbackStop)) {\n callbackStop();\n }\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n },\n getSnapshot: function getSnapshot() {\n return emitted;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n Interpreter.prototype.spawnObservable = function (source, id) {\n var _a;\n var _this = this;\n var emitted;\n var subscription = source.subscribe(function (value) {\n emitted = value;\n _this.send(toSCXMLEvent(value, {\n origin: id\n }));\n }, function (err) {\n _this.removeChild(id);\n _this.send(toSCXMLEvent(error(id, err), {\n origin: id\n }));\n }, function () {\n _this.removeChild(id);\n _this.send(toSCXMLEvent(doneInvoke(id), {\n origin: id\n }));\n });\n var actor = (_a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe(next, handleError, complete) {\n return source.subscribe(next, handleError, complete);\n },\n stop: function stop() {\n return subscription.unsubscribe();\n },\n getSnapshot: function getSnapshot() {\n return emitted;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n Interpreter.prototype.spawnActor = function (actor, name) {\n this.children.set(name, actor);\n return actor;\n };\n Interpreter.prototype.spawnActivity = function (activity) {\n var implementation = this.machine.options && this.machine.options.activities ? this.machine.options.activities[activity.type] : undefined;\n if (!implementation) {\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for activity '\".concat(activity.type, \"'\"));\n } // tslint:disable-next-line:no-console\n\n return;\n } // Start implementation\n\n var dispose = implementation(this.state.context, activity);\n this.spawnEffect(activity.id, dispose);\n };\n Interpreter.prototype.spawnEffect = function (id, dispose) {\n var _a;\n this.children.set(id, (_a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe() {\n return {\n unsubscribe: function unsubscribe() {\n return void 0;\n }\n };\n },\n stop: dispose || undefined,\n getSnapshot: function getSnapshot() {\n return undefined;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a));\n };\n Interpreter.prototype.attachDev = function () {\n var global = getGlobal();\n if (this.options.devTools && global) {\n if (global.__REDUX_DEVTOOLS_EXTENSION__) {\n var devToolsOptions = typeof this.options.devTools === 'object' ? this.options.devTools : undefined;\n this.devTools = global.__REDUX_DEVTOOLS_EXTENSION__.connect(_assign(_assign({\n name: this.id,\n autoPause: true,\n stateSanitizer: function stateSanitizer(state) {\n return {\n value: state.value,\n context: state.context,\n actions: state.actions\n };\n }\n }, devToolsOptions), {\n features: _assign({\n jump: false,\n skip: false\n }, devToolsOptions ? devToolsOptions.features : undefined)\n }), this.machine);\n this.devTools.init(this.state);\n } // add XState-specific dev tooling hook\n\n registerService(this);\n }\n };\n Interpreter.prototype.toJSON = function () {\n return {\n id: this.id\n };\n };\n Interpreter.prototype[symbolObservable] = function () {\n return this;\n };\n Interpreter.prototype.getSnapshot = function () {\n if (this.status === InterpreterStatus.NotStarted) {\n return this.initialState;\n }\n return this._state;\n };\n /**\r\n * The default interpreter options:\r\n *\r\n * - `clock` uses the global `setTimeout` and `clearTimeout` functions\r\n * - `logger` uses the global `console.log()` method\r\n */\n\n Interpreter.defaultOptions = {\n execute: true,\n deferEvents: true,\n clock: {\n setTimeout: function (_setTimeout) {\n function setTimeout(_x, _x2) {\n return _setTimeout.apply(this, arguments);\n }\n setTimeout.toString = function () {\n return _setTimeout.toString();\n };\n return setTimeout;\n }(function (fn, ms) {\n return setTimeout(fn, ms);\n }),\n clearTimeout: function (_clearTimeout) {\n function clearTimeout(_x3) {\n return _clearTimeout.apply(this, arguments);\n }\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n return clearTimeout;\n }(function (id) {\n return clearTimeout(id);\n })\n },\n logger: /*#__PURE__*/console.log.bind(console),\n devTools: false\n };\n Interpreter.interpret = interpret;\n return Interpreter;\n}();\n/**\r\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to interpret\r\n * @param options Interpreter options\r\n */\n\nfunction interpret(machine, options) {\n var interpreter = new Interpreter(machine, options);\n return interpreter;\n}\n\nfunction toInvokeSource(src) {\n if (typeof src === 'string') {\n var simpleSrc = {\n type: src\n };\n simpleSrc.toString = function () {\n return src;\n }; // v4 compat - TODO: remove in v5\n\n return simpleSrc;\n }\n return src;\n}\nfunction toInvokeDefinition(invokeConfig) {\n return _assign(_assign({\n type: invoke\n }, invokeConfig), {\n toJSON: function toJSON() {\n invokeConfig.onDone;\n invokeConfig.onError;\n var invokeDef = __rest(invokeConfig, [\"onDone\", \"onError\"]);\n return _assign(_assign({}, invokeDef), {\n type: invoke,\n src: toInvokeSource(invokeConfig.src)\n });\n }\n });\n}\n\nvar NULL_EVENT = '';\nvar STATE_IDENTIFIER = '#';\nvar WILDCARD = '*';\nvar EMPTY_OBJECT = {};\nvar isStateId = function isStateId(str) {\n return str[0] === STATE_IDENTIFIER;\n};\nvar createDefaultOptions = function createDefaultOptions() {\n return {\n actions: {},\n guards: {},\n services: {},\n activities: {},\n delays: {}\n };\n};\nvar validateArrayifiedTransitions = function validateArrayifiedTransitions(stateNode, event, transitions) {\n var hasNonLastUnguardedTarget = transitions.slice(0, -1).some(function (transition) {\n return !('cond' in transition) && !('in' in transition) && (isString(transition.target) || isMachine(transition.target));\n });\n var eventText = event === NULL_EVENT ? 'the transient event' : \"event '\".concat(event, \"'\");\n warn(!hasNonLastUnguardedTarget, \"One or more transitions for \".concat(eventText, \" on state '\").concat(stateNode.id, \"' are unreachable. \") + \"Make sure that the default transition is the last one defined.\");\n};\nvar StateNode = /*#__PURE__*/\n\n/** @class */\nfunction () {\n function StateNode(\n /**\r\n * The raw config used to create the machine.\r\n */\n config, options,\n /**\r\n * The initial extended state\r\n */\n _context,\n // TODO: this is unsafe, but we're removing it in v5 anyway\n _stateInfo) {\n var _this = this;\n if (_context === void 0) {\n _context = 'context' in config ? config.context : undefined;\n }\n var _a;\n this.config = config;\n this._context = _context;\n /**\r\n * The order this state node appears. Corresponds to the implicit SCXML document order.\r\n */\n\n this.order = -1;\n this.__xstatenode = true;\n this.__cache = {\n events: undefined,\n relativeValue: new Map(),\n initialStateValue: undefined,\n initialState: undefined,\n on: undefined,\n transitions: undefined,\n candidates: {},\n delayedTransitions: undefined\n };\n this.idMap = {};\n this.tags = [];\n this.options = Object.assign(createDefaultOptions(), options);\n this.parent = _stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.parent;\n this.key = this.config.key || (_stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.key) || this.config.id || '(machine)';\n this.machine = this.parent ? this.parent.machine : this;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n this.delimiter = this.config.delimiter || (this.parent ? this.parent.delimiter : STATE_DELIMITER);\n this.id = this.config.id || __spreadArray([this.machine.key], __read(this.path), false).join(this.delimiter);\n this.version = this.parent ? this.parent.version : this.config.version;\n this.type = this.config.type || (this.config.parallel ? 'parallel' : this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n this.schema = this.parent ? this.machine.schema : (_a = this.config.schema) !== null && _a !== void 0 ? _a : {};\n this.description = this.config.description;\n if (!IS_PRODUCTION) {\n warn(!('parallel' in this.config), \"The \\\"parallel\\\" property is deprecated and will be removed in version 4.1. \".concat(this.config.parallel ? \"Replace with `type: 'parallel'`\" : \"Use `type: '\".concat(this.type, \"'`\"), \" in the config for state node '\").concat(this.id, \"' instead.\"));\n }\n this.initial = this.config.initial;\n this.states = this.config.states ? mapValues(this.config.states, function (stateConfig, key) {\n var _a;\n var stateNode = new StateNode(stateConfig, {}, undefined, {\n parent: _this,\n key: key\n });\n Object.assign(_this.idMap, _assign((_a = {}, _a[stateNode.id] = stateNode, _a), stateNode.idMap));\n return stateNode;\n }) : EMPTY_OBJECT; // Document order\n\n var order = 0;\n function dfs(stateNode) {\n var e_1, _a;\n stateNode.order = order++;\n try {\n for (var _b = __values(getAllChildren(stateNode)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n dfs(child);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n dfs(this); // History config\n\n this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n this._transient = !!this.config.always || (!this.config.on ? false : Array.isArray(this.config.on) ? this.config.on.some(function (_a) {\n var event = _a.event;\n return event === NULL_EVENT;\n }) : NULL_EVENT in this.config.on);\n this.strict = !!this.config.strict; // TODO: deprecate (entry)\n\n this.onEntry = toArray(this.config.entry || this.config.onEntry).map(function (action) {\n return toActionObject(action);\n }); // TODO: deprecate (exit)\n\n this.onExit = toArray(this.config.exit || this.config.onExit).map(function (action) {\n return toActionObject(action);\n });\n this.meta = this.config.meta;\n this.doneData = this.type === 'final' ? this.config.data : undefined;\n this.invoke = toArray(this.config.invoke).map(function (invokeConfig, i) {\n var _a, _b;\n if (isMachine(invokeConfig)) {\n var invokeId = createInvokeId(_this.id, i);\n _this.machine.options.services = _assign((_a = {}, _a[invokeId] = invokeConfig, _a), _this.machine.options.services);\n return toInvokeDefinition({\n src: invokeId,\n id: invokeId\n });\n } else if (isString(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n return toInvokeDefinition(_assign(_assign({}, invokeConfig), {\n id: invokeId,\n src: invokeConfig.src\n }));\n } else if (isMachine(invokeConfig.src) || isFunction(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n _this.machine.options.services = _assign((_b = {}, _b[invokeId] = invokeConfig.src, _b), _this.machine.options.services);\n return toInvokeDefinition(_assign(_assign({\n id: invokeId\n }, invokeConfig), {\n src: invokeId\n }));\n } else {\n var invokeSource = invokeConfig.src;\n return toInvokeDefinition(_assign(_assign({\n id: createInvokeId(_this.id, i)\n }, invokeConfig), {\n src: invokeSource\n }));\n }\n });\n this.activities = toArray(this.config.activities).concat(this.invoke).map(function (activity) {\n return toActivityDefinition(activity);\n });\n this.transition = this.transition.bind(this);\n this.tags = toArray(this.config.tags); // TODO: this is the real fix for initialization once\n // state node getters are deprecated\n // if (!this.parent) {\n // this._init();\n // }\n }\n\n StateNode.prototype._init = function () {\n if (this.__cache.transitions) {\n return;\n }\n getAllStateNodes(this).forEach(function (stateNode) {\n return stateNode.on;\n });\n };\n /**\r\n * Clones this state machine with custom options and context.\r\n *\r\n * @param options Options (actions, guards, activities, services) to recursively merge with the existing options.\r\n * @param context Custom context (will override predefined context)\r\n */\n\n StateNode.prototype.withConfig = function (options, context) {\n var _a = this.options,\n actions = _a.actions,\n activities = _a.activities,\n guards = _a.guards,\n services = _a.services,\n delays = _a.delays;\n return new StateNode(this.config, {\n actions: _assign(_assign({}, actions), options.actions),\n activities: _assign(_assign({}, activities), options.activities),\n guards: _assign(_assign({}, guards), options.guards),\n services: _assign(_assign({}, services), options.services),\n delays: _assign(_assign({}, delays), options.delays)\n }, context !== null && context !== void 0 ? context : this.context);\n };\n /**\r\n * Clones this state machine with custom context.\r\n *\r\n * @param context Custom context (will override predefined context, not recursive)\r\n */\n\n StateNode.prototype.withContext = function (context) {\n return new StateNode(this.config, this.options, context);\n };\n Object.defineProperty(StateNode.prototype, \"context\", {\n get: function get() {\n return isFunction(this._context) ? this._context() : this._context;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"definition\", {\n /**\r\n * The well-structured state node definition.\r\n */\n get: function get() {\n return {\n id: this.id,\n key: this.key,\n version: this.version,\n context: this.context,\n type: this.type,\n initial: this.initial,\n history: this.history,\n states: mapValues(this.states, function (state) {\n return state.definition;\n }),\n on: this.on,\n transitions: this.transitions,\n entry: this.onEntry,\n exit: this.onExit,\n activities: this.activities || [],\n meta: this.meta,\n order: this.order || -1,\n data: this.doneData,\n invoke: this.invoke,\n description: this.description,\n tags: this.tags\n };\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.toJSON = function () {\n return this.definition;\n };\n Object.defineProperty(StateNode.prototype, \"on\", {\n /**\r\n * The mapping of events to transitions.\r\n */\n get: function get() {\n if (this.__cache.on) {\n return this.__cache.on;\n }\n var transitions = this.transitions;\n return this.__cache.on = transitions.reduce(function (map, transition) {\n map[transition.eventType] = map[transition.eventType] || [];\n map[transition.eventType].push(transition);\n return map;\n }, {});\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"after\", {\n get: function get() {\n return this.__cache.delayedTransitions || (this.__cache.delayedTransitions = this.getDelayedTransitions(), this.__cache.delayedTransitions);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"transitions\", {\n /**\r\n * All the transitions that can be taken from this state node.\r\n */\n get: function get() {\n return this.__cache.transitions || (this.__cache.transitions = this.formatTransitions(), this.__cache.transitions);\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.getCandidates = function (eventName) {\n if (this.__cache.candidates[eventName]) {\n return this.__cache.candidates[eventName];\n }\n var transient = eventName === NULL_EVENT;\n var candidates = this.transitions.filter(function (transition) {\n var sameEventType = transition.eventType === eventName; // null events should only match against eventless transitions\n\n return transient ? sameEventType : sameEventType || transition.eventType === WILDCARD;\n });\n this.__cache.candidates[eventName] = candidates;\n return candidates;\n };\n /**\r\n * All delayed transitions from the config.\r\n */\n\n StateNode.prototype.getDelayedTransitions = function () {\n var _this = this;\n var afterConfig = this.config.after;\n if (!afterConfig) {\n return [];\n }\n var mutateEntryExit = function mutateEntryExit(delay, i) {\n var delayRef = isFunction(delay) ? \"\".concat(_this.id, \":delay[\").concat(i, \"]\") : delay;\n var eventType = after(delayRef, _this.id);\n _this.onEntry.push(send(eventType, {\n delay: delay\n }));\n _this.onExit.push(cancel(eventType));\n return eventType;\n };\n var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {\n var eventType = mutateEntryExit(transition.delay, i);\n return _assign(_assign({}, transition), {\n event: eventType\n });\n }) : flatten(Object.keys(afterConfig).map(function (delay, i) {\n var configTransition = afterConfig[delay];\n var resolvedTransition = isString(configTransition) ? {\n target: configTransition\n } : configTransition;\n var resolvedDelay = !isNaN(+delay) ? +delay : delay;\n var eventType = mutateEntryExit(resolvedDelay, i);\n return toArray(resolvedTransition).map(function (transition) {\n return _assign(_assign({}, transition), {\n event: eventType,\n delay: resolvedDelay\n });\n });\n }));\n return delayedTransitions.map(function (delayedTransition) {\n var delay = delayedTransition.delay;\n return _assign(_assign({}, _this.formatTransition(delayedTransition)), {\n delay: delay\n });\n });\n };\n /**\r\n * Returns the state nodes represented by the current state value.\r\n *\r\n * @param state The state value or State instance\r\n */\n\n StateNode.prototype.getStateNodes = function (state) {\n var _a;\n var _this = this;\n if (!state) {\n return [];\n }\n var stateValue = state instanceof State ? state.value : toStateValue(state, this.delimiter);\n if (isString(stateValue)) {\n var initialStateValue = this.getStateNode(stateValue).initial;\n return initialStateValue !== undefined ? this.getStateNodes((_a = {}, _a[stateValue] = initialStateValue, _a)) : [this, this.states[stateValue]];\n }\n var subStateKeys = Object.keys(stateValue);\n var subStateNodes = [this];\n subStateNodes.push.apply(subStateNodes, __spreadArray([], __read(flatten(subStateKeys.map(function (subStateKey) {\n return _this.getStateNode(subStateKey).getStateNodes(stateValue[subStateKey]);\n }))), false));\n return subStateNodes;\n };\n /**\r\n * Returns `true` if this state node explicitly handles the given event.\r\n *\r\n * @param event The event in question\r\n */\n\n StateNode.prototype.handles = function (event) {\n var eventType = getEventType(event);\n return this.events.includes(eventType);\n };\n /**\r\n * Resolves the given `state` to a new `State` instance relative to this machine.\r\n *\r\n * This ensures that `.events` and `.nextEvents` represent the correct values.\r\n *\r\n * @param state The state to resolve\r\n */\n\n StateNode.prototype.resolveState = function (state) {\n var stateFromConfig = state instanceof State ? state : State.create(state);\n var configuration = Array.from(getConfiguration([], this.getStateNodes(stateFromConfig.value)));\n return new State(_assign(_assign({}, stateFromConfig), {\n value: this.resolve(stateFromConfig.value),\n configuration: configuration,\n done: isInFinalState(configuration, this),\n tags: getTagsFromConfiguration(configuration),\n machine: this.machine\n }));\n };\n StateNode.prototype.transitionLeafNode = function (stateValue, state, _event) {\n var stateNode = this.getStateNode(stateValue);\n var next = stateNode.next(state, _event);\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n return next;\n };\n StateNode.prototype.transitionCompoundNode = function (stateValue, state, _event) {\n var subStateKeys = Object.keys(stateValue);\n var stateNode = this.getStateNode(subStateKeys[0]);\n var next = stateNode._transition(stateValue[subStateKeys[0]], state, _event);\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n return next;\n };\n StateNode.prototype.transitionParallelNode = function (stateValue, state, _event) {\n var e_2, _a;\n var transitionMap = {};\n try {\n for (var _b = __values(Object.keys(stateValue)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var subStateKey = _c.value;\n var subStateValue = stateValue[subStateKey];\n if (!subStateValue) {\n continue;\n }\n var subStateNode = this.getStateNode(subStateKey);\n var next = subStateNode._transition(subStateValue, state, _event);\n if (next) {\n transitionMap[subStateKey] = next;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n var stateTransitions = Object.keys(transitionMap).map(function (key) {\n return transitionMap[key];\n });\n var enabledTransitions = flatten(stateTransitions.map(function (st) {\n return st.transitions;\n }));\n var willTransition = stateTransitions.some(function (st) {\n return st.transitions.length > 0;\n });\n if (!willTransition) {\n return this.next(state, _event);\n }\n var entryNodes = flatten(stateTransitions.map(function (t) {\n return t.entrySet;\n }));\n var configuration = flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].configuration;\n }));\n return {\n transitions: enabledTransitions,\n entrySet: entryNodes,\n exitSet: flatten(stateTransitions.map(function (t) {\n return t.exitSet;\n })),\n configuration: configuration,\n source: state,\n actions: flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].actions;\n }))\n };\n };\n StateNode.prototype._transition = function (stateValue, state, _event) {\n // leaf node\n if (isString(stateValue)) {\n return this.transitionLeafNode(stateValue, state, _event);\n } // hierarchical node\n\n if (Object.keys(stateValue).length === 1) {\n return this.transitionCompoundNode(stateValue, state, _event);\n } // orthogonal node\n\n return this.transitionParallelNode(stateValue, state, _event);\n };\n StateNode.prototype.getTransitionData = function (state, event) {\n return this._transition(state.value, state, toSCXMLEvent(event));\n };\n StateNode.prototype.next = function (state, _event) {\n var e_3, _a;\n var _this = this;\n var eventName = _event.name;\n var actions = [];\n var nextStateNodes = [];\n var selectedTransition;\n try {\n for (var _b = __values(this.getCandidates(eventName)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var candidate = _c.value;\n var cond = candidate.cond,\n stateIn = candidate.in;\n var resolvedContext = state.context;\n var isInState = stateIn ? isString(stateIn) && isStateId(stateIn) ?\n // Check if in state by ID\n state.matches(toStateValue(this.getStateNodeById(stateIn).path, this.delimiter)) :\n // Check if in state by relative grandparent\n matchesState(toStateValue(stateIn, this.delimiter), path(this.path.slice(0, -2))(state.value)) : true;\n var guardPassed = false;\n try {\n guardPassed = !cond || evaluateGuard(this.machine, cond, resolvedContext, _event, state);\n } catch (err) {\n throw new Error(\"Unable to evaluate guard '\".concat(cond.name || cond.type, \"' in transition for event '\").concat(eventName, \"' in state node '\").concat(this.id, \"':\\n\").concat(err.message));\n }\n if (guardPassed && isInState) {\n if (candidate.target !== undefined) {\n nextStateNodes = candidate.target;\n }\n actions.push.apply(actions, __spreadArray([], __read(candidate.actions), false));\n selectedTransition = candidate;\n break;\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n if (!selectedTransition) {\n return undefined;\n }\n if (!nextStateNodes.length) {\n return {\n transitions: [selectedTransition],\n entrySet: [],\n exitSet: [],\n configuration: state.value ? [this] : [],\n source: state,\n actions: actions\n };\n }\n var allNextStateNodes = flatten(nextStateNodes.map(function (stateNode) {\n return _this.getRelativeStateNodes(stateNode, state.historyValue);\n }));\n var isInternal = !!selectedTransition.internal;\n var reentryNodes = [];\n if (!isInternal) {\n nextStateNodes.forEach(function (targetNode) {\n reentryNodes.push.apply(reentryNodes, __spreadArray([], __read(_this.getExternalReentryNodes(targetNode)), false));\n });\n }\n return {\n transitions: [selectedTransition],\n entrySet: reentryNodes,\n exitSet: isInternal ? [] : [this],\n configuration: allNextStateNodes,\n source: state,\n actions: actions\n };\n };\n StateNode.prototype.getExternalReentryNodes = function (targetNode) {\n var nodes = [];\n var _a = __read(targetNode.order > this.order ? [targetNode, this] : [this, targetNode], 2),\n marker = _a[0],\n possibleAncestor = _a[1];\n while (marker && marker !== possibleAncestor) {\n nodes.push(marker);\n marker = marker.parent;\n }\n if (marker !== possibleAncestor) {\n // we never got to `possibleAncestor`, therefore the initial `marker` \"escapes\" it\n // it's in a different part of the tree so no states will be reentered for such an external transition\n return [];\n }\n nodes.push(possibleAncestor);\n return nodes;\n };\n StateNode.prototype.getActions = function (resolvedConfig, isDone, transition, currentContext, _event, prevState) {\n var e_4, _a, e_5, _b;\n var prevConfig = getConfiguration([], prevState ? this.getStateNodes(prevState.value) : [this]);\n try {\n for (var resolvedConfig_1 = __values(resolvedConfig), resolvedConfig_1_1 = resolvedConfig_1.next(); !resolvedConfig_1_1.done; resolvedConfig_1_1 = resolvedConfig_1.next()) {\n var sn = resolvedConfig_1_1.value;\n if (!has(prevConfig, sn) || has(transition.entrySet, sn.parent)) {\n transition.entrySet.push(sn);\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (resolvedConfig_1_1 && !resolvedConfig_1_1.done && (_a = resolvedConfig_1.return)) _a.call(resolvedConfig_1);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n try {\n for (var prevConfig_1 = __values(prevConfig), prevConfig_1_1 = prevConfig_1.next(); !prevConfig_1_1.done; prevConfig_1_1 = prevConfig_1.next()) {\n var sn = prevConfig_1_1.value;\n if (!has(resolvedConfig, sn) || has(transition.exitSet, sn.parent)) {\n transition.exitSet.push(sn);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (prevConfig_1_1 && !prevConfig_1_1.done && (_b = prevConfig_1.return)) _b.call(prevConfig_1);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n var doneEvents = flatten(transition.entrySet.map(function (sn) {\n var events = [];\n if (sn.type !== 'final') {\n return events;\n }\n var parent = sn.parent;\n if (!parent.parent) {\n return events;\n }\n events.push(done(sn.id, sn.doneData),\n // TODO: deprecate - final states should not emit done events for their own state.\n done(parent.id, sn.doneData ? mapContext(sn.doneData, currentContext, _event) : undefined));\n var grandparent = parent.parent;\n if (grandparent.type === 'parallel') {\n if (getChildren(grandparent).every(function (parentNode) {\n return isInFinalState(transition.configuration, parentNode);\n })) {\n events.push(done(grandparent.id));\n }\n }\n return events;\n }));\n transition.exitSet.sort(function (a, b) {\n return b.order - a.order;\n });\n transition.entrySet.sort(function (a, b) {\n return a.order - b.order;\n });\n var entryStates = new Set(transition.entrySet);\n var exitStates = new Set(transition.exitSet);\n var _c = __read([flatten(Array.from(entryStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.activities.map(function (activity) {\n return start(activity);\n })), false), __read(stateNode.onEntry), false);\n })).concat(doneEvents.map(raise)), flatten(Array.from(exitStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.onExit), false), __read(stateNode.activities.map(function (activity) {\n return stop(activity);\n })), false);\n }))], 2),\n entryActions = _c[0],\n exitActions = _c[1];\n var actions = toActionObjects(exitActions.concat(transition.actions).concat(entryActions), this.machine.options.actions);\n if (isDone) {\n var stopActions = toActionObjects(flatten(__spreadArray([], __read(resolvedConfig), false).sort(function (a, b) {\n return b.order - a.order;\n }).map(function (stateNode) {\n return stateNode.onExit;\n })), this.machine.options.actions).filter(function (action) {\n return action.type !== raise$1 && (action.type !== send$1 || !!action.to && action.to !== SpecialTargets.Internal);\n });\n return actions.concat(stopActions);\n }\n return actions;\n };\n /**\r\n * Determines the next state given the current `state` and sent `event`.\r\n *\r\n * @param state The current State instance or state value\r\n * @param event The event that was sent at the current state\r\n * @param context The current context (extended state) of the current state\r\n */\n\n StateNode.prototype.transition = function (state, event, context, exec) {\n if (state === void 0) {\n state = this.initialState;\n }\n var _event = toSCXMLEvent(event);\n var currentState;\n if (state instanceof State) {\n currentState = context === undefined ? state : this.resolveState(State.from(state, context));\n } else {\n var resolvedStateValue = isString(state) ? this.resolve(pathToStateValue(this.getResolvedPath(state))) : this.resolve(state);\n var resolvedContext = context !== null && context !== void 0 ? context : this.machine.context;\n currentState = this.resolveState(State.from(resolvedStateValue, resolvedContext));\n }\n if (!IS_PRODUCTION && _event.name === WILDCARD) {\n throw new Error(\"An event cannot have the wildcard type ('\".concat(WILDCARD, \"')\"));\n }\n if (this.strict) {\n if (!this.events.includes(_event.name) && !isBuiltInEvent(_event.name)) {\n throw new Error(\"Machine '\".concat(this.id, \"' does not accept event '\").concat(_event.name, \"'\"));\n }\n }\n var stateTransition = this._transition(currentState.value, currentState, _event) || {\n transitions: [],\n configuration: [],\n entrySet: [],\n exitSet: [],\n source: currentState,\n actions: []\n };\n var prevConfig = getConfiguration([], this.getStateNodes(currentState.value));\n var resolvedConfig = stateTransition.configuration.length ? getConfiguration(prevConfig, stateTransition.configuration) : prevConfig;\n stateTransition.configuration = __spreadArray([], __read(resolvedConfig), false);\n return this.resolveTransition(stateTransition, currentState, currentState.context, exec, _event);\n };\n StateNode.prototype.resolveRaisedTransition = function (state, _event, originalEvent, predictableExec) {\n var _a;\n var currentActions = state.actions;\n state = this.transition(state, _event, undefined, predictableExec); // Save original event to state\n // TODO: this should be the raised event! Delete in V5 (breaking)\n\n state._event = originalEvent;\n state.event = originalEvent.data;\n (_a = state.actions).unshift.apply(_a, __spreadArray([], __read(currentActions), false));\n return state;\n };\n StateNode.prototype.resolveTransition = function (stateTransition, currentState, context, predictableExec, _event) {\n var e_6, _a;\n var _this = this;\n if (_event === void 0) {\n _event = initEvent;\n }\n var configuration = stateTransition.configuration; // Transition will \"apply\" if:\n // - this is the initial state (there is no current state)\n // - OR there are transitions\n\n var willTransition = !currentState || stateTransition.transitions.length > 0;\n var resolvedConfiguration = willTransition ? stateTransition.configuration : currentState ? currentState.configuration : [];\n var isDone = isInFinalState(resolvedConfiguration, this);\n var resolvedStateValue = willTransition ? getValue(this.machine, configuration) : undefined;\n var historyValue = currentState ? currentState.historyValue ? currentState.historyValue : stateTransition.source ? this.machine.historyValue(currentState.value) : undefined : undefined;\n var actions = this.getActions(new Set(resolvedConfiguration), isDone, stateTransition, context, _event, currentState);\n var activities = currentState ? _assign({}, currentState.activities) : {};\n try {\n for (var actions_1 = __values(actions), actions_1_1 = actions_1.next(); !actions_1_1.done; actions_1_1 = actions_1.next()) {\n var action = actions_1_1.value;\n if (action.type === start$1) {\n activities[action.activity.id || action.activity.type] = action;\n } else if (action.type === stop$1) {\n activities[action.activity.id || action.activity.type] = false;\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (actions_1_1 && !actions_1_1.done && (_a = actions_1.return)) _a.call(actions_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n var _b = __read(resolveActions(this, currentState, context, _event, actions, predictableExec, this.machine.config.predictableActionArguments || this.machine.config.preserveActionOrder), 2),\n resolvedActions = _b[0],\n updatedContext = _b[1];\n var _c = __read(partition(resolvedActions, function (action) {\n return action.type === raise$1 || action.type === send$1 && action.to === SpecialTargets.Internal;\n }), 2),\n raisedEvents = _c[0],\n nonRaisedActions = _c[1];\n var invokeActions = resolvedActions.filter(function (action) {\n var _a;\n return action.type === start$1 && ((_a = action.activity) === null || _a === void 0 ? void 0 : _a.type) === invoke;\n });\n var children = invokeActions.reduce(function (acc, action) {\n acc[action.activity.id] = createInvocableActor(action.activity, _this.machine, updatedContext, _event);\n return acc;\n }, currentState ? _assign({}, currentState.children) : {});\n var nextState = new State({\n value: resolvedStateValue || currentState.value,\n context: updatedContext,\n _event: _event,\n // Persist _sessionid between states\n _sessionid: currentState ? currentState._sessionid : null,\n historyValue: resolvedStateValue ? historyValue ? updateHistoryValue(historyValue, resolvedStateValue) : undefined : currentState ? currentState.historyValue : undefined,\n history: !resolvedStateValue || stateTransition.source ? currentState : undefined,\n actions: resolvedStateValue ? nonRaisedActions : [],\n activities: resolvedStateValue ? activities : currentState ? currentState.activities : {},\n events: [],\n configuration: resolvedConfiguration,\n transitions: stateTransition.transitions,\n children: children,\n done: isDone,\n tags: getTagsFromConfiguration(resolvedConfiguration),\n machine: this\n });\n var didUpdateContext = context !== updatedContext;\n nextState.changed = _event.name === update || didUpdateContext; // Dispose of penultimate histories to prevent memory leaks\n\n var history = nextState.history;\n if (history) {\n delete history.history;\n } // There are transient transitions if the machine is not in a final state\n // and if some of the state nodes have transient (\"always\") transitions.\n\n var hasAlwaysTransitions = !isDone && (this._transient || configuration.some(function (stateNode) {\n return stateNode._transient;\n })); // If there are no enabled transitions, check if there are transient transitions.\n // If there are transient transitions, continue checking for more transitions\n // because an transient transition should be triggered even if there are no\n // enabled transitions.\n //\n // If we're already working on an transient transition then stop to prevent an infinite loop.\n //\n // Otherwise, if there are no enabled nor transient transitions, we are done.\n\n if (!willTransition && (!hasAlwaysTransitions || _event.name === NULL_EVENT)) {\n return nextState;\n }\n var maybeNextState = nextState;\n if (!isDone) {\n if (hasAlwaysTransitions) {\n maybeNextState = this.resolveRaisedTransition(maybeNextState, {\n type: nullEvent\n }, _event, predictableExec);\n }\n while (raisedEvents.length) {\n var raisedEvent = raisedEvents.shift();\n maybeNextState = this.resolveRaisedTransition(maybeNextState, raisedEvent._event, _event, predictableExec);\n }\n } // Detect if state changed\n\n var changed = maybeNextState.changed || (history ? !!maybeNextState.actions.length || didUpdateContext || typeof history.value !== typeof maybeNextState.value || !stateValuesEqual(maybeNextState.value, history.value) : undefined);\n maybeNextState.changed = changed; // Preserve original history after raised events\n\n maybeNextState.history = history;\n return maybeNextState;\n };\n /**\r\n * Returns the child state node from its relative `stateKey`, or throws.\r\n */\n\n StateNode.prototype.getStateNode = function (stateKey) {\n if (isStateId(stateKey)) {\n return this.machine.getStateNodeById(stateKey);\n }\n if (!this.states) {\n throw new Error(\"Unable to retrieve child state '\".concat(stateKey, \"' from '\").concat(this.id, \"'; no child states exist.\"));\n }\n var result = this.states[stateKey];\n if (!result) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n return result;\n };\n /**\r\n * Returns the state node with the given `stateId`, or throws.\r\n *\r\n * @param stateId The state ID. The prefix \"#\" is removed.\r\n */\n\n StateNode.prototype.getStateNodeById = function (stateId) {\n var resolvedStateId = isStateId(stateId) ? stateId.slice(STATE_IDENTIFIER.length) : stateId;\n if (resolvedStateId === this.id) {\n return this;\n }\n var stateNode = this.machine.idMap[resolvedStateId];\n if (!stateNode) {\n throw new Error(\"Child state node '#\".concat(resolvedStateId, \"' does not exist on machine '\").concat(this.id, \"'\"));\n }\n return stateNode;\n };\n /**\r\n * Returns the relative state node from the given `statePath`, or throws.\r\n *\r\n * @param statePath The string or string array relative path to the state node.\r\n */\n\n StateNode.prototype.getStateNodeByPath = function (statePath) {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return this.getStateNodeById(statePath.slice(1));\n } catch (e) {// try individual paths\n // throw e;\n }\n }\n var arrayStatePath = toStatePath(statePath, this.delimiter).slice();\n var currentStateNode = this;\n while (arrayStatePath.length) {\n var key = arrayStatePath.shift();\n if (!key.length) {\n break;\n }\n currentStateNode = currentStateNode.getStateNode(key);\n }\n return currentStateNode;\n };\n /**\r\n * Resolves a partial state value with its full representation in this machine.\r\n *\r\n * @param stateValue The partial state value to resolve.\r\n */\n\n StateNode.prototype.resolve = function (stateValue) {\n var _a;\n var _this = this;\n if (!stateValue) {\n return this.initialStateValue || EMPTY_OBJECT; // TODO: type-specific properties\n }\n\n switch (this.type) {\n case 'parallel':\n return mapValues(this.initialStateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(stateValue[subStateKey] || subStateValue) : EMPTY_OBJECT;\n });\n case 'compound':\n if (isString(stateValue)) {\n var subStateNode = this.getStateNode(stateValue);\n if (subStateNode.type === 'parallel' || subStateNode.type === 'compound') {\n return _a = {}, _a[stateValue] = subStateNode.initialStateValue, _a;\n }\n return stateValue;\n }\n if (!Object.keys(stateValue).length) {\n return this.initialStateValue || {};\n }\n return mapValues(stateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(subStateValue) : EMPTY_OBJECT;\n });\n default:\n return stateValue || EMPTY_OBJECT;\n }\n };\n StateNode.prototype.getResolvedPath = function (stateIdentifier) {\n if (isStateId(stateIdentifier)) {\n var stateNode = this.machine.idMap[stateIdentifier.slice(STATE_IDENTIFIER.length)];\n if (!stateNode) {\n throw new Error(\"Unable to find state node '\".concat(stateIdentifier, \"'\"));\n }\n return stateNode.path;\n }\n return toStatePath(stateIdentifier, this.delimiter);\n };\n Object.defineProperty(StateNode.prototype, \"initialStateValue\", {\n get: function get() {\n var _a;\n if (this.__cache.initialStateValue) {\n return this.__cache.initialStateValue;\n }\n var initialStateValue;\n if (this.type === 'parallel') {\n initialStateValue = mapFilterValues(this.states, function (state) {\n return state.initialStateValue || EMPTY_OBJECT;\n }, function (stateNode) {\n return !(stateNode.type === 'history');\n });\n } else if (this.initial !== undefined) {\n if (!this.states[this.initial]) {\n throw new Error(\"Initial state '\".concat(this.initial, \"' not found on '\").concat(this.key, \"'\"));\n }\n initialStateValue = isLeafNode(this.states[this.initial]) ? this.initial : (_a = {}, _a[this.initial] = this.states[this.initial].initialStateValue, _a);\n } else {\n // The finite state value of a machine without child states is just an empty object\n initialStateValue = {};\n }\n this.__cache.initialStateValue = initialStateValue;\n return this.__cache.initialStateValue;\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.getInitialState = function (stateValue, context) {\n this._init(); // TODO: this should be in the constructor (see note in constructor)\n\n var configuration = this.getStateNodes(stateValue);\n return this.resolveTransition({\n configuration: configuration,\n entrySet: __spreadArray([], __read(configuration), false),\n exitSet: [],\n transitions: [],\n source: undefined,\n actions: []\n }, undefined, context !== null && context !== void 0 ? context : this.machine.context, undefined);\n };\n Object.defineProperty(StateNode.prototype, \"initialState\", {\n /**\r\n * The initial State instance, which includes all actions to be executed from\r\n * entering the initial state.\r\n */\n get: function get() {\n var initialStateValue = this.initialStateValue;\n if (!initialStateValue) {\n throw new Error(\"Cannot retrieve initial state from simple state '\".concat(this.id, \"'.\"));\n }\n return this.getInitialState(initialStateValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"target\", {\n /**\r\n * The target state value of the history state node, if it exists. This represents the\r\n * default state value to transition to if no history value exists yet.\r\n */\n get: function get() {\n var target;\n if (this.type === 'history') {\n var historyConfig = this.config;\n if (isString(historyConfig.target)) {\n target = isStateId(historyConfig.target) ? pathToStateValue(this.machine.getStateNodeById(historyConfig.target).path.slice(this.path.length - 1)) : historyConfig.target;\n } else {\n target = historyConfig.target;\n }\n }\n return target;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Returns the leaf nodes from a state path relative to this state node.\r\n *\r\n * @param relativeStateId The relative state path to retrieve the state nodes\r\n * @param history The previous state to retrieve history\r\n * @param resolve Whether state nodes should resolve to initial child state nodes\r\n */\n\n StateNode.prototype.getRelativeStateNodes = function (relativeStateId, historyValue, resolve) {\n if (resolve === void 0) {\n resolve = true;\n }\n return resolve ? relativeStateId.type === 'history' ? relativeStateId.resolveHistory(historyValue) : relativeStateId.initialStateNodes : [relativeStateId];\n };\n Object.defineProperty(StateNode.prototype, \"initialStateNodes\", {\n get: function get() {\n var _this = this;\n if (isLeafNode(this)) {\n return [this];\n } // Case when state node is compound but no initial state is defined\n\n if (this.type === 'compound' && !this.initial) {\n if (!IS_PRODUCTION) {\n warn(false, \"Compound state node '\".concat(this.id, \"' has no initial state.\"));\n }\n return [this];\n }\n var initialStateNodePaths = toStatePaths(this.initialStateValue);\n return flatten(initialStateNodePaths.map(function (initialPath) {\n return _this.getFromRelativePath(initialPath);\n }));\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Retrieves state nodes from a relative path to this state node.\r\n *\r\n * @param relativePath The relative path from this state node\r\n * @param historyValue\r\n */\n\n StateNode.prototype.getFromRelativePath = function (relativePath) {\n if (!relativePath.length) {\n return [this];\n }\n var _a = __read(relativePath),\n stateKey = _a[0],\n childStatePath = _a.slice(1);\n if (!this.states) {\n throw new Error(\"Cannot retrieve subPath '\".concat(stateKey, \"' from node with no states\"));\n }\n var childStateNode = this.getStateNode(stateKey);\n if (childStateNode.type === 'history') {\n return childStateNode.resolveHistory();\n }\n if (!this.states[stateKey]) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n return this.states[stateKey].getFromRelativePath(childStatePath);\n };\n StateNode.prototype.historyValue = function (relativeStateValue) {\n if (!Object.keys(this.states).length) {\n return undefined;\n }\n return {\n current: relativeStateValue || this.initialStateValue,\n states: mapFilterValues(this.states, function (stateNode, key) {\n if (!relativeStateValue) {\n return stateNode.historyValue();\n }\n var subStateValue = isString(relativeStateValue) ? undefined : relativeStateValue[key];\n return stateNode.historyValue(subStateValue || stateNode.initialStateValue);\n }, function (stateNode) {\n return !stateNode.history;\n })\n };\n };\n /**\r\n * Resolves to the historical value(s) of the parent state node,\r\n * represented by state nodes.\r\n *\r\n * @param historyValue\r\n */\n\n StateNode.prototype.resolveHistory = function (historyValue) {\n var _this = this;\n if (this.type !== 'history') {\n return [this];\n }\n var parent = this.parent;\n if (!historyValue) {\n var historyTarget = this.target;\n return historyTarget ? flatten(toStatePaths(historyTarget).map(function (relativeChildPath) {\n return parent.getFromRelativePath(relativeChildPath);\n })) : parent.initialStateNodes;\n }\n var subHistoryValue = nestedPath(parent.path, 'states')(historyValue).current;\n if (isString(subHistoryValue)) {\n return [parent.getStateNode(subHistoryValue)];\n }\n return flatten(toStatePaths(subHistoryValue).map(function (subStatePath) {\n return _this.history === 'deep' ? parent.getFromRelativePath(subStatePath) : [parent.states[subStatePath[0]]];\n }));\n };\n Object.defineProperty(StateNode.prototype, \"stateIds\", {\n /**\r\n * All the state node IDs of this state node and its descendant state nodes.\r\n */\n get: function get() {\n var _this = this;\n var childStateIds = flatten(Object.keys(this.states).map(function (stateKey) {\n return _this.states[stateKey].stateIds;\n }));\n return [this.id].concat(childStateIds);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"events\", {\n /**\r\n * All the event types accepted by this state node and its descendants.\r\n */\n get: function get() {\n var e_7, _a, e_8, _b;\n if (this.__cache.events) {\n return this.__cache.events;\n }\n var states = this.states;\n var events = new Set(this.ownEvents);\n if (states) {\n try {\n for (var _c = __values(Object.keys(states)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var stateId = _d.value;\n var state = states[stateId];\n if (state.states) {\n try {\n for (var _e = (e_8 = void 0, __values(state.events)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var event_1 = _f.value;\n events.add(\"\".concat(event_1));\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n }\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n return this.__cache.events = Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"ownEvents\", {\n /**\r\n * All the events that have transitions directly from this state node.\r\n *\r\n * Excludes any inert events.\r\n */\n get: function get() {\n var events = new Set(this.transitions.filter(function (transition) {\n return !(!transition.target && !transition.actions.length && transition.internal);\n }).map(function (transition) {\n return transition.eventType;\n }));\n return Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.resolveTarget = function (_target) {\n var _this = this;\n if (_target === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n return _target.map(function (target) {\n if (!isString(target)) {\n return target;\n }\n var isInternalTarget = target[0] === _this.delimiter; // If internal target is defined on machine,\n // do not include machine key on target\n\n if (isInternalTarget && !_this.parent) {\n return _this.getStateNodeByPath(target.slice(1));\n }\n var resolvedTarget = isInternalTarget ? _this.key + target : target;\n if (_this.parent) {\n try {\n var targetStateNode = _this.parent.getStateNodeByPath(resolvedTarget);\n return targetStateNode;\n } catch (err) {\n throw new Error(\"Invalid transition definition for state node '\".concat(_this.id, \"':\\n\").concat(err.message));\n }\n } else {\n return _this.getStateNodeByPath(resolvedTarget);\n }\n });\n };\n StateNode.prototype.formatTransition = function (transitionConfig) {\n var _this = this;\n var normalizedTarget = normalizeTarget(transitionConfig.target);\n var internal = 'internal' in transitionConfig ? transitionConfig.internal : normalizedTarget ? normalizedTarget.some(function (_target) {\n return isString(_target) && _target[0] === _this.delimiter;\n }) : true;\n var guards = this.machine.options.guards;\n var target = this.resolveTarget(normalizedTarget);\n var transition = _assign(_assign({}, transitionConfig), {\n actions: toActionObjects(toArray(transitionConfig.actions)),\n cond: toGuard(transitionConfig.cond, guards),\n target: target,\n source: this,\n internal: internal,\n eventType: transitionConfig.event,\n toJSON: function toJSON() {\n return _assign(_assign({}, transition), {\n target: transition.target ? transition.target.map(function (t) {\n return \"#\".concat(t.id);\n }) : undefined,\n source: \"#\".concat(_this.id)\n });\n }\n });\n return transition;\n };\n StateNode.prototype.formatTransitions = function () {\n var e_9, _a;\n var _this = this;\n var onConfig;\n if (!this.config.on) {\n onConfig = [];\n } else if (Array.isArray(this.config.on)) {\n onConfig = this.config.on;\n } else {\n var _b = this.config.on,\n _c = WILDCARD,\n _d = _b[_c],\n wildcardConfigs = _d === void 0 ? [] : _d,\n strictTransitionConfigs_1 = __rest(_b, [typeof _c === \"symbol\" ? _c : _c + \"\"]);\n onConfig = flatten(Object.keys(strictTransitionConfigs_1).map(function (key) {\n if (!IS_PRODUCTION && key === NULL_EVENT) {\n warn(false, \"Empty string transition configs (e.g., `{ on: { '': ... }}`) for transient transitions are deprecated. Specify the transition in the `{ always: ... }` property instead. \" + \"Please check the `on` configuration for \\\"#\".concat(_this.id, \"\\\".\"));\n }\n var transitionConfigArray = toTransitionConfigArray(key, strictTransitionConfigs_1[key]);\n if (!IS_PRODUCTION) {\n validateArrayifiedTransitions(_this, key, transitionConfigArray);\n }\n return transitionConfigArray;\n }).concat(toTransitionConfigArray(WILDCARD, wildcardConfigs)));\n }\n var eventlessConfig = this.config.always ? toTransitionConfigArray('', this.config.always) : [];\n var doneConfig = this.config.onDone ? toTransitionConfigArray(String(done(this.id)), this.config.onDone) : [];\n if (!IS_PRODUCTION) {\n warn(!(this.config.onDone && !this.parent), \"Root nodes cannot have an \\\".onDone\\\" transition. Please check the config of \\\"\".concat(this.id, \"\\\".\"));\n }\n var invokeConfig = flatten(this.invoke.map(function (invokeDef) {\n var settleTransitions = [];\n if (invokeDef.onDone) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(doneInvoke(invokeDef.id)), invokeDef.onDone)), false));\n }\n if (invokeDef.onError) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(error(invokeDef.id)), invokeDef.onError)), false));\n }\n return settleTransitions;\n }));\n var delayedTransitions = this.after;\n var formattedTransitions = flatten(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(doneConfig), false), __read(invokeConfig), false), __read(onConfig), false), __read(eventlessConfig), false).map(function (transitionConfig) {\n return toArray(transitionConfig).map(function (transition) {\n return _this.formatTransition(transition);\n });\n }));\n try {\n for (var delayedTransitions_1 = __values(delayedTransitions), delayedTransitions_1_1 = delayedTransitions_1.next(); !delayedTransitions_1_1.done; delayedTransitions_1_1 = delayedTransitions_1.next()) {\n var delayedTransition = delayedTransitions_1_1.value;\n formattedTransitions.push(delayedTransition);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (delayedTransitions_1_1 && !delayedTransitions_1_1.done && (_a = delayedTransitions_1.return)) _a.call(delayedTransitions_1);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n return formattedTransitions;\n };\n return StateNode;\n}();\n\nvar warned = false;\nfunction createMachine(config, options) {\n if (!IS_PRODUCTION && !config.predictableActionArguments && !warned) {\n warned = true;\n console.warn('It is highly recommended to set `predictableActionArguments` to `true` when using `createMachine`. https://xstate.js.org/docs/guides/actions.html');\n }\n return new StateNode(config, options);\n}\n\nvar assign = assign$1;\n\nfunction ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar WEB_TIEBREAKER_VALUE = 0xfffffffe;\nvar MAX_RETRIES = 2;\nvar DEFAULT_IS_OK_IN_TRANSACTION = true;\nvar HEADER_NO_OK_IN_TRANSACTION = 'noOkInTransaction';\nclass Roap extends EventEmitter$5 {\n constructor(createLocalOfferCallback, handleRemoteOfferCallback, handleRemoteAnswerCallback, debugId, initialSeq) {\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"createLocalOfferCallback\", void 0);\n _defineProperty(this, \"handleRemoteOfferCallback\", void 0);\n _defineProperty(this, \"handleRemoteAnswerCallback\", void 0);\n _defineProperty(this, \"stateMachine\", void 0);\n _defineProperty(this, \"initiateOfferPromises\", void 0);\n this.id = debugId || 'ROAP';\n this.createLocalOfferCallback = createLocalOfferCallback;\n this.handleRemoteOfferCallback = handleRemoteOfferCallback;\n this.handleRemoteAnswerCallback = handleRemoteAnswerCallback;\n this.initiateOfferPromises = [];\n var fsm = createMachine({\n tsTypes: {},\n schema: {\n context: {},\n events: {},\n services: {}\n },\n preserveActionOrder: true,\n id: 'roap',\n initial: 'idle',\n context: {\n seq: initialSeq || 0,\n pendingLocalOffer: false,\n isHandlingOfferRequest: false,\n retryCounter: 0,\n isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION\n },\n states: {\n browserError: {\n onEntry: (context, event) => {\n this.error('FSM', \"browserError state onEntry: context=\".concat(JSON.stringify(context), \":\"), event.data);\n this.emit(MediaConnectionEventNames.ROAP_FAILURE, event.data);\n }\n },\n remoteError: {\n onEntry: (_, event) => {\n this.log('FSM', 'remoteError state onEntry called, emitting MediaConnectionEventNames.ROAP_FAILURE');\n this.emit(MediaConnectionEventNames.ROAP_FAILURE, event.data);\n }\n },\n idle: {\n always: {\n cond: 'isPendingLocalOffer',\n actions: ['increaseSeq', 'sendStartedEvent'],\n target: 'creatingLocalOffer'\n },\n on: {\n INITIATE_OFFER: {\n actions: ['increaseSeq', 'sendStartedEvent'],\n target: 'creatingLocalOffer'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'sendOutOfOrderError'\n }, {\n actions: ['updateSeq', 'sendStartedEvent'],\n target: 'settingRemoteOffer'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'sendOutOfOrderError'\n }, {\n actions: ['updateSeq', 'setOfferRequestFlag', 'sendStartedEvent'],\n target: 'creatingLocalOffer'\n }],\n REMOTE_ANSWER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'sendRoapOKMessage'\n }, {\n actions: 'sendInvalidStateError'\n }],\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n creatingLocalOffer: {\n invoke: {\n src: 'createLocalOffer',\n onDone: [{\n cond: 'isPendingLocalOffer',\n target: 'creatingLocalOffer'\n }, {\n cond: 'isHandlingOfferRequest',\n actions: ['sendRoapOfferResponseMessage', 'resolvePendingInitiateOfferPromises'],\n target: 'waitingForAnswer'\n }, {\n actions: ['sendRoapOfferMessage', 'resolvePendingInitiateOfferPromises'],\n target: 'waitingForAnswer'\n }],\n onError: {\n actions: 'rejectPendingInitiateOfferPromises',\n target: 'browserError'\n }\n },\n onEntry: ['resetPendingLocalOffer'],\n on: {\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n actions: 'handleGlare'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isHandlingOfferRequest',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'handleGlare'\n }],\n REMOTE_ANSWER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n waitingForAnswer: {\n on: {\n REMOTE_ANSWER_ARRIVED: [{\n actions: ['resetRetryCounter', 'updateSeq', 'updateIsOkInTransaction'],\n target: 'settingRemoteAnswer'\n }],\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: {\n actions: 'handleGlare'\n },\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isHandlingOfferRequest',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'handleGlare'\n }],\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n ERROR_ARRIVED: [{\n cond: 'shouldErrorTriggerOfferRetry',\n actions: ['increaseSeq', 'increaseRetryCounter'],\n target: 'creatingLocalOffer'\n }, {\n cond: 'isSameSeq',\n target: 'remoteError'\n }]\n }\n },\n settingRemoteAnswer: {\n invoke: {\n src: 'handleRemoteAnswer',\n onDone: [{\n cond: 'isOkInTransaction',\n actions: ['sendRoapOKMessage', 'resetOfferRequestFlag', 'sendDoneEvent'],\n target: 'idle'\n }, {\n actions: ['resetOfferRequestFlag', 'sendDoneEvent'],\n target: 'idle'\n }],\n onError: {\n actions: 'sendGenericError',\n target: 'browserError'\n }\n },\n on: {\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_OFFER_REQUEST_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_ANSWER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'sendInvalidStateError'\n }],\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n settingRemoteOffer: {\n invoke: {\n src: 'handleRemoteOffer',\n onDone: {\n actions: ['resetOkInTransaction', 'sendRoapAnswerMessage'],\n target: 'waitingForOK'\n },\n onError: {\n actions: 'sendGenericError',\n target: 'browserError'\n }\n },\n on: {\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'sendRetryAfterError'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_ANSWER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n waitingForOK: {\n on: {\n REMOTE_OK_ARRIVED: [{\n actions: ['updateSeq', 'sendDoneEvent'],\n target: 'idle'\n }],\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'sendInvalidStateError'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_ANSWER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n ERROR_ARRIVED: {\n cond: 'isSameSeq',\n target: 'remoteError'\n }\n }\n }\n }\n }, {\n services: {\n createLocalOffer: () => this.createLocalOfferCallback(),\n handleRemoteAnswer: (_context, event) => this.handleRemoteAnswerCallback(event.sdp),\n handleRemoteOffer: (_context, event) => this.handleRemoteOfferCallback(event.sdp)\n },\n actions: {\n enqueueNewOfferCreation: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n pendingLocalOffer: true\n })),\n resetPendingLocalOffer: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n pendingLocalOffer: false\n })),\n increaseSeq: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n seq: context.seq + 1\n })),\n updateSeq: assign((context, event) => _objectSpread$3(_objectSpread$3({}, context), {}, {\n seq: event.seq\n })),\n increaseRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n retryCounter: context.retryCounter + 1\n })),\n resetRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n retryCounter: 0\n })),\n setOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n isHandlingOfferRequest: true\n })),\n resetOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n isHandlingOfferRequest: false\n })),\n handleGlare: (_context, event) => {\n if (event.tieBreaker === WEB_TIEBREAKER_VALUE) {\n this.sendErrorMessage(event.seq, ErrorType.DOUBLECONFLICT);\n } else {\n this.sendErrorMessage(event.seq, ErrorType.CONFLICT);\n }\n },\n sendRoapOfferMessage: (context, event) => this.sendRoapOfferMessage(context.seq, event.data.sdp),\n sendRoapOfferResponseMessage: (context, event) => this.sendRoapOfferResponseMessage(context.seq, event.data.sdp),\n sendRoapOKMessage: context => this.sendRoapOkMessage(context.seq),\n sendRoapAnswerMessage: (context, event) => this.sendRoapAnswerMessage(context.seq, event.data.sdp),\n sendStartedEvent: () => this.sendStartedEvent(),\n sendDoneEvent: () => this.sendDoneEvent(),\n sendGenericError: context => this.sendErrorMessage(context.seq, ErrorType.FAILED),\n sendInvalidStateError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.INVALID_STATE),\n sendOutOfOrderError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.OUT_OF_ORDER),\n sendRetryAfterError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.FAILED, {\n retryAfter: Math.floor(Math.random() * 11)\n }),\n ignoreDuplicate: (_context, event) => this.log('FSM', \"ignoring duplicate roap message \".concat(event.type, \" with seq=\").concat(event.seq)),\n resolvePendingInitiateOfferPromises: () => this.resolvePendingInitiateOfferPromises(),\n rejectPendingInitiateOfferPromises: (_context, event) => this.rejectPendingInitiateOfferPromises(event.data),\n updateIsOkInTransaction: assign((context, event) => {\n var _event$headers;\n return _objectSpread$3(_objectSpread$3({}, context), {}, {\n isOkInTransaction: !((_event$headers = event.headers) !== null && _event$headers !== void 0 && _event$headers.includes(HEADER_NO_OK_IN_TRANSACTION))\n });\n }),\n resetOkInTransaction: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION\n }))\n },\n guards: {\n isPendingLocalOffer: context => context.pendingLocalOffer,\n isHandlingOfferRequest: context => context.isHandlingOfferRequest,\n isSameSeq: (context, event) => {\n if (event.seq === context.seq) {\n this.log('FSM', \"incoming roap message seq is same as current context seq: \".concat(event.seq));\n return true;\n }\n return false;\n },\n shouldErrorTriggerOfferRetry: (context, event) => {\n var retryableErrorTypes = [ErrorType.DOUBLECONFLICT, ErrorType.INVALID_STATE, ErrorType.OUT_OF_ORDER, ErrorType.RETRY];\n if (retryableErrorTypes.includes(event.errorType)) {\n if (event.seq === context.seq && context.retryCounter < MAX_RETRIES) {\n this.log('FSM', \"retryable error message received with matching seq and retryCounter \".concat(context.retryCounter, \" < \").concat(MAX_RETRIES));\n return true;\n }\n if (event.seq !== context.seq) {\n this.log('FSM', \"ignoring error message with wrong seq: \".concat(event.seq, \" !== \").concat(context.seq));\n } else {\n this.log('FSM', \"reached max retries: retryCounter=\".concat(context.retryCounter));\n }\n }\n return false;\n },\n isOkInTransaction: context => context.isOkInTransaction\n }\n });\n this.stateMachine = interpret(fsm).onTransition((state, event) => this.log('onTransition', \"state=\".concat(state.value, \", event=\").concat(JSON.stringify(event)))).start();\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n sendRoapOfferMessage(seq, sdp) {\n this.log('sendRoapOfferMessage', 'emitting ROAP OFFER');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'OFFER',\n sdp,\n tieBreaker: WEB_TIEBREAKER_VALUE\n }\n });\n }\n sendRoapOfferResponseMessage(seq, sdp) {\n this.log('sendRoapOfferResponseMessage', 'emitting ROAP OFFER RESPONSE');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'OFFER_RESPONSE',\n sdp\n }\n });\n }\n sendRoapOkMessage(seq) {\n this.log('sendRoapOkMessage', 'emitting ROAP OK');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'OK'\n }\n });\n }\n sendRoapAnswerMessage(seq, sdp) {\n this.log('sendRoapAnswerMessage', 'emitting ROAP ANSWER');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'ANSWER',\n sdp\n }\n });\n }\n sendDoneEvent() {\n this.log('sendDoneEvent', 'emitting ROAP DONE');\n this.emit(MediaConnectionEventNames.ROAP_DONE);\n }\n sendStartedEvent() {\n this.log('sendStartedEvent', 'emitting ROAP STARTED');\n this.emit(MediaConnectionEventNames.ROAP_STARTED);\n }\n sendErrorMessage(seq, errorType) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var {\n retryAfter\n } = options;\n this.log('sendErrorMessage', \"emitting ROAP ERROR (\".concat(errorType, \")\"));\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'ERROR',\n errorType,\n retryAfter\n }\n });\n }\n getStateMachine() {\n return this.stateMachine;\n }\n initiateOffer() {\n return new Promise((resolve, reject) => {\n this.initiateOfferPromises.push({\n resolve,\n reject\n });\n this.stateMachine.send('INITIATE_OFFER');\n });\n }\n resolvePendingInitiateOfferPromises() {\n while (this.initiateOfferPromises.length > 0) {\n var promise = this.initiateOfferPromises.shift();\n promise === null || promise === void 0 ? void 0 : promise.resolve();\n }\n }\n rejectPendingInitiateOfferPromises(error) {\n while (this.initiateOfferPromises.length > 0) {\n var promise = this.initiateOfferPromises.shift();\n promise === null || promise === void 0 ? void 0 : promise.reject(error);\n }\n }\n validateIncomingRoapMessage(roapMessage) {\n var {\n errorType,\n messageType,\n seq\n } = roapMessage;\n var isValid = true;\n var errorToSend;\n if (seq < this.stateMachine.state.context.seq) {\n isValid = false;\n if (messageType !== 'ERROR') {\n errorToSend = ErrorType.OUT_OF_ORDER;\n this.error('validateIncomingRoapMessage', \"received roap message \".concat(messageType, \" with seq too low: \").concat(seq, \" < \").concat(this.stateMachine.state.context.seq));\n } else {\n this.error('validateIncomingRoapMessage', \"received ERROR message \".concat(errorType, \" with seq too low: \").concat(seq, \" < \").concat(this.stateMachine.state.context.seq, \", ignoring it\"));\n }\n }\n return {\n isValid,\n errorToSend\n };\n }\n roapMessageReceived(roapMessage) {\n var {\n errorCause,\n errorType,\n headers,\n messageType,\n sdp,\n seq,\n tieBreaker\n } = roapMessage;\n var {\n isValid,\n errorToSend\n } = this.validateIncomingRoapMessage(roapMessage);\n if (!isValid) {\n if (errorToSend) {\n this.sendErrorMessage(seq, errorToSend);\n }\n return;\n }\n switch (messageType) {\n case 'ANSWER':\n this.stateMachine.send('REMOTE_ANSWER_ARRIVED', {\n sdp,\n seq,\n headers\n });\n break;\n case 'OFFER':\n this.stateMachine.send('REMOTE_OFFER_ARRIVED', {\n sdp,\n seq,\n tieBreaker\n });\n break;\n case 'OFFER_REQUEST':\n this.stateMachine.send('REMOTE_OFFER_REQUEST_ARRIVED', {\n seq,\n tieBreaker\n });\n break;\n case 'OK':\n this.stateMachine.send('REMOTE_OK_ARRIVED', {\n sdp,\n seq\n });\n break;\n case 'ERROR':\n this.error('roapMessageReceived', \"Error received: seq=\".concat(seq, \" type=\").concat(errorType, \" cause=\").concat(errorCause));\n if (errorType === ErrorType.CONFLICT) {\n this.error('roapMessageReceived', \"CONFLICT error type received - this should never happen, because we use the tieBreaker value \".concat(WEB_TIEBREAKER_VALUE));\n }\n this.stateMachine.send('ERROR_ARRIVED', {\n seq,\n errorType\n });\n break;\n case 'OFFER_RESPONSE':\n this.error('roapMessageReceived', \"Received unexpected OFFER_RESPONSE: seq=\".concat(seq));\n break;\n default:\n this.error('roapMessageReceived()', \"unsupported messageType: \".concat(messageType));\n throw new Error('unhandled messageType');\n }\n }\n stop() {\n this.stateMachine.stop();\n }\n getSeq() {\n return this.stateMachine.state.context.seq;\n }\n}\n\nfunction ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass RoapMediaConnection extends EventEmitter$5 {\n constructor(mediaConnectionConfig, options, debugId) {\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"debugId\", void 0);\n _defineProperty(this, \"mediaConnection\", void 0);\n _defineProperty(this, \"roap\", void 0);\n _defineProperty(this, \"sdpNegotiationStarted\", void 0);\n this.debugId = debugId;\n this.id = debugId || 'RoapMediaConnection';\n this.sdpNegotiationStarted = false;\n configureWcmeLogger(debugId);\n this.log('constructor()', \"config: \".concat(JSON.stringify(mediaConnectionConfig), \", options: \").concat(JSON.stringify(options)));\n this.mediaConnection = this.createMediaConnection(mediaConnectionConfig, options, debugId);\n this.roap = this.createRoap(debugId);\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n forwardEvent(eventSource, eventType) {\n var _this = this;\n eventSource.on(eventType, function () {\n for (var _len = arguments.length, eventData = new Array(_len), _key = 0; _key < _len; _key++) {\n eventData[_key] = arguments[_key];\n }\n _this.emit(eventType, ...eventData);\n });\n }\n createMediaConnection(mediaConnectionConfig, options, debugId) {\n var mediaConnection = new MediaConnection(mediaConnectionConfig, options, debugId);\n mediaConnection.on(MediaConnectionEventNames.REMOTE_TRACK_ADDED, this.onRemoteTrack.bind(this));\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.DTMF_TONE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CANDIDATE);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CANDIDATE_ERROR);\n return mediaConnection;\n }\n createRoap(debugId, seq) {\n var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);\n roap.on(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));\n roap.on(MediaConnectionEventNames.ROAP_STARTED, () => this.emit(MediaConnectionEventNames.ROAP_STARTED));\n roap.on(MediaConnectionEventNames.ROAP_DONE, () => this.emit(MediaConnectionEventNames.ROAP_DONE));\n roap.on(MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(MediaConnectionEventNames.ROAP_FAILURE, error));\n return roap;\n }\n initiateOffer() {\n this.log('initiateOffer()', 'called');\n if (this.sdpNegotiationStarted) {\n this.error('initiateOffer()', 'SDP negotiation already started');\n return Promise.reject(new Error('SDP negotiation already started'));\n }\n this.mediaConnection.initializeTransceivers(false);\n this.sdpNegotiationStarted = true;\n return this.roap.initiateOffer();\n }\n close() {\n this.log('close()', 'called');\n this.closeMediaConnection();\n this.stopRoapSession();\n }\n closeMediaConnection() {\n this.mediaConnection.close();\n this.mediaConnection.removeAllListeners();\n }\n stopRoapSession() {\n this.roap.stop();\n this.roap.removeAllListeners();\n }\n reconnect(iceServers) {\n var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.log('reconnect()', \"iceServers: \".concat(JSON.stringify(iceServers)));\n var config = _objectSpread$2(_objectSpread$2({}, this.mediaConnection.getConfig()), {}, {\n iceServers\n });\n var options = this.mediaConnection.getSendReceiveOptions();\n var seq = this.roap.getSeq();\n this.stopRoapSession();\n this.closeMediaConnection();\n this.sdpNegotiationStarted = false;\n this.mediaConnection = this.createMediaConnection(config, options, this.debugId);\n this.roap = this.createRoap(this.debugId, seq);\n if (initiateOffer) {\n return this.initiateOffer();\n }\n return Promise.resolve();\n }\n updateLocalTracks(tracks) {\n this.log('updateLocalTracks()', \"called with \".concat(JSON.stringify(tracks)));\n var newOfferNeeded = this.mediaConnection.updateLocalTracks(tracks);\n if (newOfferNeeded) {\n this.log('updateLocalTracks()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n updateDirection(direction) {\n this.log('updateDirection()', \"called with \".concat(JSON.stringify(direction)));\n var newOfferNeeded = this.mediaConnection.updateDirection(direction);\n if (newOfferNeeded) {\n this.log('updateDirection()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n updateRemoteQualityLevel(newValue) {\n this.log('updateRemoteQualityLevel()', \"called with \".concat(newValue));\n var newOfferNeeded = this.mediaConnection.updateRemoteQualityLevel(newValue);\n if (newOfferNeeded) {\n this.log('updateRemoteQualityLevel()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n update(options) {\n this.log('update()', \"called with \".concat(JSON.stringify(options)));\n var newOfferNeeded = this.mediaConnection.update(options);\n if (newOfferNeeded) {\n this.log('update()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n getPeerConnectionState() {\n return this.mediaConnection.getPeerConnectionState();\n }\n getIceConnectionState() {\n return this.mediaConnection.getIceConnectionState();\n }\n getConnectionState() {\n return this.mediaConnection.getConnectionState();\n }\n getIceGatheringState() {\n return this.mediaConnection.getIceGatheringState();\n }\n getStats() {\n return this.mediaConnection.getStats();\n }\n getTransceiverStats() {\n return this.mediaConnection.getTransceiverStats();\n }\n insertDTMF(tones, duration, interToneGap) {\n this.log('insertDTMF()', \"called with tones=\\\"\".concat(tones, \"\\\", duration=\").concat(duration, \", interToneGap=\").concat(interToneGap));\n this.mediaConnection.insertDTMF(tones, duration, interToneGap);\n }\n roapMessageReceived(roapMessage) {\n this.log('roapMessageReceived()', \"called with messageType=\".concat(roapMessage.messageType, \", seq=\").concat(roapMessage.seq));\n if (!this.sdpNegotiationStarted) {\n if (roapMessage.messageType === 'OFFER') {\n this.sdpNegotiationStarted = true;\n this.mediaConnection.initializeTransceivers(true);\n }\n if (roapMessage.messageType === 'OFFER_REQUEST') {\n this.sdpNegotiationStarted = true;\n this.mediaConnection.initializeTransceivers(false);\n }\n }\n this.roap.roapMessageReceived(roapMessage);\n }\n onRemoteTrack(event) {\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, event);\n }\n createLocalOffer() {\n return this.mediaConnection.createLocalOffer();\n }\n handleRemoteOffer(sdp) {\n return this.mediaConnection.handleRemoteOffer(sdp);\n }\n handleRemoteAnswer(sdp) {\n return this.mediaConnection.handleRemoteAnswer(sdp);\n }\n}\n\nfunction ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass MultistreamRoapMediaConnection extends EventEmitter$5 {\n constructor(mediaConnectionConfig, debugId) {\n var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};\n var closeCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};\n var sendMetricsCallback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => {};\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"debugId\", void 0);\n _defineProperty(this, \"multistreamConnection\", void 0);\n _defineProperty(this, \"roap\", void 0);\n _defineProperty(this, \"sdpNegotiationStarted\", false);\n _defineProperty(this, \"closeCallback\", void 0);\n _defineProperty(this, \"sendMetricsCallback\", void 0);\n this.debugId = debugId;\n this.id = debugId || 'MultistreamRoapMediaConnection';\n configureWcmeLogger(debugId);\n this.log('constructor()', \"config: \".concat(JSON.stringify(mediaConnectionConfig)));\n this.multistreamConnection = this.createMultistreamConnection(mediaConnectionConfig, metricsCallback);\n this.roap = this.createRoap(debugId);\n this.closeCallback = closeCallback;\n this.sendMetricsCallback = sendMetricsCallback;\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n createMultistreamConnection(mediaConnectionConfig, metricsCallback) {\n this.log('createMultistreamConnection()', 'called');\n var multistreamConnection = new MultistreamConnection(_objectSpread$1({}, mediaConnectionConfig));\n multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {\n this.emit(MediaConnectionEventNames.ACTIVE_SPEAKERS_CHANGED, csis);\n });\n multistreamConnection.on(MultistreamConnectionEventNames.AudioSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {\n this.emit(MediaConnectionEventNames.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);\n });\n multistreamConnection.on(MultistreamConnectionEventNames.VideoSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {\n this.emit(MediaConnectionEventNames.VIDEO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);\n });\n multistreamConnection.on(MultistreamConnectionEventNames.PeerConnectionStateUpdate, state => {\n this.emit(MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {\n state\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceConnectionStateUpdate, state => {\n this.emit(MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {\n state\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceGatheringStateUpdate, state => {\n this.emit(MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {\n state\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.NegotiationNeeded, () => {\n this.onNegotiationNeeded();\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceCandidate, event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE, {\n candidate: event.candidate\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceCandidateError, event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {\n error: event\n });\n });\n multistreamConnection.setMetricsCallback(metricsCallback);\n return multistreamConnection;\n }\n createRoap(debugId, seq) {\n var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);\n roap.on(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));\n roap.on(MediaConnectionEventNames.ROAP_STARTED, () => this.emit(MediaConnectionEventNames.ROAP_STARTED));\n roap.on(MediaConnectionEventNames.ROAP_DONE, () => this.emit(MediaConnectionEventNames.ROAP_DONE));\n roap.on(MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(MediaConnectionEventNames.ROAP_FAILURE, error));\n return roap;\n }\n onNegotiationNeeded() {\n this.log('onNegotiationNeeded()', 'called');\n if (!this.sdpNegotiationStarted) {\n return Promise.resolve();\n }\n return this.roap.initiateOffer();\n }\n initiateOffer() {\n this.log('initiateOffer()', 'called');\n if (this.sdpNegotiationStarted) {\n this.error('initiateOffer()', 'SDP negotiation already started');\n return Promise.reject(new Error('SDP negotiation already started'));\n }\n this.sdpNegotiationStarted = true;\n return this.roap.initiateOffer();\n }\n close() {\n this.log('close()', 'called');\n this.closeMediaConnection();\n this.stopRoapSession();\n this.closeCallback();\n }\n forceRtcMetricsSend() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$multistreamConn;\n yield (_this$multistreamConn = _this.multistreamConnection) === null || _this$multistreamConn === void 0 ? void 0 : _this$multistreamConn.forceRtcMetricsCallback();\n _this.sendMetricsCallback();\n })();\n }\n closeMediaConnection() {\n this.multistreamConnection.close();\n this.multistreamConnection.removeAllListeners();\n }\n stopRoapSession() {\n this.roap.stop();\n this.roap.removeAllListeners();\n }\n reconnect(iceServers) {\n var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.log('reconnect()', \"iceServers: \".concat(JSON.stringify(iceServers)));\n var seq = this.roap.getSeq();\n this.stopRoapSession();\n this.sdpNegotiationStarted = false;\n this.multistreamConnection.renewPeerConnection({\n iceServers\n });\n this.roap = this.createRoap(this.debugId, seq);\n if (initiateOffer) {\n return this.initiateOffer();\n }\n return Promise.resolve();\n }\n getConnectionState() {\n var connectionState = this.multistreamConnection.getConnectionState();\n this.log('getConnectionState()', \"called, returning \".concat(connectionState));\n return connectionState;\n }\n getPeerConnectionState() {\n return this.multistreamConnection.getPeerConnectionState();\n }\n getIceConnectionState() {\n return this.multistreamConnection.getIceConnectionState();\n }\n getStats() {\n return this.multistreamConnection.getStats();\n }\n getTransceiverStats() {\n return this.multistreamConnection.getTransceiverStats();\n }\n roapMessageReceived(roapMessage) {\n this.log('roapMessageReceived()', \"called with messageType=\".concat(roapMessage.messageType, \", seq=\").concat(roapMessage.seq));\n if (!this.sdpNegotiationStarted && roapMessage.messageType === 'OFFER') {\n throw new Error('incoming first offer is not supported by MultistreamRoapMediaConnection');\n }\n this.roap.roapMessageReceived(roapMessage);\n }\n createSendSlot(mediaType) {\n var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.log('createSendSlot()', \"called with mediaType=\".concat(mediaType, \", active=\").concat(active));\n return this.multistreamConnection.createSendSlot(mediaType, active);\n }\n createReceiveSlot(mediaType) {\n this.log('createReceiveSlot()', \"called\");\n return this.multistreamConnection.createReceiveSlot(mediaType);\n }\n requestMedia(mediaType, streamRequests) {\n this.log('requestMedia()', \"called\");\n return this.multistreamConnection.requestMedia(mediaType, streamRequests);\n }\n createLocalOffer() {\n this.log('createLocalOffer()', 'calling this.multistreamConnection.createOffer');\n return this.multistreamConnection.createOffer().then(result => {\n if (result.sdp) {\n this.emit(MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);\n return {\n sdp: result.sdp\n };\n }\n return Promise.reject(new SdpOfferCreationError('empty local SDP'));\n }).catch(error => {\n throw new SdpOfferCreationError(\"createLocalOffer() failure: \".concat(error.message), {\n cause: error\n });\n });\n }\n handleRemoteOffer() {\n return Promise.reject(new SdpOfferHandlingError('remote offers not supported by WCME'));\n }\n handleRemoteAnswer(sdp) {\n this.log('handleRemoteAnswer()', \"called: sdp=\".concat(sdp ? 'non-empty' : 'empty'));\n if (sdp) {\n var mungedSdp = mungeRemoteSdp({}, sdp);\n this.log('handleRemoteAnswer()', 'calling this.multistreamConnection.setAnswer');\n return this.multistreamConnection.setAnswer(mungedSdp).then(result => {\n this.log('handleRemoteAnswer()', 'this.multistreamConnection.setAnswer resolved');\n this.emit(MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);\n return result;\n }).catch(error => {\n this.log('handleRemoteAnswer()', \"this.multistreamConnection.setAnswer failed\");\n throw new SdpAnswerHandlingError(\"handleRemoteAnswer() failure: \".concat(error.message), {\n cause: error\n });\n });\n }\n return Promise.reject(new SdpAnswerHandlingError('empty answer'));\n }\n getIceGatheringState() {\n return this.multistreamConnection.getIceGatheringState();\n }\n}\n\nvar Errors = Error$1;\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\nvar es5 = {\n exports: {}\n};\n(function (module, exports) {\n !function (e, t) {\n module.exports = t();\n }(commonjsGlobal, function () {\n return function (e) {\n var t = {};\n function r(n) {\n if (t[n]) return t[n].exports;\n var i = t[n] = {\n i: n,\n l: !1,\n exports: {}\n };\n return e[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;\n }\n return r.m = e, r.c = t, r.d = function (e, t, n) {\n r.o(e, t) || Object.defineProperty(e, t, {\n enumerable: !0,\n get: n\n });\n }, r.r = function (e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }, r.t = function (e, t) {\n if (1 & t && (e = r(e)), 8 & t) return e;\n if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n var n = Object.create(null);\n if (r.r(n), Object.defineProperty(n, \"default\", {\n enumerable: !0,\n value: e\n }), 2 & t && \"string\" != typeof e) for (var i in e) {\n r.d(n, i, function (t) {\n return e[t];\n }.bind(null, i));\n }\n return n;\n }, r.n = function (e) {\n var t = e && e.__esModule ? function () {\n return e.default;\n } : function () {\n return e;\n };\n return r.d(t, \"a\", t), t;\n }, r.o = function (e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }, r.p = \"\", r(r.s = 90);\n }({\n 17: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n = r(18),\n i = function () {\n function e() {}\n return e.getFirstMatch = function (e, t) {\n var r = t.match(e);\n return r && r.length > 0 && r[1] || \"\";\n }, e.getSecondMatch = function (e, t) {\n var r = t.match(e);\n return r && r.length > 1 && r[2] || \"\";\n }, e.matchAndReturnConst = function (e, t, r) {\n if (e.test(t)) return r;\n }, e.getWindowsVersionName = function (e) {\n switch (e) {\n case \"NT\":\n return \"NT\";\n case \"XP\":\n return \"XP\";\n case \"NT 5.0\":\n return \"2000\";\n case \"NT 5.1\":\n return \"XP\";\n case \"NT 5.2\":\n return \"2003\";\n case \"NT 6.0\":\n return \"Vista\";\n case \"NT 6.1\":\n return \"7\";\n case \"NT 6.2\":\n return \"8\";\n case \"NT 6.3\":\n return \"8.1\";\n case \"NT 10.0\":\n return \"10\";\n default:\n return;\n }\n }, e.getMacOSVersionName = function (e) {\n var t = e.split(\".\").splice(0, 2).map(function (e) {\n return parseInt(e, 10) || 0;\n });\n if (t.push(0), 10 === t[0]) switch (t[1]) {\n case 5:\n return \"Leopard\";\n case 6:\n return \"Snow Leopard\";\n case 7:\n return \"Lion\";\n case 8:\n return \"Mountain Lion\";\n case 9:\n return \"Mavericks\";\n case 10:\n return \"Yosemite\";\n case 11:\n return \"El Capitan\";\n case 12:\n return \"Sierra\";\n case 13:\n return \"High Sierra\";\n case 14:\n return \"Mojave\";\n case 15:\n return \"Catalina\";\n default:\n return;\n }\n }, e.getAndroidVersionName = function (e) {\n var t = e.split(\".\").splice(0, 2).map(function (e) {\n return parseInt(e, 10) || 0;\n });\n if (t.push(0), !(1 === t[0] && t[1] < 5)) return 1 === t[0] && t[1] < 6 ? \"Cupcake\" : 1 === t[0] && t[1] >= 6 ? \"Donut\" : 2 === t[0] && t[1] < 2 ? \"Eclair\" : 2 === t[0] && 2 === t[1] ? \"Froyo\" : 2 === t[0] && t[1] > 2 ? \"Gingerbread\" : 3 === t[0] ? \"Honeycomb\" : 4 === t[0] && t[1] < 1 ? \"Ice Cream Sandwich\" : 4 === t[0] && t[1] < 4 ? \"Jelly Bean\" : 4 === t[0] && t[1] >= 4 ? \"KitKat\" : 5 === t[0] ? \"Lollipop\" : 6 === t[0] ? \"Marshmallow\" : 7 === t[0] ? \"Nougat\" : 8 === t[0] ? \"Oreo\" : 9 === t[0] ? \"Pie\" : void 0;\n }, e.getVersionPrecision = function (e) {\n return e.split(\".\").length;\n }, e.compareVersions = function (t, r, n) {\n void 0 === n && (n = !1);\n var i = e.getVersionPrecision(t),\n s = e.getVersionPrecision(r),\n a = Math.max(i, s),\n o = 0,\n u = e.map([t, r], function (t) {\n var r = a - e.getVersionPrecision(t),\n n = t + new Array(r + 1).join(\".0\");\n return e.map(n.split(\".\"), function (e) {\n return new Array(20 - e.length).join(\"0\") + e;\n }).reverse();\n });\n for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {\n if (u[0][a] > u[1][a]) return 1;\n if (u[0][a] === u[1][a]) {\n if (a === o) return 0;\n a -= 1;\n } else if (u[0][a] < u[1][a]) return -1;\n }\n }, e.map = function (e, t) {\n var r,\n n = [];\n if (Array.prototype.map) return Array.prototype.map.call(e, t);\n for (r = 0; r < e.length; r += 1) {\n n.push(t(e[r]));\n }\n return n;\n }, e.find = function (e, t) {\n var r, n;\n if (Array.prototype.find) return Array.prototype.find.call(e, t);\n for (r = 0, n = e.length; r < n; r += 1) {\n var i = e[r];\n if (t(i, r)) return i;\n }\n }, e.assign = function (e) {\n for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {\n s[a - 1] = arguments[a];\n }\n if (Object.assign) return Object.assign.apply(Object, [e].concat(s));\n var o = function o() {\n var e = s[t];\n \"object\" == typeof e && null !== e && Object.keys(e).forEach(function (t) {\n n[t] = e[t];\n });\n };\n for (t = 0, r = s.length; t < r; t += 1) {\n o();\n }\n return e;\n }, e.getBrowserAlias = function (e) {\n return n.BROWSER_ALIASES_MAP[e];\n }, e.getBrowserTypeByAlias = function (e) {\n return n.BROWSER_MAP[e] || \"\";\n }, e;\n }();\n t.default = i, e.exports = t.default;\n },\n 18: function _(e, t, r) {\n t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;\n t.BROWSER_ALIASES_MAP = {\n \"Amazon Silk\": \"amazon_silk\",\n \"Android Browser\": \"android\",\n Bada: \"bada\",\n BlackBerry: \"blackberry\",\n Chrome: \"chrome\",\n Chromium: \"chromium\",\n Electron: \"electron\",\n Epiphany: \"epiphany\",\n Firefox: \"firefox\",\n Focus: \"focus\",\n Generic: \"generic\",\n \"Google Search\": \"google_search\",\n Googlebot: \"googlebot\",\n \"Internet Explorer\": \"ie\",\n \"K-Meleon\": \"k_meleon\",\n Maxthon: \"maxthon\",\n \"Microsoft Edge\": \"edge\",\n \"MZ Browser\": \"mz\",\n \"NAVER Whale Browser\": \"naver\",\n Opera: \"opera\",\n \"Opera Coast\": \"opera_coast\",\n PhantomJS: \"phantomjs\",\n Puffin: \"puffin\",\n QupZilla: \"qupzilla\",\n QQ: \"qq\",\n QQLite: \"qqlite\",\n Safari: \"safari\",\n Sailfish: \"sailfish\",\n \"Samsung Internet for Android\": \"samsung_internet\",\n SeaMonkey: \"seamonkey\",\n Sleipnir: \"sleipnir\",\n Swing: \"swing\",\n Tizen: \"tizen\",\n \"UC Browser\": \"uc\",\n Vivaldi: \"vivaldi\",\n \"WebOS Browser\": \"webos\",\n WeChat: \"wechat\",\n \"Yandex Browser\": \"yandex\",\n Roku: \"roku\"\n };\n t.BROWSER_MAP = {\n amazon_silk: \"Amazon Silk\",\n android: \"Android Browser\",\n bada: \"Bada\",\n blackberry: \"BlackBerry\",\n chrome: \"Chrome\",\n chromium: \"Chromium\",\n electron: \"Electron\",\n epiphany: \"Epiphany\",\n firefox: \"Firefox\",\n focus: \"Focus\",\n generic: \"Generic\",\n googlebot: \"Googlebot\",\n google_search: \"Google Search\",\n ie: \"Internet Explorer\",\n k_meleon: \"K-Meleon\",\n maxthon: \"Maxthon\",\n edge: \"Microsoft Edge\",\n mz: \"MZ Browser\",\n naver: \"NAVER Whale Browser\",\n opera: \"Opera\",\n opera_coast: \"Opera Coast\",\n phantomjs: \"PhantomJS\",\n puffin: \"Puffin\",\n qupzilla: \"QupZilla\",\n qq: \"QQ Browser\",\n qqlite: \"QQ Browser Lite\",\n safari: \"Safari\",\n sailfish: \"Sailfish\",\n samsung_internet: \"Samsung Internet for Android\",\n seamonkey: \"SeaMonkey\",\n sleipnir: \"Sleipnir\",\n swing: \"Swing\",\n tizen: \"Tizen\",\n uc: \"UC Browser\",\n vivaldi: \"Vivaldi\",\n webos: \"WebOS Browser\",\n wechat: \"WeChat\",\n yandex: \"Yandex Browser\"\n };\n t.PLATFORMS_MAP = {\n tablet: \"tablet\",\n mobile: \"mobile\",\n desktop: \"desktop\",\n tv: \"tv\"\n };\n t.OS_MAP = {\n WindowsPhone: \"Windows Phone\",\n Windows: \"Windows\",\n MacOS: \"macOS\",\n iOS: \"iOS\",\n Android: \"Android\",\n WebOS: \"WebOS\",\n BlackBerry: \"BlackBerry\",\n Bada: \"Bada\",\n Tizen: \"Tizen\",\n Linux: \"Linux\",\n ChromeOS: \"Chrome OS\",\n PlayStation4: \"PlayStation 4\",\n Roku: \"Roku\"\n };\n t.ENGINE_MAP = {\n EdgeHTML: \"EdgeHTML\",\n Blink: \"Blink\",\n Trident: \"Trident\",\n Presto: \"Presto\",\n Gecko: \"Gecko\",\n WebKit: \"WebKit\"\n };\n },\n 90: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(91)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n function a(e, t) {\n for (var r = 0; r < t.length; r++) {\n var n = t[r];\n n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);\n }\n }\n var o = function () {\n function e() {}\n var t, r, n;\n return e.getParser = function (e, t) {\n if (void 0 === t && (t = !1), \"string\" != typeof e) throw new Error(\"UserAgent should be a string\");\n return new i.default(e, t);\n }, e.parse = function (e) {\n return new i.default(e).getResult();\n }, t = e, n = [{\n key: \"BROWSER_MAP\",\n get: function get() {\n return s.BROWSER_MAP;\n }\n }, {\n key: \"ENGINE_MAP\",\n get: function get() {\n return s.ENGINE_MAP;\n }\n }, {\n key: \"OS_MAP\",\n get: function get() {\n return s.OS_MAP;\n }\n }, {\n key: \"PLATFORMS_MAP\",\n get: function get() {\n return s.PLATFORMS_MAP;\n }\n }], (r = null) && a(t.prototype, r), n && a(t, n), e;\n }();\n t.default = o, e.exports = t.default;\n },\n 91: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n = u(r(92)),\n i = u(r(93)),\n s = u(r(94)),\n a = u(r(95)),\n o = u(r(17));\n function u(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var d = function () {\n function e(e, t) {\n if (void 0 === t && (t = !1), null == e || \"\" === e) throw new Error(\"UserAgent parameter can't be empty\");\n this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();\n }\n var t = e.prototype;\n return t.getUA = function () {\n return this._ua;\n }, t.test = function (e) {\n return e.test(this._ua);\n }, t.parseBrowser = function () {\n var e = this;\n this.parsedResult.browser = {};\n var t = o.default.find(n.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;\n }, t.getBrowser = function () {\n return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();\n }, t.getBrowserName = function (e) {\n return e ? String(this.getBrowser().name).toLowerCase() || \"\" : this.getBrowser().name || \"\";\n }, t.getBrowserVersion = function () {\n return this.getBrowser().version;\n }, t.getOS = function () {\n return this.parsedResult.os ? this.parsedResult.os : this.parseOS();\n }, t.parseOS = function () {\n var e = this;\n this.parsedResult.os = {};\n var t = o.default.find(i.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;\n }, t.getOSName = function (e) {\n var t = this.getOS().name;\n return e ? String(t).toLowerCase() || \"\" : t || \"\";\n }, t.getOSVersion = function () {\n return this.getOS().version;\n }, t.getPlatform = function () {\n return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();\n }, t.getPlatformType = function (e) {\n void 0 === e && (e = !1);\n var t = this.getPlatform().type;\n return e ? String(t).toLowerCase() || \"\" : t || \"\";\n }, t.parsePlatform = function () {\n var e = this;\n this.parsedResult.platform = {};\n var t = o.default.find(s.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;\n }, t.getEngine = function () {\n return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();\n }, t.getEngineName = function (e) {\n return e ? String(this.getEngine().name).toLowerCase() || \"\" : this.getEngine().name || \"\";\n }, t.parseEngine = function () {\n var e = this;\n this.parsedResult.engine = {};\n var t = o.default.find(a.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;\n }, t.parse = function () {\n return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;\n }, t.getResult = function () {\n return o.default.assign({}, this.parsedResult);\n }, t.satisfies = function (e) {\n var t = this,\n r = {},\n n = 0,\n i = {},\n s = 0;\n if (Object.keys(e).forEach(function (t) {\n var a = e[t];\n \"string\" == typeof a ? (i[t] = a, s += 1) : \"object\" == typeof a && (r[t] = a, n += 1);\n }), n > 0) {\n var a = Object.keys(r),\n u = o.default.find(a, function (e) {\n return t.isOS(e);\n });\n if (u) {\n var d = this.satisfies(r[u]);\n if (void 0 !== d) return d;\n }\n var c = o.default.find(a, function (e) {\n return t.isPlatform(e);\n });\n if (c) {\n var f = this.satisfies(r[c]);\n if (void 0 !== f) return f;\n }\n }\n if (s > 0) {\n var l = Object.keys(i),\n h = o.default.find(l, function (e) {\n return t.isBrowser(e, !0);\n });\n if (void 0 !== h) return this.compareVersion(i[h]);\n }\n }, t.isBrowser = function (e, t) {\n void 0 === t && (t = !1);\n var r = this.getBrowserName().toLowerCase(),\n n = e.toLowerCase(),\n i = o.default.getBrowserTypeByAlias(n);\n return t && i && (n = i.toLowerCase()), n === r;\n }, t.compareVersion = function (e) {\n var t = [0],\n r = e,\n n = !1,\n i = this.getBrowserVersion();\n if (\"string\" == typeof i) return \">\" === e[0] || \"<\" === e[0] ? (r = e.substr(1), \"=\" === e[1] ? (n = !0, r = e.substr(2)) : t = [], \">\" === e[0] ? t.push(1) : t.push(-1)) : \"=\" === e[0] ? r = e.substr(1) : \"~\" === e[0] && (n = !0, r = e.substr(1)), t.indexOf(o.default.compareVersions(i, r, n)) > -1;\n }, t.isOS = function (e) {\n return this.getOSName(!0) === String(e).toLowerCase();\n }, t.isPlatform = function (e) {\n return this.getPlatformType(!0) === String(e).toLowerCase();\n }, t.isEngine = function (e) {\n return this.getEngineName(!0) === String(e).toLowerCase();\n }, t.is = function (e, t) {\n return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);\n }, t.some = function (e) {\n var t = this;\n return void 0 === e && (e = []), e.some(function (e) {\n return t.is(e);\n });\n }, e;\n }();\n t.default = d, e.exports = t.default;\n },\n 92: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n };\n var s = /version\\/(\\d+(\\.?_?\\d+)+)/i,\n a = [{\n test: [/googlebot/i],\n describe: function describe(e) {\n var t = {\n name: \"Googlebot\"\n },\n r = i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/opera/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/opr\\/|opios/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera\"\n },\n r = i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/SamsungBrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"Samsung Internet for Android\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/Whale/i],\n describe: function describe(e) {\n var t = {\n name: \"NAVER Whale Browser\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/MZBrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"MZ Browser\"\n },\n r = i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/focus/i],\n describe: function describe(e) {\n var t = {\n name: \"Focus\"\n },\n r = i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/swing/i],\n describe: function describe(e) {\n var t = {\n name: \"Swing\"\n },\n r = i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/coast/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera Coast\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera Touch\"\n },\n r = i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/yabrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"Yandex Browser\"\n },\n r = i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/ucbrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"UC Browser\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/Maxthon|mxios/i],\n describe: function describe(e) {\n var t = {\n name: \"Maxthon\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/epiphany/i],\n describe: function describe(e) {\n var t = {\n name: \"Epiphany\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/puffin/i],\n describe: function describe(e) {\n var t = {\n name: \"Puffin\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/sleipnir/i],\n describe: function describe(e) {\n var t = {\n name: \"Sleipnir\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/k-meleon/i],\n describe: function describe(e) {\n var t = {\n name: \"K-Meleon\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/micromessenger/i],\n describe: function describe(e) {\n var t = {\n name: \"WeChat\"\n },\n r = i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/qqbrowser/i],\n describe: function describe(e) {\n var t = {\n name: /qqbrowserlite/i.test(e) ? \"QQ Browser Lite\" : \"QQ Browser\"\n },\n r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/msie|trident/i],\n describe: function describe(e) {\n var t = {\n name: \"Internet Explorer\"\n },\n r = i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/\\sedg\\//i],\n describe: function describe(e) {\n var t = {\n name: \"Microsoft Edge\"\n },\n r = i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/edg([ea]|ios)/i],\n describe: function describe(e) {\n var t = {\n name: \"Microsoft Edge\"\n },\n r = i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/vivaldi/i],\n describe: function describe(e) {\n var t = {\n name: \"Vivaldi\"\n },\n r = i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/seamonkey/i],\n describe: function describe(e) {\n var t = {\n name: \"SeaMonkey\"\n },\n r = i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/sailfish/i],\n describe: function describe(e) {\n var t = {\n name: \"Sailfish\"\n },\n r = i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/silk/i],\n describe: function describe(e) {\n var t = {\n name: \"Amazon Silk\"\n },\n r = i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/phantom/i],\n describe: function describe(e) {\n var t = {\n name: \"PhantomJS\"\n },\n r = i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/slimerjs/i],\n describe: function describe(e) {\n var t = {\n name: \"SlimerJS\"\n },\n r = i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe: function describe(e) {\n var t = {\n name: \"BlackBerry\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/(web|hpw)[o0]s/i],\n describe: function describe(e) {\n var t = {\n name: \"WebOS Browser\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/bada/i],\n describe: function describe(e) {\n var t = {\n name: \"Bada\"\n },\n r = i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/tizen/i],\n describe: function describe(e) {\n var t = {\n name: \"Tizen\"\n },\n r = i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/qupzilla/i],\n describe: function describe(e) {\n var t = {\n name: \"QupZilla\"\n },\n r = i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/firefox|iceweasel|fxios/i],\n describe: function describe(e) {\n var t = {\n name: \"Firefox\"\n },\n r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/electron/i],\n describe: function describe(e) {\n var t = {\n name: \"Electron\"\n },\n r = i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/MiuiBrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"Miui\"\n },\n r = i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/chromium/i],\n describe: function describe(e) {\n var t = {\n name: \"Chromium\"\n },\n r = i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/chrome|crios|crmo/i],\n describe: function describe(e) {\n var t = {\n name: \"Chrome\"\n },\n r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/GSA/i],\n describe: function describe(e) {\n var t = {\n name: \"Google Search\"\n },\n r = i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: function test(e) {\n var t = !e.test(/like android/i),\n r = e.test(/android/i);\n return t && r;\n },\n describe: function describe(e) {\n var t = {\n name: \"Android Browser\"\n },\n r = i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/playstation 4/i],\n describe: function describe(e) {\n var t = {\n name: \"PlayStation 4\"\n },\n r = i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/safari|applewebkit/i],\n describe: function describe(e) {\n var t = {\n name: \"Safari\"\n },\n r = i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/.*/i],\n describe: function describe(e) {\n var t = -1 !== e.search(\"\\\\(\") ? /^(.*)\\/(.*)[ \\t]\\((.*)/ : /^(.*)\\/(.*) /;\n return {\n name: i.default.getFirstMatch(t, e),\n version: i.default.getSecondMatch(t, e)\n };\n }\n }];\n t.default = a, e.exports = t.default;\n },\n 93: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n var a = [{\n test: [/Roku\\/DVP/],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, e);\n return {\n name: s.OS_MAP.Roku,\n version: t\n };\n }\n }, {\n test: [/windows phone/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.WindowsPhone,\n version: t\n };\n }\n }, {\n test: [/windows /i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, e),\n r = i.default.getWindowsVersionName(t);\n return {\n name: s.OS_MAP.Windows,\n version: t,\n versionName: r\n };\n }\n }, {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe: function describe(e) {\n var t = {\n name: s.OS_MAP.iOS\n },\n r = i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/macintosh/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, e).replace(/[_\\s]/g, \".\"),\n r = i.default.getMacOSVersionName(t),\n n = {\n name: s.OS_MAP.MacOS,\n version: t\n };\n return r && (n.versionName = r), n;\n }\n }, {\n test: [/(ipod|iphone|ipad)/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, e).replace(/[_\\s]/g, \".\");\n return {\n name: s.OS_MAP.iOS,\n version: t\n };\n }\n }, {\n test: function test(e) {\n var t = !e.test(/like android/i),\n r = e.test(/android/i);\n return t && r;\n },\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, e),\n r = i.default.getAndroidVersionName(t),\n n = {\n name: s.OS_MAP.Android,\n version: t\n };\n return r && (n.versionName = r), n;\n }\n }, {\n test: [/(web|hpw)[o0]s/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, e),\n r = {\n name: s.OS_MAP.WebOS\n };\n return t && t.length && (r.version = t), r;\n }\n }, {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, e) || i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, e) || i.default.getFirstMatch(/\\bbb(\\d+)/i, e);\n return {\n name: s.OS_MAP.BlackBerry,\n version: t\n };\n }\n }, {\n test: [/bada/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.Bada,\n version: t\n };\n }\n }, {\n test: [/tizen/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.Tizen,\n version: t\n };\n }\n }, {\n test: [/linux/i],\n describe: function describe() {\n return {\n name: s.OS_MAP.Linux\n };\n }\n }, {\n test: [/CrOS/],\n describe: function describe() {\n return {\n name: s.OS_MAP.ChromeOS\n };\n }\n }, {\n test: [/PlayStation 4/],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.PlayStation4,\n version: t\n };\n }\n }];\n t.default = a, e.exports = t.default;\n },\n 94: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n var a = [{\n test: [/googlebot/i],\n describe: function describe() {\n return {\n type: \"bot\",\n vendor: \"Google\"\n };\n }\n }, {\n test: [/huawei/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/(can-l01)/i, e) && \"Nova\",\n r = {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Huawei\"\n };\n return t && (r.model = t), r;\n }\n }, {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Nexus\"\n };\n }\n }, {\n test: [/ipad/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Apple\",\n model: \"iPad\"\n };\n }\n }, {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Apple\",\n model: \"iPad\"\n };\n }\n }, {\n test: [/kftt build/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Amazon\",\n model: \"Kindle Fire HD 7\"\n };\n }\n }, {\n test: [/silk/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Amazon\"\n };\n }\n }, {\n test: [/tablet(?! pc)/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet\n };\n }\n }, {\n test: function test(e) {\n var t = e.test(/ipod|iphone/i),\n r = e.test(/like (ipod|iphone)/i);\n return t && !r;\n },\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Apple\",\n model: t\n };\n }\n }, {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Nexus\"\n };\n }\n }, {\n test: [/[^-]mobi/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile\n };\n }\n }, {\n test: function test(e) {\n return \"blackberry\" === e.getBrowserName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"BlackBerry\"\n };\n }\n }, {\n test: function test(e) {\n return \"bada\" === e.getBrowserName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile\n };\n }\n }, {\n test: function test(e) {\n return \"windows phone\" === e.getBrowserName();\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Microsoft\"\n };\n }\n }, {\n test: function test(e) {\n var t = Number(String(e.getOSVersion()).split(\".\")[0]);\n return \"android\" === e.getOSName(!0) && t >= 3;\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet\n };\n }\n }, {\n test: function test(e) {\n return \"android\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile\n };\n }\n }, {\n test: function test(e) {\n return \"macos\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.desktop,\n vendor: \"Apple\"\n };\n }\n }, {\n test: function test(e) {\n return \"windows\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.desktop\n };\n }\n }, {\n test: function test(e) {\n return \"linux\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.desktop\n };\n }\n }, {\n test: function test(e) {\n return \"playstation 4\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tv\n };\n }\n }, {\n test: function test(e) {\n return \"roku\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tv\n };\n }\n }];\n t.default = a, e.exports = t.default;\n },\n 95: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n var a = [{\n test: function test(e) {\n return \"microsoft edge\" === e.getBrowserName(!0);\n },\n describe: function describe(e) {\n if (/\\sedg\\//i.test(e)) return {\n name: s.ENGINE_MAP.Blink\n };\n var t = i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return {\n name: s.ENGINE_MAP.EdgeHTML,\n version: t\n };\n }\n }, {\n test: [/trident/i],\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.Trident\n },\n r = i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: function test(e) {\n return e.test(/presto/i);\n },\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.Presto\n },\n r = i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: function test(e) {\n var t = e.test(/gecko/i),\n r = e.test(/like gecko/i);\n return t && !r;\n },\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.Gecko\n },\n r = i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe: function describe() {\n return {\n name: s.ENGINE_MAP.Blink\n };\n }\n }, {\n test: [/(apple)?webkit/i],\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.WebKit\n },\n r = i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }];\n t.default = a, e.exports = t.default;\n }\n });\n });\n})(es5);\nvar Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);\nvar BrowserName;\n(function (BrowserName) {\n BrowserName[\"CHROME\"] = \"Chrome\";\n BrowserName[\"FIREFOX\"] = \"Firefox\";\n BrowserName[\"EDGE\"] = \"Microsoft Edge\";\n BrowserName[\"SAFARI\"] = \"Safari\";\n})(BrowserName || (BrowserName = {}));\nvar OSName;\n(function (OSName) {\n OSName[\"WINDOWS\"] = \"Windows\";\n OSName[\"MAC\"] = \"macOS\";\n OSName[\"LINUX\"] = \"Linux\";\n})(OSName || (OSName = {}));\nBowser.getParser(window.navigator.userAgent);\nclass CpuInfo {\n static getNumLogicalCores() {\n return navigator.hardwareConcurrency;\n }\n}\nvar CapabilityState;\n(function (CapabilityState) {\n CapabilityState[\"NOT_CAPABLE\"] = \"not capable\";\n CapabilityState[\"CAPABLE\"] = \"capable\";\n CapabilityState[\"UNKNOWN\"] = \"unknown\";\n})(CapabilityState || (CapabilityState = {}));\n\nvar NetworkType;\n(function (NetworkType) {\n NetworkType[\"VPN\"] = \"vpn\";\n NetworkType[\"UNKNOWN\"] = \"unknown\";\n NetworkType[\"WIFI\"] = \"wifi\";\n NetworkType[\"ETHERNET\"] = \"ethernet\";\n})(NetworkType || (NetworkType = {}));\nvar MediaDevices;\n(function (MediaDevices) {\n MediaDevices[\"MICROPHONE\"] = \"microphone\";\n MediaDevices[\"SPEAKER\"] = \"speaker\";\n MediaDevices[\"CAMERA\"] = \"camera\";\n})(MediaDevices || (MediaDevices = {}));\nvar MediaDirection;\n(function (MediaDirection) {\n MediaDirection[\"SEND\"] = \"send\";\n MediaDirection[\"RECEIVE\"] = \"recv\";\n})(MediaDirection || (MediaDirection = {}));\nvar IpType;\n(function (IpType) {\n IpType[\"REMOTE\"] = \"remote\";\n IpType[\"LOCAL\"] = \"local\";\n})(IpType || (IpType = {}));\n\nvar STATS_DEFAULT = {\n encryption: 'sha-256',\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytesSent: 0\n },\n speed: 0\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: 'host',\n transport: 'UDP',\n networkType: NetworkType.UNKNOWN\n },\n remote: {\n candidateType: 'host',\n transport: 'UDP',\n networkType: NetworkType.UNKNOWN\n }\n },\n resolutions: {},\n internal: {\n remote: {},\n candidates: {}\n }\n};\nvar DEFAULT_GET_STATS_FILTER = {\n types: ['track', 'transport', 'candidate-pair', 'outbound-rtp', 'outboundrtp', 'inbound-rtp', 'inboundrtp', 'remote-inbound-rtp', 'remote-outbound-rtp', 'remote-candidate', 'local-candidate', 'media-source']\n};\nvar MQA_INTERVAL = 60000;\nvar _UNKNOWN_ = 'UNKNOWN';\nvar emptyMqaInterval = {\n audioReceive: [],\n audioTransmit: [],\n intervalMetadata: {\n peerReflexiveIP: '0.0.0.0',\n peripherals: [],\n cpuInfo: {\n numberOfCores: 1,\n description: 'NA',\n architecture: 'unknown'\n },\n processAverageCPU: 0,\n processMaximumCPU: 0,\n systemAverageCPU: 0,\n systemMaximumCPU: 0,\n screenWidth: 0,\n screenHeight: 0,\n screenResolution: 0,\n appWindowWidth: 0,\n appWindowHeight: 0,\n appWindowSize: 0\n },\n networkType: '',\n intervalNumber: 0,\n videoReceive: [],\n videoTransmit: []\n};\nvar emptyAudioReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyAudioReceiveStream = {\n common: {\n codec: 'opus',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0\n }\n};\nvar emptyAudioTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyAudioTransmitStream = {\n common: {\n codec: 'opus',\n csi: [],\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0\n }\n};\nvar emptyVideoReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyVideoReceiveStream = {\n common: {\n codec: 'H264',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0\n },\n h264CodecProfile: 'BP',\n isActiveSpeaker: false,\n optimalFrameSize: 0,\n receivedFrameSize: 0,\n receivedHeight: 0,\n receivedKeyFrames: 0,\n receivedKeyFramesForRequest: 0,\n receivedKeyFramesSourceChange: 0,\n receivedKeyFramesUnknown: 0,\n receivedWidth: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0\n};\nvar emptyVideoTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyVideoTransmitStream = {\n common: {\n codec: 'H264',\n csi: [],\n duplicateSsci: 0,\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0\n },\n h264CodecProfile: 'BP',\n isAvatar: false,\n isHardwareEncoded: false,\n localConfigurationChanges: 2,\n maxFrameQp: 0,\n maxNoiseLevel: 0,\n minRegionQp: 0,\n remoteConfigurationChanges: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0,\n transmittedFrameSize: 0,\n transmittedHeight: 0,\n transmittedKeyFrames: 0,\n transmittedKeyFramesClient: 0,\n transmittedKeyFramesConfigurationChange: 0,\n transmittedKeyFramesFeedback: 0,\n transmittedKeyFramesLocalDrop: 0,\n transmittedKeyFramesOtherLayer: 0,\n transmittedKeyFramesPeriodic: 0,\n transmittedKeyFramesSceneChange: 0,\n transmittedKeyFramesStartup: 0,\n transmittedKeyFramesUnknown: 0,\n transmittedWidth: 0\n};\nvar emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n};\nvar emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n};\nvar VIDEO_FRAME_RATE_MULTIPLIER = 100;\n\nvar max = array => {\n if (array.length === 0) {\n return 0;\n }\n return Math.max(...array);\n};\nvar mean = array => {\n if (array.length === 0) {\n return 0;\n }\n return array.reduce((a, b) => a + b) / array.length;\n};\nvar getTotalValueFromBaseType = (stats, sendrecvType, baseMediaType, value) => Object.keys(stats).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => {\n var _stats$mt, _stats$mt$sendrecvTyp;\n return acc + (((_stats$mt = stats[mt]) === null || _stats$mt === void 0 ? void 0 : (_stats$mt$sendrecvTyp = _stats$mt[sendrecvType]) === null || _stats$mt$sendrecvTyp === void 0 ? void 0 : _stats$mt$sendrecvTyp[value]) || 0);\n}, 0);\nvar getAudioReceiverMqa = _ref => {\n var {\n audioReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref;\n var sendrecvType = MediaDirection.RECEIVE;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n var lastPacketsLost = getLastTotalValue('totalPacketsLost');\n var lastBytesReceived = getLastTotalValue('totalBytesReceived');\n var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');\n var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');\n var totalPacketsReceived = getTotalValue('totalPacketsReceived');\n var packetsLost = getTotalValue('totalPacketsLost');\n var totalBytesReceived = getTotalValue('totalBytesReceived');\n var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');\n var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy;\n audioReceiver.common.common.direction = ((_statsResults$mediaTy = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy === void 0 ? void 0 : _statsResults$mediaTy.direction) || 'inactive';\n } else {\n audioReceiver.common.common.direction = 'inactive';\n }\n audioReceiver.common.common.isMain = !baseMediaType.includes('-share');\n audioReceiver.common.common.multistreamEnabled = isMultistream;\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;\n var totalPacketsLost = packetsLost - lastPacketsLost;\n audioReceiver.common.mediaHopByHopLost = totalPacketsLost;\n audioReceiver.common.rtpHopByHopLost = totalPacketsLost;\n var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);\n audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;\n audioReceiver.common.rtpRecovered = fecRecovered;\n audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;\n};\nvar getAudioReceiverStreamMqa = _ref2 => {\n var _lastMqaDataSent$medi, _lastMqaDataSent$medi2, _lastMqaDataSent$medi3, _lastMqaDataSent$medi4, _lastMqaDataSent$medi5, _lastMqaDataSent$medi6, _lastMqaDataSent$medi7, _lastMqaDataSent$medi8;\n var {\n audioReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref2;\n var sendrecvType = MediaDirection.RECEIVE;\n var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;\n var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;\n var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;\n var lastBytesReceived = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].totalBytesReceived) || 0;\n var lastFecPacketsReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].fecPacketsReceived) || 0;\n var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsDiscarded) || 0;\n var lastPacketsReceived = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].totalPacketsReceived) || 0;\n var lastPacketsLost = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsLost) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !audioReceiverStream.common.csi.includes(csi)) {\n audioReceiverStream.common.csi.push(csi);\n }\n audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n audioReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n audioReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);\n audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;\n audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiverStream.common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;\n};\nvar getAudioSenderMqa = _ref3 => {\n var {\n audioSender,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref3;\n var sendrecvType = MediaDirection.SEND;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsSent = getLastTotalValue('totalPacketsSent');\n var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n var totalPacketsSent = getTotalValue('totalPacketsSent');\n var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy2;\n audioSender.common.common.direction = ((_statsResults$mediaTy2 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy2 === void 0 ? void 0 : _statsResults$mediaTy2.direction) || 'inactive';\n } else {\n audioSender.common.common.direction = 'inactive';\n }\n audioSender.common.common.isMain = !baseMediaType.includes('-share');\n audioSender.common.common.multistreamEnabled = isMultistream;\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;\n audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;\n audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;\n audioSender.common.availableBitrate = statsResults.availableOutgoingBitrate;\n var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;\n audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;\n audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');\n audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n};\nvar getAudioSenderStreamMqa = _ref4 => {\n var _lastMqaDataSent$medi9, _lastMqaDataSent$medi10, _lastMqaDataSent$medi11, _lastMqaDataSent$medi12;\n var {\n audioSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref4;\n var sendrecvType = MediaDirection.SEND;\n var lastBytesSent = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalBytesSent) || 0;\n var lastFramesEncoded = ((_lastMqaDataSent$medi10 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi10 === void 0 ? void 0 : _lastMqaDataSent$medi10[sendrecvType].totalKeyFramesEncoded) || 0;\n var lastFirCount = ((_lastMqaDataSent$medi11 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi11 === void 0 ? void 0 : _lastMqaDataSent$medi11[sendrecvType].totalFirCount) || 0;\n var lastPacketsSent = ((_lastMqaDataSent$medi12 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi12 === void 0 ? void 0 : _lastMqaDataSent$medi12[sendrecvType].totalPacketsSent) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !audioSenderStream.common.csi.includes(csi)) {\n audioSenderStream.common.csi.push(csi);\n }\n audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n audioSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;\n};\nvar getVideoReceiverMqa = _ref5 => {\n var {\n videoReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref5;\n var sendrecvType = MediaDirection.RECEIVE;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n var lastPacketsLost = getLastTotalValue('totalPacketsLost');\n var lastBytesReceived = getLastTotalValue('totalBytesReceived');\n var lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');\n var lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');\n var packetsLost = getTotalValue('totalPacketsLost');\n var totalPacketsReceived = getTotalValue('totalPacketsReceived');\n var totalBytesReceived = getTotalValue('totalBytesReceived');\n var totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');\n var totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy3;\n videoReceiver.common.common.direction = ((_statsResults$mediaTy3 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy3 === void 0 ? void 0 : _statsResults$mediaTy3.direction) || 'inactive';\n } else {\n videoReceiver.common.common.direction = 'inactive';\n }\n videoReceiver.common.common.isMain = !baseMediaType.includes('-share');\n videoReceiver.common.common.multistreamEnabled = isMultistream;\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;\n var totalPacketsLost = packetsLost - lastPacketsLost;\n videoReceiver.common.mediaHopByHopLost = totalPacketsLost;\n videoReceiver.common.rtpHopByHopLost = totalPacketsLost;\n var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;\n var totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;\n videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;\n videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;\n videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;\n};\nvar getVideoReceiverStreamMqa = _ref6 => {\n var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20, _statsResults$mediaTy4, _statsResults$mediaTy5;\n var {\n videoReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref6;\n var sendrecvType = MediaDirection.RECEIVE;\n var lastPacketsReceived = ((_lastMqaDataSent$medi13 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi13 === void 0 ? void 0 : _lastMqaDataSent$medi13[sendrecvType].totalPacketsReceived) || 0;\n var lastPacketsLost = ((_lastMqaDataSent$medi14 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi14 === void 0 ? void 0 : _lastMqaDataSent$medi14[sendrecvType].totalPacketsLost) || 0;\n var lastBytesReceived = ((_lastMqaDataSent$medi15 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi15 === void 0 ? void 0 : _lastMqaDataSent$medi15[sendrecvType].totalBytesReceived) || 0;\n var lastFramesReceived = ((_lastMqaDataSent$medi16 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi16 === void 0 ? void 0 : _lastMqaDataSent$medi16[sendrecvType].framesReceived) || 0;\n var lastFramesDecoded = ((_lastMqaDataSent$medi17 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi17 === void 0 ? void 0 : _lastMqaDataSent$medi17[sendrecvType].framesDecoded) || 0;\n var lastFramesDropped = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDropped) || 0;\n var lastKeyFramesDecoded = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].keyFramesDecoded) || 0;\n var lastPliCount = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].totalPliCount) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !videoReceiverStream.common.csi.includes(csi)) {\n videoReceiverStream.common.csi.push(csi);\n }\n videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;\n videoReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n videoReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;\n var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);\n videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);\n videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;\n videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;\n videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy4 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy4 !== void 0 ? _statsResults$mediaTy4 : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy5 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy5 !== void 0 ? _statsResults$mediaTy5 : 0) < MQA_INTERVAL;\n};\nvar getVideoSenderMqa = _ref7 => {\n var {\n videoSender,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref7;\n var sendrecvType = MediaDirection.SEND;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsSent = getLastTotalValue('totalPacketsSent');\n var lastBytesSent = getLastTotalValue('totalBytesSent');\n var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n var lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');\n var lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');\n var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n var totalPacketsSent = getTotalValue('totalPacketsSent');\n var totalBytesSent = getTotalValue('totalBytesSent');\n var totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');\n var totalRtxBytesSent = getTotalValue('totalRtxBytesSent');\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy6;\n videoSender.common.common.direction = ((_statsResults$mediaTy6 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy6 === void 0 ? void 0 : _statsResults$mediaTy6.direction) || 'inactive';\n } else {\n videoSender.common.common.direction = 'inactive';\n }\n videoSender.common.common.isMain = !baseMediaType.includes('-share');\n videoSender.common.common.multistreamEnabled = isMultistream;\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;\n videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;\n videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;\n videoSender.common.availableBitrate = statsResults.availableOutgoingBitrate;\n var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;\n videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;\n videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n var totalBytesSentInaMin = totalBytesSent - lastBytesSent;\n var totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;\n videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;\n videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? totalRtxBytesSentInaMin * 8 / 60 : 0;\n};\nvar getVideoSenderStreamMqa = _ref8 => {\n var _lastMqaDataSent$medi21, _lastMqaDataSent$medi22, _lastMqaDataSent$medi23, _lastMqaDataSent$medi24, _lastMqaDataSent$medi25;\n var {\n videoSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref8;\n var sendrecvType = MediaDirection.SEND;\n var lastPacketsSent = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPacketsSent) || 0;\n var lastBytesSent = ((_lastMqaDataSent$medi22 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi22 === void 0 ? void 0 : _lastMqaDataSent$medi22[sendrecvType].totalBytesSent) || 0;\n var lastKeyFramesEncoded = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalKeyFramesEncoded) || 0;\n var lastFirCount = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalFirCount) || 0;\n var lastFramesSent = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].framesSent) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !videoSenderStream.common.csi.includes(csi)) {\n videoSenderStream.common.csi.push(csi);\n }\n videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);\n videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);\n videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;\n videoSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;\n videoSenderStream.requestedFrameSize = statsResults[mediaType][sendrecvType].requestedFrameSize || 0;\n};\nvar isStreamRequested = (statsResults, mediaType, direction) => {\n var _statsResults$mediaTy7, _statsResults$mediaTy8;\n var now = performance.timeOrigin + performance.now();\n var lastUpdateTimestamp = (_statsResults$mediaTy7 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy7 === void 0 ? void 0 : _statsResults$mediaTy7.lastRequestedUpdateTimestamp;\n var isRequested = (_statsResults$mediaTy8 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy8 === void 0 ? void 0 : _statsResults$mediaTy8.isRequested;\n return isRequested || lastUpdateTimestamp && now - lastUpdateTimestamp < MQA_INTERVAL;\n};\n\nvar StatsAnalyzerEventNames;\n(function (StatsAnalyzerEventNames) {\n StatsAnalyzerEventNames[\"MEDIA_QUALITY\"] = \"MEDIA_QUALITY\";\n StatsAnalyzerEventNames[\"LOCAL_MEDIA_STARTED\"] = \"LOCAL_MEDIA_STARTED\";\n StatsAnalyzerEventNames[\"LOCAL_MEDIA_STOPPED\"] = \"LOCAL_MEDIA_STOPPED\";\n StatsAnalyzerEventNames[\"REMOTE_MEDIA_STARTED\"] = \"REMOTE_MEDIA_STARTED\";\n StatsAnalyzerEventNames[\"REMOTE_MEDIA_STOPPED\"] = \"REMOTE_MEDIA_STOPPED\";\n})(StatsAnalyzerEventNames || (StatsAnalyzerEventNames = {}));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass StatsAnalyzer extends EventEmitter$5 {\n constructor(_ref) {\n var {\n config,\n networkQualityMonitor = {},\n statsResults = STATS_DEFAULT,\n isMultistream = false\n } = _ref;\n super();\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"correlationId\", void 0);\n _defineProperty(this, \"lastEmittedStartStopEvents\", void 0);\n _defineProperty(this, \"lastMqaDataSent\", void 0);\n _defineProperty(this, \"lastStatsResults\", void 0);\n _defineProperty(this, \"meetingMediaStatus\", void 0);\n _defineProperty(this, \"mqaInterval\", void 0);\n _defineProperty(this, \"mqaSentCount\", void 0);\n _defineProperty(this, \"networkQualityMonitor\", void 0);\n _defineProperty(this, \"mediaConnection\", void 0);\n _defineProperty(this, \"statsInterval\", void 0);\n _defineProperty(this, \"statsResults\", void 0);\n _defineProperty(this, \"statsStarted\", void 0);\n _defineProperty(this, \"successfulCandidatePair\", void 0);\n _defineProperty(this, \"localIpAddress\", void 0);\n _defineProperty(this, \"shareVideoEncoderImplementation\", void 0);\n _defineProperty(this, \"isMultistream\", void 0);\n _defineProperty(this, \"emitStartStopEvents\", (mediaType, previousValue, currentValue, isLocal) => {\n var _this$lastEmittedStar, _this$lastEmittedStar2;\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(\"Unsupported mediaType: \".concat(mediaType));\n }\n if (previousValue === undefined) previousValue = 0;\n if (currentValue === undefined) currentValue = 0;\n if (!this.lastEmittedStartStopEvents[mediaType]) {\n this.lastEmittedStartStopEvents[mediaType] = {};\n }\n var lastEmittedEvent = isLocal ? (_this$lastEmittedStar = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar === void 0 ? void 0 : _this$lastEmittedStar.local : (_this$lastEmittedStar2 = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar2 === void 0 ? void 0 : _this$lastEmittedStar2.remote;\n var newEvent;\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED : StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED : StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED;\n }\n if (newEvent && lastEmittedEvent !== newEvent) {\n var emittedEvent = this.lastEmittedStartStopEvents[mediaType];\n if (isLocal) {\n emittedEvent.local = newEvent;\n } else {\n emittedEvent.remote = newEvent;\n }\n this.emit(newEvent, {\n mediaType\n });\n }\n });\n _defineProperty(this, \"extractAndSetLocalIpAddressInfoForDiagnostics\", (successfulCandidatePairId, candidates) => {\n var newIpAddress = '';\n if (successfulCandidatePairId && Object.keys(candidates).length > 0) {\n var localCandidate = candidates[successfulCandidatePairId];\n if (localCandidate) {\n if (localCandidate.candidateType === 'host') {\n newIpAddress = \"\".concat(localCandidate.address);\n } else if (localCandidate.candidateType === 'prflx') {\n if (!localCandidate.relayProtocol) {\n newIpAddress = \"\".concat(localCandidate.relatedAddress);\n } else {\n newIpAddress = \"\".concat(localCandidate.address);\n }\n }\n }\n }\n this.localIpAddress = newIpAddress;\n });\n _defineProperty(this, \"parseCandidate\", (result, type, isSender, isRemote) => {\n var _this$successfulCandi;\n if (!result || !result.id) {\n return;\n }\n if (((_this$successfulCandi = this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {\n return;\n }\n var transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n var sendRecvType = isSender ? MediaDirection.SEND : MediaDirection.RECEIVE;\n var ipType = isRemote ? IpType.REMOTE : IpType.LOCAL;\n if (!this.statsResults.candidates) {\n this.statsResults.candidates = {};\n }\n this.statsResults.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip,\n relatedAddress: result.relatedAddress,\n relatedPort: result.relatedPort,\n relayProtocol: result.relayProtocol,\n protocol: result.protocol,\n address: result.address,\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type\n };\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n this.statsResults.connectionType[ipType].networkType = result.networkType === NetworkType.VPN ? NetworkType.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n });\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.mediaConnection = null;\n this.lastEmittedStartStopEvents = {};\n this.successfulCandidatePair = {};\n this.localIpAddress = '';\n this.isMultistream = isMultistream;\n }\n resetStatsResults() {\n Object.keys(this.statsResults).forEach(mediaType => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n }\n });\n }\n updateMediaStatus(status) {\n var _this$meetingMediaSta, _this$meetingMediaSta2;\n this.meetingMediaStatus = {\n actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),\n expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)\n };\n }\n sendMqaData() {\n var newMqa = structuredClone(emptyMqaInterval);\n Object.keys(this.statsResults).forEach(mediaType => {\n if (!this.lastMqaDataSent[mediaType]) {\n this.lastMqaDataSent[mediaType] = {};\n }\n if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {\n this.lastMqaDataSent[mediaType].send = {};\n }\n if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {\n this.lastMqaDataSent[mediaType].recv = {};\n }\n });\n var audioSender = structuredClone(emptyAudioTransmit);\n var audioShareSender = structuredClone(emptyAudioTransmit);\n var audioReceiver = structuredClone(emptyAudioReceive);\n var audioShareReceiver = structuredClone(emptyAudioReceive);\n var videoSender = structuredClone(emptyVideoTransmit);\n var videoShareSender = structuredClone(emptyVideoTransmit);\n var videoReceiver = structuredClone(emptyVideoReceive);\n var videoShareReceiver = structuredClone(emptyVideoReceive);\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-send',\n isMultistream: this.isMultistream\n });\n newMqa.audioTransmit.push(audioSender);\n getAudioSenderMqa({\n audioSender: audioShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-send',\n isMultistream: this.isMultistream\n });\n newMqa.audioTransmit.push(audioShareSender);\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-recv',\n isMultistream: this.isMultistream\n });\n newMqa.audioReceive.push(audioReceiver);\n getAudioReceiverMqa({\n audioReceiver: audioShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-recv',\n isMultistream: this.isMultistream\n });\n newMqa.audioReceive.push(audioShareReceiver);\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-send',\n isMultistream: this.isMultistream\n });\n newMqa.videoTransmit.push(videoSender);\n getVideoSenderMqa({\n videoSender: videoShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-send',\n isMultistream: this.isMultistream\n });\n newMqa.videoTransmit.push(videoShareSender);\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-recv',\n isMultistream: this.isMultistream\n });\n newMqa.videoReceive.push(videoReceiver);\n getVideoReceiverMqa({\n videoReceiver: videoShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-recv',\n isMultistream: this.isMultistream\n });\n newMqa.videoReceive.push(videoShareReceiver);\n Object.keys(this.statsResults).forEach(mediaType => {\n if (mediaType.startsWith('audio-send')) {\n var audioSenderStream = structuredClone(emptyAudioTransmitStream);\n getAudioSenderStreamMqa({\n audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {\n newMqa.audioTransmit[0].streams.push(audioSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-share-send')) {\n var _audioSenderStream = structuredClone(emptyAudioTransmitStream);\n getAudioSenderStreamMqa({\n audioSenderStream: _audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {\n newMqa.audioTransmit[1].streams.push(_audioSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-recv')) {\n var audioReceiverStream = structuredClone(emptyAudioReceiveStream);\n getAudioReceiverStreamMqa({\n audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {\n newMqa.audioReceive[0].streams.push(audioReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('audio-share-recv')) {\n var _audioReceiverStream = structuredClone(emptyAudioReceiveStream);\n getAudioReceiverStreamMqa({\n audioReceiverStream: _audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {\n newMqa.audioReceive[1].streams.push(_audioReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-send-layer')) {\n var videoSenderStream = structuredClone(emptyVideoTransmitStream);\n getVideoSenderStreamMqa({\n videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {\n newMqa.videoTransmit[0].streams.push(videoSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-share-send')) {\n var _videoSenderStream = structuredClone(emptyVideoTransmitStream);\n getVideoSenderStreamMqa({\n videoSenderStream: _videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {\n newMqa.videoTransmit[1].streams.push(_videoSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-recv')) {\n var videoReceiverStream = structuredClone(emptyVideoReceiveStream);\n getVideoReceiverStreamMqa({\n videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {\n newMqa.videoReceive[0].streams.push(videoReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-share-recv')) {\n var _videoReceiverStream = structuredClone(emptyVideoReceiveStream);\n getVideoReceiverStreamMqa({\n videoReceiverStream: _videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {\n newMqa.videoReceive[1].streams.push(_videoReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n }\n });\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;\n newMqa.intervalMetadata.peripherals.push({\n information: _UNKNOWN_,\n name: MediaDevices.SPEAKER\n });\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MediaDevices.MICROPHONE\n });\n }\n var existingVideoSender = Object.keys(this.statsResults).find(item => item.includes('video-send'));\n if (existingVideoSender) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,\n name: MediaDevices.CAMERA\n });\n }\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n newMqa.intervalMetadata.screenWidth = window.screen.width;\n newMqa.intervalMetadata.screenHeight = window.screen.height;\n newMqa.intervalMetadata.screenResolution = Math.round(window.screen.width * window.screen.height / 256);\n newMqa.intervalMetadata.appWindowWidth = window.innerWidth;\n newMqa.intervalMetadata.appWindowHeight = window.innerHeight;\n newMqa.intervalMetadata.appWindowSize = Math.round(window.innerWidth * window.innerHeight / 256);\n this.mqaSentCount += 1;\n newMqa.intervalNumber = this.mqaSentCount;\n this.resetStatsResults();\n this.emit(StatsAnalyzerEventNames.MEDIA_QUALITY, {\n data: newMqa\n });\n }\n getLocalIpAddress() {\n return this.localIpAddress;\n }\n startAnalyzer(mediaConnection) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTERVAL);\n });\n }\n return Promise.resolve();\n }\n stopAnalyzer() {\n var sendOneLastMqa = this.mqaInterval && this.statsInterval;\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n return Promise.resolve();\n }\n parseGetStatsResult(getStatsResult, type, isSender) {\n if (!getStatsResult) {\n return;\n }\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = structuredClone(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = structuredClone(emptyReceiver);\n }\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n this.parseAudioSource(getStatsResult, type);\n break;\n }\n }\n filterAndParseGetStatsResults(statsItem, type, isSender) {\n var _this$successfulCandi2;\n var {\n types\n } = DEFAULT_GET_STATS_FILTER;\n statsItem.report.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n this.statsResults.availableOutgoingBitrate = ((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.availableOutgoingBitrate) || 0;\n var videoSenderIndex = 0;\n statsItem.report.forEach(result => {\n if (types.includes(result.type)) {\n if (type === 'video-send' && result.type === 'outbound-rtp') {\n var newType = \"video-send-layer-\".concat(videoSenderIndex);\n this.parseGetStatsResult(result, newType, isSender);\n videoSenderIndex += 1;\n this.statsResults[newType].direction = statsItem.currentDirection;\n this.statsResults[newType].trackLabel = statsItem.localTrackLabel;\n this.statsResults[newType].csi = statsItem.csi;\n } else if (type === 'video-share-send' && result.type === 'outbound-rtp') {\n this.shareVideoEncoderImplementation = result.encoderImplementation;\n this.parseGetStatsResult(result, type, isSender);\n } else {\n this.parseGetStatsResult(result, type, isSender);\n }\n }\n });\n if (this.statsResults[type]) {\n var _this$successfulCandi3, _this$statsResults;\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi3 = this.successfulCandidatePair) === null || _this$successfulCandi3 === void 0 ? void 0 : _this$successfulCandi3.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);\n this.successfulCandidatePair = {};\n }\n }\n parseAudioSource(result, type) {\n if (!result) {\n return;\n }\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n var getCurrentStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {\n var _this$statsResults$cu;\n return prev + (((_this$statsResults$cu = this.statsResults[cur]) === null || _this$statsResults$cu === void 0 ? void 0 : _this$statsResults$cu[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);\n }, 0);\n var getPreviousStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {\n var _this$lastStatsResult, _this$lastStatsResult2;\n return prev + (((_this$lastStatsResult = this.lastStatsResults) === null || _this$lastStatsResult === void 0 ? void 0 : (_this$lastStatsResult2 = _this$lastStatsResult[cur]) === null || _this$lastStatsResult2 === void 0 ? void 0 : _this$lastStatsResult2[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);\n }, 0);\n if (this.lastStatsResults['audio-send']) {\n var currentStats = this.statsResults['audio-send'].send;\n var previousStats = this.lastStatsResults['audio-send'].send;\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent\", currentStats.totalPacketsSent);\n } else {\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present\", currentStats.totalAudioEnergy);\n }\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user\");\n }\n }\n this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);\n }\n var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');\n var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');\n this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);\n var currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');\n var previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');\n var currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');\n var previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');\n var currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');\n var previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');\n var doesVideoSendExist = Object.keys(this.lastStatsResults).some(item => item.includes('video-send'));\n if (doesVideoSendExist) {\n if (this.meetingMediaStatus.expected.sendVideo && (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent\", currentTotalPacketsSent);\n } else {\n if (this.meetingMediaStatus.expected.sendVideo && (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded\", currentFramesEncoded);\n }\n if (this.meetingMediaStatus.expected.sendVideo && (currentFramesSent === previousFramesSent || currentFramesSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent\", currentFramesSent);\n }\n }\n this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);\n }\n var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);\n if (this.lastStatsResults['video-share-send']) {\n var _currentStats = this.statsResults['video-share-send'].send;\n var _previousStats = this.lastStatsResults['video-share-send'].send;\n if (this.meetingMediaStatus.expected.sendShare && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent\", _currentStats.totalPacketsSent);\n } else {\n if (this.meetingMediaStatus.expected.sendShare && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded\", _currentStats.framesEncoded);\n }\n if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No share frames sent\", this.statsResults['video-share-send'].send.framesSent);\n }\n }\n this.emitStartStopEvents('share', _previousStats.framesSent, _currentStats.framesSent, true);\n }\n var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');\n this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);\n }\n }\n getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n if (this.mediaConnection && this.mediaConnection.getConnectionState() === ConnectionState.Failed) {\n getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');\n return Promise.resolve();\n }\n getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n return this.mediaConnection.getTransceiverStats().then(transceiverStats => {\n transceiverStats.video.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"video-recv-\".concat(i), false));\n transceiverStats.audio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"audio-recv-\".concat(i), false));\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"video-share-recv-\".concat(i), false));\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"audio-share-recv-\".concat(i), false));\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n this.compareLastStatsResult();\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');\n });\n }\n processOutboundRTPResult(result, mediaType) {\n var sendrecvType = MediaDirection.SEND;\n if (result.bytesSent) {\n var kilobytes = 0;\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent = result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n }\n }\n processInboundRTPResult(result, mediaType) {\n var sendrecvType = MediaDirection.RECEIVE;\n if (result.bytesReceived) {\n var kilobytes = 0;\n var sourceState = result.sourceState;\n var midAndCsi = \"mid: \\\"\".concat(result.mid || '', \"\\\"\").concat(result.csi ? \" and csi: \".concat(result.csi) : '');\n var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;\n if (currentPacketsLost < 0) {\n currentPacketsLost = 0;\n }\n var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n if (packetsReceivedDiff === 0) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total packets received on slot: \"), result.packetsReceived);\n }\n }\n if (mediaType.startsWith('video') || mediaType.startsWith('share')) {\n var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;\n if (videoFramesReceivedDiff === 0) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total frames received on slot: \"), result.framesReceived);\n }\n }\n var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;\n if (videoFramesDecodedDiff === 0) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total frames decoded on slot: \"), result.framesDecoded);\n }\n }\n var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;\n if (videoFramesDroppedDiff > 10) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total frames dropped on slot: \"), result.framesDropped);\n }\n }\n }\n if (mediaType.startsWith('video-recv')) {\n this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;\n this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp = result.lastActiveSpeakerUpdateTimestamp;\n }\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot \".concat(midAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);\n }\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;\n }\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;\n this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived = result.retransmittedPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived = result.retransmittedBytesReceived;\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;\n }\n }\n compareSentAndReceived(result, type) {\n if (!type || !this.statsResults[type].send) {\n return;\n }\n var mediaType = type;\n var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;\n if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {\n this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults\n });\n }\n }\n}\n\nvar Media = {\n createAudioTrack: createAudioTrack,\n createVideoTrack: createVideoTrack,\n createContentTrack: createContentTrack,\n getCameras: getCameras,\n getMicrophones: getMicrophones,\n getSpeakers: getSpeakers,\n on: on$1,\n off: off$1,\n Effects: {\n BNR: {\n enableBNR: enableBNR,\n disableBNR: disableBNR\n }\n }\n};\n\nexport { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, ErrorType, Errors, H264Codec, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Media, MediaConnectionEventNames, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteStream, RemoteStreamEventNames, RemoteTrackType, RoapMediaConnection, SendSlot, StatsAnalyzer, StatsAnalyzerEventNames, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, configureWcmeLogger, createCameraStream, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, setLogger, setOnDeviceChangeHandler };\n","import _Reflect$get from \"core-js/library/fn/reflect/get.js\";\nimport _Object$getOwnPropertyDescriptor from \"core-js/library/fn/object/get-own-property-descriptor.js\";\nimport superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && _Reflect$get) {\n _get = _Reflect$get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = _Object$getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n };\n }\n return _get.apply(this, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n return object;\n}","var events = {exports: {}};\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter$1() {\n EventEmitter$1.init.call(this);\n}\nevents.exports = EventEmitter$1;\nevents.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter$1.EventEmitter = EventEmitter$1;\n\nEventEmitter$1.prototype._events = undefined;\nEventEmitter$1.prototype._eventsCount = 0;\nEventEmitter$1.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter$1, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter$1.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter$1.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter$1.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter$1.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter$1.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter$1.prototype.on = EventEmitter$1.prototype.addListener;\n\nEventEmitter$1.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter$1.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter$1.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter$1.prototype.off = EventEmitter$1.prototype.removeListener;\n\nEventEmitter$1.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter$1.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter$1.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter$1.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter$1.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter$1.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\nclass EventEmitter extends events.exports.EventEmitter {\r\n}\r\nclass TypedEvent {\r\n constructor() {\r\n this.emitter = new EventEmitter();\r\n }\r\n on(handler) {\r\n this.emitter.on('event', handler);\r\n }\r\n once(handler) {\r\n this.emitter.once('event', handler);\r\n }\r\n off(handler) {\r\n this.emitter.off('event', handler);\r\n }\r\n emit(...args) {\r\n this.emitter.emit('event', ...args);\r\n }\r\n}\n\nfunction AddEvents(Base) {\r\n return class WithEvents extends Base {\r\n on(eventName, handler) {\r\n this[eventName].on(handler);\r\n }\r\n once(eventName, handler) {\r\n this[eventName].once(handler);\r\n }\r\n off(eventName, handler) {\r\n this[eventName].off(handler);\r\n }\r\n };\r\n}\n\nexport { AddEvents, TypedEvent };\n","/* eslint-disable @typescript-eslint/no-misused-new */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable require-jsdoc */\nimport {\n AudioDeviceConstraints,\n createCameraStream as wcmeCreateCameraStream,\n createDisplayStream as wcmeCreateDisplayStream,\n createDisplayStreamWithAudio as wcmeCreateDisplayStreamWithAudio,\n createMicrophoneStream as wcmeCreateMicrophoneStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream as WcmeLocalMicrophoneStream,\n LocalCameraStream as WcmeLocalCameraStream,\n VideoDeviceConstraints,\n} from '@webex/internal-media-core';\nimport {AddEvents, TypedEvent, WithEventsDummyType} from '@webex/ts-events';\n\nexport {\n getDevices,\n LocalStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalStreamEventNames,\n StreamEventNames,\n RemoteStream,\n RemoteStreamEventNames,\n type VideoContentHint,\n} from '@webex/internal-media-core';\n\nexport type ServerMuteReason =\n | 'remotelyMuted' // other user has remotely muted us\n | 'clientRequestFailed' // client called setUserMuted() but server request failed\n | 'localUnmuteRequired'; // server forced the client to be unmuted\n\n// these events are in addition to WCME events. This will be properly typed once webrtc-core event types inheritance is fixed\nexport enum LocalMicrophoneStreamEventNames {\n ServerMuted = 'muted:byServer',\n}\n\n// these events are in addition to WCME events. This will be properly typed once webrtc-core event types inheritance is fixed\nexport enum LocalCameraStreamEventNames {\n ServerMuted = 'muted:byServer',\n}\n\ninterface LocalMicrophoneStreamEvents {\n [LocalMicrophoneStreamEventNames.ServerMuted]: TypedEvent<\n (muted: boolean, reason: ServerMuteReason) => void\n >;\n}\n\ninterface LocalCameraStreamEvents {\n [LocalCameraStreamEventNames.ServerMuted]: TypedEvent<\n (muted: boolean, reason: ServerMuteReason) => void\n >;\n}\n\nclass _LocalMicrophoneStream extends WcmeLocalMicrophoneStream {\n private unmuteAllowed = true;\n\n [LocalMicrophoneStreamEventNames.ServerMuted] = new TypedEvent<\n (muted: boolean, reason: ServerMuteReason) => void\n >();\n\n /**\n * @internal\n */\n setUnmuteAllowed(allowed: boolean) {\n this.unmuteAllowed = allowed;\n }\n\n /**\n * @returns true if user is allowed to unmute the track, false otherwise\n */\n isUnmuteAllowed() {\n return this.unmuteAllowed;\n }\n\n setUserMuted(muted: boolean): void {\n if (!muted) {\n if (!this.isUnmuteAllowed()) {\n throw new Error('Unmute is not allowed');\n }\n }\n\n return super.setUserMuted(muted);\n }\n\n /**\n * @internal\n */\n setServerMuted(muted: boolean, reason: ServerMuteReason) {\n if (muted !== this.userMuted) {\n this.setUserMuted(muted);\n this[LocalMicrophoneStreamEventNames.ServerMuted].emit(muted, reason);\n }\n }\n}\n\nclass _LocalCameraStream extends WcmeLocalCameraStream {\n private unmuteAllowed = true;\n\n [LocalCameraStreamEventNames.ServerMuted] = new TypedEvent<\n (muted: boolean, reason: ServerMuteReason) => void\n >();\n\n /**\n * @internal\n */\n setUnmuteAllowed(allowed: boolean) {\n this.unmuteAllowed = allowed;\n }\n\n /**\n * @returns true if user is allowed to unmute the track, false otherwise\n */\n isUnmuteAllowed() {\n return this.unmuteAllowed;\n }\n\n setUserMuted(muted: boolean): void {\n if (!muted) {\n if (!this.isUnmuteAllowed()) {\n throw new Error('Unmute is not allowed');\n }\n }\n\n return super.setUserMuted(muted);\n }\n\n /**\n * @internal\n */\n setServerMuted(muted: boolean, reason: ServerMuteReason) {\n if (muted !== this.userMuted) {\n this.setUserMuted(muted);\n this[LocalCameraStreamEventNames.ServerMuted].emit(muted, reason);\n }\n }\n}\n\nexport const createMicrophoneStream = (constraints?: AudioDeviceConstraints) =>\n wcmeCreateMicrophoneStream(LocalMicrophoneStream, constraints);\n\nexport const createCameraStream = (constraints?: VideoDeviceConstraints) =>\n wcmeCreateCameraStream(LocalCameraStream, constraints);\n\nexport const createDisplayStream = () => wcmeCreateDisplayStream(LocalDisplayStream);\n\nexport const createDisplayStreamWithAudio = () =>\n wcmeCreateDisplayStreamWithAudio(LocalDisplayStream, LocalSystemAudioStream);\n\nexport const LocalMicrophoneStream = AddEvents<\n typeof _LocalMicrophoneStream,\n LocalMicrophoneStreamEvents\n>(_LocalMicrophoneStream);\n\nexport type LocalMicrophoneStream = _LocalMicrophoneStream &\n WithEventsDummyType;\n\nexport const LocalCameraStream = AddEvents(\n _LocalCameraStream\n);\n\nexport type LocalCameraStream = _LocalCameraStream & WithEventsDummyType;\n","import {VideoDeviceConstraints} from '@webex/internal-media-core';\n\nexport enum FacingMode {\n user = 'user',\n environment = 'environment',\n}\n\n// can be used later on when we add constraints in create display track\nexport enum DisplaySurface {\n browser = 'browser',\n monitor = 'monitor',\n window = 'window',\n}\n\nexport const PresetCameraConstraints: {[key: string]: VideoDeviceConstraints} = {\n '1080p': {frameRate: 30, width: 1920, height: 1080},\n\n '720p': {frameRate: 30, width: 1280, height: 720},\n\n '480p': {frameRate: 30, width: 640, height: 480},\n\n '360p': {frameRate: 30, width: 640, height: 360},\n\n '240p': {frameRate: 30, width: 320, height: 240},\n\n '180p': {frameRate: 30, width: 320, height: 180},\n\n '120p': {frameRate: 30, width: 160, height: 120},\n};\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'relayProtocol' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp',\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nexport function shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nimport * as utils from './utils';\n\n // Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\nimport * as sdp from 'sdp';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n static instance: Metrics;\n webex: any;\n\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n // eslint-disable-next-line no-constructor-return\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Uploads given metric to the Metrics service as an Behavioral metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an Behavioral metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: this.webex.config.metrics.type,\n fields: metricFields,\n tags: metricTags,\n });\n }\n\n /**\n * Flattens an object into one that has no nested properties. Each level of nesting is represented\n * by \"_\" in the flattened object property names.\n * This function is needed, because Amplitude doesn't allow passing nested objects as metricFields.\n * Use this function for metricFields before calling sendBehavioralMetric() if you want to send\n * nested objects in your metrics.\n *\n * If the function is called with a literal, it returns an object with a single property \"value\"\n * and the literal value in it.\n *\n * @param {any} payload object you want to flatten\n * @param {string} prefix string prefix prepended to any property names in flatten object\n * @returns {Object}\n */\n prepareMetricFields(payload: any = {}, prefix = '') {\n let output = {};\n\n if (Array.isArray(payload)) {\n payload.forEach((item, index) => {\n const propName = prefix.length > 0 ? `${prefix}_${index}` : `${index}`;\n\n output = {...output, ...this.prepareMetricFields(item, propName)};\n });\n\n return output;\n }\n\n if (typeof payload !== 'object' || payload === null) {\n if (prefix.length > 0) {\n return {[prefix]: payload};\n }\n\n return {value: payload};\n }\n\n Object.entries(payload).forEach(([key, value]) => {\n const propName = prefix.length > 0 ? `${prefix}_${key}` : key;\n\n output = {...output, ...this.prepareMetricFields(value, propName)};\n });\n\n return output;\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n","const LoggerConfig: any = {};\n\nLoggerConfig.set = (options) => {\n LoggerConfig.verboseEvents = options.verboseEvents;\n LoggerConfig.enable = options.enable;\n};\n\nexport default LoggerConfig;\n","const StaticConfig: any = {};\n\nStaticConfig.set = (options) => {\n const values = {};\n\n StaticConfig.meetings = Object.assign(values, options);\n};\n\nexport default StaticConfig;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport LoggerConfig from './logger-config';\n\nconst LoggerProxy: any = {\n logger: {\n info: (args) => {\n console.error('LoggerProxy->info#NO LOGGER DEFINED');\n },\n log: (args) => {\n console.error('LoggerProxy->log#NO LOGGER DEFINED');\n },\n error: (args) => {\n console.error('LoggerProxy->error#NO LOGGER DEFINED');\n },\n warn: (args) => {\n console.error('LoggerProxy->warn#NO LOGGER DEFINED');\n },\n trace: (args) => {\n console.error('LoggerProxy->trace#NO LOGGER DEFINED');\n },\n debug: (args) => {\n console.error('LoggerProxy->debug#NO LOGGER DEFINED');\n },\n },\n};\n\nLoggerProxy.set = (logger) => {\n if (!LoggerConfig.enable) {\n LoggerProxy.logger = {\n info: () => {},\n log: () => {},\n error: () => {},\n warn: () => {},\n trace: () => {},\n debug: () => {},\n };\n } else {\n LoggerProxy.logger = logger;\n }\n};\n\nLoggerProxy.get = () => LoggerProxy.logger;\n\nexport default LoggerProxy;\n","import uuid from 'uuid';\n\nimport LoggerProxy from './logger-proxy';\n\n/**\n * @class LogsRequest\n */\nexport default class LogsRequest {\n webex: any;\n\n /**\n *\n * @param {Object} options\n * @param {Object} options.webex Webex SDK instance\n * @param {ClientMetrics} metrics\n */\n constructor(options: {webex: object}) {\n this.webex = options.webex;\n }\n\n /**\n * Uploads logs to the support server\n *\n * @param {Object} [options={}]\n * @param {String} [options.feedbackId=uuid.v4] ID used for tracking\n * @param {String} [options.locusId]\n * @param {String} [options.correlationId]\n * @param {String} [options.callStart] Call Start Time\n * @param {String} [options.meetingId] webex meeting ID\n * @returns {Promise.} Feedback ID\n * @memberof LogsRequest\n */\n async uploadLogs(\n options: {\n autoupload?: boolean;\n locussessionid?: string;\n feedbackId?: string;\n locusId?: string;\n correlationId?: string;\n callStart?: string;\n meetingId?: string;\n } = {}\n ) {\n const id = options.feedbackId || uuid.v4();\n const {locusId, correlationId, meetingId, callStart, locussessionid, autoupload} = options;\n\n LoggerProxy.logger.info(\n `Logs:request#uploadLogs --> uploading user logs for feedbackId: ${id}`\n );\n\n try {\n await this.webex.internal.support.submitLogs({\n autoupload,\n locussessionid,\n feedbackId: id,\n locusId,\n correlationId,\n meetingId,\n callStart,\n });\n } catch (error) {\n LoggerProxy.logger.error('Logs:request#uploadLogs --> uploading user logs failed', error);\n\n return Promise.reject(error);\n }\n\n return id;\n }\n}\n","// @ts-ignore\nimport {hydraTypes} from '@webex/common';\n\nexport type Enum> = T[keyof T];\n\n// *********** LOWERCASE / CAMELCASE STRINGS ************\n\nexport const AUDIO = 'audio';\nexport const AUDIO_STATUS = 'audioStatus';\nexport const ALERT = 'alert';\nexport const ALIAS = 'alias';\nexport const ANSWER = 'answer';\n\nexport const CALL = 'call';\nexport const CORRELATION_ID = 'correlationId';\nexport const MEETINGNUMBER = 'meetingNumber';\nexport const CONVERSATION_URL = 'conversationUrl';\nexport const CALENDAR = 'calendar';\nexport const CALENDAR_EVENTS_API = 'calendarEvents';\nexport const CMR_MEETINGS = 'cmrmeetings';\nexport const CLAIM = 'claim';\nexport const CONTROLS = 'controls';\nexport const CONTENT = 'content';\nexport const COMPLETE = 'complete';\nexport const WHITEBOARD = 'whiteboard';\nexport const GATHERING = 'gathering';\nexport const DEVELOPMENT = 'development';\nexport const DECLINE = 'decline';\n\nexport const ERROR = 'error';\nexport const ENDED = 'ended';\n\nexport const HECATE = 'hecate';\n\nexport const HOST = 'host';\n\nexport const JOIN = 'join';\n\nexport const LEAVE = 'leave';\nexport const LIVE = 'live';\nexport const LOCAL = 'local';\nexport const LOCI = 'loci';\nexport const LOCUS_URL = 'locusUrl';\nexport const END = 'end';\n\nexport const MAX_RANDOM_DELAY_FOR_MEETING_INFO = 3 * 60 * 1000;\nexport const MEETINGINFO = 'meetingInfo';\nexport const MEET = 'meet';\nexport const MEET_M = 'm';\nexport const MEDIA = 'media';\nexport const MEET_CO = 'co';\nexport const MEET_CISCO = 'cisco';\n\nexport const OFFLINE = 'offline';\nexport const ONLINE = 'online';\n\nexport const PARTICIPANT = 'participant';\n\nexport const PROVISIONAL_TYPE_DIAL_IN = 'DIAL_IN';\nexport const PROVISIONAL_TYPE_DIAL_OUT = 'DIAL_OUT';\n\nexport const REMOTE = 'remote';\nexport const READY = 'ready';\n\nexport const SEND_DTMF_ENDPOINT = 'sendDtmf';\nexport const SENDRECV = 'sendrecv';\nexport const SIP_URI = 'sipUri';\nexport const SHARE = 'share';\n\nexport const TYPE = 'type';\n\nexport const VIDEO = 'video';\nexport const VIDEO_STATUS = 'videoStatus';\n\nexport const LANGUAGE_ENGLISH = 'en';\n\n// *********** UPPERCASE ONLY STRINGS ************\n// Please alphabetize\nexport const _ANSWER_ = 'ANSWER';\nexport const _ACTIVE_ = 'ACTIVE';\nexport const _CALL_ = 'CALL';\nexport const _CREATED_ = 'CREATED';\nexport const _CONFLICT_ = 'CONFLICT';\nexport const _CONVERSATION_URL_ = 'CONVERSATION_URL';\n\nexport const _ERROR_ = 'ERROR';\n\nexport const _FORCED_ = 'FORCED';\n\nexport const _IDLE_ = 'IDLE';\nexport const _IN_LOBBY_ = 'IN_LOBBY';\nexport const _IN_MEETING_ = 'IN_MEETING';\nexport const _INCOMING_ = 'INCOMING';\nexport const _IN_ = 'IN';\nexport const _ID_ = 'id';\n\nexport const _JOIN_ = 'JOIN';\nexport const _JOINED_ = 'JOINED';\n\nexport const _LOCUS_ID_ = 'LOCUS_ID';\nexport const _LEFT_ = 'LEFT';\nexport const _MOVED_ = 'MOVED';\nexport const _ON_HOLD_LOBBY_ = 'ON_HOLD_LOBBY';\nexport const _MEETING_LINK_ = 'MEETING_LINK';\nexport const _MEETING_UUID_ = 'MEETING_UUID';\nexport const _MEETING_ = 'MEETING';\nexport const _MEETING_CENTER_ = 'MEETING_CENTER';\nexport const _MEETING_ID_ = 'MEETING_ID';\n\nexport const _NOT_IN_MEETING_ = 'NOT_IN_MEETING';\nexport const _NONE_ = 'NONE';\n\nexport const _OBSERVE_ = 'OBSERVE';\n\nexport const _PERSONAL_ROOM_ = 'PERSONAL_ROOM';\nexport const _PEOPLE_ = hydraTypes.PEOPLE;\n\nexport const _REQUESTED_ = 'REQUESTED';\nexport const _RESOURCE_ROOM_ = 'RESOURCE_ROOM';\nexport const _RECEIVE_ONLY_ = 'RECVONLY';\nexport const _REMOVE_ = 'REMOVE';\nexport const _ROOM_ = hydraTypes.ROOM;\n\nexport const _SIP_BRIDGE_ = 'SIP_BRIDGE';\nexport const _SIP_URI_ = 'SIP_URI';\nexport const _SEND_RECEIVE_ = 'SENDRECV';\nexport const _SEND_ONLY_ = 'SENDONLY';\nexport const _INACTIVE_ = 'INACTIVE';\nexport const _SLIDES_ = 'SLIDES';\nexport const _S_LINE = 's=-';\n\nexport const _USER_ = 'USER';\nexport const _UNKNOWN_ = 'UNKNOWN';\n\nexport const _WEBEX_MEETING_ = 'WEBEX_MEETING';\nexport const _WAIT_ = 'WAIT';\nexport const _MOVE_MEDIA_ = 'MOVE_MEDIA';\n\n// *********** PARTICIPANT DELTAS ***********\nexport const PARTICIPANT_DELTAS = {\n TARGETS: {\n AUDIO: 'audio',\n VIDEO: 'video',\n },\n STATES: {\n DISABLED: 'disabled',\n MUTED: 'muted',\n UNKNOWN: 'unknown',\n UNMUTED: 'unmuted',\n },\n};\n\n// *********** STRING HELPERS ***********\n// Please alphabetize\nexport const ALTERNATE_REDIRECT_TRUE = 'alternateRedirect=true';\n\nexport const HTTPS_PROTOCOL = 'https://';\n\nexport const MEETINGS = 'Meetings';\n\nexport const MEDIA_PEER_CONNECTION_NAME = 'MediaPeerConnection';\n\nexport const SHARE_PEER_CONNECTION_NAME = 'SharePeerConnection';\n\nexport const USE_URI_LOOKUP_FALSE = 'useUriLookup=false';\n\nexport const WWW_DOT = 'www.';\n\nexport const WEBEX_DOT_COM = 'webex.com';\n\nexport const CONVERSATION_SERVICE = 'identityLookup';\n\nexport const WBXAPPAPI_SERVICE = 'webex-appapi-service';\n\n// ******************* ARRAYS ********************\n// Please alphabetize\nexport const DEFAULT_EXCLUDED_STATS = ['timestamp', 'ssrc', 'priority'];\n\n/**\n * @description @description Layout type for remote video participants. Allowed values are: Single, Equal, ActivePresence, Prominent, OnePlusN\n * @type {array}\n * @constant\n */\nexport const LAYOUT_TYPES = ['Single', 'Equal', 'ActivePresence', 'Prominent', 'OnePlusN'];\n\n// ******************* BOOLEANS *******************\n// Please alphabetize\nexport const MODERATOR_TRUE = true;\nexport const MODERATOR_FALSE = false;\n\n// ******************** NUMBERS ********************\n\nexport const INTENT_TO_JOIN = [2423005, 2423006, 2423016, 2423017, 2423018];\nexport const ICE_TIMEOUT = 2000;\nexport const ICE_FAIL_TIMEOUT = 3000;\n\nexport const RETRY_TIMEOUT = 3000;\n\nexport const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;\nexport const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;\n\n// ******************** REGEX **********************\n// Please alphabetize\nexport const DIALER_REGEX = {\n // modified from https://github.com/kirm/sip.js base\n // and with https://tools.ietf.org/html/rfc3261\n // requires the @ symbol\n SIP_ADDRESS:\n /^(sips?)?:?(?:([^\\s>:@]+)(?::([^\\s@>]+))?@)([\\w\\-.]+)(?::(\\d+))?((?:;[^\\s=?>;]+(?:=[^\\s?;]+)?)*)(?:\\?(([^\\s&=>]+=[^\\s&=>]+)(&[^\\s&=>]+=[^\\s&=>]+)*))?$/,\n // standard telephony num regex\n PHONE_NUMBER:\n /^(?:(?:\\+?1\\s*(?:[.-]\\s*)?)?(?:\\(\\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\\s*\\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\\s*(?:[.-]\\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\\s*(?:[.-]\\s*)?([0-9]{4})(?:\\s*(?:#|x\\.?|ext\\.?|extension)\\s*(\\d+))?$/,\n E164_FORMAT: /^\\+[1-9]\\d{1,14}$/,\n};\n\n// eslint-disable-next-line max-len\nexport const IPV4_REGEX = /^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}|.local/g;\n\nexport const VALID_EMAIL_ADDRESS =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nexport const VALID_PMR_ADDRESS =\n /([a-z0-9][-a-z0-9, '.']{0,62})@([a-z0-9][-a-z0-9, '.']{0,62})\\.webex\\.com/i;\nexport const VALID_PMR_LINK =\n /(https:\\/\\/)?([a-z0-9][-a-z0-9, '.']{0,62})\\.webex\\.com\\/(meet|join)\\/([a-z0-9][-a-z0-9, '.']{0,62})\\/?/i;\nexport const VALID_PIN = /([0-9]{4,6})/;\nexport const UUID_REG =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n// ******************** OBJECTS ********************\n// Please alphabetize, and keep objects organized\n\n// TODO: move all api params to API section\nexport const API = {\n CALLIOPEDISCOVERY: 'calliopeDiscovery',\n LOCUS: 'locus',\n};\n\nexport const CALENDAR_EVENTS = {\n CREATE: 'event:calendar.meeting.create',\n UPDATE: 'event:calendar.meeting.update',\n CREATE_MINIMAL: 'event:calendar.meeting.create.minimal',\n UPDATE_MINIMAL: 'event:calendar.meeting.update.minimal',\n DELETE: 'event:calendar.meeting.delete',\n};\n\nexport const ASSIGN_ROLES_ERROR_CODES = {\n ReclaimHostNotSupportedErrorCode: 2400127,\n ReclaimHostNotAllowedErrorCode: 2403135,\n ReclaimHostEmptyWrongKeyErrorCode: 2403136,\n ReclaimHostIsHostAlreadyErrorCode: 2409150,\n};\n\nexport const RECORDING_STATE = {\n RECORDING: 'recording',\n IDLE: 'idle',\n PAUSED: 'paused',\n RESUMED: 'resumed',\n};\n\nexport const SHARE_STATUS = {\n NO_SHARE: 'no_share',\n REMOTE_SHARE_ACTIVE: 'remote_share_active',\n LOCAL_SHARE_ACTIVE: 'local_share_active',\n WHITEBOARD_SHARE_ACTIVE: 'whiteboard_share_active',\n};\n\n// TODO: do we want to scope by meeting, members when they come off those objects themselves?\nexport const EVENT_TRIGGERS = {\n MEETINGS_READY: 'meetings:ready',\n MEETINGS_REGISTERED: 'meetings:registered',\n MEETINGS_UNREGISTERED: 'meetings:unregistered',\n MEDIA_READY: 'media:ready',\n MEDIA_STOPPED: 'media:stopped',\n MEDIA_UPDATE: 'media:update',\n MEDIA_CODEC_MISSING: 'media:codec:missing',\n MEDIA_CODEC_LOADED: 'media:codec:loaded',\n MEETING_STARTED_SHARING_LOCAL: 'meeting:startedSharingLocal',\n MEETING_STOPPED_SHARING_LOCAL: 'meeting:stoppedSharingLocal',\n MEETING_STARTED_SHARING_REMOTE: 'meeting:startedSharingRemote',\n MEETING_STOPPED_SHARING_REMOTE: 'meeting:stoppedSharingRemote',\n MEETING_UPDATE_ANNOTATION_INFO: 'meeting:updateAnnotationInfo',\n MEETING_STARTED_SHARING_WHITEBOARD: 'meeting:startedSharingWhiteboard',\n MEETING_STOPPED_SHARING_WHITEBOARD: 'meeting:stoppedSharingWhiteboard',\n MEETING_MEDIA_LOCAL_STARTED: 'meeting:media:local:start',\n MEETING_MEDIA_REMOTE_STARTED: 'meeting:media:remote:start',\n MEETING_STARTED_RECORDING: 'meeting:recording:started',\n MEETING_STOPPED_RECORDING: 'meeting:recording:stopped',\n MEETING_RECEIVE_REACTIONS: 'meeting:receiveReactions',\n MEETING_PAUSED_RECORDING: 'meeting:recording:paused',\n MEETING_RESUMED_RECORDING: 'meeting:recording:resumed',\n MEETING_ADDED: 'meeting:added',\n MEETING_REMOVED: 'meeting:removed',\n MEETING_RINGING: 'meeting:ringing',\n MEETING_RINGING_STOP: 'meeting:ringingStop',\n MEETING_SELF_LOBBY_WAITING: 'meeting:self:lobbyWaiting',\n MEETING_SELF_GUEST_ADMITTED: 'meeting:self:guestAdmitted',\n MEETING_SELF_VIDEO_MUTED_BY_OTHERS: 'meeting:self:videoMutedByOthers',\n MEETING_SELF_VIDEO_UNMUTED_BY_OTHERS: 'meeting:self:videoUnmutedByOthers',\n MEETING_SELF_MUTED_BY_OTHERS: 'meeting:self:mutedByOthers',\n MEETING_SELF_UNMUTED_BY_OTHERS: 'meeting:self:unmutedByOthers',\n MEETING_SELF_REQUESTED_TO_UNMUTE: 'meeting:self:requestedToUnmute',\n MEETING_SELF_PHONE_AUDIO_UPDATE: 'meeting:self:phoneAudioUpdate',\n MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST: 'meeting:self:cannotViewParticipantList',\n MEETING_SELF_IS_SHARING_BLOCKED: 'meeting:self:isSharingBlocked',\n MEETING_SELF_ROLES_CHANGED: 'meeting:self:rolesChanged',\n MEETING_CONTROLS_LAYOUT_UPDATE: 'meeting:layout:update',\n MEETING_ENTRY_EXIT_TONE_UPDATE: 'meeting:entryExitTone:update',\n MEETING_BREAKOUTS_UPDATE: 'meeting:breakouts:update',\n MEETING_BREAKOUTS_CLOSING: 'meeting:breakouts:closing',\n MEETING_BREAKOUTS_MESSAGE: 'meeting:breakouts:message',\n MEETING_BREAKOUTS_ASK_RETURN_TO_MAIN: 'meeting:breakouts:askReturnToMain',\n MEETING_BREAKOUTS_LEAVE: 'meeting:breakouts:leave',\n MEETING_BREAKOUTS_ASK_FOR_HELP: 'meeting:breakouts:askForHelp',\n MEETING_BREAKOUTS_PRE_ASSIGNMENTS_UPDATE: 'meeting:breakouts:preAssignmentsUpdate',\n MEETING_INTERPRETATION_UPDATE: 'meeting:interpretation:update',\n MEETING_INTERPRETATION_SUPPORT_LANGUAGES_UPDATE: 'meeting:interpretation:supportLanguagesUpdate',\n MEETING_INTERPRETATION_HANDOFF_REQUESTS_ARRIVED: 'meeting:interpretation:handoffRequestsArrived',\n MEMBERS_UPDATE: 'members:update',\n MEMBERS_CLEAR: 'members:clear',\n MEMBERS_CONTENT_UPDATE: 'members:content:update',\n MEMBERS_HOST_UPDATE: 'members:host:update',\n MEMBERS_SELF_UPDATE: 'members:self:update',\n MEETING_RECONNECTION_STARTING: 'meeting:reconnectionStarting',\n MEETING_RECONNECTION_SUCCESS: 'meeting:reconnectionSuccess',\n MEETING_RECONNECTION_FAILURE: 'meeting:reconnectionFailure',\n MEETING_UNLOCKED: 'meeting:unlocked',\n MEETING_LOCKED: 'meeting:locked',\n MEETING_INFO_AVAILABLE: 'meeting:meetingInfoAvailable',\n MEETING_INFO_UPDATED: 'meeting:meetingInfoUpdated',\n MEETING_LOG_UPLOAD_SUCCESS: 'meeting:logUpload:success',\n MEETING_LOG_UPLOAD_FAILURE: 'meeting:logUpload:failure',\n MEETING_ACTIONS_UPDATE: 'meeting:actionsUpdate',\n MEETING_STATE_CHANGE: 'meeting:stateChange',\n MEETING_MEETING_CONTAINER_UPDATE: 'meeting:meetingContainer:update',\n MEETING_EMBEDDED_APPS_UPDATE: 'meeting:embeddedApps:update',\n MEDIA_QUALITY: 'media:quality',\n MEETINGS_NETWORK_DISCONNECTED: 'network:disconnected',\n MEETINGS_NETWORK_CONNECTED: 'network:connected',\n MEETING_SELF_LEFT: 'meeting:self:left',\n NETWORK_QUALITY: 'network:quality',\n MEDIA_NEGOTIATED: 'media:negotiated',\n // the following events apply only to multistream media connections\n ACTIVE_SPEAKER_CHANGED: 'media:activeSpeakerChanged',\n REMOTE_VIDEO_SOURCE_COUNT_CHANGED: 'media:remoteVideoSourceCountChanged',\n REMOTE_AUDIO_SOURCE_COUNT_CHANGED: 'media:remoteAudioSourceCountChanged',\n REMOTE_MEDIA_AUDIO_CREATED: 'media:remoteAudio:created',\n REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED: 'media:remoteInterpretationAudio:created',\n REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScreenShareAudio:created',\n REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED: 'media:remoteVideo:layoutChanged',\n // Controls\n MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED: 'meeting:controls:mute-on-entry:updated',\n MEETING_CONTROLS_SHARE_CONTROL_UPDATED: 'meeting:controls:share-control:updated',\n MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED: 'meeting:controls:disallow-unmute:updated',\n MEETING_CONTROLS_REACTIONS_UPDATED: 'meeting:controls:reactions:updated',\n MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED:\n 'meeting:controls:view-the-participants-list:updated',\n MEETING_CONTROLS_RAISE_HAND_UPDATED: 'meeting:controls:raise-hand:updated',\n MEETING_CONTROLS_VIDEO_UPDATED: 'meeting:controls:video:updated',\n // Locus URL changed\n MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',\n MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',\n\n MEETING_TRANSCRIPTION_CONNECTED: 'meeting:transcription:connected',\n MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',\n MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',\n MEETING_MANUAL_CAPTION_UPDATED: 'meeting:manualCaptionControl:updated',\n MEETING_CAPTION_RECEIVED: 'meeting:caption-received',\n};\n\nexport const EVENT_TYPES = {\n SELF: 'self',\n OTHER: 'other',\n REMOTE: 'remote',\n REMOTE_AUDIO: 'remoteAudio',\n REMOTE_VIDEO: 'remoteVideo',\n REMOTE_SHARE: 'remoteShare',\n REMOTE_SHARE_AUDIO: 'remoteShareAudio',\n ERROR: 'error',\n};\n\n// Handles the reason when meeting gets destroyed\n// host removed you from the meeting\n// You are the host and you left the meeting\n// Meeting actually ended\nexport const MEETING_REMOVED_REASON = {\n SELF_REMOVED: 'SELF_REMOVED', // server or host removed you from the meeting\n FULLSTATE_REMOVED: 'FULLSTATE_REMOVED', // meeting got dropped ? not sure\n MEETING_INACTIVE_TERMINATING: 'MEETING_INACTIVE_TERMINATING', // Meeting got ended or everyone left the meeting\n CLIENT_LEAVE_REQUEST: 'CLIENT_LEAVE_REQUEST', // You triggered leave meeting\n CLIENT_LEAVE_REQUEST_TAB_CLOSED: 'CLIENT_LEAVE_REQUEST_TAB_CLOSED', // You triggered leave meeting, such as closing the browser tab directly\n USER_ENDED_SHARE_STREAMS: 'USER_ENDED_SHARE_STREAMS', // user triggered stop share\n NO_MEETINGS_TO_SYNC: 'NO_MEETINGS_TO_SYNC', // After the syncMeeting no meeting exists\n MEETING_CONNECTION_FAILED: 'MEETING_CONNECTION_FAILED', // meeting failed to connect due to ice failures or firewall issue\n LOCUS_DTO_SYNC_FAILED: 'LOCUS_DTO_SYNC_FAILED', // failed to get any Locus DTO for that meeting\n MISSING_MEETING_INFO: 'MISSING_MEETING_INFO', // meeting info failed to be fetched\n};\n\n// One one one calls ends for the following reasons\n// Partner reject the call or ends the call\n// self cancel or end the ongoing call\nexport const CALL_REMOVED_REASON = {\n CALL_INACTIVE: 'CALL_INACTIVE', // partner and you leave the call\n PARTNER_LEFT: 'PARTNER_LEFT', // partner left the call\n SELF_LEFT: 'SELF_LEFT', // you left/declined the call\n};\n\nexport const SHARE_STOPPED_REASON = {\n SELF_STOPPED: 'SELF_STOPPED',\n MEETING_REJOIN: 'MEETING_REJOIN',\n MEDIA_RECONNECTION: 'MEDIA_RECONNECTION',\n TRACK_ENDED: 'TRACK_ENDED',\n};\n\nexport const EVENTS = {\n SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',\n SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',\n MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',\n CONVERSATION_URL_UPDATE: 'CONVERSATION_URL_UPDATE',\n DESTROY_MEETING: 'DESTROY_MEETING',\n REQUEST_UPLOAD_LOGS: 'REQUEST_UPLOAD_LOGS',\n REMOTE_RESPONSE: 'REMOTE_RESPONSE',\n // TODO: move all of these to LOCUSINFO.EVENTS\n LOCUS_INFO_UPDATE_PARTICIPANTS: 'LOCUS_INFO_UPDATE_PARTICIPANTS',\n LOCUS_INFO_UPDATE_HOST: 'LOCUS_INFO_UPDATE_HOST',\n LOCUS_INFO_UPDATE_MEDIA_SHARES: 'LOCUS_INFO_UPDATE_MEDIA_SHARES',\n LOCUS_INFO_UPDATE_SELF: 'LOCUS_INFO_UPDATE_SELF',\n LOCUS_INFO_UPDATE_URL: 'LOCUS_INFO_UPDATE_URL',\n LOCUS_INFO_CAN_ASSIGN_HOST: 'LOCUS_INFO_CAN_ASSIGN_HOST',\n DISCONNECT_DUE_TO_INACTIVITY: 'DISCONNECT_DUE_TO_INACTIVITY',\n};\n\nexport const MEDIA_STATE = {\n active: 'active',\n inactive: 'inactive',\n};\n\nexport const ERROR_DICTIONARY = {\n PARAMETER: {\n NAME: 'ParameterError',\n MESSAGE:\n 'The parameters passed to the function, or object properties needed in the function were null, missing where required, or otherwise incorrect.',\n CODE: 0,\n },\n INTENT_TO_JOIN: {\n NAME: 'IntentToJoinError',\n MESSAGE:\n 'The meeting is locked. This is expected behavior. Call #join again with pin and/or moderator option',\n CODE: 1,\n },\n JOIN_MEETING: {\n NAME: 'JoinMeetingError',\n MESSAGE: 'There was an issue joining the meeting, meeting could be in a bad state.',\n CODE: 2,\n },\n RECONNECTION: {\n NAME: 'ReconnectionError',\n MESSAGE:\n 'There was an error in the reconnection flow, the meeting may not reconnect, disconnect and dial again.',\n CODE: 3,\n },\n MEDIA: {\n NAME: 'MediaError',\n MESSAGE: 'There was an error with media, the meeting may not have live audio, video or share.',\n CODE: 4,\n },\n PERMISSION: {\n NAME: 'PermissionError',\n MESSAGE:\n 'Not allowed to execute the function, some properties on server, or local client state do not allow you to complete this action.',\n CODE: 5,\n },\n STATS: {\n NAME: 'StatsError',\n MESSAGE: 'An error occurred with getStats, stats may not continue for this data stream.',\n CODE: 6,\n },\n PASSWORD: {\n NAME: 'PasswordError',\n MESSAGE: 'Password is required, please use verifyPassword()',\n CODE: 7,\n },\n CAPTCHA: {\n NAME: 'CaptchaError',\n MESSAGE: 'Captcha is required.',\n CODE: 8,\n },\n BREAKOUT_EDIT: {\n NAME: 'BreakoutEditLockedError',\n MESSAGE: 'Edit lock token mismatch',\n CODE: 9,\n },\n NO_MEETING_INFO: {\n NAME: 'NoMeetingInfo',\n MESSAGE: 'No meeting info found for the meeting',\n CODE: 10,\n },\n RECLAIM_HOST_ROLE_NOT_SUPPORTED: {\n NAME: 'ReclaimHostRoleNotSupported',\n MESSAGE:\n 'Non converged meetings, PSTN or SIP users in converged meetings are not supported currently.',\n CODE: 11,\n },\n RECLAIM_HOST_ROLE_NOT_ALLOWED: {\n NAME: 'ReclaimHostRoleNotAllowed',\n MESSAGE:\n 'Reclaim Host Role Not Allowed For Other Participants. Participants cannot claim host role in PMR meeting, space instant meeting or escalated instant meeting. However, the original host still can reclaim host role when it manually makes another participant to be the host.',\n CODE: 12,\n },\n RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY: {\n NAME: 'ReclaimHostRoleEmptyOrWrongKey',\n MESSAGE:\n 'Host Key Not Specified Or Matched. The original host can reclaim the host role without entering the host key. However, any other person who claims the host role must enter the host key to get it.',\n CODE: 13,\n },\n RECLAIM_HOST_ROLE_IS_ALREADY_HOST: {\n NAME: 'ReclaimHostRoleIsAlreadyHost',\n MESSAGE:\n 'Participant Having Host Role Already. Participant who sends request to reclaim host role has already a host role.',\n CODE: 14,\n },\n RECONNECTION_NOT_STARTED: {\n NAME: 'ReconnectionNotStartedError',\n MESSAGE:\n 'Reconnection was not started, because there is one already in progress or reconnections are disabled in config.',\n CODE: 15,\n },\n};\n\nexport const FLOOR_ACTION = {\n GRANTED: 'GRANTED',\n RELEASED: 'RELEASED',\n ACCEPTED: 'ACCEPTED',\n};\n\nexport const FULL_STATE = {\n INITIALIZING: 'INITIALIZING',\n INACTIVE: 'INACTIVE',\n ACTIVE: 'ACTIVE',\n TERMINATING: 'TERMINATING',\n UNKNOWN: 'UNKNOWN',\n};\n\nexport const HTTP_VERBS = {\n PUT: 'PUT',\n POST: 'POST',\n GET: 'GET',\n PATCH: 'PATCH',\n DELETE: 'DELETE',\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceGatheringState\nexport const ICE_GATHERING_STATE = {\n NEW: 'new',\n GATHERING: 'gathering',\n COMPLETE: 'complete',\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/iceConnectionState\nexport const ICE_STATE = {\n CHECKING: 'checking',\n CONNECTED: 'connected',\n CLOSED: 'closed',\n COMPLETED: 'completed',\n FAILED: 'failed',\n DISCONNECTED: 'disconnected',\n};\n\nexport const CONNECTION_STATE = {\n NEW: 'new',\n CONNECTING: 'connecting',\n CONNECTED: 'connected',\n CLOSED: 'closed',\n FAILED: 'failed',\n DISCONNECTED: 'disconnected',\n};\n\nexport const LOCUS = {\n STATE: {\n INACTIVE: 'INACTIVE',\n ENDED: 'ENDED',\n INITIALIZING: 'INITIALIZING',\n ACTIVE: 'ACTIVE',\n TERMINATING: 'TERMINATING',\n },\n SEQUENCE: {\n UN_DEF: 'undef',\n EMPTY: 'empty',\n DEF: 'def',\n NA: 'na',\n RANGE_START: 'rangeStart',\n RANGE_END: 'rangeEnd',\n },\n SYNCDEBUG: 'sync_debug',\n};\n\nexport const ANNOTATION = {\n ANNOTATION_ON_SHARE_SUPPORTED: 'ANNOTATION_ON_SHARE_SUPPORTED',\n};\nexport const BREAKOUTS = {\n STATUS: {\n CLOSING: 'CLOSING',\n CLOSED: 'CLOSED',\n PENDING: 'PENDING',\n OPEN: 'OPEN',\n },\n EVENTS: {\n BREAKOUTS_CLOSING: 'BREAKOUTS_CLOSING',\n MESSAGE: 'MESSAGE',\n MEMBERS_UPDATE: 'MEMBERS_UPDATE',\n ASK_RETURN_TO_MAIN: 'ASK_RETURN_TO_MAIN',\n LEAVE_BREAKOUT: 'LEAVE_BREAKOUT',\n ASK_FOR_HELP: 'ASK_FOR_HELP',\n PRE_ASSIGNMENTS_UPDATE: 'PRE_ASSIGNMENTS_UPDATE',\n },\n SESSION_TYPES: {\n MAIN: 'MAIN',\n BREAKOUT: 'BREAKOUT',\n },\n SESSION_STATES: {\n ACTIVE: 'active',\n ASSIGNED: 'assigned',\n ALLOWED: 'allowed',\n ASSIGNED_CURRENT: 'assignedCurrent',\n REQUESTED: 'requested',\n },\n BREAKOUTS_SUPPORTED: 'BREAKOUTS_SUPPORTED',\n ACTION: {\n START: 'START',\n CLOSE: 'CLOSE',\n DELETE: 'DELETE',\n },\n ERROR_CODE: {\n EDIT_LOCK_TOKEN_MISMATCH: 201409024,\n EDIT_NOT_AUTHORIZED: 201403007,\n },\n EDIT_LOCK_STATUS: {\n LOCKED: 'LOCKED',\n NOT_LOCKED: 'NOT_LOCKED',\n UNKNOWN: 'UNKNOWN',\n },\n DEFAULT_TTL: 30,\n};\n\nexport const INTERPRETATION = {\n EVENTS: {\n SUPPORT_LANGUAGES_UPDATE: 'SUPPORT_LANGUAGES_UPDATE',\n HANDOFF_REQUESTS_ARRIVED: 'HANDOFF_REQUESTS_ARRIVED',\n },\n ACTION_TYPE: {\n OFFERED: 'OFFERED',\n ACCEPTED: 'ACCEPTED',\n REQUESTED: 'REQUESTED',\n DECLINED: 'DECLINED',\n },\n RESOURCE_TYPE: 'SiHandover',\n};\n\nexport const LOCUSINFO = {\n EVENTS: {\n CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',\n CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',\n CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',\n CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: 'CONTROLS_MEETING_MANUAL_CAPTION_UPDATED',\n CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',\n CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',\n CONTROLS_MEETING_INTERPRETATION_UPDATED: 'CONTROLS_MEETING_INTERPRETATION_UPDATED',\n CONTROLS_ENTRY_EXIT_TONE_UPDATED: 'CONTROLS_ENTRY_EXIT_TONE_UPDATED',\n CONTROLS_MUTE_ON_ENTRY_CHANGED: 'CONTROLS_MUTE_ON_ENTRY_CHANGED',\n CONTROLS_SHARE_CONTROL_CHANGED: 'CONTROLS_SHARE_CONTROL_CHANGED',\n CONTROLS_DISALLOW_UNMUTE_CHANGED: 'CONTROLS_DISALLOW_UNMUTE_CHANGED',\n CONTROLS_REACTIONS_CHANGED: 'CONTROLS_REACTIONS_CHANGED',\n CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: 'CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED',\n CONTROLS_RAISE_HAND_CHANGED: 'CONTROLS_RAISE_HAND_CHANGED',\n CONTROLS_VIDEO_CHANGED: 'CONTROLS_VIDEO_CHANGED',\n SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',\n SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',\n SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',\n SELF_REMOTE_MUTE_STATUS_UPDATED: 'SELF_REMOTE_MUTE_STATUS_UPDATED',\n LOCAL_UNMUTE_REQUESTED: 'LOCAL_UNMUTE_REQUESTED',\n LOCAL_UNMUTE_REQUIRED: 'LOCAL_UNMUTE_REQUIRED',\n SELF_MODERATOR_CHANGED: 'SELF_MODERATOR_CHANGED',\n SELF_ROLES_CHANGED: 'SELF_ROLES_CHANGED',\n MEETING_UPDATE: 'MEETING_UPDATE',\n MEDIA_STATUS_CHANGE: 'MEDIA_STATUS_CHANGE',\n FULL_STATE_TYPE_UPDATE: 'FULL_STATE_TYPE_UPDATE',\n FULL_STATE_MEETING_STATE_CHANGE: 'FULL_STATE_MEETING_STATE_CHANGE',\n MEETING_STATE_CHANGE_TO_ACTIVE: 'MEETING_STATE_CHANGE_TO_ACTIVE',\n MEETING_INFO_UPDATED: 'MEETING_INFO_UPDATED',\n MEETING_LOCKED: 'MEETING_LOCKED',\n MEETING_UNLOCKED: 'MEETING_UNLOCKED',\n SELF_OBSERVING: 'SELF_OBSERVING',\n DISCONNECT_DUE_TO_INACTIVITY: 'DISCONNECT_DUE_TO_INACTIVITY',\n EMBEDDED_APPS_UPDATED: 'EMBEDDED_APPS_UPDATED',\n SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE: 'SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE',\n SELF_IS_SHARING_BLOCKED_CHANGE: 'SELF_IS_SHARING_BLOCKED_CHANGE',\n SELF_MEETING_BREAKOUTS_CHANGED: 'SELF_MEETING_BREAKOUTS_CHANGED',\n SELF_MEETING_INTERPRETATION_CHANGED: 'SELF_MEETING_INTERPRETATION_CHANGED',\n MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',\n LINKS_SERVICES: 'LINKS_SERVICES',\n },\n};\n\nexport const LOCUSEVENT = {\n LOCUS_MERCURY: 'event:locus',\n\n // update the tp unit status\n CONTROLS_UPDATED: 'locus.controls_updated',\n\n // delta events\n DIFFERENCE: 'locus.difference',\n\n // Breakout sessions\n BREAKOUT_ROSTER: 'breakout.roster',\n\n // screen sharing\n FLOOR_GRANTED: 'locus.floor_granted',\n FLOOR_RELEASED: 'locus.floor_released',\n\n // Roap\n MESSAGE_ROAP: 'locus.message.roap',\n\n // Join events\n PARTICIPANT_JOIN: 'locus.participant_joined',\n PARTICIPANT_LEFT: 'locus.participant_left',\n PARTICIPANT_DECLINED: 'locus.participant_declined',\n PARTICIPANT_UPDATED: 'locus.participant_updated',\n PARTICIPANT_CONTROLS_UPDATED: 'locus.participant_controls_updated',\n PARTICIPANT_ROLES_UPDATED: 'locus.participant_roles_updated',\n PARTICIPANT_AUDIO_MUTED: 'locus.participant_audio_muted',\n PARTICIPANT_AUDIO_UNMUTED: 'locus.participant_audio_unmuted',\n PARTICIPANT_VIDEO_MUTED: 'locus.participant_video_muted',\n PARTICIPANT_VIDEO_UNMUTED: 'locus.participant_video_unmuted',\n\n RECORDING_STARTED: 'locus.recording_started',\n RECORDING_START_FAILED: 'locus.recording_start_failed',\n RECORDING_STOPPED: 'locus.recording_stopped',\n\n SELF_CHANGED: 'locus.self_changed',\n};\n\nexport const MEDIA_TRACK_CONSTRAINT = {\n CURSOR: {\n // The mouse cursor should always be captured in the generated stream.\n AWLAYS: 'always',\n // The cursor should only be visible while moving, then removed.\n MOTION: 'motion',\n // The cursor should never be visible in the generated stream.\n NEVER: 'never',\n },\n};\n\nexport const MEETING_ERRORS = {\n METRICS_NOT_SERVER_OR_CLIENT_EXCEPTION: 'METRICS_NOT_SERVER_OR_CLIENT_EXCEPTION',\n\n BIDIRECTIONAL_ROSTER_NOT_ALLOWED: 'BIDIRECTIONAL_ROSTER_NOT_ALLOWED',\n INVALID_LOCUS_URL: 'INVALID_LOCUS_URL',\n ARGUMENT_NULL_OR_EMPTY: 'ARGUMENT_NULL_OR_EMPTY',\n INVALID_USER: 'INVALID_USER',\n INVALID_PHONE_NUMBER_OR_COUNTRY_CODE: 'INVALID_PHONE_NUMBER_OR_COUNTRY_CODE',\n EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE: 'EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE',\n PHONE_NUMBER_INVALID_COUNTRY_CODE: 'PHONE_NUMBER_INVALID_COUNTRY_CODE',\n PHONE_NUMBER_NOT_A_NUMBER: 'PHONE_NUMBER_NOT_A_NUMBER',\n PHONE_NUMBER_TOO_SHORT_AFTER_IDD: 'PHONE_NUMBER_TOO_SHORT_AFTER_IDD',\n PHONE_NUMBER_TOO_SHORT_NSN: 'PHONE_NUMBER_TOO_SHORT_NSN',\n PHONE_NUMBER_TOO_LONG: 'PHONE_NUMBER_TOO_LONG',\n INVALID_DIALABLE_KEY: 'INVALID_DIALABLE_KEY',\n INVALID_MEETING_LINK: 'INVALID_MEETING_LINK',\n INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST: 'INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST',\n INVALID_LOCUS_ID: 'INVALID_LOCUS_ID',\n EMPTY_SCHEDULED_MEETING_START_TIME: 'EMPTY_SCHEDULED_MEETING_START_TIME',\n INVALID_SCHEDULED_MEETING_DURATION_MINUTES: 'INVALID_SCHEDULED_MEETING_DURATION_MINUTES',\n INVALID_SCHEDULED_MEETING_REMINDER_DURATION_MINUTES:\n 'INVALID_SCHEDULED_MEETING_REMINDER_DURATION_MINUTES',\n EMPTY_SCHEDULED_MEETING_ORGANIZER: 'EMPTY_SCHEDULED_MEETING_ORGANIZER',\n INVALID_MEETING_ID_FORMAT: 'INVALID_MEETING_ID_FORMAT',\n INVALID_SIP_URL_FORMAT: 'INVALID_SIP_URL_FORMAT',\n EMPTY_INVITEE_RECORD: 'EMPTY_INVITEE_RECORD',\n EMPTY_INVITEE_ADDRESS: 'EMPTY_INVITEE_ADDRESS',\n DESKPHONE_NOTHING_DIALABLE_FOUND: 'DESKPHONE_NOTHING_DIALABLE_FOUND',\n INVALID_INVITEE_ADDRESS: 'INVALID_INVITEE_ADDRESS',\n INVALID_ATTENDEE_ID: 'INVALID_ATTENDEE_ID',\n INVALID_IN_LOBBY: 'INVALID_IN_LOBBY',\n MISSING_REQUESTING_PARTICIPANT_ID: 'MISSING_REQUESTING_PARTICIPANT_ID',\n INVALID_REQUESTING_PARTICIPANT_ID: 'INVALID_REQUESTING_PARTICIPANT_ID',\n SUPPLEMENTARY_USER_INFO_NOT_FOUND: 'SUPPLEMENTARY_USER_INFO_NOT_FOUND',\n\n UNAUTHORIZED: 'UNAUTHORIZED',\n REMOVED_PARTICIPANT: 'REMOVED_PARTICIPANT',\n\n FREE_USER_MAX_PARTICIPANTS_EXCEEDED: 'FREE_USER_MAX_PARTICIPANTS_EXCEEDED',\n PAID_USER_MAX_PARTICIPANTS_EXCEEDED: 'PAID_USER_MAX_PARTICIPANTS_EXCEEDED',\n SERVICE_MAX_PARTICIPANTS_EXCEEDED: 'SERVICE_MAX_PARTICIPANTS_EXCEEDED',\n INACTIVE: 'INACTIVE',\n ONE_ON_ONE_TO_SELF_NOT_ALLOWED: 'ONE_ON_ONE_TO_SELF_NOT_ALLOWED',\n JOIN_RESTRICTED_USER: 'JOIN_RESTRICTED_USER',\n GET_RESTRICTED_USER: 'GET_RESTRICTED_USER',\n JOIN_RESTRICTED_USER_NOT_IN_ROOM: 'JOIN_RESTRICTED_USER_NOT_IN_ROOM',\n CREATE_MEDIA_RESTRICTED_USER: 'CREATE_MEDIA_RESTRICTED_USER',\n DUPLICATE_RESOURCE_CREATION_REQUEST: 'DUPLICATE_RESOURCE_CREATION_REQUEST',\n MEETING_NOT_FOUND: 'MEETING_NOT_FOUND',\n NOT_WEBEX_SITE: 'NOT_WEBEX_SITE',\n INVALID_SCHEDULED_MEETING_ORGANIZER: 'INVALID_SCHEDULED_MEETING_ORGANIZER',\n FREE_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED: 'FREE_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED',\n PAID_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED: 'PAID_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED',\n SERVICE_MAX_PARTICIPANTS_ROSTER_EXCEEDED: 'SERVICE_MAX_PARTICIPANTS_ROSTER_EXCEEDED',\n SERVICE_INITIAL_PARTICIPANTS_ROSTER_EXCEEDED: 'SERVICE_INITIAL_PARTICIPANTS_ROSTER_EXCEEDED',\n RESOURCE_GUEST_FORBIDDEN: 'RESOURCE_GUEST_FORBIDDEN',\n SERVICE_NO_MACHINE_OR_SERVICE_ACCOUNT: 'SERVICE_NO_MACHINE_OR_SERVICE_ACCOUNT',\n MODERATOR_ROLE_REMOVAL_NOT_ALLOWED: 'MODERATOR_ROLE_REMOVAL_NOT_ALLOWED',\n RECORDING_CONTROL_NOT_SUPPORTED: 'RECORDING_CONTROL_NOT_SUPPORTED',\n HOST_PIN_LOCKED: 'HOST_PIN_LOCKED',\n INVALID_HOST_PIN: 'INVALID_HOST_PIN',\n REQUESTING_PARTICIPANT_NOT_MODERATOR: 'REQUESTING_PARTICIPANT_NOT_MODERATOR',\n\n CONVERSATION_NOT_FOUND: 'CONVERSATION_NOT_FOUND',\n MEETING_LINK_NOT_FOUND: 'MEETING_LINK_NOT_FOUND',\n MEETING_INFO_NOT_FOUND: 'MEETING_INFO_NOT_FOUND',\n SCHEDULED_MEETING_NOT_FOUND: 'SCHEDULED_MEETING_NOT_FOUND',\n\n RECORDING_NOT_STARTED: 'RECORDING_NOT_STARTED',\n RECORDING_NOT_ENABLED: 'RECORDING_NOT_ENABLED',\n RECORDING_USER_STORAGE_FULL: 'RECORDING_USER_STORAGE_FULL',\n RECORDING_SITE_STORAGE_FULL: 'RECORDING_SITE_STORAGE_FULL',\n\n NO_SCHEDULED_MEETING: 'NO_SCHEDULED_MEETING',\n MEETING_FULL_UPDATE_NOT_ALLOWED: 'MEETING_FULL_UPDATE_NOT_ALLOWED',\n MODERATOR_ROLE_REMOVAL_NOT_VALID: 'MODERATOR_ROLE_REMOVAL_NOT_VALID',\n MODERATOR_ROLE_ADDITION_NOT_VALID: 'MODERATOR_ROLE_ADDITION_NOT_VALID',\n INVALID_CALL_START_TIME: 'INVALID_CALL_START_TIME',\n MEETING_STARTED_UPDATE_NOT_ALLOWED: 'MEETING_STARTED_UPDATE_NOT_ALLOWED',\n\n EXCEEDED_MAX_JOINED_PARTICIPANTS: 'EXCEEDED_MAX_JOINED_PARTICIPANTS',\n EXCEEDED_SERVICE_MAX_PARTICIPANTS: 'EXCEEDED_SERVICE_MAX_PARTICIPANTS',\n MEETING_IS_LOCKED: 'MEETING_IS_LOCKED',\n MEETING_IS_TERMINATING: 'MEETING_IS_TERMINATING',\n MEETING_REQUIRE_MODERATOR_PIN_INTENT: 'MEETING_REQUIRE_MODERATOR_PIN_INTENT',\n MEETING_REQUIRE_MODERATOR_PIN: 'MEETING_REQUIRE_MODERATOR_PIN',\n MEETING_REQUIRE_MODERATOR_ROLE: 'MEETING_REQUIRE_MODERATOR_ROLE',\n PMR_ACCOUNT_SUSPENDED: 'PMR_ACCOUNT_SUSPENDED',\n PMR_ACCOUNT_LOCKED: 'PMR_ACCOUNT_LOCKED',\n INVALID_JOIN_TIME: 'INVALID_JOIN_TIME',\n REQUIRES_WEBEX_LOGIN: 'REQUIRES_WEBEX_LOGIN',\n\n TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',\n\n UNABLE_TO_LOOK_UP_DEVICE_INFORMATION: 'UNABLE_TO_LOOK_UP_DEVICE_INFORMATION',\n UNABLE_TO_LOOK_UP_CONVERSATION: 'UNABLE_TO_LOOK_UP_CONVERSATION',\n UNABLE_TO_LOOK_UP_CI_USER: 'UNABLE_TO_LOOK_UP_CI_USER',\n UNABLE_TO_CREATE_CONFLUENCE: 'UNABLE_TO_CREATE_CONFLUENCE',\n\n SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n\n SOCKET_TIMEOUT: 'SOCKET_TIMEOUT',\n NO_HTTP_RESPONSE: 'NO_HTTP_RESPONSE',\n};\n\nexport const MEETING_END_REASON = {\n INACTIVE: 'INACTIVE',\n MEDIA_RELEASED: 'MEDIA_RELEASED',\n};\n\nexport enum SELF_POLICY {\n ENFORCE_VIRTUAL_BACKGROUND = 'enforceVirtualBackground',\n SUPPORT_LOCAL_RECORD = 'supportLocalRecord',\n SUPPORT_NETWORK_BASED_RECORD = 'supportNetworkBasedRecord',\n SUPPORT_REALTIME_CLOSE_CAPTION = 'supportRealtimeCloseCaption',\n SUPPORT_CHAT = 'supportChat',\n SUPPORT_DESKTOP_SHARE_REMOTE = 'supportDesktopShareRemote',\n SUPPORT_DESKTOP_SHARE = 'supportDesktopShare',\n SUPPORT_WHITEBOARD = 'supportWhiteboard',\n SUPPORT_FILE_TRANSFER = 'supportFileTransfer',\n SUPPORT_APP_SHARE = 'supportAppShare',\n SUPPORT_CAMERA_SHARE = 'supportCameraShare',\n SUPPORT_FILE_SHARE = 'supportFileShare',\n SUPPORT_ANNOTATION = 'supportAnnotation',\n SUPPORT_BROADCAST_MESSAGE = 'supportBroadcastMessage',\n SUPPORT_VIDEO = 'supportVideo',\n SUPPORT_HQV = 'supportHQV',\n SUPPORT_HDV = 'supportHDV',\n SUPPORT_PARTICIPANT_LIST = 'supportParticipantList',\n SUPPORT_VOIP = 'supportVoIP',\n}\n\nexport const DISPLAY_HINTS = {\n ADD_GUEST: 'ADD_GUEST',\n ROSTER_WAITING_TO_JOIN: 'ROSTER_WAITING_TO_JOIN',\n RECORDING_CONTROL_START: 'RECORDING_CONTROL_START',\n RECORDING_CONTROL_PAUSE: 'RECORDING_CONTROL_PAUSE',\n RECORDING_CONTROL_STOP: 'RECORDING_CONTROL_STOP',\n RECORDING_CONTROL_RESUME: 'RECORDING_CONTROL_RESUME',\n LOCK_CONTROL_UNLOCK: 'LOCK_CONTROL_UNLOCK',\n LOCK_CONTROL_LOCK: 'LOCK_CONTROL_LOCK',\n LOCK_STATUS_LOCKED: 'LOCK_STATUS_LOCKED',\n LOCK_STATUS_UNLOCKED: 'LOCK_STATUS_UNLOCKED',\n RAISE_HAND: 'RAISE_HAND',\n LOWER_ALL_HANDS: 'LOWER_ALL_HANDS',\n LOWER_SOMEONE_ELSES_HAND: 'LOWER_SOMEONE_ELSES_HAND',\n LEAVE_TRANSFER_HOST_END_MEETING: 'LEAVE_TRANSFER_HOST_END_MEETING',\n LEAVE_END_MEETING: 'LEAVE_END_MEETING',\n CAPTION_START: 'CAPTION_START',\n CAPTION_STATUS_ACTIVE: 'CAPTION_STATUS_ACTIVE',\n MANUAL_CAPTION_START: 'MANUAL_CAPTION_START',\n MANUAL_CAPTION_STOP: 'MANUAL_CAPTION_STOP',\n MANUAL_CAPTION_STATUS_ACTIVE: 'MANUAL_CAPTION_STATUS_ACTIVE',\n DISPLAY_REAL_TIME_TRANSLATION: 'DISPLAY_REAL_TIME_TRANSLATION',\n ENABLE_CAPTION_PANEL: 'ENABLE_CAPTION_PANEL',\n DISPLAY_NON_ENGLISH_ASR: 'DISPLAY_NON_ENGLISH_ASR',\n TRANSCRIPTION_CONTROL_START: 'TRANSCRIPTION_CONTROL_START',\n TRANSCRIPTION_CONTROL_STOP: 'TRANSCRIPTION_CONTROL_STOP',\n SAVE_TRANSCRIPTS_ENABLED: 'SAVE_TRANSCRIPTS_ENABLED',\n WEBEX_ASSISTANT_STATUS_ACTIVE: 'WEBEX_ASSISTANT_STATUS_ACTIVE',\n WAITING_FOR_OTHERS: 'WAITING_FOR_OTHERS',\n ENABLE_REACTIONS: 'ENABLE_REACTIONS',\n DISABLE_REACTIONS: 'DISABLE_REACTIONS',\n REACTIONS_ACTIVE: 'REACTIONS_ACTIVE',\n REACTIONS_INACTIVE: 'REACTIONS_INACTIVE',\n SHARE_CONTROL: 'SHARE_CONTROL',\n ENABLE_MUTE_ON_ENTRY: 'ENABLE_MUTE_ON_ENTRY',\n ENABLE_SHOW_DISPLAY_NAME: 'ENABLE_SHOW_DISPLAY_NAME',\n DISABLE_SHOW_DISPLAY_NAME: 'DISABLE_SHOW_DISPLAY_NAME',\n DISABLE_MUTE_ON_ENTRY: 'DISABLE_MUTE_ON_ENTRY',\n ENABLE_HARD_MUTE: 'ENABLE_HARD_MUTE',\n DISABLE_HARD_MUTE: 'DISABLE_HARD_MUTE',\n MUTE_ALL: 'MUTE_ALL',\n UNMUTE_ALL: 'UNMUTE_ALL',\n PRESENTER_CONTROL: 'PRESENTER_CONTROL',\n CAN_RENAME_SELF_AND_OBSERVED: 'CAN_RENAME_SELF_AND_OBSERVED',\n CAN_RENAME_OTHERS: 'CAN_RENAME_OTHERS',\n\n // breakout session\n BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',\n BROADCAST_MESSAGE_TO_BREAKOUT: 'BROADCAST_MESSAGE_TO_BREAKOUT',\n UCF_SUPPRESS_BREAKOUTS_SUPPORT: 'UCF_SUPPRESS_BREAKOUTS_SUPPORT',\n DISABLE_ASK_FOR_HELP: 'DISABLE_ASK_FOR_HELP',\n DISABLE_BREAKOUT_PREASSIGNMENTS: 'DISABLE_BREAKOUT_PREASSIGNMENTS',\n DISABLE_LOBBY_TO_BREAKOUT: 'DISABLE_LOBBY_TO_BREAKOUT',\n\n // participants list\n DISABLE_VIEW_THE_PARTICIPANT_LIST: 'DISABLE_VIEW_THE_PARTICIPANT_LIST',\n ENABLE_VIEW_THE_PARTICIPANT_LIST: 'ENABLE_VIEW_THE_PARTICIPANT_LIST',\n\n // raise hand\n DISABLE_RAISE_HAND: 'DISABLE_RAISE_HAND',\n ENABLE_RAISE_HAND: 'ENABLE_RAISE_HAND',\n\n // video\n DISABLE_VIDEO: 'DISABLE_VIDEO',\n ENABLE_VIDEO: 'ENABLE_VIDEO',\n\n // Sharing\n SHARE_FILE: 'SHARE_FILE',\n SHARE_APPLICATION: 'SHARE_APPLICATION',\n SHARE_CAMERA: 'SHARE_CAMERA',\n SHARE_DESKTOP: 'SHARE_DESKTOP',\n SHARE_CONTENT: 'SHARE_CONTENT',\n SHARE_WHITEBOARD: 'SHARE_WHITEBOARD',\n\n // Voip (audio/video)\n VOIP_IS_ENABLED: 'VOIP_IS_ENABLED',\n};\n\nexport const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];\n\nexport const SELF_ROLES = {\n COHOST: 'COHOST',\n MODERATOR: 'MODERATOR',\n ATTENDEE: 'ATTENDEE',\n PANELIST: 'PANELIST',\n};\n\nexport const MEETING_STATE = {\n STATES: {\n IDLE: 'IDLE',\n INCOMING: 'INCOMING',\n DIALING: 'DIALING',\n NOTIFIED: 'NOTIFIED',\n DECLINED: 'DECLINED',\n ON_GOING: 'ON_GOING',\n JOINED: 'JOINED',\n TERMINATING: 'TERMINATING',\n LEFT: 'LEFT',\n ENDED: 'ENDED',\n ERROR: 'ERROR',\n },\n};\n\nexport const MEETING_STATE_MACHINE = {\n TRANSITIONS: {\n FAIL: 'fail',\n RING: 'ring',\n REMOTE: 'remote',\n JOIN: 'join',\n DECLINE: 'decline',\n LEAVE: 'leave',\n END: 'end',\n RESET: 'reset',\n },\n STATES: {\n ERROR: 'ERROR',\n IDLE: 'IDLE',\n ENDED: 'ENDED',\n DECLINED: 'DECLINED',\n RINGING: 'RINGING',\n JOINED: 'JOINED',\n ANSWERED: 'ANSWERED',\n },\n};\n\nexport const MEETING_AUDIO_STATE_MACHINE = {\n TRANSITIONS: {\n TOGGLE: 'toggle',\n INIT: 'init',\n },\n STATES: {\n MUTE_SELF: 'SELF_AUDIO_OFF',\n UNMUTE_SELF: 'SELF_AUDIO_ON',\n },\n};\n\nexport const MEETING_VIDEO_STATE_MACHINE = {\n TRANSITIONS: {\n TOGGLE: 'toggle',\n INIT: 'init',\n },\n STATES: {\n MUTE_SELF: 'SELF_VIDEO_OFF',\n UNMUTE_SELF: 'SELF_VIDEO_ON',\n },\n};\n\nexport const PEER_CONNECTION_STATE = {\n CLOSED: 'closed',\n FAILED: 'failed',\n};\n\nexport const RECONNECTION = {\n STATE: {\n IN_PROGRESS: 'IN_PROGRESS',\n FAILURE: 'FAILURE',\n DEFAULT_STATUS: '',\n },\n} as const;\n\nexport type RECONNECTION_STATE = Enum;\n\nexport const RESOURCE = {\n CLUSTERS: 'clusters',\n REACHABILITY: 'reachability',\n LOCI: 'loci',\n};\n\nexport const REACHABILITY = {\n localStorageResult: 'reachability.result',\n localStorageJoinCookie: 'reachability.joinCookie',\n namespace: 'Reachability',\n};\n\nexport const ROAP = {\n ROAP_TYPES: {\n OFFER: 'OFFER',\n ANSWER: 'ANSWER',\n OK: 'OK',\n ERROR: 'ERROR',\n TURN_DISCOVERY_REQUEST: 'TURN_DISCOVERY_REQUEST',\n TURN_DISCOVERY_RESPONSE: 'TURN_DISCOVERY_RESPONSE',\n },\n ROAP_MERCURY: 'event:locus.message.roap',\n ROAP_VERSION: '2',\n};\n\nexport const MediaContent = {\n main: 'main',\n slides: 'slides',\n};\n\nexport const NETWORK_STATUS = {\n DISCONNECTED: 'DISCONNECTED',\n RECONNECTING: 'RECONNECTING',\n CONNECTED: 'CONNECTED',\n} as const;\n\nexport type NETWORK_STATUS = Enum;\n\nexport const NETWORK_TYPE = {\n VPN: 'vpn',\n UNKNOWN: 'unknown',\n WIFI: 'wifi',\n ETHERNET: 'ethernet',\n};\n\nexport const STATS = {\n SEND_DIRECTION: 'send',\n RECEIVE_DIRECTION: 'recv',\n REMOTE: 'remote',\n LOCAL: 'local',\n};\n\nexport const MQA_STATS = {\n MQA_SIZE: 120, // MQA is done on 60 second intervals by server def, add a buffer for missed events\n CA_TYPE: 'MQA',\n DEFAULT_IP: '0.0.0.0',\n DEFAULT_SHARE_SENDER_STATS: {\n common: {\n common: {\n direction: 'sendrecv', // TODO: parse from SDP and save globally\n isMain: false, // always true for share sender\n mariFecEnabled: false, // unavailable\n mariRtxEnabled: false, // unavailable\n mariLiteEnabled: false, // unavailable\n mariQosEnabled: false, // unavailable\n multistreamEnabled: false, // unavailable\n },\n availableBitrate: 0,\n dtlsBitrate: 0, // unavailable\n dtlsPackets: 0, // unavailable\n fecBitrate: 0, // unavailable\n fecPackets: 0, // unavailable\n maxBitrate: 0, // unavailable\n queueDelay: 0, // unavailable\n remoteJitter: 0, // unavailable\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0, // unavailable\n rtcpPackets: 0, // unavailable\n rtpBitrate: 0, // unavailable\n rtpPackets: 0,\n stunBitrate: 0, // unavailable\n stunPackets: 0, // unavailable\n transportType: 'UDP', // TODO: parse the transport type from the SDP and save globally\n },\n streams: [\n {\n common: {\n codec: 'H264', // TODO: parse the codec from the SDP and save globally\n duplicateSsci: 0, // unavailable\n requestedBitrate: 0, // unavailable\n requestedFrames: 0, // unavailable\n rtpPackets: 0,\n ssci: 0, // unavailable\n transmittedBitrate: 0,\n transmittedFrameRate: 0,\n },\n h264CodecProfile: 'BP', // TODO: parse the profile level from h264 in the SDP and save globally\n localConfigurationChanges: 0, // unavailable\n remoteConfigurationChanges: 0, // unavailable\n requestedFrameSize: 0, // unavailable\n requestedKeyFrames: 0, // unavailable\n transmittedFrameSize: 0, // unavailable\n transmittedHeight: 0,\n transmittedKeyFrames: 0,\n transmittedWidth: 0,\n },\n ],\n },\n intervalMetadata: {\n memoryUsage: {\n cpuBitWidth: 0,\n mainProcessMaximumMemoryBytes: 0,\n osBitWidth: 0,\n processAverageMemoryUsage: 0,\n processMaximumMemoryBytes: 0,\n processMaximumMemoryUsage: 0,\n systemAverageMemoryUsage: 0,\n systemMaximumMemoryUsage: 0,\n },\n peerReflexiveIP: 'NULL', // TODO: save after ice trickling completes and use as a global variable\n processAverageCPU: 0,\n processMaximumCPU: 0,\n systemAverageCPU: 0,\n systemMaximumCPU: 0,\n },\n};\n\n// ****** MEDIA QUALITY CONSTANTS ****** //\n\n// these values must match allowed values of RemoteQualityLevel from the @webex/internal-media-core lib\nexport const QUALITY_LEVELS = {\n LOW: 'LOW',\n MEDIUM: 'MEDIUM',\n HIGH: 'HIGH',\n '360p': '360p',\n '480p': '480p',\n '720p': '720p',\n '1080p': '1080p',\n};\n\nexport const AVAILABLE_RESOLUTIONS = {\n '360p': {\n video: {\n width: {\n max: 640,\n ideal: 640,\n },\n height: {\n max: 360,\n ideal: 360,\n },\n },\n },\n '480p': {\n video: {\n width: {\n max: 640,\n ideal: 640,\n },\n height: {\n max: 480,\n ideal: 480,\n },\n },\n },\n '720p': {\n video: {\n width: {\n max: 1280,\n ideal: 1280,\n },\n height: {\n max: 720,\n ideal: 720,\n },\n },\n },\n '1080p': {\n video: {\n width: {\n max: 1920,\n ideal: 1920,\n },\n height: {\n max: 1080,\n ideal: 1080,\n },\n },\n },\n};\n\n/*\n * mqa Interval for sending stats metrics\n */\n\nexport const MQA_INTERVAL = 60000; // mqa analyzer interval its fixed to 60000\n\nexport const MEDIA_DEVICES = {\n MICROPHONE: 'microphone',\n SPEAKER: 'speaker',\n CAMERA: 'camera',\n};\n\nexport const PSTN_STATUS = {\n JOINED: 'JOINED', // we have provisioned a pstn device, which can be used to connect\n CONNECTED: 'CONNECTED', // user is connected to audio with pstn device\n LEFT: 'LEFT', // user has disconnected from the pstn device\n TRANSFERRING: 'TRANSFERRING', // usually happens in dial-out after the CONNECTED state\n SUCCESS: 'SUCCESS', // happens after the transfer (TRANSFERRING) is successful\n UNKNOWN: '', // placeholder if we haven't been told what the status is\n};\n\nexport const PASSWORD_STATUS = {\n NOT_REQUIRED: 'NOT_REQUIRED', // password is not required to join the meeting\n REQUIRED: 'REQUIRED', // client needs to provide the password by calling verifyPassword() before calling join()\n UNKNOWN: 'UNKNOWN', // we are waiting for information from the backend if password is required or not\n VERIFIED: 'VERIFIED', // client has already provided the password and it has been verified, client can proceed to call join()\n};\n\nexport const MEETING_INFO_FAILURE_REASON = {\n NONE: 'NONE', // meeting info was retrieved succesfully\n WRONG_PASSWORD: 'WRONG_PASSWORD', // meeting requires password and no password or wrong one was provided\n WRONG_CAPTCHA: 'WRONG_CAPTCHA', // wbxappapi requires a captcha code or a wrong captcha code was provided\n POLICY: 'POLICY', // meeting info request violates some meeting policy\n OTHER: 'OTHER', // any other error (network, etc)\n};\n\nexport const BNR_STATUS = {\n SHOULD_ENABLE: 'SHOULD_ENABLE',\n ENABLED: 'ENABLED',\n SHOULD_DISABLE: 'SHOULD_DISABLE',\n NOT_ENABLED: 'NOT_ENABLED',\n};\n\nexport const EMBEDDED_APP_TYPES = {\n SLIDO: 'SLIDO',\n OTHER: 'OTHER',\n};\n\nexport const DEFAULT_MEETING_INFO_REQUEST_BODY = {\n supportHostKey: true,\n supportCountryList: true,\n};\n\n/** the values for IP_VERSION are fixed and defined in Orpheus API */\nexport const IP_VERSION = {\n unknown: 0,\n only_ipv4: 4, // we know we have ipv4, we don't know or we don't have ipv6\n only_ipv6: 6, // we know we have ipv6, we don't know or we don't have ipv4\n ipv4_and_ipv6: 1,\n} as const;\n\nexport const LOCAL_SHARE_ERRORS = {\n DEVICE_NOT_JOINED: 'Floor requested but device not yet joined',\n UNDEFINED: 'undefined PUT',\n NO_MEDIA_FOR_DEVICE: 'No media session found for device',\n NO_CONFLUENCE_ID: 'Failed to request floor: 404 (null) could not find confluence id',\n CONTENT_SHARING_DISABLED: 'Content share policies are disabled',\n LOCUS_PARTICIPANT_DNE: 'does not exist in Locus',\n CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD:\n 'Content share request is not allowed while whiteboard floor request is pending',\n};\nexport type IP_VERSION = Enum;\n\n// constant for if the permissionToken is about to expire in the next 30 seconds, refresh it\nexport const MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC = 30;\nexport const MEETING_PERMISSION_TOKEN_REFRESH_REASON = 'ttl-join';\n\n// constant for named media group type\nexport const NAMED_MEDIA_GROUP_TYPE_AUDIO = 1;\n\nexport const DESTINATION_TYPE = {\n CONVERSATION_URL: 'CONVERSATION_URL',\n MEETING_LINK: 'MEETING_LINK',\n SIP_URI: 'SIP_URI',\n PERSONAL_ROOM: 'PERSONAL_ROOM',\n ONE_ON_ONE_CALL: 'ONE_ON_ONE_CALL',\n LOCUS_ID: 'LOCUS_ID',\n MEETING_ID: 'MEETING_ID',\n MEETING_UUID: 'MEETING_UUID',\n} as const;\n\nexport type DESTINATION_TYPE = Enum;\n","import * as MEETINGCONSTANTS from '../../constants';\n\n/**\n * Extended Error object for general parameter errors\n */\nexport default class ParameterError extends Error {\n sdkMessage: string;\n error: null;\n code: number;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.PARAMETER.MESSAGE,\n error: any = null\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ParameterError);\n }\n\n this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.PARAMETER.NAME;\n this.sdkMessage = message || MEETINGCONSTANTS.ERROR_DICTIONARY.PARAMETER.MESSAGE;\n this.error = error;\n\n this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.PARAMETER.CODE;\n }\n}\n","import {inspect} from 'util';\n\nimport LoggerProxy from '../logs/logger-proxy';\n\nconst EventsUtil: any = {};\n\nEventsUtil.getEventLog = (args) => {\n let argString = '';\n\n try {\n argString = inspect(args);\n } catch (e) {\n LoggerProxy.logger.warn(`Events:util#getEventLog --> ${e}`);\n }\n\n return argString;\n};\n\nEventsUtil.getScopeLog = (scope) => {\n let scopeString = '';\n\n if (scope) {\n if (scope.file && scope.function) {\n scopeString += `${scope.file}:${scope.function}->`;\n\n return scopeString;\n }\n if (scope.file) {\n scopeString += `${scope.file}->`;\n }\n if (scope.function) {\n scopeString += `${scope.function}->`;\n }\n }\n\n return scopeString;\n};\n\nexport default EventsUtil;\n","import LoggerProxy from '../logs/logger-proxy';\nimport LoggerConfig from '../logs/logger-config';\nimport ParameterError from '../errors/parameter';\n\nimport EventsUtil from './util';\n\nconst TriggerProxy: any = {};\n\nTriggerProxy.trigger = (instance, scope, trigger, payload) => {\n if (!instance || !instance.trigger) {\n throw new ParameterError(\n 'Instance to trigger from must be defined and have a trigger function.'\n );\n }\n\n LoggerProxy.logger.debug(\n `${EventsUtil.getScopeLog(scope)}event#${trigger}${\n LoggerConfig.verboseEvents ? ` -- ${EventsUtil.getEventLog(payload)}` : ''\n }`\n );\n\n return instance.trigger(trigger, payload);\n};\n\nexport default TriggerProxy;\n","// @ts-ignore\nimport {deviceType} from '@webex/common';\n\nexport default {\n // TODO: this needs to be defaulted\n // to JS_SDK and clients set it to WEB or others\n // see https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-73167\n meetings: {\n deviceType: deviceType.WEB,\n mediaSettings: {\n pstn: false,\n },\n reconnection: {\n enabled: false,\n autoRejoin: true,\n detection: true,\n // Timeout duration to wait for ICE to reconnect if a disconnect is received.\n iceReconnectionTimeout: 10000,\n // Amount of times attempting to rejoin a meeting during reconnect\n maxRejoinAttempts: 3,\n },\n stats: {\n // Enable the webrtc stats analyzer that emits quality degradation events\n enableStatsAnalyzer: true,\n // Enable the auto downgrade video quality feature\n autoDowngradeEnabled: false,\n // 1 second intervals to collect stats data\n interval: 1000,\n // we just want to analyze data every 5 sec interval\n analyzerInterval: 5000,\n // hold the last 2 minute of a calls data\n historyMax: 120,\n // Once packet loss hits this ratio, the video will downgrade\n videoPacketLossRatioThreshold: 9, // comparison of packets lost / packets received\n rttThreshold: 500, // 500 ms noticeable quality lag begins based on bandwidth of user\n jitterThreshold: 500, // 500 ms noticeable quality lag begins based on bandwidth of user\n },\n metrics: {\n // change to your client name else data will be muddled\n // you do not need a specific format, and you do not need to register it\n clientName: 'WEBEX_JS_SDK',\n // TODO: for now this line has to be whitelisted, which is problematic for third party\n clientType: 'WEBEX_SDK',\n // Stores the sub client type used when sending metrics\n subClientType: 'WEB_APP',\n // send average values MQA in 60 second intervals\n mqaMetricsInterval: 60000,\n // send to cisco internal MQA data automatically\n // we already send CA\n autoSendMQA: true,\n },\n logging: {\n enable: true,\n verboseEvents: true,\n },\n resolution: {\n maxWidth: 1280,\n maxHeight: 720,\n idealWidth: 1280,\n idealHeight: 720,\n },\n screenResolution: {\n maxWidth: 1920,\n maxHeight: 1080,\n idealWidth: 1920,\n idealHeight: 1080,\n },\n bandwidth: {\n // please note, these are the maximum bandwidth values\n // the server supports, minimums have to be tested\n audio: 64000,\n video: 4000000,\n startBitrate: 2000,\n },\n screenFrameRate: 10,\n videoShareFrameRate: 30,\n aspectRatio: 1.7695852534562213,\n // When enabled, as calls are ended, it will upload the SDK logs and correlate them\n autoUploadLogs: true,\n enableRtx: true,\n receiveTranscription: false,\n enableExtmap: false,\n enableAutomaticLLM: false,\n installedOrgID: undefined,\n experimental: {\n enableMediaNegotiatedEvent: false,\n enableUnifiedMeetings: true,\n enableAdhocMeetings: true,\n enableTcpReachability: false,\n enableTlsReachability: false,\n },\n degradationPreferences: {\n maxMacroblocksLimit: 8192,\n },\n },\n};\n","/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport bowser from 'bowser';\nimport {memoize} from 'lodash';\nimport window from 'global/window';\n\nconst mockDetectionObject = {\n /* eslint-disable global-require */\n getOSName: () => require('os').platform(),\n getOSVersion: () => require('os').release(),\n /* eslint-enable global-require */\n getBrowserName: () => '',\n getBrowserVersion: () => '',\n isBrowser: () => false,\n};\n\nconst createDetectionObject = (results) => {\n const getOSName = () => results?.getOSName() ?? '';\n const getOSVersion = () => results?.getOSVersion() ?? '';\n\n const getBrowserName = () => results?.getBrowserName() ?? '';\n const getBrowserVersion = () => results?.getBrowserVersion() ?? '';\n\n const isBrowser = (name) => !!results?.isBrowser(name, true);\n\n return {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion,\n isBrowser,\n };\n};\n\nexport default memoize((agent?: any) =>\n agent || window.navigator?.userAgent\n ? createDetectionObject(bowser.getParser(agent || window.navigator.userAgent))\n : mockDetectionObject\n);\n","const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};\n\nexport {RTC_METRICS as default};\n","/* eslint-disable class-methods-use-this */\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\nimport uuid from 'uuid';\nimport RTC_METRICS from './constants';\n\nconst parseJsonPayload = (payload: any[]): any | null => {\n try {\n if (payload && payload[0]) {\n return JSON.parse(payload[0]);\n }\n\n return null;\n } catch (_) {\n return null;\n }\n};\n\n/**\n * Rtc Metrics\n */\nexport default class RtcMetrics {\n /**\n * Array of MetricData items to be sent to the metrics service.\n */\n metricsQueue = [];\n\n intervalId: number;\n\n webex: any;\n\n meetingId: string;\n\n correlationId: string;\n\n connectionId: string;\n\n /**\n * Initialize the interval.\n *\n * @param {object} webex - The main `webex` object.\n * @param {string} meetingId - The meeting id.\n * @param {string} correlationId - The correlation id.\n */\n constructor(webex, meetingId, correlationId) {\n // `window` is used to prevent typescript from returning a NodeJS.Timer.\n this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);\n this.meetingId = meetingId;\n this.webex = webex;\n this.correlationId = correlationId;\n this.setNewConnectionId();\n // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.\n setTimeout(this.sendMetricsInQueue.bind(this), 5 * 1000);\n }\n\n /**\n * Check to see if the metrics queue has any items.\n *\n * @returns {void}\n */\n public sendMetricsInQueue() {\n if (this.metricsQueue.length) {\n this.sendMetrics();\n this.metricsQueue = [];\n }\n }\n\n /**\n * Add metrics items to the metrics queue.\n *\n * @param {object} data - An object with a payload array of metrics items.\n *\n * @returns {void}\n */\n addMetrics(data) {\n if (data.payload.length) {\n if (data.name === 'stats-report') {\n data.payload = data.payload.map(this.anonymizeIp);\n }\n\n this.metricsQueue.push(data);\n\n try {\n // If a connection fails, send the rest of the metrics in queue and get a new connection id.\n const parsedPayload = parseJsonPayload(data.payload);\n if (\n data.name === 'onconnectionstatechange' &&\n parsedPayload &&\n parsedPayload.value === 'failed'\n ) {\n this.sendMetricsInQueue();\n this.setNewConnectionId();\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * Clear the metrics interval.\n *\n * @returns {void}\n */\n closeMetrics() {\n this.sendMetricsInQueue();\n clearInterval(this.intervalId);\n }\n\n /**\n * Anonymize IP addresses.\n *\n * @param {array} stats - An RTCStatsReport organized into an array of strings.\n * @returns {string}\n */\n anonymizeIp(stats: string): string {\n const data = JSON.parse(stats);\n // on local and remote candidates, anonymize the last 4 bits.\n if (data.type === 'local-candidate' || data.type === 'remote-candidate') {\n data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;\n data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;\n data.relatedAddress =\n CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;\n }\n\n return JSON.stringify(data);\n }\n\n /**\n * Set a new connection id.\n *\n * @returns {void}\n */\n private setNewConnectionId() {\n this.connectionId = uuid.v4();\n }\n\n /**\n * Send metrics to the metrics service.\n *\n * @returns {void}\n */\n private sendMetrics() {\n this.webex.request({\n method: 'POST',\n service: 'unifiedTelemetry',\n resource: 'metric/v2',\n headers: {\n type: 'webrtcMedia',\n appId: RTC_METRICS.APP_ID,\n },\n body: {\n metrics: [\n {\n type: 'webrtc',\n version: '1.1.0',\n userId: this.webex.internal.device.userId,\n meetingId: this.meetingId,\n correlationId: this.correlationId,\n connectionId: this.connectionId,\n data: this.metricsQueue,\n },\n ],\n },\n });\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n type MultistreamConnectionConfig,\n} from '@webex/internal-media-core';\nimport {\n LocalStream,\n LocalCameraStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream,\n} from '@webex/media-helpers';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\nimport RtcMetrics from '../rtcMetrics';\n\nconst {isBrowser} = BrowserDetection();\n\nexport type BundlePolicy = MultistreamConnectionConfig['bundlePolicy'];\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\nMedia.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {\n if (!receive && !send) {\n return 'inactive';\n }\n\n if (forceSendRecv || (receive && send)) {\n return 'sendrecv';\n }\n\n if (receive) {\n return 'recvonly';\n }\n\n return 'sendonly';\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {object} webex main `webex` object.\n * @param {string} meetingId id for the meeting using this connection\n * @param {string} correlationId id used in requests to correlate to this session\n * @param {Object} options\n * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:\n * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @param {BundlePolicy} [options.bundlePolicy]\n * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n webex: object,\n meetingId: string,\n correlationId: string,\n options: {\n mediaProperties: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n };\n audioStream?: LocalMicrophoneStream;\n videoStream?: LocalCameraStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: {\n url: string;\n username: string;\n password: string;\n };\n bundlePolicy?: BundlePolicy;\n }\n) => {\n const {\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo,\n bundlePolicy,\n } = options;\n\n const iceServers = [];\n\n // we might not have any TURN server if TURN discovery failed or wasn't done or\n // we might get an empty TURN url if we land on a video mesh node\n if (turnServerInfo?.url) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n const config: MultistreamConnectionConfig = {\n iceServers,\n };\n\n if (bundlePolicy) {\n config.bundlePolicy = bundlePolicy;\n }\n\n const rtcMetrics = new RtcMetrics(webex, meetingId, correlationId);\n\n return new MultistreamRoapMediaConnection(\n config,\n meetingId,\n /* the rtc metrics objects callbacks */\n (data) => rtcMetrics.addMetrics(data),\n () => rtcMetrics.closeMetrics(),\n () => rtcMetrics.sendMetricsInQueue()\n );\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioStream, videoStream, shareVideoStream, shareAudioStream} =\n mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530\n localTracks: {\n audio: audioStream?.outputStream?.getTracks()[0],\n video: videoStream?.outputStream?.getTracks()[0],\n screenShareVideo: shareVideoStream?.outputStream?.getTracks()[0],\n screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923\n } as unknown,\n direction: {\n audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),\n video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),\n screenShareVideo: Media.getDirection(\n false,\n mediaDirection.receiveShare,\n mediaDirection.sendShare\n ),\n },\n remoteQualityLevel,\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {LocalStream} stream A local stream\n * @returns {null}\n */\nMedia.stopStream = (stream: LocalStream) => {\n if (!stream) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n try {\n stream.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopStream --> Unable to stop the stream with ready state => ${stream.readyState}, error: ${e}`\n );\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n","/**\n * @extends Error\n * @property {number} code - Error code\n */\nexport default class WebexMeetingsError extends Error {\n code: any;\n\n /**\n * Creates a new {@link WebexMeetingsError}\n * @param {number} code - Error code\n * @param {string} [message] - Error message\n * @param {string} [fileName] - Name of the script file where error was generated\n * @param {number} [lineNumber] - Line number of the script file where error was generated\n */\n constructor(code: number, ...args: any[]) {\n super(...args);\n\n this.name = 'WebexMeetingsError';\n\n Object.defineProperty(this, 'code', {\n value: code,\n enumerable: true,\n });\n }\n\n /**\n * Returns human readable string describing the error.\n * @returns {string}\n */\n toString() {\n const message = this.message ? `: ${this.message}` : '';\n\n return `${this.name} ${this.code}${message}`;\n }\n}\n","// The document would auto generate the doc for errors\n\n// 1) Error codes for Oauth, login, mercury should be separated out (Code range)\n// 2) Errors from the actual locus server or other server in case, we can use the same error code as locus and redirect it\n// 3) Any errors we generate from the SDK can be split into various categories\n// Parameter validation, user action, connection, media specific(They can have different range)\n\n// TODO: all the errors from the server need to be captured\n\n// add a way to log and send metrics if needed\nimport WebexMeetingsError from './webex-meetings-error';\n\nconst WebExMeetingsErrors = {};\n\n/**\n * Create a {@link WebexMeetingsError} for a given code and message.\n * @private\n * @param {number} [code] - Error code\n * @param {string} [message] - Error message\n * @returns {WebexMeetingsError}\n */\nexport function createMeetingsError(code?: number, message?: string) {\n code = typeof code === 'number' ? code : 0;\n message = typeof message === 'string' && message ? message : 'Unknown error';\n\n return WebExMeetingsErrors[code]\n ? new WebExMeetingsErrors[code]()\n : new WebexMeetingsError(code, message);\n}\n\n/**\n * @class MeetingNotActiveError\n * @classdesc Raised whenever Meeting has already ended and user tries to do a action.\n * @extends WebexMeetingsError\n * @property {number} code - 30101\n * @property {string} message - 'Meeting has already Ended or not Active'\n */\nclass MeetingNotActiveError extends WebexMeetingsError {\n static CODE = 30101;\n\n constructor() {\n super(MeetingNotActiveError.CODE, 'Meeting has already Ended or not Active');\n }\n}\n\nexport {MeetingNotActiveError};\nWebExMeetingsErrors[MeetingNotActiveError.CODE] = MeetingNotActiveError;\n\n/**\n * @class UserNotJoinedError\n * @classdesc Raised whenever the user has already left the meeting and user tries to do a action.\n * @extends WebexMeetingsError\n * @property {number} code - 30102\n * @property {string} message - 'User has already left the meeting'\n */\nclass UserNotJoinedError extends WebexMeetingsError {\n static CODE = 30102;\n\n constructor() {\n super(\n UserNotJoinedError.CODE,\n 'User currently not in meeting. Please join a meeting before adding media.'\n );\n }\n}\n\nexport {UserNotJoinedError};\nWebExMeetingsErrors[UserNotJoinedError.CODE] = UserNotJoinedError;\n\n/**\n * @class NoMediaEstablishedYetError\n * @classdesc Raised whenever the user has not established media yet.\n * @extends WebexMeetingsError\n * @property {number} code - 30103\n * @property {string} message - error message\n */\nclass NoMediaEstablishedYetError extends WebexMeetingsError {\n static CODE = 30103;\n\n // eslint-disable-next-line require-jsdoc\n constructor() {\n super(\n NoMediaEstablishedYetError.CODE,\n 'Webrtc media connection is missing, call addMedia() first'\n );\n }\n}\n\nexport {NoMediaEstablishedYetError};\nWebExMeetingsErrors[NoMediaEstablishedYetError.CODE] = NoMediaEstablishedYetError;\n\n/**\n * @class UserInLobbyError\n * @classdesc Raised whenever the user is in lobby and not joined yet.\n * @extends WebexMeetingsError\n * @property {number} code - 30104\n * @property {string} message - 'user is still in the lobby or not joined'\n */\nclass UserInLobbyError extends WebexMeetingsError {\n static CODE = 30104;\n\n constructor() {\n super(UserInLobbyError.CODE, 'user is still in the lobby or not joined');\n }\n}\n\nexport {UserInLobbyError};\nWebExMeetingsErrors[UserInLobbyError.CODE] = UserInLobbyError;\n\n/**\n * @class SpaceIDDeprecatedError\n * @classdesc Raised whenever the user passes Space ID as destination for create meeting.\n * @extends WebexMeetingsError\n * @property {number} code - 30105\n * @property {string} message - Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.'\n */\nclass SpaceIDDeprecatedError extends WebexMeetingsError {\n static CODE = 30105;\n\n constructor() {\n super(\n SpaceIDDeprecatedError.CODE,\n 'Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.'\n );\n }\n}\n\nexport {SpaceIDDeprecatedError};\nWebExMeetingsErrors[SpaceIDDeprecatedError.CODE] = SpaceIDDeprecatedError;\n\n/**\n * @class IceGatheringFailed\n * @classdesc Raised whenever ice gathering fails.\n * @extends WebexMeetingsError\n * @property {number} code - 30202\n * @property {string} message - 'user failed ice gathering check network/firewall'\n */\nclass IceGatheringFailed extends WebexMeetingsError {\n static CODE = 30202;\n\n constructor() {\n super(IceGatheringFailed.CODE, 'iceConnection: gethering ice candidate failed');\n }\n}\n\nexport {IceGatheringFailed};\nWebExMeetingsErrors[IceGatheringFailed.CODE] = IceGatheringFailed;\n\n/**\n * @class AddMediaFailed\n * @classdesc Raised whenever we fail to successfully add media to a meeting\n * @extends WebexMeetingsError\n * @property {number} code - 30203\n * @property {string} message - 'Failed to add media'\n */\nclass AddMediaFailed extends WebexMeetingsError {\n static CODE = 30203;\n\n constructor() {\n super(AddMediaFailed.CODE, 'Failed to add media');\n }\n}\nexport {AddMediaFailed};\nWebExMeetingsErrors[AddMediaFailed.CODE] = AddMediaFailed;\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object to signify the intent to join for unclaimed PMR scenarios\n */\nexport default class IntentToJoinError extends Error {\n code: any;\n error: any;\n joinIntentRequired: any;\n sdkMessage: any;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.INTENT_TO_JOIN.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.INTENT_TO_JOIN.NAME;\n this.sdkMessage = ERROR_DICTIONARY.INTENT_TO_JOIN.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.joinIntentRequired = true;\n this.code = ERROR_DICTIONARY.INTENT_TO_JOIN.CODE;\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object to signify a join meeting error\n */\nexport default class JoinMeetingError extends Error {\n code: any;\n error: any;\n joinOptions: any;\n sdkMessage: any;\n\n /**\n *\n * @constructor\n * @param {Object} [options]\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n options: object = {},\n message: string = ERROR_DICTIONARY.JOIN_MEETING.MESSAGE,\n error: any = null\n ) {\n super(message);\n this.name = ERROR_DICTIONARY.JOIN_MEETING.NAME;\n this.sdkMessage = ERROR_DICTIONARY.JOIN_MEETING.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.joinOptions = options;\n this.code = ERROR_DICTIONARY.JOIN_MEETING.CODE;\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object for general parameter errors\n */\nexport default class PermissionError extends Error {\n code: any;\n error: any;\n sdkMessage: any;\n\n /**\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.PERMISSION.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.PERMISSION.NAME;\n this.sdkMessage = ERROR_DICTIONARY.PERMISSION.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.PERMISSION.CODE;\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object to signify password related errors\n */\nexport default class PasswordError extends Error {\n code: any;\n error: any;\n sdkMessage: any;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.PASSWORD.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.PASSWORD.NAME;\n this.sdkMessage = ERROR_DICTIONARY.PASSWORD.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.PASSWORD.CODE;\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object to signify captcha related errors\n */\nexport default class CaptchaError extends Error {\n code: any;\n error: any;\n sdkMessage: any;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.CAPTCHA.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.CAPTCHA.NAME;\n this.sdkMessage = ERROR_DICTIONARY.CAPTCHA.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.CAPTCHA.CODE;\n }\n}\n","import {LocalCameraStream, LocalMicrophoneStream} from '@webex/media-helpers';\n\nimport {cloneDeep} from 'lodash';\nimport {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n INTENT_TO_JOIN,\n _LEFT_,\n _IDLE_,\n _JOINED_,\n PASSWORD_STATUS,\n DISPLAY_HINTS,\n FULL_STATE,\n SELF_POLICY,\n EVENT_TRIGGERS,\n LOCAL_SHARE_ERRORS,\n IP_VERSION,\n} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\nimport IntentToJoinError from '../common/errors/intent-to-join';\nimport JoinMeetingError from '../common/errors/join-meeting';\nimport ParameterError from '../common/errors/parameter';\nimport PermissionError from '../common/errors/permission';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport Trigger from '../common/events/trigger-proxy';\n\nconst MeetingUtil = {\n parseLocusJoin: (response) => {\n const parsed: any = {};\n\n // First todo: add check for existance\n parsed.locus = response.body.locus;\n parsed.mediaConnections = response.body.mediaConnections;\n parsed.locusUrl = parsed.locus.url;\n parsed.locusId = parsed.locus.url.split('/').pop();\n parsed.selfId = parsed.locus.self.id;\n\n // we need mediaId before making roap calls\n parsed.mediaConnections.forEach((mediaConnection) => {\n if (mediaConnection.mediaId) {\n parsed.mediaId = mediaConnection.mediaId;\n }\n });\n\n return parsed;\n },\n\n remoteUpdateAudioVideo: (meeting, audioMuted?: boolean, videoMuted?: boolean) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n\n if (!meeting.locusMediaRequest) {\n return Promise.reject(\n new ParameterError(\n 'You need a meeting with a media connection, call Meeting.addMedia() first.'\n )\n );\n }\n\n return meeting.locusMediaRequest\n .send({\n type: 'LocalMute',\n selfUrl: meeting.selfUrl,\n mediaId: meeting.mediaId,\n sequence: meeting.locusInfo.sequence,\n muteOptions: {\n audioMuted,\n videoMuted,\n },\n })\n .then((response) => response?.body?.locus);\n },\n\n hasOwner: (info) => info && info.owner,\n\n isOwnerSelf: (owner, selfId) => owner === selfId,\n\n isPinOrGuest: (err) => err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode),\n\n /**\n * Returns the current state of knowledge about whether we are on an ipv4-only or ipv6-only or mixed (ipv4 and ipv6) network.\n * The return value matches the possible values of \"ipver\" parameter used by the backend APIs.\n *\n * @param {Object} webex webex instance\n * @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend\n */\n getIpVersion(webex: any): IP_VERSION | undefined {\n const {supportsIpV4, supportsIpV6} = webex.internal.device.ipNetworkDetector;\n\n if (BrowserDetection().isBrowser('firefox')) {\n // our ipv6 solution relies on FQDN ICE candidates, but Firefox doesn't support them,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1713128\n // so for Firefox we don't want the backend to activate the \"ipv6 feature\"\n return undefined;\n }\n\n if (supportsIpV4 && supportsIpV6) {\n return IP_VERSION.ipv4_and_ipv6;\n }\n\n if (supportsIpV4) {\n return IP_VERSION.only_ipv4;\n }\n\n if (supportsIpV6) {\n return IP_VERSION.only_ipv6;\n }\n\n return IP_VERSION.unknown;\n },\n\n joinMeeting: (meeting, options) => {\n if (!meeting) {\n return Promise.reject(new ParameterError('You need a meeting object.'));\n }\n const webex = meeting.getWebexObject();\n\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.request',\n options: {meetingId: meeting.id},\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO: check if the meeting is in JOINING state\n // if Joining state termintate the request as user might click multiple times\n return meeting.meetingRequest\n .joinMeeting({\n inviteeAddress: meeting.meetingJoinUrl || meeting.sipUri,\n meetingNumber: meeting.meetingNumber,\n deviceUrl: meeting.deviceUrl,\n locusUrl: meeting.locusUrl,\n locusClusterUrl: meeting.meetingInfo?.locusClusterUrl,\n correlationId: meeting.correlationId,\n reachability: options.reachability,\n roapMessage: options.roapMessage,\n permissionToken: meeting.permissionToken,\n resourceId: options.resourceId || null,\n moderator: options.moderator,\n pin: options.pin,\n moveToResource: options.moveToResource,\n preferTranscoding: !meeting.isMultistream,\n asResourceOccupant: options.asResourceOccupant,\n breakoutsSupported: options.breakoutsSupported,\n locale: options.locale,\n deviceCapabilities: options.deviceCapabilities,\n liveAnnotationSupported: options.liveAnnotationSupported,\n ipVersion: MeetingUtil.getIpVersion(meeting.getWebexObject()),\n })\n .then((res) => {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n trigger: 'loci-update',\n identifiers: {\n trackingId: res.headers.trackingid,\n },\n },\n options: {\n meetingId: meeting.id,\n mediaConnections: res.body.mediaConnections,\n },\n });\n\n return MeetingUtil.parseLocusJoin(res);\n });\n },\n\n cleanUp: (meeting) => {\n meeting.breakouts.cleanUp();\n meeting.simultaneousInterpretation.cleanUp();\n meeting.locusMediaRequest = undefined;\n\n // make sure we send last metrics before we close the peerconnection\n const stopStatsAnalyzer = meeting.statsAnalyzer\n ? meeting.statsAnalyzer.stopAnalyzer()\n : Promise.resolve();\n\n return stopStatsAnalyzer\n .then(() => meeting.closeRemoteStreams())\n .then(() => meeting.closePeerConnections())\n .then(() => {\n meeting.cleanupLocalStreams();\n meeting.unsetRemoteStreams();\n meeting.unsetPeerConnections();\n meeting.reconnectionManager.cleanUp();\n })\n .then(() => meeting.stopKeepAlive())\n .then(() => {\n if (meeting.config?.enableAutomaticLLM) {\n meeting.updateLLMConnection();\n }\n });\n },\n\n disconnectPhoneAudio: (meeting, phoneUrl) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const options = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n phoneUrl,\n };\n\n return meeting.meetingRequest.disconnectPhoneAudio(options).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Returns options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} leave options\n */\n prepareLeaveMeetingOptions: (meeting, options: any = {}) => {\n const defaultOptions = {\n locusUrl: meeting.locusUrl,\n selfId: meeting.selfId,\n correlationId: meeting.correlationId,\n resourceId: meeting.resourceId,\n deviceUrl: meeting.deviceUrl,\n };\n\n return {...defaultOptions, ...options};\n },\n\n // by default will leave on meeting's resourceId\n // if you explicity want it not to leave on resource id, pass\n // {resourceId: null}\n // TODO: chris, you can modify this however you want\n leaveMeeting: (meeting, options: any = {}) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n // TODO: clean up if the meeting is already inactive\n return Promise.reject(new MeetingNotActiveError());\n }\n\n if (MeetingUtil.isUserInLeftState(meeting.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest\n .leaveMeeting(leaveOptions)\n .then(() => {\n if (options.moveMeeting) {\n return Promise.resolve();\n }\n\n return MeetingUtil.cleanUp(meeting);\n })\n .catch((err) => {\n // TODO: If the meeting state comes as LEFT or INACTIVE as response then\n // 1) on leave clean up the meeting or simply do a sync on the meeting\n // 2) If the error says meeting is inactive then destroy the meeting object\n LoggerProxy.logger.error(\n `Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n declineMeeting: (meeting, reason) =>\n meeting.meetingRequest.declineMeeting({\n locusUrl: meeting.locusUrl,\n deviceUrl: meeting.deviceUrl,\n reason,\n }),\n\n isUserInLeftState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_,\n\n isUserInIdleState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_,\n\n isUserInJoinedState: (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_,\n\n isMediaEstablished: (currentMediaStatus) =>\n currentMediaStatus &&\n (currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share),\n\n joinMeetingOptions: (meeting, options: any = {}) => {\n const webex = meeting.getWebexObject();\n\n meeting.resourceId = meeting.resourceId || options.resourceId;\n\n if (meeting.requiredCaptcha) {\n return Promise.reject(new CaptchaError());\n }\n if (meeting.passwordStatus === PASSWORD_STATUS.REQUIRED) {\n return Promise.reject(new PasswordError());\n }\n\n if (options.pin) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.collected',\n options: {\n meetingId: meeting.id,\n },\n });\n }\n\n // normal join meeting, scenario A, D\n return MeetingUtil.joinMeeting(meeting, options)\n .then((response) => {\n meeting.setLocus(response);\n\n return Promise.resolve(response);\n })\n .catch((err) => {\n // joining a claimed PMR that is not my own, scenario B\n if (MeetingUtil.isPinOrGuest(err)) {\n // @ts-ignore\n webex.internal.newMetrics.submitClientEvent({\n name: 'client.pin.prompt',\n options: {\n meetingId: meeting.id,\n },\n });\n\n // request host pin or non host for unclaimed PMR, start of Scenario C\n // see https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-Lobby-and--IVR-Feature\n return Promise.reject(new IntentToJoinError('Error Joining Meeting', err));\n }\n LoggerProxy.logger.error(\n 'Meeting:util#joinMeetingOptions --> Error joining the call, ',\n err\n );\n\n return Promise.reject(new JoinMeetingError(options, 'Error Joining Meeting', err));\n });\n },\n\n /**\n * Returns request options for leaving a meeting.\n * @param {any} meeting\n * @param {any} options\n * @returns {any} request options\n */\n buildLeaveFetchRequestOptions: (meeting, options: any = {}) => {\n const leaveOptions = MeetingUtil.prepareLeaveMeetingOptions(meeting, options);\n\n return meeting.meetingRequest.buildLeaveMeetingRequestOptions(leaveOptions);\n },\n\n getTrack: (stream) => {\n let audioTrack = null;\n let videoTrack = null;\n let audioTracks = null;\n let videoTracks = null;\n\n if (!stream) {\n return {audioTrack: null, videoTrack: null};\n }\n if (stream.getAudioTracks) {\n audioTracks = stream.getAudioTracks();\n }\n if (stream.getVideoTracks) {\n videoTracks = stream.getVideoTracks();\n }\n\n if (audioTracks && audioTracks.length > 0) {\n [audioTrack] = audioTracks;\n }\n\n if (videoTracks && videoTracks.length > 0) {\n [videoTrack] = videoTracks;\n }\n\n return {audioTrack, videoTrack};\n },\n\n getModeratorFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.moderator,\n\n getPolicyFromLocusInfo: (locusInfo) =>\n locusInfo &&\n locusInfo.parsedLocus &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info &&\n locusInfo.parsedLocus.info.policy,\n\n getUserDisplayHintsFromLocusInfo: (locusInfo) =>\n locusInfo?.parsedLocus?.info?.userDisplayHints || [],\n\n canInviteNewParticipants: (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST),\n\n canAdmitParticipant: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN),\n\n canUserLock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED),\n\n canUserUnlock: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&\n displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED),\n\n canUserRaiseHand: (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND),\n\n canUserLowerAllHands: (displayHints) => displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS),\n\n canUserLowerSomeoneElsesHand: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND),\n\n bothLeaveAndEndMeetingAvailable: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||\n displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),\n\n canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),\n canBroadcastMessageToBreakout: (displayHints, policies = {}) =>\n displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&\n !!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],\n\n isSuppressBreakoutSupport: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.UCF_SUPPRESS_BREAKOUTS_SUPPORT),\n\n canAdmitLobbyToBreakout: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_LOBBY_TO_BREAKOUT),\n\n isBreakoutPreassignmentsEnabled: (displayHints) =>\n !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_PREASSIGNMENTS),\n\n canUserAskForHelp: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_ASK_FOR_HELP),\n\n lockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canLock) {\n return request.lockMeeting({locusUrl, lock: true});\n }\n\n return Promise.reject(new PermissionError('Lock not allowed, due to joined property.'));\n },\n\n unlockMeeting: (actions, request, locusUrl) => {\n if (actions && actions.canUnlock) {\n return request.lockMeeting({locusUrl, lock: false});\n }\n\n return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));\n },\n\n handleAudioLogging: (audioStream?: LocalMicrophoneStream) => {\n const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';\n\n if (audioStream) {\n const settings = audioStream.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleVideoLogging: (videoStream?: LocalCameraStream) => {\n const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';\n\n if (videoStream) {\n const settings = videoStream.getSettings();\n const {deviceId} = settings;\n\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings =', JSON.stringify(settings));\n }\n },\n\n handleDeviceLogging: (devices = []) => {\n const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';\n\n devices.forEach((device) => {\n LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);\n LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));\n });\n },\n\n endMeetingForAll: (meeting) => {\n if (meeting.meetingState === FULL_STATE.INACTIVE) {\n return Promise.reject(new MeetingNotActiveError());\n }\n\n const endOptions = {\n locusUrl: meeting.locusUrl,\n };\n\n return meeting.meetingRequest\n .endMeetingForAll(endOptions)\n .then(() => MeetingUtil.cleanUp(meeting))\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`\n );\n\n return Promise.reject(err);\n });\n },\n\n canEnableClosedCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAPTION_START),\n\n isSaveTranscriptsEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.SAVE_TRANSCRIPTS_ENABLED),\n\n canStartTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START),\n\n canStopTranscribing: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP),\n\n isClosedCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE),\n\n canStartManualCaption: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_START),\n\n canStopManualCaption: (displayHints) => displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STOP),\n\n isManualCaptionActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.MANUAL_CAPTION_STATUS_ACTIVE),\n\n isWebexAssistantActive: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE),\n\n canViewCaptionPanel: (displayHints) => displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL),\n\n isRealTimeTranslationEnabled: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION),\n\n canSelectSpokenLanguages: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR),\n\n waitingForOthersToJoin: (displayHints) => displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS),\n\n canSendReactions: (originalValue, displayHints) => {\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {\n return true;\n }\n if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {\n return false;\n }\n\n return originalValue;\n },\n canUserRenameSelfAndObserved: (displayHints) =>\n displayHints.includes(DISPLAY_HINTS.CAN_RENAME_SELF_AND_OBSERVED),\n\n canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),\n\n canShareWhiteBoard: (displayHints) => displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD),\n\n /**\n * Adds the current locus sequence information to a request body\n * @param {Object} meeting The meeting object\n * @param {Object} requestBody The body of a request to locus\n * @returns {void}\n */\n addSequence: (meeting, requestBody) => {\n const sequence = meeting?.locusInfo?.sequence;\n\n if (!sequence) {\n return;\n }\n\n requestBody.sequence = sequence;\n },\n\n /**\n * Updates the locus info for the meeting with the delta locus\n * returned from requests that include the sequence information\n * Returns the original response object\n * @param {Object} meeting The meeting object\n * @param {Object} response The response of the http request\n * @returns {Object}\n */\n updateLocusWithDelta: (meeting, response) => {\n if (!meeting) {\n return response;\n }\n\n const locus = response?.body?.locus;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return response;\n },\n\n generateBuildLocusDeltaRequestOptions: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return originalOptions;\n }\n\n const options = cloneDeep(originalOptions);\n\n if (!options.body) {\n options.body = {};\n }\n\n MeetingUtil.addSequence(meeting, options.body);\n\n return options;\n };\n\n return buildLocusDeltaRequestOptions;\n },\n\n generateLocusDeltaRequest: (originalMeeting) => {\n const meetingRef = new WeakRef(originalMeeting);\n\n const buildLocusDeltaRequestOptions =\n MeetingUtil.generateBuildLocusDeltaRequestOptions(originalMeeting);\n\n const locusDeltaRequest = (originalOptions) => {\n const meeting = meetingRef.deref();\n\n if (!meeting) {\n return Promise.resolve();\n }\n\n const options = buildLocusDeltaRequestOptions(originalOptions);\n\n return meeting\n .request(options)\n .then((response) => MeetingUtil.updateLocusWithDelta(meeting, response));\n };\n\n return locusDeltaRequest;\n },\n\n selfSupportsFeature: (feature: SELF_POLICY, userPolicies: Record) => {\n if (!userPolicies) {\n return true;\n }\n\n return userPolicies[feature];\n },\n\n parseInterpretationInfo: (meeting, meetingInfo) => {\n if (!meeting || !meetingInfo) {\n return;\n }\n const siInfo = meetingInfo.simultaneousInterpretation;\n meeting.simultaneousInterpretation.updateMeetingSIEnabled(\n !!meetingInfo.turnOnSimultaneousInterpretation,\n !!siInfo?.currentSIInterpreter\n );\n const hostSIEnabled = !!(\n meetingInfo.turnOnSimultaneousInterpretation &&\n meetingInfo?.meetingSiteSetting?.enableHostInterpreterControlSI\n );\n meeting.simultaneousInterpretation.updateHostSIEnabled(hostSIEnabled);\n\n function renameKey(obj, oldKey, newKey) {\n if (oldKey in obj) {\n obj[newKey] = obj[oldKey];\n delete obj[oldKey];\n }\n }\n if (siInfo) {\n const lanuagesInfo = cloneDeep(siInfo.siLanguages);\n for (const language of lanuagesInfo) {\n renameKey(language, 'languageCode', 'languageName');\n renameKey(language, 'languageGroupId', 'languageCode');\n }\n if (!meeting.simultaneousInterpretation?.siLanguages?.length) {\n meeting.simultaneousInterpretation.updateInterpretation({siLanguages: lanuagesInfo});\n }\n }\n Trigger.trigger(\n meeting,\n {\n file: 'meeting/util',\n function: 'parseInterpretationInfo',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n },\n\n /**\n * Returns a CA-recognized error payload for the specified raw error message/reason.\n *\n * New errors can be added to this function for handling in the future\n *\n * @param {String} reason the raw error message\n * @returns {Array} an array of payload objects\n */\n getChangeMeetingFloorErrorPayload: (reason: string) => {\n const errorPayload = {\n errorDescription: reason,\n name: 'locus.response',\n shownToUser: false,\n };\n if (reason.includes(LOCAL_SHARE_ERRORS.UNDEFINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.DEVICE_NOT_JOINED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4050,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_MEDIA_FOR_DEVICE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'media',\n errorCode: 2048,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.NO_CONFLUENCE_ID)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4064,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_SHARING_DISABLED)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4065,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.LOCUS_PARTICIPANT_DNE)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 4066,\n },\n ];\n }\n if (reason.includes(LOCAL_SHARE_ERRORS.CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD)) {\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'expected',\n errorCode: 4067,\n },\n ];\n }\n\n // return unknown error\n return [\n {\n ...errorPayload,\n fatal: true,\n category: 'signaling',\n errorCode: 1100,\n },\n ];\n },\n};\n\nexport default MeetingUtil;\n","// Metrics constants ----------------------------------------------------------\n\nconst BEHAVIORAL_METRICS = {\n MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',\n MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',\n MEETINGS_REGISTRATION_STEP: 'meetings_registration_step',\n MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',\n MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',\n JOIN_SUCCESS: 'js_sdk_join_success',\n JOIN_FAILURE: 'js_sdk_join_failures',\n ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',\n ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',\n ADD_MEDIA_RETRY: 'js_sdk_add_media_retry',\n ROAP_MERCURY_EVENT_RECEIVED: 'js_sdk_roap_mercury_received',\n CONNECTION_SUCCESS: 'js_sdk_connection_success',\n CONNECTION_FAILURE: 'js_sdk_connection_failures',\n MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',\n MEETING_END_ALL_FAILURE: 'js_sdk_meeting_end_for_all_failure',\n MEETING_END_ALL_INITIATED: 'js_sdk_meeting_end_for_all_initiated',\n GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',\n GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',\n JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',\n LLM_CONNECTION_AFTER_JOIN_FAILURE: 'js_sdk_llm_connection_after_join_failure',\n RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE: 'js_sdk_receive_transcription_after_join_failure',\n\n DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',\n MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',\n MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',\n MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',\n MEETING_SHARE_SUCCESS: 'js_sdk_meeting_share_success',\n MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',\n MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',\n MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',\n MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE: 'js_sdk_meeting_share_video_mute_state_change',\n MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',\n MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',\n SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',\n STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',\n ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',\n ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',\n UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',\n UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',\n UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',\n ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',\n ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',\n PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',\n INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',\n UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',\n UPLOAD_LOGS_SUCCESS: 'js_sdk_upload_logs_success',\n RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n FETCH_MEETING_INFO_V1_SUCCESS: 'js_sdk_fetch_meeting_info_v1_success',\n FETCH_MEETING_INFO_V1_FAILURE: 'js_sdk_fetch_meeting_info_v1_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',\n VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',\n VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',\n MOVE_TO_SUCCESS: 'js_sdk_move_to_success',\n MOVE_TO_FAILURE: 'js_sdk_move_to_failure',\n MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',\n MOVE_FROM_FAILURE: 'js_sdk_move_from_failure',\n TURN_DISCOVERY_FAILURE: 'js_sdk_turn_discovery_failure',\n MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',\n LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',\n LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',\n PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',\n PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',\n TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',\n ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',\n ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',\n TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',\n REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n","import {isString} from 'lodash';\n\nimport ParameterError from './errors/parameter';\n\n/**\n * @class Collection\n */\nexport default class Collection {\n namespace = 'Meetings';\n propertyName: string;\n\n /**\n * @param {String} property\n * @memberof Collection\n */\n constructor(property: string) {\n if (!property || !isString(property)) {\n throw new ParameterError('Collection expects a string to use as a property name.');\n }\n /**\n * The property name for what collection will be stored, i.e., this.meetingInfos, this.meetings, etc.\n * @instance\n * @type {String}\n * @public\n * @memberof Meetings\n */\n this.propertyName = property;\n /**\n * The actual object for the collection\n * @instance\n * @type {Object}\n * @public\n * @memberof Meetings\n */\n this[this.propertyName] = {};\n }\n\n /**\n * @param {String} id ID of the thing stuffed into the collection at id location\n * @returns {Any} returns whatever is being stuffed into the collection\n * @public\n * @memberof Collection\n */\n public get(id: string) {\n return this[this.propertyName] && this[this.propertyName][id]\n ? this[this.propertyName][id]\n : null;\n }\n\n /**\n * @param {String} id the id of the meeting info instance to add to the collection\n * @param {Any} value the thing to set in the collection\n * @returns {Any} returns the thing just put in the collection\n * @public\n * @memberof Collection\n */\n public set(id: string, value: any) {\n this[this.propertyName][id] = value;\n\n return this.get(id);\n }\n\n /**\n * remove the thing at the id\n * @param {String} id ID of the thing you wish to delete from the collection\n * @returns {undefined}\n * @public\n * @memberof Collection\n */\n public delete(id: string) {\n delete this[this.propertyName][id];\n }\n\n /**\n * @returns {Object} returns an object map of things stuffed into the collection\n * @public\n * @memberof Collection\n */\n public getAll() {\n return this[this.propertyName];\n }\n\n /**\n * @param {Object} set the replacement object\n * @returns {Object} returns an object map of things stuffed into the collection\n * @public\n * @memberof Collection\n */\n public setAll(set: object) {\n this[this.propertyName] = set;\n\n return this.getAll();\n }\n}\n","import {find} from 'lodash';\n\nimport Collection from '../common/collection';\nimport {MEETINGS} from '../constants';\n\n/**\n * @class MeetingInfoCollection\n */\nexport default class MeetingInfoCollection extends Collection {\n namespace = MEETINGS;\n\n /**\n * @memberof MeetingInfoCollection\n * @constructor\n * @public\n */\n constructor() {\n super('meetingInfos');\n }\n\n /**\n * @param {String} id ID of the meeting info you wish to retreive\n * @returns {MeetingInfo} returns a meeting info instance\n * @public\n * @memberof MeetingInfoCollection\n */\n public get(id: string) {\n // @ts-ignore\n if (this.meetingInfos[id]) {\n // @ts-ignore\n return this.meetingInfos[id];\n }\n\n return find(\n // @ts-ignore\n this.meetingInfos,\n (info) =>\n info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id\n );\n }\n}\n","import url from 'url';\n\nimport btoa from 'btoa';\n// @ts-ignore\nimport {deconstructHydraId} from '@webex/common';\n\nimport ParameterError from '../common/errors/parameter';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {\n DESTINATION_TYPE,\n _PEOPLE_,\n _ROOM_,\n HTTP_VERBS,\n USE_URI_LOOKUP_FALSE,\n TYPE,\n LOCI,\n MEETINGINFO,\n ALTERNATE_REDIRECT_TRUE,\n DIALER_REGEX,\n WEBEX_DOT_COM,\n CONVERSATION_SERVICE,\n WWW_DOT,\n JOIN,\n MEET,\n MEET_M,\n HTTPS_PROTOCOL,\n UUID_REG,\n} from '../constants';\n\n/**\n * @class MeetingInfoUtil\n */\nexport default class MeetingInfoUtil {\n static extractDestination(destination, type: DESTINATION_TYPE) {\n let dest = destination;\n\n if (type === DESTINATION_TYPE.LOCUS_ID) {\n if (!(destination && destination.url)) {\n throw new ParameterError(\n 'You cannot create a meeting by locus without a locus.url defined'\n );\n }\n dest = destination.url;\n }\n\n return dest;\n }\n\n static getParsedUrl(link) {\n try {\n let parsedUrl = url.parse(link);\n\n if (!parsedUrl) {\n return false;\n }\n // hack for links such as .webex.com/meet/ without a protocol\n if (!parsedUrl.protocol) {\n parsedUrl = url.parse(`${HTTPS_PROTOCOL}${link}`);\n }\n\n return parsedUrl;\n } catch (error) {\n LoggerProxy.logger.warn(\n `Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`\n );\n\n return null;\n }\n }\n\n /**\n * Helper function to check if a string matches a known meeting link pattern\n * @param {String} value string to parse and see if it matches a meeting link\n * @returns {Boolean}\n */\n static isMeetingLink(value: string) {\n const parsedUrl = this.getParsedUrl(value);\n let hostNameBool;\n let pathNameBool;\n if (parsedUrl) {\n hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);\n pathNameBool =\n parsedUrl.pathname &&\n (parsedUrl.pathname.includes(`/${MEET}`) ||\n parsedUrl.pathname.includes(`/${MEET_M}`) ||\n parsedUrl.pathname.includes(`/${JOIN}`));\n }\n\n return hostNameBool && pathNameBool;\n }\n\n static isConversationUrl(value, webex) {\n const clusterId = webex.internal.services.getClusterId(value);\n\n if (clusterId) {\n return clusterId.endsWith(CONVERSATION_SERVICE);\n }\n\n return false;\n }\n\n static convertLinkToSip(value) {\n const parsedUrl = this.getParsedUrl(value);\n\n if (!parsedUrl) {\n return null;\n }\n let user;\n\n if (parsedUrl.pathname) {\n const userIndex = parsedUrl.pathname.lastIndexOf('/');\n\n user = parsedUrl.pathname.substring(userIndex + 1);\n }\n if (!user) {\n return null;\n }\n let company;\n\n if (parsedUrl.hostname) {\n const companyIndex = parsedUrl.hostname.lastIndexOf(`.${WEBEX_DOT_COM}`);\n\n company = parsedUrl.hostname.substring(0, companyIndex).replace(WWW_DOT, '');\n }\n if (!company) {\n return null;\n }\n\n return `${user}@${company}.${WEBEX_DOT_COM}`;\n }\n\n static isSipUri(sipString) {\n // TODO: lets remove regex from this equation and user URI matchers and such\n // have not found a great sip uri parser library as of now\n const sipUri = DIALER_REGEX.SIP_ADDRESS.exec(sipString);\n\n return sipUri;\n }\n\n static isPhoneNumber(phoneNumber) {\n const isValidNumber = DIALER_REGEX.PHONE_NUMBER.test(phoneNumber);\n\n return isValidNumber;\n }\n\n static getHydraId(destination) {\n const {type, id, cluster} = deconstructHydraId(destination);\n\n if (id && UUID_REG.test(id)) {\n if (type === _ROOM_) {\n return {room: true, destination: id, cluster};\n }\n if (type === _PEOPLE_) {\n return {people: true, destination: id, cluster};\n }\n\n return {};\n }\n\n return {};\n }\n\n static getSipUriFromHydraPersonId(destination, webex) {\n return webex.people\n .get(destination)\n .then((res) => {\n if (res.emails && res.emails.length) {\n return res.emails[0];\n }\n throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `\n );\n throw err;\n });\n }\n\n static async generateOptions(from) {\n const {destination, type, webex} = from;\n\n if (type) {\n return {\n destination,\n type,\n };\n }\n const options: any = {};\n const hydraId = this.getHydraId(destination);\n\n if (this.isMeetingLink(destination)) {\n LoggerProxy.logger.warn(\n 'Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead'\n );\n\n options.type = DESTINATION_TYPE.MEETING_LINK;\n options.destination = destination;\n } else if (this.isSipUri(destination)) {\n options.type = DESTINATION_TYPE.SIP_URI;\n options.destination = destination;\n } else if (this.isPhoneNumber(destination)) {\n options.type = DESTINATION_TYPE.SIP_URI;\n options.destination = destination;\n } else if (this.isConversationUrl(destination, webex)) {\n options.type = DESTINATION_TYPE.CONVERSATION_URL;\n options.destination = destination;\n } else if (hydraId.people) {\n options.type = DESTINATION_TYPE.SIP_URI;\n\n return this.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {\n options.destination = res;\n\n // Since hydra person ids require a unique case in which they are\n // entirely converted to a SIP URI, we need to set a flag for detecting\n // this type of destination.\n options.wasHydraPerson = true;\n\n return Promise.resolve(options);\n });\n } else if (hydraId.room) {\n options.type = DESTINATION_TYPE.CONVERSATION_URL;\n try {\n await webex.internal.services.waitForCatalog('postauth');\n\n const serviceUrl = webex.internal.services.getServiceUrlFromClusterId(\n {\n cluster: hydraId.cluster,\n },\n webex\n );\n\n options.destination = hydraId.destination\n ? `${serviceUrl}/conversations/${hydraId.destination}`\n : serviceUrl;\n } catch (e) {\n LoggerProxy.logger.error(`Meeting-info:util#generateOptions --> ${e}`);\n throw e;\n }\n } else {\n throw new ParameterError(\n 'MeetingInfo is fetched with the meeting link, SIP URI, phone number, Hydra people ID, or a conversation URL.'\n );\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * Helper function to build up a correct locus url depending on the value passed\n * @param {DESTINATION_TYPE} type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {Object} value ?? value.value\n * @returns {Object} returns an object with {resource, method}\n */\n static getResourceUrl(type: DESTINATION_TYPE, value: any) {\n let resource = `/${LOCI}/${MEETINGINFO}`;\n let method = HTTP_VERBS.GET;\n let uri = null;\n\n switch (type) {\n case DESTINATION_TYPE.SIP_URI:\n case DESTINATION_TYPE.PERSONAL_ROOM:\n case DESTINATION_TYPE.MEETING_ID:\n resource = `/${LOCI}/${MEETINGINFO}/${encodeURIComponent(\n value\n )}?${TYPE}=${type}&${USE_URI_LOOKUP_FALSE}`;\n break;\n case DESTINATION_TYPE.CONVERSATION_URL:\n method = HTTP_VERBS.PUT;\n break;\n case DESTINATION_TYPE.LOCUS_ID:\n uri = `${value}/${MEETINGINFO}`;\n method = HTTP_VERBS.PUT;\n break;\n case DESTINATION_TYPE.MEETING_LINK:\n resource = `$/${LOCI}/${MEETINGINFO}/${btoa(value)}?${TYPE}=${\n DESTINATION_TYPE.MEETING_LINK\n }&${USE_URI_LOOKUP_FALSE}`;\n break;\n default:\n }\n\n return {\n uri,\n resource,\n method,\n };\n }\n\n static getRequestParams(resourceOptions, type: DESTINATION_TYPE, value, api) {\n let requestParams: any = {\n method: resourceOptions.method,\n api,\n resource: resourceOptions.resource,\n };\n\n if (resourceOptions.method === HTTP_VERBS.GET) {\n // for handling URL redirections\n requestParams.resource = requestParams.resource.concat(`&${ALTERNATE_REDIRECT_TRUE}`);\n } else if (type !== DESTINATION_TYPE.LOCUS_ID) {\n // locus id check is a PUT not sure why\n requestParams.resource = requestParams.resource.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n requestParams.body = {\n value,\n lookupType: type,\n };\n } else if (type === DESTINATION_TYPE.LOCUS_ID) {\n requestParams = {\n method: resourceOptions.method,\n uri: resourceOptions.uri,\n };\n }\n\n return requestParams;\n }\n}\n","import {API} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport MeetingInfoUtil from './util';\n\n/**\n * @class MeetingInfoRequest\n */\nexport default class MeetingInfoRequest {\n webex: any;\n\n /**\n * Meeting Info Request Constructor\n * @param {WebexSDK} webex\n */\n constructor(webex: any) {\n this.webex = webex;\n }\n\n /**\n *\n * @param {Object} options with format of {type: String, desintation: String}\n * where type is PERSONAL_ROOM, SIP_URI, CONVERSATION_URL, and destination is userId, sipUri, conversationUrl respectively\n * type can also be specified as an option and be of the list SIP_URI,MEETING_ID,LOCUS_ID,PERSONAL_ROOM,MEETING_LINK,ONE_ON_ONE,MEDIA_SIP_URI,CONVERSATION_URL,TEMP_SIP_URI\n * with the desination matching\n * @returns {Promise} returns a promise that resolves/rejects the result of the request\n * @throws {Error} if the options are not valid and complete\n * @memberof MeetingInfoRequest\n */\n fetchMeetingInfo(options: any) {\n if (!options || !options.type || !options.destination) {\n throw new ParameterError(\n 'MeetingInfo should be fetched with a type and destination specified, see list of valid types and their corresponding values in constants'\n );\n }\n const resourceUrl = MeetingInfoUtil.getResourceUrl(options.type, options.destination);\n const requestParams = MeetingInfoUtil.getRequestParams(\n resourceUrl,\n options.type,\n options.destination,\n API.LOCUS\n );\n\n return this.webex.request(requestParams);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {DESTINATION_TYPE} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MeetingInfoCollection from './collection';\nimport MeetingInfoRequest from './request';\nimport MeetingInfoUtil from './util';\n\n/**\n * @class MeetingInfo\n */\nexport default class MeetingInfo {\n meetingInfoCollection: any;\n meetingInfoRequest: any;\n webex: any;\n\n /**\n *\n * @param {WebexSDK} webex\n */\n constructor(webex: any) {\n this.webex = webex;\n\n /**\n * The meeting info request server interface\n * @instance\n * @type {Object}\n * @private\n * @memberof MeetingInfo\n */\n this.meetingInfoRequest = new MeetingInfoRequest(this.webex);\n /**\n * The meeting information collection interface\n * @instance\n * @type {Object}\n * @private\n * @memberof MeetingInfo\n */\n this.meetingInfoCollection = new MeetingInfoCollection();\n }\n\n /**\n * @param {string} id\n * @returns {object}\n * @public\n * @memberof MeetingInfo\n */\n public getMeetingInfo(id: string) {\n return this.meetingInfoCollection.get(id);\n }\n\n /**\n * @param {string} id\n * @param {object} info\n * @returns {null}\n * @public\n * @memberof MeetingInfo\n */\n public setMeetingInfo(id: string, info: object) {\n this.meetingInfoCollection.set(id, info);\n }\n\n /**\n * Helper to make the actual MeetingInfo request and set the meetingInfo if successful, else reject\n * @param {Object} options\n * @returns {Promise}\n * @private\n * @memberof MeetingInfo\n */\n private requestFetchInfo(options: any) {\n const {meetingId, sendCAevents} = options;\n if (meetingId && sendCAevents) {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.meetinginfo.request',\n });\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.request',\n options: {\n meetingId,\n },\n });\n }\n\n return this.meetingInfoRequest\n .fetchMeetingInfo(options)\n .then((info) => {\n if (meetingId && sendCAevents) {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.meetinginfo.response',\n });\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n payload: {\n identifiers: {\n meetingLookupUrl: info?.url,\n },\n },\n options: {\n meetingId,\n webexConferenceIdStr: info?.body?.confIdStr || info?.body?.confID,\n globalMeetingId: info?.body?.meetingId,\n },\n });\n }\n if (info && info.body) {\n this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);\n }\n\n return info;\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`\n );\n if (meetingId && sendCAevents) {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.meetinginfo.response',\n });\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n payload: {\n identifiers: {\n meetingLookupUrl: error?.url,\n },\n },\n options: {\n meetingId,\n rawError: error,\n },\n });\n }\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Helper to generate the options for the MeetingInfo request\n * @param {String} destination\n * @param {String} type\n * @returns {Promise}\n * @private\n * @memberof MeetingInfo\n */\n private fetchInfoOptions(destination: string, type: string) {\n return MeetingInfoUtil.generateOptions({\n destination,\n type,\n webex: this.webex,\n });\n }\n\n // eslint-disable-next-line valid-jsdoc\n /**\n * Fetches meeting info from the server\n * @param {String} destination one of many different types of destinations to look up info for\n * @param {DESTINATION_TYPE} [type] to match up with the destination value\n * @param {String} [password] meeting password\n * @param {Object} [captchaInfo] captcha code and id\n * @param {String} [installedOrgID]\n * @param {String} [locusId]\n * @param {Object} [extraParams]\n * @param {Boolean} [options] meeting Id and whether Call Analyzer events should be sent\n * @returns {Promise} returns a meeting info object\n * @public\n * @memberof MeetingInfo\n */\n public fetchMeetingInfo(\n destination: string,\n type: DESTINATION_TYPE = null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n password: string = null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n captchaInfo: {\n code: string;\n id: string;\n } = null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n installedOrgID = null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n locusId = null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n extraParams: object = {},\n options: {meetingId?: string; sendCAevents?: boolean} = {}\n ) {\n if (type === DESTINATION_TYPE.PERSONAL_ROOM && !destination) {\n destination = this.webex.internal.device.userId;\n }\n\n return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(\n (infoOptions) =>\n // fetch meeting info\n this.requestFetchInfo({...infoOptions, ...options}).catch((error) => {\n // if it failed the first time as meeting link\n if (infoOptions.type === DESTINATION_TYPE.MEETING_LINK) {\n // convert the meeting link to sip URI and retry\n return this.requestFetchInfo({\n ...this.fetchInfoOptions(\n MeetingInfoUtil.convertLinkToSip(destination),\n DESTINATION_TYPE.SIP_URI\n ),\n ...options,\n });\n }\n\n return Promise.reject(error);\n })\n );\n }\n}\n","import url from 'url';\n\n// @ts-ignore\nimport {deconstructHydraId} from '@webex/common';\n\nimport {\n DESTINATION_TYPE,\n _PEOPLE_,\n _ROOM_,\n DIALER_REGEX,\n WEBEX_DOT_COM,\n CONVERSATION_SERVICE,\n JOIN,\n MEET,\n MEET_M,\n MEET_CISCO,\n MEET_CO,\n HTTPS_PROTOCOL,\n UUID_REG,\n VALID_EMAIL_ADDRESS,\n DEFAULT_MEETING_INFO_REQUEST_BODY,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {SpaceIDDeprecatedError} from '../common/errors/webex-errors';\n\n/**\n * @class MeetingInfoUtil\n */\nexport default class MeetingInfoUtil {\n static meetingInfoError =\n 'MeetingInfo is fetched with the meeting link, SIP URI, phone number, Hydra people ID, or a conversation URL.';\n\n static getParsedUrl(link) {\n try {\n let parsedUrl = url.parse(link);\n\n if (!parsedUrl) {\n return false;\n }\n // hack for links such as .webex.com/meet/ without a protocol\n if (!parsedUrl.protocol) {\n parsedUrl = url.parse(`${HTTPS_PROTOCOL}${link}`);\n }\n\n return parsedUrl;\n } catch (error) {\n LoggerProxy.logger.warn(\n `Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`\n );\n\n return null;\n }\n }\n\n /**\n * Helper function to check if a string matches a known meeting link pattern\n * @param {String} value string to parse and see if it matches a meeting link\n * @returns {Boolean}\n */\n static isMeetingLink(value: string) {\n let hostNameBool;\n let pathNameBool;\n const parsedUrl = this.getParsedUrl(value);\n if (parsedUrl) {\n hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);\n pathNameBool =\n parsedUrl.pathname &&\n (parsedUrl.pathname.includes(`/${MEET}`) ||\n parsedUrl.pathname.includes(`/${MEET_M}`) ||\n parsedUrl.pathname.includes(`/${MEET_CISCO}`) ||\n parsedUrl.pathname.includes(`/${MEET_CO}`) ||\n parsedUrl.pathname.includes(`/${JOIN}`));\n }\n\n return hostNameBool && pathNameBool;\n }\n\n static isConversationUrl(value, webex) {\n const clusterId = webex.internal.services.getClusterId(value);\n\n if (clusterId) {\n return clusterId.endsWith(CONVERSATION_SERVICE);\n }\n\n return false;\n }\n\n static isSipUri(sipString) {\n // TODO: lets remove regex from this equation and user URI matchers and such\n // have not found a great sip uri parser library as of now\n const sipUri = DIALER_REGEX.SIP_ADDRESS.exec(sipString);\n\n return sipUri;\n }\n\n static isPhoneNumber(phoneNumber) {\n const isValidNumber = DIALER_REGEX.PHONE_NUMBER.test(phoneNumber);\n\n return isValidNumber;\n }\n\n static getHydraId(destination) {\n const {type, id, cluster} = deconstructHydraId(destination);\n\n if (id && UUID_REG.test(id)) {\n if (type === _ROOM_) {\n return {room: true, destination: id, cluster};\n }\n if (type === _PEOPLE_) {\n return {people: true, destination: id, cluster};\n }\n\n return {};\n }\n\n return {};\n }\n\n static getSipUriFromHydraPersonId(destination, webex) {\n return webex.people\n .get(destination)\n .then((res) => {\n if (res.emails && res.emails.length) {\n return res.emails[0];\n }\n throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `\n );\n throw err;\n });\n }\n\n static async getDestinationType(from) {\n const {type, webex} = from;\n let {destination} = from;\n\n if (type === DESTINATION_TYPE.PERSONAL_ROOM) {\n // this case checks if your type is personal room\n if (!destination) {\n // if we are not getting anything in desination we fetch org and user ids from webex instance\n destination = {\n userId: webex.internal.device.userId,\n orgId: webex.internal.device.orgId,\n };\n } else {\n const options = VALID_EMAIL_ADDRESS.test(destination)\n ? {email: destination}\n : {id: destination}; // we are assuming userId as default\n const res = await webex.people.list(options);\n\n let {orgId, id: userId} = res.items[0];\n\n userId = deconstructHydraId(userId).id;\n orgId = deconstructHydraId(orgId).id;\n destination = {userId, orgId};\n }\n }\n if (type) {\n return {\n destination,\n type,\n };\n }\n const options: any = {};\n let hydraId;\n\n if (webex && webex.config && webex.config.meetings && webex.config.meetings.disableHydraId) {\n hydraId = null;\n } else {\n hydraId = this.getHydraId(destination);\n }\n\n if (this.isMeetingLink(destination)) {\n LoggerProxy.logger.warn(\n 'Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead'\n );\n\n options.type = DESTINATION_TYPE.MEETING_LINK;\n options.destination = destination;\n } else if (this.isSipUri(destination)) {\n options.type = DESTINATION_TYPE.SIP_URI;\n options.destination = destination;\n } else if (this.isPhoneNumber(destination)) {\n options.type = DESTINATION_TYPE.SIP_URI;\n options.destination = destination;\n } else if (this.isConversationUrl(destination, webex)) {\n options.type = DESTINATION_TYPE.CONVERSATION_URL;\n options.destination = destination;\n } else if (hydraId && hydraId.people) {\n options.type = DESTINATION_TYPE.SIP_URI;\n\n return this.getSipUriFromHydraPersonId(hydraId && hydraId.destination, webex).then((res) => {\n options.destination = res;\n\n // Since hydra person ids require a unique case in which they are\n // entirely converted to a SIP URI, we need to set a flag for detecting\n // this type of destination.\n options.wasHydraPerson = true;\n\n return Promise.resolve(options);\n });\n } else if (hydraId.room) {\n LoggerProxy.logger.error(\n `Meeting-info:util#getDestinationType --> Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.`\n );\n // Error code 30105 added as Space ID deprecated as of beta, Please refer migration guide.\n throw new SpaceIDDeprecatedError();\n } else {\n LoggerProxy.logger.warn(`Meeting-info:util#getDestinationType --> ${this.meetingInfoError}`);\n throw new ParameterError(`${this.meetingInfoError}`);\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * Helper function to build up a correct locus url depending on the value passed\n * @param {Object} options type and value to fetch meeting info\n * @param {DESTINATION_TYPE} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {String} options.installedOrgID org ID of user's machine\n * @param {Object} options.destination ?? value.value\n * @returns {Object} returns an object with {resource, method}\n */\n static getRequestBody(options: {type: DESTINATION_TYPE; destination: object} | any) {\n const {type, destination, password, captchaInfo, installedOrgID, locusId, extraParams} =\n options;\n const body: any = {\n ...DEFAULT_MEETING_INFO_REQUEST_BODY,\n ...extraParams,\n };\n\n switch (type) {\n case DESTINATION_TYPE.SIP_URI:\n body.sipUrl = destination;\n break;\n case DESTINATION_TYPE.PERSONAL_ROOM:\n body.userId = destination.userId;\n body.orgId = destination.orgId;\n break;\n case DESTINATION_TYPE.MEETING_ID:\n body.meetingKey = destination;\n break;\n case DESTINATION_TYPE.CONVERSATION_URL:\n body.conversationUrl = destination;\n break;\n case DESTINATION_TYPE.LOCUS_ID:\n // use meetingID for the completer meeting info for the already started meeting\n if (destination.info?.webExMeetingId) {\n body.meetingKey = destination.info.webExMeetingId;\n } else if (destination.info?.sipUri) {\n body.sipUrl = destination.info.sipUri;\n }\n break;\n case DESTINATION_TYPE.MEETING_LINK:\n body.meetingUrl = destination;\n break;\n case DESTINATION_TYPE.MEETING_UUID: {\n body.meetingUUID = destination;\n break;\n }\n default:\n }\n\n if (password) {\n body.password = password;\n }\n\n if (captchaInfo) {\n body.captchaID = captchaInfo.id;\n body.captchaVerifyCode = captchaInfo.code;\n }\n\n if (installedOrgID) {\n body.installedOrgID = installedOrgID;\n }\n\n if (locusId) {\n body.locusId = locusId;\n }\n\n return body;\n }\n\n /**\n * Helper function to parse the webex site/host from a URI string.\n * @param {String} uri string (e.g. '10019857020@convergedats.webex.com')\n * @returns {String} the site/host part of the URI string (e.g. 'convergedats.webex.com')\n */\n static getWebexSite(uri: string) {\n const exceptedDomains = ['meet.webex.com', 'meetup.webex.com', 'ciscospark.com'];\n const site = uri?.match(/.+@([^.]+\\.[^.]+\\.[^.]+)$/)?.[1];\n const isExceptedDomain = !!site && exceptedDomains.some((domain) => site.includes(domain));\n\n return isExceptedDomain ? null : site;\n }\n\n /**\n * Helper function to return the direct URI for fetching meeting info (to avoid a redirect).\n * @param {Object} options type and value to fetch meeting info\n * @param {String} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {Object} options.destination ?? value.value\n * @returns {String} returns a URI string or null of there is no direct URI\n */\n static getDirectMeetingInfoURI(options: {type: string; destination: any}) {\n const {type, destination} = options;\n\n let preferredWebexSite = null;\n\n switch (type) {\n case DESTINATION_TYPE.SIP_URI:\n preferredWebexSite = this.getWebexSite(destination);\n break;\n case DESTINATION_TYPE.LOCUS_ID:\n preferredWebexSite = destination.info?.webExSite;\n break;\n default:\n }\n\n return preferredWebexSite ? `https://${preferredWebexSite}/wbxappapi/v1/meetingInfo` : null;\n }\n}\n","import lodash from 'lodash';\nimport {\n HTTP_VERBS,\n DESTINATION_TYPE,\n WBXAPPAPI_SERVICE,\n DEFAULT_MEETING_INFO_REQUEST_BODY,\n} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport MeetingInfoUtil from './utilv2';\n\nconst PASSWORD_ERROR_DEFAULT_MESSAGE =\n 'Password required. Call fetchMeetingInfo() with password argument';\nconst CAPTCHA_ERROR_DEFAULT_MESSAGE =\n 'Captcha required. Call fetchMeetingInfo() with captchaInfo argument';\nconst ADHOC_MEETING_DEFAULT_ERROR =\n 'Failed starting the adhoc meeting, Please contact support team ';\nconst CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];\nconst POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];\n/**\n * Error to indicate that wbxappapi requires a password\n */\nexport class MeetingInfoV2PasswordError extends Error {\n meetingInfo: any;\n sdkMessage: any;\n wbxAppApiCode: any;\n body: any;\n\n /**\n *\n * @constructor\n * @param {Number} [wbxAppApiErrorCode]\n * @param {Object} [meetingInfo]\n * @param {String} [message]\n */\n constructor(\n wbxAppApiErrorCode?: number,\n meetingInfo?: object,\n message: string = PASSWORD_ERROR_DEFAULT_MESSAGE\n ) {\n super(`${message}, code=${wbxAppApiErrorCode}`);\n this.name = 'MeetingInfoV2PasswordError';\n this.sdkMessage = message;\n this.stack = new Error().stack;\n this.wbxAppApiCode = wbxAppApiErrorCode;\n this.meetingInfo = meetingInfo;\n }\n}\n\n/**\n * Error generating a adhoc space meeting\n */\nexport class MeetingInfoV2AdhocMeetingError extends Error {\n sdkMessage: any;\n wbxAppApiCode: any;\n /**\n *\n * @constructor\n * @param {Number} [wbxAppApiErrorCode]\n * @param {String} [message]\n */\n constructor(wbxAppApiErrorCode?: number, message: string = ADHOC_MEETING_DEFAULT_ERROR) {\n super(`${message}, code=${wbxAppApiErrorCode}`);\n this.name = 'MeetingInfoV2AdhocMeetingError';\n this.sdkMessage = message;\n this.stack = new Error().stack;\n this.wbxAppApiCode = wbxAppApiErrorCode;\n }\n}\n\n/**\n * Error preventing join because of a meeting policy\n */\nexport class MeetingInfoV2PolicyError extends Error {\n meetingInfo: object;\n sdkMessage: string;\n wbxAppApiCode: number;\n /**\n *\n * @constructor\n * @param {Number} [wbxAppApiErrorCode]\n * @param {Object} [meetingInfo]\n * @param {String} [message]\n */\n constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {\n super(`${message}, code=${wbxAppApiErrorCode}`);\n this.name = 'MeetingInfoV2AdhocMeetingError';\n this.sdkMessage = message;\n this.stack = new Error().stack;\n this.wbxAppApiCode = wbxAppApiErrorCode;\n this.meetingInfo = meetingInfo;\n }\n}\n\n/**\n * Error to indicate that preferred webex site not present to start adhoc meeting\n */\nexport class MeetingInfoV2CaptchaError extends Error {\n captchaInfo: any;\n isPasswordRequired: any;\n sdkMessage: any;\n wbxAppApiCode: any;\n body: any;\n /**\n *\n * @constructor\n * @param {Number} [wbxAppApiErrorCode]\n * @param {Object} [captchaInfo]\n * @param {String} [message]\n */\n constructor(\n wbxAppApiErrorCode?: number,\n captchaInfo?: object,\n message: string = CAPTCHA_ERROR_DEFAULT_MESSAGE\n ) {\n super(`${message}, code=${wbxAppApiErrorCode}`);\n this.name = 'MeetingInfoV2PasswordError';\n this.sdkMessage = message;\n this.stack = new Error().stack;\n this.wbxAppApiCode = wbxAppApiErrorCode;\n this.isPasswordRequired = CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES.includes(wbxAppApiErrorCode);\n this.captchaInfo = captchaInfo;\n }\n}\n\n/**\n * @class MeetingInfo\n */\nexport default class MeetingInfoV2 {\n webex: any;\n\n /**\n *\n * @param {WebexSDK} webex\n */\n constructor(webex) {\n this.webex = webex;\n }\n\n /**\n * converts hydra id into conversation url and persons Id\n * @param {String} destination one of many different types of destinations to look up info for\n * @param {String} [type] to match up with the destination value\n * @returns {Promise} destination and type\n * @public\n * @memberof MeetingInfo\n */\n fetchInfoOptions(destination: string, type: string = null) {\n return MeetingInfoUtil.getDestinationType({\n destination,\n type,\n webex: this.webex,\n });\n }\n\n /**\n * Raises a MeetingInfoV2PolicyError for policy error codes\n * @param {any} err the error from the request\n * @returns {void}\n */\n handlePolicyError = (err) => {\n if (!err.body) {\n return;\n }\n\n if (POLICY_ERROR_CODES.includes(err.body?.code)) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR, {\n code: err.body?.code,\n });\n\n throw new MeetingInfoV2PolicyError(\n err.body?.code,\n err.body?.data?.meetingInfo,\n err.body?.message\n );\n }\n };\n\n /**\n * Creates adhoc space meetings for a space by fetching the conversation infomation\n * @param {String} conversationUrl conversationUrl to start adhoc meeting on\n * @param {String} installedOrgID org ID of user's machine\n * @returns {Promise} returns a meeting info object\n * @public\n * @memberof MeetingInfo\n */\n async createAdhocSpaceMeeting(conversationUrl: string, installedOrgID?: string) {\n if (!this.webex.meetings.preferredWebexSite) {\n throw Error('No preferred webex site found');\n }\n const getInvitees = (particpants = []) => {\n const invitees = [];\n\n if (particpants) {\n particpants.forEach((participant) => {\n invitees.push({\n email: participant.emailAddress,\n ciUserUuid: participant.entryUUID,\n });\n });\n }\n\n return invitees;\n };\n\n return this.webex\n .request({uri: conversationUrl, qs: {includeParticipants: true}, disableTransform: true})\n .then(({body: conversation}) => {\n const body = {\n title: conversation.displayName,\n spaceUrl: conversation.url,\n keyUrl: conversation.encryptionKeyUrl,\n kroUrl: conversation.kmsResourceObjectUrl,\n invitees: getInvitees(conversation.participants?.items),\n installedOrgID,\n };\n\n if (installedOrgID) {\n body.installedOrgID = installedOrgID;\n }\n\n const uri = this.webex.meetings.preferredWebexSite\n ? `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant`\n : '';\n\n return this.webex.request({\n method: HTTP_VERBS.POST,\n uri,\n body,\n });\n })\n .then((requestResult) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);\n\n return requestResult;\n })\n .catch((err) => {\n this.handlePolicyError(err);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {\n reason: err.message,\n stack: err.stack,\n });\n throw new MeetingInfoV2AdhocMeetingError(err.body?.code, err.body?.message);\n });\n }\n\n /**\n * Fetches meeting info from the server\n * @param {String} destination one of many different types of destinations to look up info for\n * @param {DESTINATION_TYPE} [type] to match up with the destination value\n * @param {String} password\n * @param {Object} captchaInfo\n * @param {String} captchaInfo.code\n * @param {String} captchaInfo.id\n * @param {String} installedOrgID org ID of user's machine\n * @param {String} locusId\n * @param {Object} extraParams\n * @param {Object} options\n * @returns {Promise} returns a meeting info object\n * @public\n * @memberof MeetingInfo\n */\n async fetchMeetingInfo(\n destination: string,\n type: DESTINATION_TYPE = null,\n password: string = null,\n captchaInfo: {\n code: string;\n id: string;\n } = null,\n installedOrgID = null,\n locusId = null,\n extraParams: object = {},\n options: {meetingId?: string; sendCAevents?: boolean} = {}\n ) {\n const {meetingId, sendCAevents} = options;\n\n const destinationType = await MeetingInfoUtil.getDestinationType({\n destination,\n type,\n webex: this.webex,\n });\n\n if (\n destinationType.type === DESTINATION_TYPE.CONVERSATION_URL &&\n this.webex.config.meetings.experimental.enableAdhocMeetings &&\n this.webex.meetings.preferredWebexSite\n ) {\n return this.createAdhocSpaceMeeting(destinationType.destination, installedOrgID);\n }\n\n const body = await MeetingInfoUtil.getRequestBody({\n ...destinationType,\n password,\n captchaInfo,\n installedOrgID,\n locusId,\n extraParams,\n });\n\n // If the body only contains the default properties, we don't have enough to\n // fetch the meeting info so don't bother trying.\n if (\n !lodash.difference(Object.keys(body), Object.keys(DEFAULT_MEETING_INFO_REQUEST_BODY)).length\n ) {\n const err = new Error('Not enough information to fetch meeting info');\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {\n reason: err.message,\n destinationType: destinationType?.type,\n webExMeetingId: destinationType?.info?.webExMeetingId,\n sipUri: destinationType?.info?.sipUri,\n });\n\n throw err;\n }\n\n const requestOptions: any = {\n method: HTTP_VERBS.POST,\n body,\n };\n\n const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);\n\n if (directURI) {\n requestOptions.uri = directURI;\n } else {\n requestOptions.service = WBXAPPAPI_SERVICE;\n requestOptions.resource = 'meetingInfo';\n }\n\n if (meetingId && sendCAevents) {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.meetinginfo.request',\n });\n\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.request',\n options: {\n meetingId,\n },\n });\n }\n\n return this.webex\n .request(requestOptions)\n .then((response) => {\n if (meetingId && sendCAevents) {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.meetinginfo.response',\n });\n\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n payload: {\n identifiers: {\n meetingLookupUrl: response?.url,\n },\n },\n options: {\n meetingId,\n webexConferenceIdStr: response?.body?.confIdStr || response?.body?.confID,\n globalMeetingId: response?.body?.meetingId,\n },\n });\n }\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS);\n\n return response;\n })\n .catch((err) => {\n if (meetingId && sendCAevents) {\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.meetinginfo.response',\n });\n\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.meetinginfo.response',\n payload: {\n identifiers: {\n meetingLookupUrl: err?.url,\n },\n },\n options: {\n meetingId,\n rawError: err,\n },\n });\n }\n\n if (err?.statusCode === 403) {\n this.handlePolicyError(err);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {\n reason: err.message,\n stack: err.stack,\n });\n\n throw new MeetingInfoV2PasswordError(err.body?.code, err.body?.data?.meetingInfo);\n }\n if (err?.statusCode === 423) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR, {\n reason: err.message,\n stack: err.stack,\n });\n\n throw new MeetingInfoV2CaptchaError(err.body?.code, {\n captchaId: err.body.captchaID,\n verificationImageURL: err.body.verificationImageURL,\n verificationAudioURL: err.body.verificationAudioURL,\n refreshURL: err.body.refreshURL,\n });\n }\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {\n reason: err.message,\n stack: err.stack,\n });\n throw err;\n });\n }\n}\n","function e(e){this.message=e}e.prototype=new Error,e.prototype.name=\"InvalidCharacterError\";var r=\"undefined\"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,\"\");if(t.length%4==1)throw new e(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(var n,o,a=0,i=0,c=\"\";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(o);return c};function t(e){var t=e.replace(/-/g,\"+\").replace(/_/g,\"/\");switch(t.length%4){case 0:break;case 2:t+=\"==\";break;case 3:t+=\"=\";break;default:throw\"Illegal base64url string!\"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t=\"0\"+t),\"%\"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e}function o(e,r){if(\"string\"!=typeof e)throw new n(\"Invalid token specified\");var o=!0===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(\".\")[o]))}catch(e){throw new n(\"Invalid token specified: \"+e.message)}}n.prototype=new Error,n.prototype.name=\"InvalidTokenError\";export default o;export{n as InvalidTokenError};\n//# sourceMappingURL=jwt-decode.esm.js.map\n","import {type MeetingTranscriptPayload} from '@webex/internal-plugin-voicea';\n\nexport const getSpeaker = (members, csis = []) =>\n Object.values(members).find((member: any) => {\n const memberCSIs = member.participant.status.csis ?? [];\n\n return csis.some((csi) => memberCSIs.includes(csi));\n });\n\nexport const getSpeakerFromProxyOrStore = ({csisKey, meetingMembers, transcriptData}) => {\n let speaker = {\n speakerId: '',\n name: '',\n };\n\n let needsCaching = false;\n\n if (csisKey && transcriptData.speakerProxy[csisKey]) {\n speaker = transcriptData.speakerProxy[csisKey];\n\n return {speaker, needsCaching};\n }\n\n const meetingMember: any = getSpeaker(meetingMembers, [csisKey]);\n\n speaker = {\n speakerId: meetingMember?.participant.person.id ?? '',\n name: meetingMember?.participant.person.name ?? '',\n };\n\n needsCaching = true;\n\n return {speaker, needsCaching};\n};\n\nexport const processNewCaptions = ({\n data,\n meeting,\n}: {\n data: MeetingTranscriptPayload;\n meeting: any;\n}) => {\n const {transcriptId} = data;\n const transcriptData = meeting.transcription;\n\n const {transcripts = []} = data;\n const transcriptsPerCsis = new Map();\n\n for (const transcript of transcripts) {\n const {\n text,\n transcript_language_code: currentSpokenLanguage,\n csis: [csisMember],\n } = transcript;\n\n const newCaption = `${transcriptsPerCsis.get(csisMember)?.text ?? ''} ${text}`.trim();\n\n transcriptsPerCsis.set(csisMember, {\n ...transcript,\n text: newCaption,\n currentSpokenLanguage,\n });\n }\n const interimTranscriptionIds = [];\n\n for (const [key, value] of transcriptsPerCsis) {\n const {needsCaching, speaker} = getSpeakerFromProxyOrStore({\n meetingMembers: meeting.members.membersCollection.members,\n transcriptData,\n csisKey: key,\n });\n const {speakerId} = speaker;\n const interimId = `${transcriptId}_${speakerId}`;\n\n if (needsCaching) {\n transcriptData.speakerProxy[key] = speaker;\n }\n\n const captionData = {\n id: interimId,\n isFinal: data.isFinal,\n translations: value.translations,\n text: value.text,\n currentCaptionLanguage:\n meeting.transcription?.languageOptions?.currentCaptionLanguage ||\n value.currentSpokenLanguage,\n currentSpokenLanguage:\n meeting.transcription?.languageOptions?.currentSpokenLanguage ||\n data.transcripts[0]?.transcript_language_code,\n timestamp: value?.timestamp,\n speaker,\n };\n\n if (!data.isFinal) {\n const interimTranscriptIndex = transcriptData.captions.findIndex(\n (transcript) => transcript.id === interimId\n );\n\n if (interimTranscriptIndex !== -1) {\n transcriptData.captions.splice(interimTranscriptIndex, 1);\n }\n\n interimTranscriptionIds.push(interimId);\n } else {\n transcriptData.interimCaptions[transcriptId].forEach((innerInterimId) => {\n const interimTranscriptIndex = transcriptData.captions.findIndex(\n (transcript) => transcript.id === innerInterimId\n );\n\n if (interimTranscriptIndex !== -1) {\n transcriptData.captions.splice(interimTranscriptIndex, 1);\n }\n });\n delete transcriptData.interimCaptions[transcriptId];\n captionData.id = transcriptId;\n }\n transcriptData.captions.push(captionData);\n }\n transcriptData.interimCaptions[transcriptId] = interimTranscriptionIds;\n};\n","import ChildEmitter from 'events';\n\nimport LoggerProxy from '../logs/logger-proxy';\nimport LoggerConfig from '../logs/logger-config';\n\nimport EventsUtil from './util';\n\n/**\n * Events\n * plugin-meetings local\n * Used to emit events internally between modules specific to an object\n */\nexport default class EventsScope extends ChildEmitter {\n /**\n * Emits and logs an event\n * @param {*} scope\n * @param {*} eventName\n * @param {*} args\n * @returns {Function}\n */\n emit(scope: any, eventName: any, args: any) {\n LoggerProxy.logger.debug(\n `${EventsUtil.getScopeLog(scope)}event#${eventName}${\n LoggerConfig.verboseEvents ? ` -- ${EventsUtil.getEventLog(args)}` : ''\n }`\n );\n\n return super.emit(eventName, args);\n }\n}\n","import EventsScope from '../common/events/events-scope';\nimport {EVENT_TRIGGERS} from '../constants';\n\n/**\n * Meeting - network quality event\n * Emitted on each interval of retrieving stats Analyzer data\n * @event network:quality\n * @type {Object}\n * @property {string} mediaType {video|audio}\n * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality\n * @memberof NetworkQualityMonitor\n */\n/**\n * NetworkQualityMonitor class that will emit events based on detected quality\n *\n * @class NetworkQualityMonitor\n * @extends {EventsScope}\n */\nexport default class NetworkQualityMonitor extends EventsScope {\n config: any;\n frequencyTypes: any;\n indicatorTypes: any;\n mediaType: any;\n networkQualityScore: any;\n networkQualityStatus: any;\n\n /**\n * Creates a new instance of NetworkQualityMonitor\n * @constructor\n * @public\n * @param {Object} config\n * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants\n * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}\n * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown\n * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes\n * @property {string} mediaType - audio|video\n */\n constructor(config: any) {\n super();\n this.config = config;\n this.indicatorTypes = Object.freeze({\n PACKETLOSS: 'packetLoss',\n LATENCY: 'latency',\n JITTER: 'jitter',\n });\n this.frequencyTypes = Object.freeze({\n UPLINK: 'uplink',\n DOWNLINK: 'downlink',\n });\n this.networkQualityScore = 1;\n this.networkQualityStatus = {\n [this.frequencyTypes.UPLINK]: {},\n };\n this.mediaType = null;\n }\n\n /**\n * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score\n *\n * @memberof NetworkQualityMonitor\n * @returns {void}\n */\n emitNetworkQuality() {\n this.emit(\n {\n file: 'networkQualityMonitor',\n function: 'emitNetworkQuality',\n },\n EVENT_TRIGGERS.NETWORK_QUALITY,\n {\n mediaType: this.mediaType,\n networkQualityScore: this.networkQualityScore,\n }\n );\n }\n\n /**\n * invokes emitNetworkQuality method resets values back to default\n * @returns {void}\n * @memberof NetworkQualityMonitor\n */\n updateNetworkQualityStatus() {\n this.emitNetworkQuality();\n\n // reset values\n this.networkQualityScore = 1;\n this.mediaType = null;\n }\n\n /**\n * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp\n * @param {Object} configObj\n * @param {string} configObj.mediaType {audio|video}\n * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj\n * @param {Object} configObj.statsAnalyzerCurrentStats statsResults\n * @returns {void}\n * @public\n * @memberof NetworkQualityMonitor\n */\n public determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults,\n statsAnalyzerCurrentStats,\n }: {\n mediaType: string;\n remoteRtpResults: any;\n statsAnalyzerCurrentStats: object;\n }) {\n const roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;\n const jitterInMilliseconds = remoteRtpResults.jitter * 1000;\n const {currentPacketLossRatio} = statsAnalyzerCurrentStats[mediaType].send;\n\n this.mediaType = mediaType;\n\n const {JITTER, PACKETLOSS, LATENCY} = this.indicatorTypes;\n const {UPLINK} = this.frequencyTypes;\n\n /**\n * determines if packetLoss ratio is over threshold set in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const determinePacketLoss = () => {\n if (currentPacketLossRatio > this.config.videoPacketLossRatioThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * determines if round trip time value is over threshold set in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const determineLatency = () => {\n if (roundTripTimeInMilliseconds > this.config.rttThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * determines if jitter value is over threshold in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const deterMineJitter = () => {\n if (jitterInMilliseconds > this.config.jitterThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * returns null if val is specifically undefined\n * @param {(number|undefined)} value\n * @returns {(number|null)}\n */\n const determineIfUndefined = (value: number | undefined) =>\n typeof value === 'undefined' ? null : value;\n\n if (!this.networkQualityStatus[UPLINK][mediaType]) {\n this.networkQualityStatus[UPLINK][mediaType] = {};\n }\n\n /**\n * Values for some browsers specifically Safari will be undefined we explicitly set to null\n * https://bugs.webkit.org/show_bug.cgi?id=206645\n * https://bugs.webkit.org/show_bug.cgi?id=212668\n */\n // PACKET LOSS\n this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {\n acceptable: determinePacketLoss(),\n value: determineIfUndefined(currentPacketLossRatio),\n };\n\n // LATENCY measured in Round trip time\n this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {\n acceptable: determineLatency(),\n value: determineIfUndefined(remoteRtpResults.roundTripTime),\n };\n\n // JITTER\n this.networkQualityStatus[UPLINK][mediaType][JITTER] = {\n acceptable: deterMineJitter(),\n value: determineIfUndefined(remoteRtpResults.jitter),\n };\n\n this.updateNetworkQualityStatus();\n }\n\n /**\n * Get the current status of network quaility object - networkQualityStatus\n * @returns {Object}\n * @public\n */\n get networkQualityStats() {\n const {UPLINK} = this.frequencyTypes;\n\n return this.networkQualityStatus[UPLINK];\n }\n}\n","// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {IP_VERSION, REACHABILITY} from '../constants';\nimport {LocusMediaRequest} from '../meeting/locusMediaRequest';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();\n\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {String} options.meetingId\n * @param {IP_VERSION} options.ipVersion only required for offers\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n meetingId: string;\n ipVersion?: IP_VERSION;\n locusMediaRequest?: LocusMediaRequest;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, locusMediaRequest, ipVersion} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');\n }\n\n if (!locusMediaRequest) {\n LoggerProxy.logger.warn(\n 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'\n );\n\n return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));\n }\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n });\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${locusSelfUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n return locusMediaRequest\n .send({\n type: 'RoapMessage',\n selfUrl: locusSelfUrl,\n joinCookie,\n mediaId,\n roapMessage,\n reachability: localSdpWithReachabilityData.reachability,\n ipVersion,\n })\n .then((res) => {\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:`, err);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> roapMessage that caused error:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n","// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, Enum} from '../constants';\n\nimport RoapRequest from './request';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0\n// and this is handy for us, because TURN discovery is always done before the first SDP exchange,\n// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection\n// and do the SDP offer with seq=1\nconst TURN_DISCOVERY_SEQ = 0;\n\nconst TurnDiscoverySkipReason = {\n missingHttpResponse: 'missing http response', // when we asked for the TURN discovery response to be in the http response, but it wasn't there\n reachability: 'reachability', // when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)\n alreadyInProgress: 'already in progress', // when we try to start TURN discovery while it's already in progress\n} as const;\n\nexport type TurnDiscoverySkipReason =\n | Enum // this is a kind of FYI, because in practice typescript will infer the type of TurnDiscoverySkipReason as a string\n | string // used in case of errors, contains the error message\n | undefined; // used when TURN discovery is not skipped\n\nexport type TurnServerInfo = {\n url: string;\n username: string;\n password: string;\n};\n\nexport type TurnDiscoveryResult = {\n turnServerInfo?: TurnServerInfo;\n turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n};\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: TurnServerInfo;\n\n private responseTimer?: ReturnType;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private waitForTurnDiscoveryResponse(): Promise<{isOkRequired: boolean}> {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'\n );\n\n return Promise.reject(\n new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')\n );\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`\n );\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'\n );\n\n return defer.promise;\n }\n\n /**\n * Handles TURN_DISCOVERY_RESPONSE roap message. Use it if the roap message comes over the websocket,\n * otherwise use handleTurnDiscoveryHttpResponse() if it comes in the http response.\n *\n * @param {Object} roapMessage\n * @param {string} from string to indicate how we got the response (used just for logging)\n * @returns {void}\n * @public\n * @memberof Roap\n */\n public handleTurnDiscoveryResponse(roapMessage: any, from: string) {\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response ${from}`\n );\n\n return;\n }\n\n if (roapMessage.messageType !== ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} has unexpected messageType: ${JSON.stringify(\n roapMessage\n )}`\n )\n );\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(\n expectedHeader.headerName.length + 1\n );\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ${from}: ${JSON.stringify(\n headers\n )}`\n );\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} missing some headers: ${JSON.stringify(headers)}`\n )\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ${from}, url=${this.turnInfo.url}`\n );\n\n this.defer.resolve({isOkRequired: !headers?.includes('noOkInTransaction')});\n }\n }\n\n /**\n * Generates TURN_DISCOVERY_REQUEST roap message. When this method returns a roapMessage, it means that a TURN discovery process has started.\n * It needs be ended by calling handleTurnDiscoveryHttpResponse() once you get a response from the backend. If you don't get any response\n * or want to abort, you need to call abort().\n *\n * @param {Meeting} meeting\n * @param {boolean} isForced\n * @returns {Object}\n */\n public async generateTurnDiscoveryRequestMessage(\n meeting: Meeting,\n isForced: boolean\n ): Promise<{roapMessage?: object; turnDiscoverySkippedReason: TurnDiscoverySkipReason}> {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress'\n );\n\n return {\n roapMessage: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress,\n };\n }\n\n let turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {roapMessage: undefined, turnDiscoverySkippedReason};\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> generated TURN_DISCOVERY_REQUEST message'\n );\n\n return {roapMessage, turnDiscoverySkippedReason: undefined};\n }\n\n /**\n * Handles any errors that occur during TURN discovery without re-throwing them.\n *\n * @param {Meeting} meeting\n * @param {Error} error\n * @returns {TurnDiscoveryResult}\n */\n private handleTurnDiscoveryFailure(meeting: Meeting, error: Error): TurnDiscoveryResult {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${error}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n return {turnServerInfo: undefined, turnDiscoverySkippedReason: `failure: ${error.message}`};\n }\n\n /**\n * Handles TURN_DISCOVERY_RESPONSE roap message that came in http response. If the response is not valid,\n * it returns an object with turnServerInfo set to undefined. In that case you need to call abort()\n * to end the TURN discovery process.\n *\n * @param {Meeting} meeting\n * @param {Object|undefined} httpResponse can be undefined to indicate that we didn't get the response\n * @returns {Promise}\n * @memberof Roap\n */\n public async handleTurnDiscoveryHttpResponse(\n meeting: Meeting,\n httpResponse?: object\n ): Promise {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#handleTurnDiscoveryHttpResponse --> unexpected http response, TURN discovery is not in progress'\n );\n\n throw new Error(\n 'handleTurnDiscoveryHttpResponse() called before generateTurnDiscoveryRequestMessage()'\n );\n }\n\n if (httpResponse === undefined) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse,\n };\n }\n\n try {\n const roapMessage = this.parseHttpTurnDiscoveryResponse(meeting, httpResponse);\n\n if (!roapMessage) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse,\n };\n }\n\n this.handleTurnDiscoveryResponse(roapMessage, 'in http response');\n\n const {isOkRequired} = await this.defer.promise;\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (error) {\n this.abort();\n\n return this.handleTurnDiscoveryFailure(meeting, error);\n }\n }\n\n /**\n * Aborts current TURN discovery. This method needs to be called if you called generateTurnDiscoveryRequestMessage(),\n * but then never got any response from the server.\n * @returns {void}\n */\n public abort() {\n if (this.defer) {\n this.defer.reject(new Error('TURN discovery aborted'));\n this.defer = undefined;\n }\n }\n\n /**\n * Parses the TURN_DISCOVERY_RESPONSE roap message out of the http response\n * and returns it.\n *\n * @param {Meeting} meeting\n * @param {any} httpResponse\n * @returns {any}\n */\n private parseHttpTurnDiscoveryResponse(\n meeting: Meeting,\n httpResponse: {mediaConnections?: Array<{remoteSdp?: string}>}\n ) {\n let turnDiscoveryResponse;\n\n if (httpResponse.mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(httpResponse.mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...\n const {seq, messageType, errorType, errorCause, headers} = remoteSdp.roapMessage;\n\n turnDiscoveryResponse = {\n seq,\n messageType,\n errorType,\n errorCause,\n headers,\n };\n }\n }\n\n if (!turnDiscoveryResponse) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'TURN_DISCOVERY_RESPONSE',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return turnDiscoveryResponse;\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapTurnDiscoveryRequest(\n meeting: Meeting,\n isReconnecting: boolean\n ): Promise {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'\n );\n\n return Promise.resolve({\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress,\n });\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'\n );\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n // @ts-ignore - Fix missing type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - Fix missing type\n mediaId: isReconnecting ? '' : meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n // @ts-ignore - because of meeting.webex\n ipVersion: MeetingUtil.getIpVersion(meeting.webex),\n })\n .then(async (response) => {\n const {mediaConnections} = response;\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return this.handleTurnDiscoveryHttpResponse(meeting, response);\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting: Meeting) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapOK --> TURN discovery response requires OK, sending it...'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_REQUIRES_OK, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n });\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n },\n // @ts-ignore - fix type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - fix type\n mediaId: meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Gets the reason why reachability is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Promise} Promise with empty string if reachability is not skipped or a reason if it is skipped\n */\n private async getSkipReason(meeting: Meeting): Promise {\n const isAnyPublicClusterReachable =\n // @ts-ignore - fix type\n await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();\n\n if (isAnyPublicClusterReachable) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'\n );\n\n return TurnDiscoverySkipReason.reachability;\n }\n\n return undefined;\n }\n\n /**\n * Checks if TURN discovery is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done\n */\n async isSkipped(meeting) {\n const skipReason = await this.getSkipReason(meeting);\n\n return !!skipReason;\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * This TURN discovery roap exchange is always done with seq=0.\n * The RoapMediaConnection SDP exchange always starts with seq=1,\n * so it works fine no matter if TURN discovery is done or not.\n *\n * @param {Meeting} meeting\n * @param {Boolean} [isReconnecting] should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n async doTurnDiscovery(\n meeting: Meeting,\n isReconnecting?: boolean,\n isForced?: boolean\n ): Promise {\n let turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason,\n };\n }\n\n try {\n const turnDiscoveryResult = await this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);\n\n if (\n turnDiscoveryResult.turnDiscoverySkippedReason !==\n TurnDiscoverySkipReason.missingHttpResponse\n ) {\n return turnDiscoveryResult;\n }\n\n // if we haven't got the response over http, we need to wait for it to come over the websocket via Mercury\n const {isOkRequired} = await this.waitForTurnDiscoveryResponse();\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (e) {\n return this.handleTurnDiscoveryFailure(meeting, e);\n }\n }\n}\n","// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery, {TurnDiscoveryResult} from './turnDiscovery';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {\n type TurnDiscoveryResult,\n type TurnServerInfo,\n type TurnDiscoverySkipReason,\n} from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: TurnDiscovery;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n meetingId: meeting.id,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n ipVersion: MeetingUtil.getIpVersion(meeting.webex),\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n","import {Defer} from '@webex/common';\nimport {ConnectionState, MediaConnectionEventNames} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the connection is in an unrecoverable \"failed\" state\n *\n * @returns {boolean}\n */\n private isFailed(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (this.isFailed()) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'\n );\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport {\n LocalCameraStream,\n LocalMicrophoneStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n RemoteStream,\n} from '@webex/media-helpers';\n\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\n\nexport type MediaDirection = {\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n};\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioStream?: LocalMicrophoneStream;\n mediaDirection: MediaDirection;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioStream: RemoteStream;\n remoteQualityLevel: any;\n remoteShareStream: RemoteStream;\n remoteVideoStream: RemoteStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n videoDeviceId: any;\n videoStream?: LocalCameraStream;\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor() {\n this.webrtcMediaConnection = null;\n this.mediaDirection = {\n receiveAudio: false,\n receiveVideo: false,\n receiveShare: false,\n sendAudio: false,\n sendVideo: false,\n sendShare: false,\n };\n this.videoStream = null;\n this.audioStream = null;\n this.shareVideoStream = null;\n this.shareAudioStream = null;\n this.remoteShareStream = undefined;\n this.remoteAudioStream = undefined;\n this.remoteVideoStream = undefined;\n this.remoteQualityLevel = QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoStream(videoStream?: LocalCameraStream) {\n this.videoStream = videoStream;\n }\n\n setLocalAudioStream(audioStream?: LocalMicrophoneStream) {\n this.audioStream = audioStream;\n }\n\n setLocalShareVideoStream(shareVideoStream?: LocalDisplayStream) {\n this.shareVideoStream = shareVideoStream;\n }\n\n setLocalShareAudioStream(shareAudioStream?: LocalSystemAudioStream) {\n this.shareAudioStream = shareAudioStream;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShareStream(remoteShareStream: RemoteStream) {\n this.remoteShareStream = remoteShareStream;\n }\n\n /**\n * Sets the remote audio stream\n * @param {RemoteStream} remoteAudioStream RemoteStream to save\n * @returns {void}\n */\n setRemoteAudioStream(remoteAudioStream: RemoteStream) {\n this.remoteAudioStream = remoteAudioStream;\n }\n\n /**\n * Sets the remote video stream\n * @param {RemoteStream} remoteVideoStream RemoteStream to save\n * @returns {void}\n */\n setRemoteVideoStream(remoteVideoStream: RemoteStream) {\n this.remoteVideoStream = remoteVideoStream;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId: string) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioStream = null;\n this.remoteVideoStream = null;\n }\n\n unsetRemoteShareStream() {\n this.remoteShareStream = null;\n }\n\n /**\n * Unsets all remote streams\n * @returns {void}\n */\n unsetRemoteStreams() {\n this.unsetRemoteMedia();\n this.unsetRemoteShareStream();\n }\n\n /**\n * Returns if we have at least one local share stream or not.\n * @returns {Boolean}\n */\n hasLocalShareStream() {\n return !!(this.shareAudioStream || this.shareVideoStream);\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise {\n const mediaConnectionAwaiter = new MediaConnectionAwaiter({\n webrtcMediaConnection: this.webrtcMediaConnection,\n });\n\n return mediaConnectionAwaiter.waitForMediaConnectionConnected();\n }\n\n /**\n * Returns ICE transport information:\n * - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections\n * it will be -1 if browser doesn't supply this information\n * - numTransports - number of transports (should be 1 if we're using bundle)\n *\n * @param {Array} allStatsReports array of RTC stats reports\n * @returns {Object}\n */\n private getTransportInfo(allStatsReports: any[]): {\n selectedCandidatePairChanges: number;\n numTransports: number;\n } {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n if (transports.length > 1) {\n LoggerProxy.logger.warn(\n `Media:properties#getSelectedCandidatePairChanges --> found more than 1 transport: ${transports.length}`\n );\n }\n\n return {\n selectedCandidatePairChanges:\n transports.length > 0 && transports[0].selectedCandidatePairChanges !== undefined\n ? transports[0].selectedCandidatePairChanges\n : -1,\n numTransports: transports.length,\n };\n }\n\n /**\n * Returns the type of a connection that has been established\n * It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'\n *\n * If connection was not established, it returns 'unknown'\n *\n * @param {Array} allStatsReports array of RTC stats reports\n * @returns {string}\n */\n private getConnectionType(allStatsReports: any[]) {\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find(\n (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId\n );\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`\n );\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n } else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`\n );\n\n return false;\n });\n\n if (foundConnectionType === 'unknown') {\n const candidatePairStates = allStatsReports\n .filter((report) => report.type === 'candidate-pair')\n .map((report) => report.state);\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> all candidate pair states: ${JSON.stringify(\n candidatePairStates\n )}`\n );\n }\n\n return foundConnectionType;\n }\n\n /**\n * Returns information about current webrtc media connection\n *\n * @returns {Promise}\n */\n async getCurrentConnectionInfo(): Promise<{\n connectionType: string;\n selectedCandidatePairChanges: number;\n numTransports: number;\n }> {\n const allStatsReports = [];\n\n try {\n const statsResult = await this.webrtcMediaConnection.getStats();\n statsResult.forEach((report) => allStatsReports.push(report));\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`\n );\n }\n\n const connectionType = this.getConnectionType(allStatsReports);\n const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);\n\n return {\n connectionType,\n selectedCandidatePairChanges,\n numTransports,\n };\n }\n}\n","import StateMachine from 'javascript-state-machine';\nimport StateMachineHistory from 'javascript-state-machine/lib/history';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {MEETING_STATE_MACHINE, EVENT_TRIGGERS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\n// TODO: ensure that meeting can be destroyed when in an error state\nconst MeetingStateMachine = {\n /**\n * Initializes the StateMachine for the meeting\n * @param {Meeting} meetingRef A reference to a meeting instance\n * @returns {StateMachine}\n */\n create(meetingRef: any) {\n if (!meetingRef) {\n throw new ParameterError(\n 'You must initialize the meeting state machine with a meeting reference.'\n );\n }\n\n return new StateMachine({\n init: MEETING_STATE_MACHINE.STATES.IDLE,\n transitions: [\n // when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.RING,\n from: [\n MEETING_STATE_MACHINE.STATES.IDLE,\n MEETING_STATE_MACHINE.STATES.ERROR,\n MEETING_STATE_MACHINE.STATES.JOINED,\n ],\n to: MEETING_STATE_MACHINE.STATES.RINGING,\n },\n // when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,\n // others will go straight to JOINED with this transition\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,\n from: [\n MEETING_STATE_MACHINE.STATES.JOINED,\n MEETING_STATE_MACHINE.STATES.IDLE,\n MEETING_STATE_MACHINE.STATES.RINGING,\n MEETING_STATE_MACHINE.STATES.ERROR,\n ],\n to: MEETING_STATE_MACHINE.STATES.JOINED,\n },\n // signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,\n from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],\n /**\n * @param {Object} remote\n * @param {Boolean} remote.remoteAnswered\n * @param {Boolean} remote.remoteDeclined\n * @returns {String}\n */\n to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {\n // other user answered the call\n if (remote.remoteAnswered) {\n return MEETING_STATE_MACHINE.STATES.ANSWERED;\n }\n // other user declined the call\n if (remote.remoteDeclined) {\n return MEETING_STATE_MACHINE.STATES.DECLINED;\n }\n\n // default\n return MEETING_STATE_MACHINE.STATES.ERROR;\n },\n },\n // when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.LEAVE,\n from: [\n MEETING_STATE_MACHINE.STATES.IDLE,\n MEETING_STATE_MACHINE.STATES.RINGING,\n MEETING_STATE_MACHINE.STATES.JOINED,\n MEETING_STATE_MACHINE.STATES.ANSWERED,\n MEETING_STATE_MACHINE.STATES.DECLINED,\n MEETING_STATE_MACHINE.STATES.ERROR,\n ],\n to: MEETING_STATE_MACHINE.STATES.ENDED,\n },\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.END,\n from: [\n MEETING_STATE_MACHINE.STATES.IDLE,\n MEETING_STATE_MACHINE.STATES.RINGING,\n MEETING_STATE_MACHINE.STATES.JOINED,\n MEETING_STATE_MACHINE.STATES.ANSWERED,\n MEETING_STATE_MACHINE.STATES.DECLINED,\n MEETING_STATE_MACHINE.STATES.ERROR,\n ],\n to: MEETING_STATE_MACHINE.STATES.ENDED,\n },\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,\n from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],\n to: MEETING_STATE_MACHINE.STATES.ENDED,\n },\n // transition from ANY state to ERROR state\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,\n from: '*',\n to: MEETING_STATE_MACHINE.STATES.ERROR,\n },\n // fail safe, transition from ANY state to IDLE state\n {\n name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,\n from: '*',\n to: MEETING_STATE_MACHINE.STATES.IDLE,\n },\n ],\n data: {\n /**\n * The meeting instance to execute all state changes on\n */\n meeting: meetingRef,\n },\n methods: {\n /**\n * Ring stop transition, to end the ring event for the meeting, and transition the state to ANSWERED OR DECLINED, only for outgoing meetings\n * @param {Object} transition -- FiniteStateMachine automatically passed, not used\n * @param {Object} stop -- {remoteAnswered: {Boolean}, remoteDeclined: {Boolean}}\n * @returns {Boolean}\n */\n onRemote(transition: object, stop: object) {\n if (this.meeting) {\n Trigger.trigger(\n this.meeting,\n {\n file: 'meeting/state',\n function: 'onRemote',\n },\n EVENT_TRIGGERS.MEETING_RINGING_STOP,\n {\n id: this.meeting.id,\n type: stop,\n }\n );\n }\n },\n /**\n * Ring transition, to cause the ring event for the meeting, and transition the state to RINGING, for both incoming, and outgoing meetings\n * @param {Object} transition -- FiniteStateMachine automatically passed, not used\n * @param {String} type -- incoming call === INCOMING / or other meetings have a ring type of JOIN\n * @returns {Boolean}\n */\n onRing(transition: object, type: string) {\n if (this.meeting) {\n Trigger.trigger(\n this.meeting,\n {\n file: 'meeting/state',\n function: 'onRing',\n },\n EVENT_TRIGGERS.MEETING_RINGING,\n {\n type,\n id: this.meeting.id,\n }\n );\n }\n },\n /**\n * handle the entry to error state\n * @param {Object} transition\n * @param {Error} error\n * @returns {Boolean}\n */\n onEnterError(transition: any, error: Error) {\n LoggerProxy.logger.error(\n `Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`\n );\n },\n /**\n * After ANY transition occurs, we want to know what state the meeting moved to for debugging\n * @param {Object} transition\n * @returns {Boolean}\n */\n onAfterTransition(transition: any) {\n LoggerProxy.logger.log(\n `Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`\n );\n },\n },\n // track the last 25 states entered\n plugins: [new StateMachineHistory({max: 25})],\n });\n },\n};\n\nexport default MeetingStateMachine;\n","import {ServerMuteReason} from '@webex/media-helpers';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport ParameterError from '../common/errors/parameter';\nimport MeetingUtil from './util';\nimport {AUDIO, VIDEO} from '../constants';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const createMuteState = (type, meeting, enabled: boolean) => {\n // todo: remove the meeting argument (SPARK-399695)\n\n LoggerProxy.logger.info(\n `Meeting:muteState#createMuteState --> ${type}: creating MuteState for meeting id ${meeting?.id}`\n );\n\n const muteState = new MuteState(type, meeting, enabled);\n\n return muteState;\n};\n\n/** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches\n the last requested state by the client.\n\n More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#\n\n This class is exported only for unit tests. It should never be instantiated directly with new MuteState(), instead createMuteState() should be called\n*/\nexport class MuteState {\n state: {\n client: {\n enabled: boolean; // indicates if audio/video is enabled at all or not\n localMute: boolean;\n };\n server: {localMute: boolean; remoteMute: boolean; unmuteAllowed: boolean};\n syncToServerInProgress: boolean;\n };\n\n type: any;\n ignoreMuteStateChange: boolean;\n\n /**\n * Constructor\n *\n * @param {String} type - audio or video\n * @param {Object} meeting - the meeting object (used for reading current remote mute status)\n * @param {boolean} enabled - whether the client audio/video is enabled at all\n */\n constructor(type: string, meeting: any, enabled: boolean) {\n if (type !== AUDIO && type !== VIDEO) {\n throw new ParameterError('Mute state is designed for handling audio or video only');\n }\n this.type = type;\n this.ignoreMuteStateChange = false;\n this.state = {\n client: {\n enabled,\n localMute: true,\n },\n server: {\n localMute: true,\n // because remoteVideoMuted and unmuteVideoAllowed are updated seperately, they might be undefined\n remoteMute: type === AUDIO ? meeting.remoteMuted : meeting.remoteVideoMuted ?? false,\n unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed : meeting.unmuteVideoAllowed ?? true,\n },\n syncToServerInProgress: false,\n };\n }\n\n /**\n * Starts the mute state machine. Needs to be called after a new MuteState instance is created.\n *\n * @param {Object} meeting - the meeting object\n * @returns {void}\n */\n public init(meeting: any) {\n this.applyUnmuteAllowedToStream(meeting);\n\n // if we are remotely muted, we need to apply that to the local stream now (mute on-entry)\n if (this.state.server.remoteMute) {\n this.muteLocalStream(meeting, this.state.server.remoteMute, 'remotelyMuted');\n }\n\n const initialMute =\n this.type === AUDIO\n ? meeting.mediaProperties.audioStream?.muted\n : meeting.mediaProperties.videoStream?.muted;\n\n LoggerProxy.logger.info(\n `Meeting:muteState#init --> ${this.type}: local stream initial mute state: ${initialMute}`\n );\n\n if (initialMute !== undefined) {\n this.state.client.localMute = initialMute;\n } else {\n // there is no stream, so it's like we are locally muted\n // (this is important especially for transcoded meetings, in which the SDP m-line direction always stays \"sendrecv\")\n this.state.client.localMute = true;\n }\n this.applyClientStateToServer(meeting);\n }\n\n /**\n * This method needs to be called whenever the local audio/video stream has changed.\n * It reapplies the remote mute state onto the new stream and also reads the current\n * local mute state from the stream and updates the internal state machine and sends\n * any required requests to the server.\n *\n * @param {Object} meeting - the meeting object\n * @returns {void}\n */\n public handleLocalStreamChange(meeting: any) {\n return this.init(meeting);\n }\n\n /**\n * Enables/disables audio/video\n *\n * @param {Object} meeting - the meeting object\n * @param {boolean} enable\n * @returns {void}\n */\n public enable(meeting: any, enable: boolean) {\n this.state.client.enabled = enable;\n\n this.applyClientStateToServer(meeting);\n }\n\n /**\n * Mutes/unmutes local stream\n *\n * @param {Object} meeting - the meeting object\n * @param {Boolean} mute - true to mute the stream, false to unmute it\n * @param {ServerMuteReason} reason - reason for muting/unmuting\n * @returns {void}\n */\n private muteLocalStream(meeting: any, mute: boolean, reason: ServerMuteReason) {\n this.ignoreMuteStateChange = true;\n if (this.type === AUDIO) {\n meeting.mediaProperties.audioStream?.setServerMuted(mute, reason);\n } else {\n meeting.mediaProperties.videoStream?.setServerMuted(mute, reason);\n }\n this.ignoreMuteStateChange = false;\n }\n\n /**\n * This method should be called when the local stream mute state is changed\n * @public\n * @memberof MuteState\n * @param {Object} [meeting] the meeting object\n * @param {Boolean} [mute] true for muting, false for unmuting request\n * @returns {void}\n */\n public handleLocalStreamMuteStateChange(meeting?: any) {\n if (this.ignoreMuteStateChange) {\n return;\n }\n\n // either user or system may have triggered a mute state change, but localMute should reflect both\n let newMuteState: boolean;\n let userMuteState: boolean;\n let systemMuteState: boolean;\n if (this.type === AUDIO) {\n newMuteState = meeting.mediaProperties.audioStream?.muted;\n userMuteState = meeting.mediaProperties.audioStream?.userMuted;\n systemMuteState = meeting.mediaProperties.audioStream?.systemMuted;\n } else {\n newMuteState = meeting.mediaProperties.videoStream?.muted;\n userMuteState = meeting.mediaProperties.videoStream?.userMuted;\n systemMuteState = meeting.mediaProperties.videoStream?.systemMuted;\n }\n\n LoggerProxy.logger.info(\n `Meeting:muteState#handleLocalStreamMuteStateChange --> ${this.type}: local stream new mute state: ${newMuteState} (user mute: ${userMuteState}, system mute: ${systemMuteState})`\n );\n\n this.state.client.localMute = newMuteState;\n\n this.applyClientStateToServer(meeting);\n }\n\n /**\n * Applies the current mute state to the local stream (by enabling or disabling it accordingly)\n *\n * @public\n * @param {Object} [meeting] the meeting object\n * @param {ServerMuteReason} reason - reason why we're applying our client state to the local stream\n * @memberof MuteState\n * @returns {void}\n */\n public applyClientStateLocally(meeting?: any, reason?: ServerMuteReason) {\n this.muteLocalStream(meeting, this.state.client.localMute, reason);\n }\n\n /** Returns true if client is locally muted - it takes into account not just the client local mute state,\n * but also whether audio/video is enabled at all\n *\n * @returns {boolean}\n */\n private getClientLocalMuteState() {\n return this.state.client.enabled ? this.state.client.localMute : true;\n }\n\n /**\n * Updates the server local and remote mute values so that they match the current client desired state.\n *\n * @private\n * @param {Object} [meeting] the meeting object\n * @memberof MuteState\n * @returns {void}\n */\n private applyClientStateToServer(meeting?: any) {\n if (this.state.syncToServerInProgress) {\n LoggerProxy.logger.info(\n `Meeting:muteState#applyClientStateToServer --> ${this.type}: request to server in progress, we need to wait for it to complete`\n );\n\n return;\n }\n\n const localMuteState = this.getClientLocalMuteState();\n const localMuteRequiresSync = localMuteState !== this.state.server.localMute;\n const remoteMuteRequiresSync = !localMuteState && this.state.server.remoteMute;\n\n LoggerProxy.logger.info(\n `Meeting:muteState#applyClientStateToServer --> ${this.type}: localMuteRequiresSync: ${localMuteRequiresSync} (${localMuteState} ?= ${this.state.server.localMute})`\n );\n LoggerProxy.logger.info(\n `Meeting:muteState#applyClientStateToServer --> ${this.type}: remoteMuteRequiresSync: ${remoteMuteRequiresSync}`\n );\n\n if (!localMuteRequiresSync && !remoteMuteRequiresSync) {\n LoggerProxy.logger.info(\n `Meeting:muteState#applyClientStateToServer --> ${this.type}: client state already matching server state, nothing to do`\n );\n\n return;\n }\n\n this.state.syncToServerInProgress = true;\n\n // first sync local mute with server\n const localMuteSyncPromise = localMuteRequiresSync\n ? this.sendLocalMuteRequestToServer(meeting)\n : Promise.resolve();\n\n localMuteSyncPromise\n .then(() =>\n // then follow it up with remote mute sync\n remoteMuteRequiresSync ? this.sendRemoteMuteRequestToServer(meeting) : Promise.resolve()\n )\n .then(() => {\n this.state.syncToServerInProgress = false;\n LoggerProxy.logger.info(\n `Meeting:muteState#applyClientStateToServer --> ${this.type}: sync with server completed`\n );\n\n // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync\n this.applyClientStateToServer(meeting);\n })\n .catch((e) => {\n this.state.syncToServerInProgress = false;\n\n LoggerProxy.logger.warn(\n `Meeting:muteState#applyClientStateToServer --> ${this.type}: error: ${e}`\n );\n\n // failed to apply client state to server, so revert stream mute state to server state\n this.muteLocalStream(\n meeting,\n this.state.server.localMute || this.state.server.remoteMute,\n 'clientRequestFailed'\n );\n });\n }\n\n /**\n * Sets the local mute value in the server\n *\n * @private\n * @param {Object} [meeting] the meeting object\n * @memberof MuteState\n * @returns {Promise}\n */\n private sendLocalMuteRequestToServer(meeting?: any) {\n const audioMuted = this.type === AUDIO ? this.getClientLocalMuteState() : undefined;\n const videoMuted = this.type === VIDEO ? this.getClientLocalMuteState() : undefined;\n\n LoggerProxy.logger.info(\n `Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: sending local mute (audio=${audioMuted}, video=${videoMuted}) to server`\n );\n\n return MeetingUtil.remoteUpdateAudioVideo(meeting, audioMuted, videoMuted)\n .then((locus) => {\n LoggerProxy.logger.info(\n `Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: local mute (audio=${audioMuted}, video=${videoMuted}) applied to server`\n );\n\n this.state.server.localMute = this.type === AUDIO ? audioMuted : videoMuted;\n\n if (locus) {\n meeting.locusInfo.handleLocusDelta(locus, meeting);\n }\n\n return locus;\n })\n .catch((remoteUpdateError) => {\n LoggerProxy.logger.warn(\n `Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: failed to apply local mute (audio=${audioMuted}, video=${videoMuted}) to server: ${remoteUpdateError}`\n );\n\n return Promise.reject(remoteUpdateError);\n });\n }\n\n /**\n * Sets the remote mute value in the server\n *\n * @private\n * @param {Object} [meeting] the meeting object\n * @memberof MuteState\n * @returns {Promise}\n */\n private sendRemoteMuteRequestToServer(meeting?: any) {\n const remoteMute = this.getClientLocalMuteState();\n\n LoggerProxy.logger.info(\n `Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: sending remote mute:${remoteMute} to server`\n );\n\n return meeting.members\n .muteMember(meeting.members.selfId, remoteMute, this.type === AUDIO)\n .then(() => {\n LoggerProxy.logger.info(\n `Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: remote mute:${remoteMute} applied to server`\n );\n\n this.state.server.remoteMute = remoteMute;\n })\n .catch((remoteUpdateError) => {\n LoggerProxy.logger.warn(\n `Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: failed to apply remote mute ${remoteMute} to server: ${remoteUpdateError}`\n );\n\n return Promise.reject(remoteUpdateError);\n });\n }\n\n /** Applies the current value for unmute allowed to the underlying stream\n *\n * @param {Meeting} meeting\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private applyUnmuteAllowedToStream(meeting: any) {\n if (this.type === AUDIO) {\n meeting.mediaProperties.audioStream?.setUnmuteAllowed(this.state.server.unmuteAllowed);\n } else {\n meeting.mediaProperties.videoStream?.setUnmuteAllowed(this.state.server.unmuteAllowed);\n }\n }\n\n /**\n * This method should be called whenever the server remote mute state is changed\n *\n * @public\n * @memberof MuteState\n * @param {Meeting} meeting\n * @param {Boolean} [muted] true if user is remotely muted, false otherwise\n * @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when \"hard mute\" feature is used)\n * @returns {undefined}\n */\n public handleServerRemoteMuteUpdate(meeting: any, muted?: boolean, unmuteAllowed?: boolean) {\n LoggerProxy.logger.info(\n `Meeting:muteState#handleServerRemoteMuteUpdate --> ${this.type}: updating server remoteMute to (${muted})`\n );\n if (unmuteAllowed !== undefined) {\n this.state.server.unmuteAllowed = unmuteAllowed;\n this.applyUnmuteAllowedToStream(meeting);\n }\n if (muted !== undefined) {\n this.state.server.remoteMute = muted;\n this.muteLocalStream(meeting, muted, 'remotelyMuted');\n }\n }\n\n /**\n * This method should be called whenever we receive from the server a requirement to locally unmute\n *\n * @public\n * @memberof MuteState\n * @param {Object} [meeting] the meeting object\n * @returns {undefined}\n */\n public handleServerLocalUnmuteRequired(meeting?: any) {\n if (!this.state.client.enabled) {\n LoggerProxy.logger.warn(\n `Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received while ${this.type} is disabled -> local unmute will not result in ${this.type} being sent`\n );\n } else {\n LoggerProxy.logger.info(\n `Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received -> doing local unmute`\n );\n }\n\n // todo: I'm seeing \"you can now unmute yourself \" popup when this happens - but same thing happens on web.w.c so we can ignore for now\n this.state.server.remoteMute = false;\n\n // change user mute state to false, but keep localMute true if overall mute state is still true\n this.muteLocalStream(meeting, false, 'localUnmuteRequired');\n if (this.type === AUDIO) {\n this.state.client.localMute = meeting.mediaProperties.audioStream?.muted;\n } else {\n this.state.client.localMute = meeting.mediaProperties.videoStream?.muted;\n }\n\n this.applyClientStateToServer(meeting);\n }\n\n /**\n * Returns true if the user is locally or remotely muted.\n * It only checks the mute status, ignoring the fact whether audio/video is enabled.\n *\n * @public\n * @memberof MuteState\n * @returns {Boolean}\n */\n public isMuted() {\n return (\n this.state.client.localMute || this.state.server.localMute || this.state.server.remoteMute\n );\n }\n\n /**\n * Returns true if the user is remotely muted\n *\n * @public\n * @memberof MuteState\n * @returns {Boolean}\n */\n public isRemotelyMuted() {\n return this.state.server.remoteMute;\n }\n\n /**\n * Returns true if unmute is allowed\n *\n * @public\n * @memberof MuteState\n * @returns {Boolean}\n */\n public isUnmuteAllowed() {\n return this.state.server.unmuteAllowed;\n }\n\n /**\n * Returns true if the user is locally muted or audio/video is disabled\n *\n * @public\n * @memberof MuteState\n * @returns {Boolean}\n */\n public isLocallyMuted() {\n return this.getClientLocalMuteState();\n }\n}\n","import {SELF_ROLES, DISPLAY_HINTS, INTERSTITIAL_DISPLAY_HINTS} from '../constants';\n\nconst InfoUtils: any = {};\n\nInfoUtils.parse = (info, roles, isJoined = true) => {\n const parsed: any = {\n policy: InfoUtils.parsePolicy(info),\n moderator: InfoUtils.parseModerator(info),\n coHost: InfoUtils.parseCoHost(info),\n };\n\n let userDisplayHints = isJoined\n ? {...parsed.policy}\n : {\n ...Object.fromEntries(\n Object.entries(parsed.policy).filter(([hint]) =>\n INTERSTITIAL_DISPLAY_HINTS.includes(hint)\n )\n ),\n };\n\n if (roles.includes(SELF_ROLES.COHOST)) {\n userDisplayHints = {...userDisplayHints, ...parsed.coHost};\n }\n\n if (roles.includes(SELF_ROLES.MODERATOR)) {\n userDisplayHints = {...userDisplayHints, ...parsed.moderator};\n }\n\n parsed.userDisplayHints = Object.keys(userDisplayHints);\n\n if (info.sipUri) {\n parsed.sipUri = info.sipUri;\n }\n\n if (info.meetingId) {\n parsed.meetingNumber = info.meetingId;\n }\n\n if (info.datachannelUrl) {\n parsed.datachannelUrl = info.datachannelUrl;\n }\n\n return parsed;\n};\n\nInfoUtils.parseDisplayHintSection = (info, displayHintKey) => {\n const displayHints = {};\n\n if (\n info &&\n info.displayHints &&\n info.displayHints[displayHintKey] &&\n info.displayHints[displayHintKey].length > 0\n ) {\n info.displayHints[displayHintKey].forEach((key) => {\n displayHints[key] = true;\n });\n }\n\n return displayHints;\n};\n\nInfoUtils.parsePolicy = (info) => InfoUtils.parseDisplayHintSection(info, 'joined');\n\nInfoUtils.parseModerator = (info) => {\n const displayHints = InfoUtils.parseDisplayHintSection(info, 'moderator');\n\n return {...displayHints, [DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND]: true};\n};\n\nInfoUtils.parseCoHost = (info) => {\n const displayHints = InfoUtils.parseDisplayHintSection(info, 'coHost');\n\n return {...displayHints, [DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND]: true};\n};\n\nInfoUtils.isLocked = (policy) => policy.LOCK_STATUS_LOCKED || false;\n\nInfoUtils.isUnlocked = (policy) => policy.LOCK_STATUS_UNLOCKED || false;\n\nInfoUtils.getInfos = (oldInfo, newInfo, roles, isJoined) => {\n let previous = null;\n\n if (oldInfo) {\n previous = oldInfo;\n }\n const current = newInfo && InfoUtils.parse(newInfo, roles, isJoined);\n const updates: any = {};\n\n if (current) {\n current.isLocked = InfoUtils.isLocked(current.policy);\n current.isUnlocked = InfoUtils.isUnlocked(current.policy);\n\n if ((previous && previous.isUnlocked && current.isLocked) || (!previous && current.isLocked)) {\n updates.isLocked = current.isLocked;\n }\n if (\n (previous && previous.isLocked && current.isUnlocked) ||\n (!previous && current.isUnlocked)\n ) {\n updates.isUnlocked = current.isUnlocked;\n }\n }\n\n return {\n previous,\n current,\n updates,\n };\n};\n\nexport default InfoUtils;\n","import {FULL_STATE} from '../constants';\n\nconst FullState: any = {};\n\nFullState.parse = (fullState) => ({\n type: fullState.type || FULL_STATE.UNKNOWN,\n meetingState: fullState.state,\n locked: fullState.locked,\n});\n\nFullState.getFullState = (oldFullState, newFullState) => {\n const previous = oldFullState && FullState.parse(oldFullState);\n const current = newFullState && FullState.parse(newFullState);\n\n return {\n previous,\n current,\n updates: {\n isMeetingEnded: FullState.isMeetingEnded(previous, current),\n isMeetingTerminating: FullState.isMeetingTerminating(previous, current),\n meetingTypeChangedTo: FullState.isTypeChanged(previous, current),\n meetingStateChangedTo: FullState.meetingStateChange(previous, current),\n },\n };\n};\n\nFullState.isMeetingEnded = (previous, current) => {\n if (\n current.state === FULL_STATE.INACTIVE &&\n previous &&\n (previous.state === FULL_STATE.ACTIVE ||\n previous.state === FULL_STATE.INITIALIZING ||\n previous.state === FULL_STATE.TERMINATING)\n ) {\n return true;\n }\n\n return false;\n};\n\nFullState.isMeetingTerminating = (previous, current) => {\n if (\n current.state === FULL_STATE.TERMINATING &&\n previous &&\n (previous.state === FULL_STATE.ACTIVE || previous.state === FULL_STATE.INITIALIZING)\n ) {\n return true;\n }\n\n return false;\n};\n\nFullState.isTypeChanged = (previous, current) => {\n if (!previous || current.type !== previous.type) {\n return current && current.type;\n }\n\n return null;\n};\n\nFullState.meetingStateChange = (previous, current) => {\n if (!previous || current.meetingState !== previous.meetingState) {\n return current && current.meetingState;\n }\n\n return null;\n};\n\nexport default FullState;\n","/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst SelfUtils: any = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\n/**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @returns {undefined}\n */\nSelfUtils.parse = (self: any, deviceId: string) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequestedTimeStamp: SelfUtils.getLocalAudioUnmuteRequestedTimeStamp(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakoutSessions(self),\n breakout: SelfUtils.getBreakout(self),\n interpretation: SelfUtils.getInterpretation(self),\n };\n }\n\n return null;\n};\n\nSelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;\nSelfUtils.getBreakout = (self) => self?.controls?.breakout;\nSelfUtils.getInterpretation = (self) => self?.controls?.interpretation;\n\nSelfUtils.getLayout = (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;\n\nSelfUtils.getRoles = (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []);\n\nSelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;\n\nSelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;\n\nSelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {\n const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);\n const current = newSelf && SelfUtils.parse(newSelf, deviceId);\n const updates: any = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n};\n\n/**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\nSelfUtils.isJoined = (self: any) => self?.state === _JOINED_;\n\n/**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the Meeting Layout Controls Layout has changed.\n */\nSelfUtils.layoutChanged = (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout;\n\nSelfUtils.breakoutsChanged = (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;\n\nSelfUtils.interpretationChanged = (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation;\n\nSelfUtils.isMediaInactive = (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n};\n\nSelfUtils.getLastModified = (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n};\n\n/**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\nSelfUtils.getSelfIdentity = (self: any) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote video mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteVideoMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.video) {\n return null;\n }\n\n return self.controls.video.muted;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\n// requestedToUnmute timestamp\nSelfUtils.getLocalAudioUnmuteRequestedTimeStamp = (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.getStatus = (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n});\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserUnadmitted = (check: any) =>\n check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check: any) =>\n check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;\n\n/**\n * @param {Object} self\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\nSelfUtils.isUserUnadmitted = (self: object) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(self);\n};\n\nSelfUtils.moderatorChanged = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\n/**\n * determine whether the roles of self is changed or not\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.isRolesChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n // no new self means no change\n return false;\n }\n\n return !isEqual(oldSelf?.roles, changedSelf?.roles);\n};\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isDeviceObserving = (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_;\n\n/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\nSelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\n};\n\nSelfUtils.videoMutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was video muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteVideoMuted === null) {\n if (changedSelf.remoteVideoMuted) {\n return true; // this happens when host disables \"Allow start video\"\n }\n\n // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join\n return false;\n }\n\n return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;\n};\n\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n // there is no need to trigger user update if no one muted user\n if (changedSelf.selfIdentity === changedSelf.modifiedBy) {\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return (\n changedSelf.localAudioUnmuteRequested &&\n changedSelf.localAudioUnmuteRequestedTimeStamp > oldSelf.localAudioUnmuteRequestedTimeStamp\n );\n};\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n};\n\n/**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\nSelfUtils.getSipUrl = (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n};\n\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n};\n\nSelfUtils.getReplacedBreakoutMoveId = (self: any, deviceId: string) => {\n if (self && Array.isArray(self.devices)) {\n const joinedDevice = self.devices.find((device) => deviceId === device.url);\n if (Array.isArray(joinedDevice?.replaces)) {\n return joinedDevice.replaces[0]?.breakoutMoveId;\n }\n }\n\n return null;\n};\nexport default SelfUtils;\n","const HostUtils: any = {};\n\n/**\n * parse the relevant host values that we care about: id\n * @param {Object} host\n * @returns {Object} parsed host or null if host was undefined\n */\nHostUtils.parse = (host: object) => {\n if (host) {\n return {\n hostId: HostUtils.getId(host),\n };\n }\n\n return null;\n};\n\n/**\n * get the previous and current host values parsed, as well as the boolean updates\n * @param {Object} oldHost\n * @param {Object} newHost\n * @returns {Object}\n * previous: {Object} old host, current: {Object} new host, updates: {isNewHost: {boolean}} boolean update values\n */\nHostUtils.getHosts = (oldHost: object, newHost: object) => {\n const previous = oldHost && HostUtils.parse(oldHost);\n const current = newHost && HostUtils.parse(newHost);\n\n return {\n previous,\n current,\n updates: {\n isNewHost:\n previous && current ? HostUtils.isDifferentHosts(previous.hostId, current.hostId) : true,\n },\n };\n};\n\n/**\n * determine by id if 2 hosts are different\n * @param {String} previousId\n * @param {String} currentId\n * @returns {Boolean}\n */\nHostUtils.isDifferentHosts = (previousId: string, currentId: string) => previousId !== currentId;\n\n/**\n * Extract the id from the host object\n * @param {Object} host\n * @returns {String}\n */\nHostUtils.getId = (host: any) => {\n if (!host) {\n return null;\n }\n\n return host.id;\n};\n\nexport default HostUtils;\n","import {isEqual} from 'lodash';\nimport {BREAKOUTS} from '../constants';\n\nconst ControlsUtils: any = {};\n\n/**\n * Controls\n * @typedef {Object} LocusControls\n * @property {Object} record\n * @property {Boolean} record.recording\n * @property {Object} record.meta\n * @property {String} record.meta.modifiedBy\n */\n\n/**\n * parse the relevant host values that we care about: id\n * @param {LocusControls} controls\n * @returns {Object} parsedObject - parsed host or null if host was undefined\n * @returns {String} parsedObject.recordingId\n */\nControlsUtils.parse = (controls: any) => {\n const parsedControls = {...controls};\n\n if (controls && controls.record) {\n parsedControls.record = {\n modifiedBy: ControlsUtils.getId(controls),\n paused: controls.record.paused ? controls.record.paused : false,\n recording: controls.record.recording,\n lastModified: controls.record.meta.lastModified,\n };\n }\n\n if (controls && controls.meetingContainer) {\n parsedControls.meetingContainer = {\n meetingContainerUrl: controls.meetingContainer.meetingContainerUrl,\n };\n }\n\n if (controls && controls.transcribe) {\n parsedControls.transcribe = {\n transcribing: controls.transcribe.transcribing,\n caption: controls.transcribe.caption,\n };\n }\n\n if (controls && controls.manualCaptionControl) {\n parsedControls.manualCaptionControl = {\n enabled: controls.manualCaptionControl.enabled,\n };\n }\n\n if (controls && controls.entryExitTone) {\n parsedControls.entryExitTone = controls.entryExitTone.enabled\n ? controls.entryExitTone.mode\n : null;\n }\n\n if (controls && controls.video) {\n parsedControls.videoEnabled = controls.video.enabled;\n }\n\n if (controls?.muteOnEntry) {\n parsedControls.muteOnEntry = {enabled: controls.muteOnEntry.enabled};\n }\n\n if (controls?.shareControl) {\n parsedControls.shareControl = {control: controls.shareControl.control};\n }\n\n if (controls?.disallowUnmute) {\n parsedControls.disallowUnmute = {enabled: controls.disallowUnmute.enabled};\n }\n\n if (controls?.reactions) {\n parsedControls.reactions = {\n enabled: controls.reactions.enabled,\n showDisplayNameWithReactions: controls.reactions.showDisplayNameWithReactions,\n };\n }\n\n if (controls?.viewTheParticipantList) {\n parsedControls.viewTheParticipantList = {enabled: controls.viewTheParticipantList.enabled};\n }\n\n if (controls?.raiseHand) {\n parsedControls.raiseHand = {enabled: controls.raiseHand.enabled};\n }\n\n if (controls?.video) {\n parsedControls.video = {enabled: controls.video.enabled};\n }\n\n return parsedControls;\n};\n\n/**\n * parses and returns previous state vs current state and triggers the changes.\n * @param {LocusControls} oldControls previous state\n * @param {LocusControls} newControls current state\n * @returns {Object} combination of state plus the changes\n */\nControlsUtils.getControls = (oldControls: any, newControls: any) => {\n const previous = ControlsUtils.parse(oldControls);\n const current = ControlsUtils.parse(newControls);\n\n return {\n previous,\n current,\n updates: {\n hasMuteOnEntryChanged: current?.muteOnEntry?.enabled !== previous?.muteOnEntry?.enabled,\n\n hasShareControlChanged: current?.shareControl?.control !== previous?.shareControl?.control,\n\n hasDisallowUnmuteChanged:\n current?.disallowUnmute?.enabled !== previous?.disallowUnmute?.enabled,\n\n hasReactionsChanged: current?.reactions?.enabled !== previous?.reactions?.enabled,\n\n hasReactionDisplayNamesChanged:\n current?.reactions?.showDisplayNameWithReactions !==\n previous?.reactions?.showDisplayNameWithReactions,\n\n hasViewTheParticipantListChanged:\n current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled,\n\n hasRaiseHandChanged: current?.raiseHand?.enabled !== previous?.raiseHand?.enabled,\n\n hasVideoChanged: current?.video?.enabled !== previous?.video?.enabled,\n\n hasRecordingPausedChanged:\n current?.record &&\n !isEqual(previous?.record?.paused, current.record.paused) &&\n (previous?.record?.recording || current?.record?.recording), // see comments directly below\n\n hasRecordingChanged:\n current?.record &&\n !isEqual(previous?.record?.recording, current?.record?.recording) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true\n (previous?.record?.recording || current?.record?.recording), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting\n\n hasMeetingContainerChanged:\n current?.meetingContainer &&\n !isEqual(\n previous?.meetingContainer?.meetingContainerUrl,\n current?.meetingContainer?.meetingContainerUrl\n ),\n\n hasTranscribeChanged:\n current?.transcribe &&\n !isEqual(previous?.transcribe?.transcribing, current?.transcribe?.transcribing) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true\n (previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting\n\n hasManualCaptionChanged:\n current?.manualCaptionControl &&\n !isEqual(previous?.manualCaptionControl?.enabled, current?.manualCaptionControl?.enabled) &&\n (previous?.manualCaptionControl?.enabled || current?.manualCaptionControl?.enabled),\n\n hasEntryExitToneChanged: !!(\n newControls.entryExitTone &&\n !isEqual(previous?.entryExitTone, current?.entryExitTone) &&\n (previous?.entryExitTone || current?.entryExitTone)\n ),\n\n hasBreakoutChanged: !isEqual(previous?.breakout, current?.breakout),\n\n hasInterpretationChanged: !isEqual(previous?.interpretation, current?.interpretation),\n\n hasVideoEnabledChanged:\n newControls.video?.enabled !== undefined &&\n !isEqual(previous?.videoEnabled, current?.videoEnabled),\n },\n };\n};\n\n/**\n * Extract the id from the record controls object\n * @param {LocusControls} controls\n * @returns {String|null}\n */\nControlsUtils.getId = (controls: any) => {\n if (controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n};\n\n/**\n * check whether to replace the meeting's members or not.\n * For case joined breakout session, need replace meeting's members\n * @param {LocusControls} oldControls\n * @param {LocusControls} controls\n * @returns {Boolean}\n */\nControlsUtils.isNeedReplaceMembers = (oldControls: any, controls: any) => {\n // no breakout case\n if (!oldControls?.breakout || !controls?.breakout) {\n return false;\n }\n\n return (\n oldControls.breakout.groupId !== controls.breakout.groupId ||\n oldControls.breakout.sessionId !== controls.breakout.sessionId\n );\n};\n\n/**\n * determine the switch status between breakout session and main session.\n * @param {LocusControls} oldControls\n * @param {LocusControls} controls\n * @returns {Object}\n */\nControlsUtils.getSessionSwitchStatus = (oldControls: any, controls: any) => {\n const status = {isReturnToMain: false, isJoinToBreakout: false};\n // no breakout case\n if (!oldControls?.breakout || !controls?.breakout) {\n return status;\n }\n\n status.isReturnToMain =\n oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;\n status.isJoinToBreakout =\n oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN &&\n controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;\n\n return status;\n};\n\nControlsUtils.isMainSessionDTO = (locus: any) => {\n return locus?.controls?.breakout?.sessionType !== BREAKOUTS.SESSION_TYPES.BREAKOUT;\n};\n\nexport default ControlsUtils;\n","import {EMBEDDED_APP_TYPES} from '../constants';\n\nconst EmbeddedAppsUtils: any = {};\nconst SLIDO_REGEX = /.sli.do\\//;\n\n/**\n * Parse the relevant values that we care about\n * @param {Object} embeddedApp - raw embedded app object\n * @returns {Object} parsedObject - parsed embedded app object\n */\nEmbeddedAppsUtils.parseApp = (embeddedApp: object) => {\n const parsedApp: any = {...embeddedApp};\n\n parsedApp.type = EMBEDDED_APP_TYPES.OTHER;\n const url = parsedApp.instanceInfo?.appInstanceUrl;\n\n if (url && url.match(SLIDO_REGEX)) {\n parsedApp.type = EMBEDDED_APP_TYPES.SLIDO;\n }\n\n return parsedApp;\n};\n\n/**\n * Determines if two embedded apps arrays are similar.\n * NOTE: This is a simple test for performance reasons.\n * @param {any[]} apps1 - an array of apps\n * @param {any[]} apps2 - an array of apps\n * @returns {boolean} true if the arrays are different\n */\nEmbeddedAppsUtils.areSimilar = (apps1: any[], apps2: any[]) => {\n if (!apps1 || !apps2) {\n return apps1 === apps2;\n }\n\n if (apps1?.length !== apps2?.length) {\n return false;\n }\n\n for (let i = 0; i < apps1.length; i += 1) {\n if (apps1[i].state !== apps2[i].state) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Parse the array of embedded apps\n * @param {array} embeddedApps\n * @returns {array} result - new array of parsed embedded app objects\n */\nEmbeddedAppsUtils.parse = (embeddedApps: Array) =>\n embeddedApps && embeddedApps.map(EmbeddedAppsUtils.parseApp);\n\nexport default EmbeddedAppsUtils;\n","import {CONTENT, WHITEBOARD} from '../constants';\n\nconst MediaSharesUtils: any = {};\n\n/**\n * parses the relevant values for mediaShares: contentId, disposition\n * @param {Object} mediaShares\n * @returns {undefined}\n */\nMediaSharesUtils.parse = (mediaShares: object) => {\n if (mediaShares) {\n return {\n content: {\n beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),\n disposition: MediaSharesUtils.getContentDisposition(mediaShares),\n annotation: MediaSharesUtils.getContentAnnotation(mediaShares),\n url: MediaSharesUtils.getContentUrl(mediaShares),\n shareInstanceId: MediaSharesUtils.getShareInstanceId(mediaShares),\n deviceUrlSharing: MediaSharesUtils.getContentBeneficiaryDeviceUrl(mediaShares),\n resourceType: MediaSharesUtils.getContentResourceType(mediaShares),\n },\n whiteboard: {\n beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),\n disposition: MediaSharesUtils.getWhiteboardDisposition(mediaShares),\n resourceUrl: MediaSharesUtils.getWhiteboardResourceUrl(mediaShares),\n },\n };\n }\n\n return null;\n};\n\n/**\n * get the previous and current mediaShares values parsed, as well as the boolean updates\n * @param {Object} oldShare\n * @param {Object} newShare\n * @returns {Object}\n * previous: {Object} old share, current: {Object} new share,\n */\nMediaSharesUtils.getMediaShares = (oldShare: object, newShare: object) => {\n const previous = oldShare && MediaSharesUtils.parse(oldShare);\n const current = newShare && MediaSharesUtils.parse(newShare);\n\n return {\n previous,\n current,\n };\n};\n\n/**\n * get the content floor disposition (released, granted)\n * @param {Object} mediaShares\n * @returns {Boolean} disposition\n */\nMediaSharesUtils.getContentDisposition = (mediaShares: object) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n return contentFloor ? contentFloor.disposition : null;\n};\n\n/**\n * get the whiteboard floor disposition (released, granted)\n * @param {Object} mediaShares\n * @returns {Boolean} disposition\n */\nMediaSharesUtils.getWhiteboardDisposition = (mediaShares: object) => {\n const whiteboardFloor = MediaSharesUtils.extractWhiteboardFloor(mediaShares);\n\n return whiteboardFloor ? whiteboardFloor.disposition : null;\n};\n\n/**\n * extract the content property from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractContent = (mediaShares: any) => {\n if (!mediaShares || !mediaShares.length) {\n return null;\n }\n\n return mediaShares.find((share) => share.name === CONTENT) || null;\n};\n\n/**\n * extract the whiteboard property from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractWhiteboard = (mediaShares: any) => {\n if (!mediaShares || !mediaShares.length) {\n return null;\n }\n\n return mediaShares.find((share) => share.name === WHITEBOARD) || null;\n};\n\n/**\n * extract the media stream floor property from content object\n * @param {Object} mediaStream\n * @returns {Object}\n */\nMediaSharesUtils.extractFloor = (mediaStream: any) => {\n if (!mediaStream) {\n return null;\n }\n\n return mediaStream.floor;\n};\n\n/**\n * extract the content's floor from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractContentFloor = (mediaShares: object) => {\n const content = MediaSharesUtils.extractContent(mediaShares);\n\n return MediaSharesUtils.extractFloor(content);\n};\n\n/**\n * extract the whiteboard's floor from media shares\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.extractWhiteboardFloor = (mediaShares: object) => {\n const whiteboard = MediaSharesUtils.extractWhiteboard(mediaShares);\n\n return MediaSharesUtils.extractFloor(whiteboard);\n};\n\n/**\n * get who is sharing from media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentBeneficiaryId = (mediaShares: object) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n if (!contentFloor || !contentFloor.beneficiary) {\n return null;\n }\n\n return contentFloor.beneficiary.id;\n};\n\n/**\n * get live annotation is sharing from media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentAnnotation = (mediaShares: object) => {\n const extractContent = MediaSharesUtils.extractContent(mediaShares);\n\n if (!extractContent || !extractContent.annotation) {\n return undefined;\n }\n\n return extractContent.annotation;\n};\n\n/**\n * get live resourceType is sharing from media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentResourceType = (mediaShares: object) => {\n const extractContent = MediaSharesUtils.extractContent(mediaShares);\n\n if (!extractContent || !extractContent.resourceType) {\n return undefined;\n }\n\n return extractContent.resourceType;\n};\n\n/**\n * get url is sharing from media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentUrl = (mediaShares: object) => {\n const extractContent = MediaSharesUtils.extractContent(mediaShares);\n\n if (!extractContent || !extractContent.url) {\n return undefined;\n }\n\n return extractContent.url;\n};\n\n/**\n * get shareInstanceId is sharing from media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getShareInstanceId = (mediaShares: object) => {\n const extractContent = MediaSharesUtils.extractContent(mediaShares);\n\n if (!extractContent || !extractContent.floor || !extractContent.floor.shareInstanceId) {\n return undefined;\n }\n\n return extractContent.floor.shareInstanceId;\n};\n\n/**\n * get deviceUrl that is requesting the floor for media shares (content)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getContentBeneficiaryDeviceUrl = (mediaShares: object) => {\n const contentFloor = MediaSharesUtils.extractContentFloor(mediaShares);\n\n if (!contentFloor || !contentFloor.beneficiary || !contentFloor.beneficiary.deviceUrl) {\n return null;\n }\n\n return contentFloor.beneficiary.deviceUrl;\n};\n\n/**\n * get who is sharing from media shares (whiteboard)\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getWhiteboardBeneficiaryId = (mediaShares: object) => {\n const whiteboardFloor = MediaSharesUtils.extractWhiteboardFloor(mediaShares);\n\n if (!whiteboardFloor || !whiteboardFloor.beneficiary) {\n return null;\n }\n\n return whiteboardFloor.beneficiary.id;\n};\n\n/**\n * get the which whiteboard is being shared via resource url\n * @param {Object} mediaShares\n * @returns {Object}\n */\nMediaSharesUtils.getWhiteboardResourceUrl = (mediaShares: object) => {\n const whiteboard = MediaSharesUtils.extractWhiteboard(mediaShares);\n\n if (!whiteboard || !whiteboard.resourceUrl) {\n return null;\n }\n\n return whiteboard.resourceUrl;\n};\n\nexport default MediaSharesUtils;\n","import _Object$freeze from \"core-js/library/fn/object/freeze.js\";\nimport _Object$defineProperties from \"core-js/library/fn/object/define-properties.js\";\nexport default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n return _Object$freeze(_Object$defineProperties(strings, {\n raw: {\n value: _Object$freeze(raw)\n }\n }));\n}","/**\n * Simple queue in which the elements are always sorted\n */\nexport default class SortedQueue {\n queue: ItemType[];\n // returns -1 if left < right, 0 if left === right, +1 if left > right\n compareFunc: (left: ItemType, right: ItemType) => number;\n\n /**\n * @constructs SortedQueue\n * @param {Function} compareFunc comparison function used for sorting the elements of the queue\n */\n constructor(compareFunc: (left: ItemType, right: ItemType) => number) {\n this.queue = [];\n this.compareFunc = compareFunc;\n }\n\n /**\n * Removes all of the elements from queue.\n * @returns {undefined}\n */\n clear() {\n this.queue = [];\n }\n\n /**\n * Inserts the specified element into the queue.\n * @param {object} item\n * @returns {undefined}\n */\n enqueue(item: ItemType) {\n // Find the index of the first item in the queue that's greater or equal to the new item.\n // That's where we want to insert the new item.\n const idx = this.queue.findIndex((existingItem) => {\n return this.compareFunc(existingItem, item) >= 0;\n });\n if (idx >= 0) {\n this.queue.splice(idx, 0, item);\n } else {\n this.queue.push(item);\n }\n }\n\n /**\n * Returns and removes the head of the queue.\n * Returns null if the queue is empty.\n * @returns {(object|null)} Queue item or null.\n */\n dequeue(): ItemType {\n if (this.queue.length === 0) {\n return null;\n }\n\n return this.queue.shift();\n }\n\n /**\n * Returns the number of items in queue.\n * @returns {number}\n */\n size() {\n return this.queue.length;\n }\n}\n","import {difference} from 'lodash';\n\nimport SortedQueue from '../common/queue';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nconst MAX_OOO_DELTA_COUNT = 5; // when we receive an out-of-order delta and the queue builds up to MAX_OOO_DELTA_COUNT, we do a sync with Locus\nconst OOO_DELTA_WAIT_TIME = 10000; // [ms] minimum wait time before we do a sync if we get out-of-order deltas\nconst OOO_DELTA_WAIT_TIME_RANDOM_DELAY = 5000; // [ms] max random delay added to OOO_DELTA_WAIT_TIME\n\ntype LocusDeltaDto = {\n url: string;\n baseSequence: {\n rangeStart: number;\n rangeEnd: number;\n entries: number[];\n };\n sequence: {\n rangeStart: number;\n rangeEnd: number;\n entries: number[];\n };\n syncUrl: string;\n};\n\n/**\n * Locus Delta Parser\n * @private\n * https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Delta-Events\n */\nexport default class Parser {\n // processing status\n status:\n | 'IDLE' // not doing anything\n | 'PAUSED' // paused, because we are doing a sync\n | 'WORKING' // processing a delta event\n | 'BLOCKED'; // received an out-of-order delta, so waiting for the missing one\n\n // loci comparison states\n static loci = {\n EQ: 'EQUAL',\n GT: 'GREATER_THAN',\n LT: 'LESS_THAN',\n DESYNC: 'DESYNC',\n USE_INCOMING: 'USE_INCOMING',\n USE_CURRENT: 'USE_CURRENT',\n WAIT: 'WAIT',\n ERROR: 'ERROR',\n LOCUS_URL_CHANGED: 'LOCUS_URL_CHANGED',\n };\n\n queue: SortedQueue;\n workingCopy: any;\n syncTimer?: ReturnType;\n\n /**\n * @constructs Parser\n */\n constructor() {\n const deltaCompareFunc = (left: LocusDeltaDto, right: LocusDeltaDto) => {\n const {LT, GT} = Parser.loci;\n const {extractComparisonState: extract} = Parser;\n\n if (Parser.isSequenceEmpty(left)) {\n return -1;\n }\n if (Parser.isSequenceEmpty(right)) {\n return 1;\n }\n const result = extract(Parser.compareSequence(left.baseSequence, right.baseSequence));\n\n if (result === LT) {\n return -1;\n }\n if (result === GT) {\n return 1;\n }\n\n return 0;\n };\n\n this.queue = new SortedQueue(deltaCompareFunc);\n this.status = 'IDLE';\n this.onDeltaAction = null;\n this.workingCopy = null;\n this.syncTimer = undefined;\n }\n\n /**\n * Returns a debug string representing a locus delta - useful for logging\n *\n * @param {LocusDeltaDto} locus Locus delta\n * @returns {string}\n */\n static locus2string(locus: LocusDeltaDto) {\n if (!locus.sequence?.entries) {\n return 'invalid';\n }\n\n return locus.sequence.entries.length ? `seq=${locus.sequence.entries.at(-1)}` : 'empty';\n }\n\n /**\n * Checks if two sequences overlap in time,\n * the sequence with the higher minimum value is greater.\n * Chooses sequence with most recent data.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkSequenceOverlap(current, incoming) {\n let comparison = null;\n\n // if earliest working copy sequence is more recent than last incoming sequence\n if (current.min > incoming.max) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:SO001`;\n }\n // if last working copy sequence is before the earliest incoming sequence\n else if (current.max < incoming.min) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:SO002`;\n }\n\n // if no match above, defaults to null\n return comparison;\n }\n\n /**\n * Checks if two sequences have unequal ranges.\n * Chooses sequence with most larger range.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {object} loci comparison\n */\n static checkUnequalRanges(current, incoming) {\n let comparison = null;\n const currentIsNotUnique = current.unique.length === 0;\n const incomingIsNotUnique = incoming.unique.length === 0;\n const currentTotalRange = current.end - current.min;\n const incomingTotalRange = incoming.end - incoming.min;\n\n // no unique values for both loci\n if (currentIsNotUnique && incomingIsNotUnique) {\n // current working copy loci has a larger range\n if (currentTotalRange > incomingTotalRange) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UR001`;\n }\n // incoming delta loci has a larger range\n else if (currentTotalRange < incomingTotalRange) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UR002`;\n } else {\n // with no unique entries and with ranges either absent or\n // of the same size, the sequences are considered equal.\n comparison = `${Parser.loci.EQ}:UR003`;\n }\n }\n\n return comparison;\n }\n\n /**\n * Checks if either sequences has unique entries.\n * Entries are considered unique if they do not overlap\n * with other Loci sequences or range values.\n * Chooses sequence with the unique entries.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkForUniqueEntries(current, incoming) {\n let comparison = null;\n const currentIsUnique = current.unique.length > 0;\n const incomingIsUnique = incoming.unique.length > 0;\n\n // current has unique entries and incoming does not\n if (currentIsUnique && !incomingIsUnique) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:UE001`;\n }\n // current has no unique entries but incoming does\n else if (!currentIsUnique && incomingIsUnique) {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:UE002`;\n }\n\n return comparison;\n }\n\n /**\n * Checks both Locus Delta objects to see if they are\n * out of sync with one another. If so sends a DESYNC\n * request to the server.\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static checkIfOutOfSync(current, incoming) {\n let comparison = null;\n const currentUniqueMin = current.unique[0];\n const incomingUniqueMin = incoming.unique[0];\n\n const currentHasNoRange = !current.start && !current.end;\n const incomingHasNoRange = !incoming.start && !incoming.end;\n const neitherSeqHasRange = currentHasNoRange && incomingHasNoRange;\n\n const hasUniqOverlap = (list, min, max) => list.some((seq) => min < seq && seq < max);\n // current unique entries overlap the total range of incoming\n const currentUniqOverlap = hasUniqOverlap(current.unique, incoming.min, incoming.max);\n // vice-versa, incoming unique entries overlap the total range of current\n const incomingUniqOverlap = hasUniqOverlap(incoming.unique, current.min, current.max);\n\n if (neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap) {\n // outputs string indicating which condition occurred. ex: 0,1,0\n const debugInfo = `${+neitherSeqHasRange},${+currentUniqOverlap},${+incomingUniqOverlap}`;\n\n // send DESYNC to server\n comparison = `${Parser.loci.DESYNC}:OOS001:${debugInfo}`;\n } else if (currentUniqueMin > incomingUniqueMin) {\n // choose left side (current)\n comparison = `${Parser.loci.GT}:OOS002`;\n } else {\n // choose right side (incoming)\n comparison = `${Parser.loci.LT}:OOS003`;\n }\n\n return comparison;\n }\n\n /**\n * Compares two loci to determine which one contains the most recent state\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @returns {string} loci comparison state\n */\n static compare(current, incoming) {\n const {isSequenceEmpty} = Parser;\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n if (isSequenceEmpty(current) || isSequenceEmpty(incoming)) {\n return pack(Parser.loci.USE_INCOMING, 'C001');\n }\n\n if (incoming.baseSequence) {\n return pack(Parser.compareDelta(current, incoming), 'C002');\n }\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n const action = Parser.compareToAction(extract(result));\n\n return pack(action, result);\n }\n\n /**\n * Compares two loci sequences (with delta params) and indicates what action\n * to take.\n * @instance\n * @memberof Locus\n * @param {Types~Locus} current\n * @param {Types~Locus} incoming\n * @private\n * @returns {string} loci comparison state\n */\n private static compareDelta(current, incoming) {\n const {LT, GT, EQ, DESYNC, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = Parser.loci;\n\n const {extractComparisonState: extract} = Parser;\n const {packComparisonResult: pack} = Parser;\n\n const result = Parser.compareSequence(current.sequence, incoming.sequence);\n let comparison = extract(result);\n\n if (comparison !== LT) {\n return pack(Parser.compareToAction(comparison), result);\n }\n\n if (incoming.url !== current.url) {\n // when moving to/from a breakout session, the locus URL will change and also\n // the baseSequence, making incoming and current incomparable, so use a\n // unique comparison state\n return pack(LOCUS_URL_CHANGED, result);\n }\n\n comparison = Parser.compareSequence(current.sequence, incoming.baseSequence);\n\n switch (extract(comparison)) {\n case GT:\n case EQ:\n comparison = USE_INCOMING;\n break;\n\n case LT:\n if (extract(Parser.compareSequence(incoming.baseSequence, incoming.sequence)) === EQ) {\n // special case where Locus sends a delta with baseSequence === sequence to trigger a sync,\n // because the delta event is too large to be sent over mercury connection\n comparison = DESYNC;\n } else {\n // the incoming locus has baseSequence from the future, so it is out-of-order,\n // we are missing 1 or more locus that should be in front of it, we need to wait for it\n comparison = WAIT;\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_OUT_OF_ORDER, {\n stack: new Error().stack,\n });\n }\n break;\n default:\n comparison = DESYNC;\n }\n\n return pack(comparison, result);\n }\n\n /**\n * Compares Locus sequences - it should be called only for full Locus DTOs, not deltas\n *\n * @param {Types~Locus} current Current working copy\n * @param {Types~Locus} incomingFullDto New Full Locus DTO\n * @returns {string} either Parser.loci.USE_INCOMING or Parser.loci.USE_CURRENT\n */\n static compareFullDtoSequence(current, incomingFullDto) {\n if (Parser.isSequenceEmpty(current) || Parser.isSequenceEmpty(incomingFullDto)) {\n return Parser.loci.USE_INCOMING;\n }\n\n // the sequence.entries list will always contain at least 1 entry\n // https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm\n\n return incomingFullDto.sequence.entries.slice(-1)[0] > current.sequence.entries.slice(-1)[0]\n ? Parser.loci.USE_INCOMING\n : Parser.loci.USE_CURRENT;\n }\n\n /**\n * Returns true if the incoming full locus DTO is newer than the current working copy\n *\n * @param {Types~Locus} incomingFullDto New Full Locus DTO\n * @returns {string} either Parser.loci.USE_INCOMING or Parser.loci.USE_CURRENT\n */\n isNewFullLocus(incomingFullDto) {\n if (!Parser.isLoci(incomingFullDto)) {\n LoggerProxy.logger.info('Locus-info:parser#isNewFullLocus --> Ignoring non-locus object.');\n\n return false;\n }\n\n if (!this.workingCopy) {\n // we don't have a working copy yet, so any full locus is better than nothing\n return true;\n }\n\n const comparisonResult = Parser.compareFullDtoSequence(this.workingCopy, incomingFullDto);\n\n return comparisonResult === Parser.loci.USE_INCOMING;\n }\n\n /**\n * Compares Locus sequences\n * @param {Types~Locus} current Current working copy\n * @param {Types~Locus} incoming New Locus delta\n * @returns {string}\n */\n static compareSequence(current, incoming) {\n // Locus sequence comparison rules in order of priority.\n // https://sqbu-github.cisco.com/WebExSquared/cloud-apps/wiki/Locus-Sequence-Comparison-Algorithm\n\n const local: any = Parser.getMetaData(current);\n const delta: any = Parser.getMetaData(incoming);\n\n // update loci metadata\n local.unique = Parser.getUniqueSequences(local, delta);\n delta.unique = Parser.getUniqueSequences(delta, local);\n\n // Locus sequence comparison rules\n // order matters\n const rules = [\n Parser.checkSequenceOverlap,\n Parser.checkUnequalRanges,\n Parser.checkForUniqueEntries,\n Parser.checkIfOutOfSync,\n ];\n\n for (const rule of rules) {\n // Rule only returns a value if the rule applies,\n // otherwise returns null.\n const result = rule(local, delta);\n\n if (result) {\n return result;\n }\n }\n\n // error, none of rules above applied\n // should never get here as last rule\n // should be catch all.\n return Parser.loci.ERROR;\n }\n\n /**\n * Transates the result of a sequence comparison into an intended behavior\n * @param {string} result\n * @returns {string} Locus comparison action\n */\n static compareToAction(result: string) {\n const {DESYNC, EQ, ERROR, GT, LT, USE_CURRENT, USE_INCOMING} = Parser.loci;\n\n let action = ERROR;\n\n switch (result) {\n case EQ:\n case GT:\n action = USE_CURRENT;\n break;\n case LT:\n action = USE_INCOMING;\n break;\n case DESYNC:\n action = DESYNC;\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:parser#compareToAction --> Error: ${result} is not a recognized sequence comparison result.`\n );\n }\n\n return action;\n }\n\n /**\n * Extracts a loci comparison from a string of data.\n * @param {string} lociComparisonResult Comparison result with extra data\n * @returns {string} Comparison of EQ, LT, GT, or DESYNC.\n */\n static extractComparisonState(lociComparisonResult: string) {\n return lociComparisonResult.split(':')[0];\n }\n\n /**\n * @typedef {object} LociMetadata\n * @property {number} start - Starting sequence number\n * @property {number} end - Ending sequence number\n * @property {number} first - First sequence number\n * @property {number} last - Last sequence number\n * @property {number} min - Minimum sequence number\n * @property {number} max - Maximum sequence number\n * @property {number} entries - Loci sequence entries\n */\n\n /**\n * Metadata for Locus delta\n * @param {Array.} sequence Locus delta sequence\n * @returns {LociMetadata} Locus Delta Metadata\n */\n static getMetaData(sequence: any) {\n const {entries} = sequence;\n const first = entries[0];\n const last = entries.slice(-1)[0];\n\n // rangeStart or rangeEnd is 0 if a range doesn't exist\n const start = sequence.rangeStart;\n const end = sequence.rangeEnd;\n\n // sequence data\n return {\n start,\n end,\n first,\n last,\n // Rule is: rangeStart <= rangeEnd <= min(entries)\n min: start || first,\n // Grab last entry if exist else default to rangeEnd\n max: last || end,\n // keep reference to actual sequence entries\n entries,\n };\n }\n\n /**\n * Compares two Locus delta objects and notes unique\n * values contained within baseLoci.\n * @param {LociMetadata} baseLoci\n * @param {LociMetadata} otherLoci\n * @returns {Array.} List of unique sequences\n */\n static getUniqueSequences(baseLoci: any, otherLoci: any) {\n const diff: any = difference(baseLoci.entries, otherLoci.entries);\n\n const {start, end} = otherLoci;\n\n return Parser.getNumbersOutOfRange(diff, start, end);\n }\n\n /**\n * Returns an array of numbers outside of a given range.\n * @param {Array.} list Array to filter\n * @param {number} rangeStart Start of range\n * @param {number} rangeEnd End of range\n * @returns {Array.} Array of numbers sorted ASC\n */\n static getNumbersOutOfRange(list: Array, rangeStart: number, rangeEnd: number) {\n // Collect all numbers if number is outside of specified range\n const output = list.filter((num) => num < rangeStart || num > rangeEnd);\n\n // sort ascending\n return output.sort((a, b) => a - b);\n }\n\n /**\n * Checks if newLoci or workingCopy is invalid.\n * @param {Types~Locus} newLoci\n * @returns {boolean}\n */\n isValidLocus(newLoci) {\n let isValid = false;\n const {isLoci} = Parser;\n\n // one or both objects are not locus delta events\n if (!isLoci(this.workingCopy) || !isLoci(newLoci)) {\n LoggerProxy.logger.info(\n 'Locus-info:parser#processDeltaEvent --> Ignoring non-locus object. workingCopy:',\n this.workingCopy,\n 'newLoci:',\n newLoci\n );\n } else {\n isValid = true;\n }\n\n return isValid;\n }\n\n /**\n * Determines if a paricular locus's sequence is empty\n * @param {Types~Locus} locus\n * @returns {bool}\n */\n static isSequenceEmpty(locus) {\n const {sequence} = locus;\n const hasEmptyEntries = !sequence.entries?.length;\n const hasEmptyRange = sequence.rangeStart === 0 && sequence.rangeEnd === 0;\n\n return hasEmptyEntries && hasEmptyRange;\n }\n\n /**\n * Determines if an object has basic\n * structure of a locus object.\n * @param {Types~Locus} loci\n * @returns {boolean}\n */\n static isLoci(loci) {\n if (!loci || !loci.sequence) {\n return false;\n }\n const hasProp = (prop) => Object.prototype.hasOwnProperty.call(loci.sequence, prop);\n\n if (hasProp('rangeStart') && hasProp('rangeEnd')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Processes next event in queue,\n * if queue is empty sets status to idle.\n * @returns {undefined}\n */\n nextEvent() {\n if (this.status === 'PAUSED') {\n LoggerProxy.logger.info('Locus-info:parser#nextEvent --> Locus parser paused.');\n\n return;\n }\n\n if (this.status === 'BLOCKED') {\n LoggerProxy.logger.info(\n 'Locus-info:parser#nextEvent --> Locus parser blocked by out-of-order delta.'\n );\n\n return;\n }\n\n // continue processing until queue is empty\n if (this.queue.size() > 0) {\n this.processDeltaEvent();\n } else {\n this.status = 'IDLE';\n }\n }\n\n /**\n * Function handler for delta actions,\n * is set by instance callee.\n * @param {string} action Locus delta action\n * @param {Types~Locus} locus Locus delta\n * @returns {undefined}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onDeltaAction(action: string, locus) {}\n\n /**\n * Event handler for locus delta events\n * @param {Types~Locus} loci Locus Delta\n * @returns {undefined}\n */\n onDeltaEvent(loci) {\n // enqueue the new loci\n this.queue.enqueue(loci);\n\n if (this.onDeltaAction) {\n if (this.status === 'BLOCKED') {\n if (this.queue.size() > MAX_OOO_DELTA_COUNT) {\n this.triggerSync('queue too big, blocked on out-of-order delta');\n } else {\n this.processDeltaEvent();\n }\n } else if (this.status === 'IDLE') {\n // Update status, ensure we only process one event at a time.\n this.status = 'WORKING';\n\n this.processDeltaEvent();\n }\n }\n }\n\n /**\n * Appends new data onto a string of existing data.\n * @param {string} newData\n * @param {string} oldData\n * @returns {string}\n */\n static packComparisonResult(newData: string, oldData: string) {\n return `${newData}:${oldData}`;\n }\n\n /**\n * Pause locus processing\n * @returns {undefined}\n */\n pause() {\n this.status = 'PAUSED';\n LoggerProxy.logger.info('Locus-info:parser#pause --> Locus parser paused.');\n }\n\n /**\n * Triggers a sync with Locus\n *\n * @param {string} reason used just for logging\n * @returns {undefined}\n */\n private triggerSync(reason: string) {\n LoggerProxy.logger.info(`Locus-info:parser#triggerSync --> doing sync, reason: ${reason}`);\n this.stopSyncTimer();\n this.pause();\n this.onDeltaAction(Parser.loci.DESYNC, this.workingCopy);\n }\n\n /**\n * Starts a timer with a random delay. When that timer expires we will do a sync.\n *\n * The main purpose of this timer is to handle a case when we get some out-of-order deltas,\n * so we start waiting to receive the missing delta. If that delta never arrives, this timer\n * will trigger a sync with Locus.\n *\n * @returns {undefined}\n */\n private startSyncTimer() {\n if (this.syncTimer === undefined) {\n const timeout = OOO_DELTA_WAIT_TIME + Math.random() * OOO_DELTA_WAIT_TIME_RANDOM_DELAY;\n\n this.syncTimer = setTimeout(() => {\n this.syncTimer = undefined;\n this.triggerSync('timer expired, blocked on out-of-order delta');\n }, timeout);\n }\n }\n\n /**\n * Stops the timer for triggering a sync\n *\n * @returns {undefined}\n */\n private stopSyncTimer() {\n if (this.syncTimer !== undefined) {\n clearTimeout(this.syncTimer);\n this.syncTimer = undefined;\n }\n }\n\n /**\n * Processes next locus delta in the queue,\n * continues until the queue is empty\n * or cleared.\n * @returns {undefined}\n */\n processDeltaEvent() {\n const {DESYNC, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = Parser.loci;\n const {extractComparisonState: extract} = Parser;\n const newLoci = this.queue.dequeue();\n\n if (!this.isValidLocus(newLoci)) {\n this.nextEvent();\n\n return;\n }\n\n const result = Parser.compare(this.workingCopy, newLoci);\n const lociComparison = extract(result);\n\n // limited debugging, use chrome extension\n // for full debugging.\n LoggerProxy.logger.debug(`Locus-info:parser#processDeltaEvent --> Locus Debug: ${result}`);\n\n let needToWait = false;\n\n switch (lociComparison) {\n case DESYNC:\n // wait for desync response\n this.pause();\n break;\n\n case USE_INCOMING:\n case LOCUS_URL_CHANGED:\n // update working copy for future comparisons.\n // Note: The working copy of parser gets updated in .onFullLocus()\n // and here when USE_INCOMING or LOCUS_URL_CHANGED locus.\n this.workingCopy = newLoci;\n break;\n\n case WAIT:\n // we've taken newLoci from the front of the queue, so put it back there as we have to wait\n // for the one that should be in front of it, before we can process it\n this.queue.enqueue(newLoci);\n needToWait = true;\n break;\n\n default:\n break;\n }\n\n if (needToWait) {\n this.status = 'BLOCKED';\n this.startSyncTimer();\n } else {\n this.stopSyncTimer();\n\n if (this.status === 'BLOCKED') {\n // we are not blocked anymore\n this.status = 'WORKING';\n\n LoggerProxy.logger.info(\n `Locus-info:parser#processDeltaEvent --> received delta that we were waiting for ${Parser.locus2string(\n newLoci\n )}, not blocked anymore`\n );\n }\n }\n\n if (this.onDeltaAction) {\n LoggerProxy.logger.info(\n `Locus-info:parser#processDeltaEvent --> Locus Delta ${Parser.locus2string(\n newLoci\n )}, Action: ${lociComparison}`\n );\n\n this.onDeltaAction(lociComparison, newLoci);\n }\n\n this.nextEvent();\n }\n\n /**\n * Resume from a paused state\n * @returns {undefined}\n */\n resume() {\n LoggerProxy.logger.info('Locus-info:parser#resume --> Locus parser resumed.');\n this.status = 'WORKING';\n this.nextEvent();\n }\n\n /**\n * Gets related debug info for given error code\n * @param {string} debugCode Debug code\n * @param {string} comparison Locus comparison string\n * @returns {object} Debug message\n */\n static getDebugMessage(debugCode: string, comparison: string) {\n // removes extra spaces from multiline string\n const mStr = (strings) => strings.join('').replace(/\\s{2,}/g, ' ');\n\n const resolutionMap = {\n EQ: `${Parser.loci.LT}: is equal (current == incoming).`,\n LT: `${Parser.loci.LT}: choose right side (incoming).`,\n GT: `${Parser.loci.GT}: choose left side (current).`,\n };\n\n const debugMap = {\n SO001: {\n title: 'checkSequenceOverlap-001',\n description: mStr`Occurs if earliest working copy sequence is more \\\n recent than last incoming sequence.`,\n logic: 'current.min > incoming.max',\n },\n\n SO002: {\n title: 'checkSequenceOverlap-002',\n description: mStr`Occurs if last working copy sequence is before the \\\n earliest incoming sequence.`,\n logic: 'current.max < incoming.min',\n },\n\n UR001: {\n title: 'checkUnequalRanges-001',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the current working copy loci has a larger range.`,\n logic: 'currentTotalRange > incomingTotalRange',\n },\n\n UR002: {\n title: 'checkUnequalRanges-002',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and the incoming delta loci has a larger range.`,\n logic: 'currentTotalRange < incomingTotalRange',\n },\n\n UR003: {\n title: 'checkUnequalRanges-003',\n description: mStr`Occurs if there are no unique values for both loci, \\\n and with ranges either absent or of the same size, the sequences \\\n are considered equal.`,\n logic: 'currentTotalRange == incomingTotalRange',\n },\n\n UE001: {\n title: 'checkForUniqueEntries-001',\n description: mStr`Occurs if current loci has unique entries and \\\n incoming does not. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: 'currentIsUnique && !incomingIsUnique',\n },\n\n UE002: {\n title: 'checkForUniqueEntries-002',\n description: mStr`Occurs if current has no unique entries but \\\n incoming does. Entries are considered unique if they \\\n do not overlap with other Loci sequences or range values.`,\n logic: '!currentIsUnique && incomingIsUnique',\n },\n\n OOS001: {\n title: 'checkIfOutOfSync-001',\n description: mStr`Occurs if neither sequence has a range, or \\\n if the current loci unique entries overlap the total range of the \\\n incoming sequence, or if the incoming unique entries overlap \\\n the total range of current sequence.`,\n logic: 'neitherSeqHasRange || currentUniqOverlap || incomingUniqOverlap',\n },\n\n OOS002: {\n title: 'checkIfOutOfSync-002',\n description: mStr`Occurs if the minimum value from sequences that are \\\n unique to the current loci is greater than the minimum value from \\\n sequences that are unique to the incoming loci.`,\n logic: 'currentUniqueMin > incomingUniqueMin',\n },\n\n OOS003: {\n title: 'checkIfOutOfSync-003',\n description: mStr`Occurs if none of the comparison rules applied. \\\n It is a catch all.`,\n logic: 'else (catch all)',\n },\n };\n\n const debugObj = debugMap[debugCode];\n\n debugObj.title = `Debug: ${debugObj.title}`;\n debugObj.resolution = resolutionMap[comparison];\n\n return debugObj;\n }\n}\n","import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n mainSessionLocusCache: any;\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n *\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n private doLocusSync(meeting: any) {\n let isDelta;\n let url;\n\n if (this.locusParser.workingCopy.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n isDelta = false;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n throw e;\n })\n .then((res) => {\n if (isDelta) {\n if (!isEmpty(res.body)) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n }\n } else {\n meeting.locusInfo.onFullLocus(res.body);\n }\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting);\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n this.updateLocusCache(locus);\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls, locus.self);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.updateLocusCache(locus);\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\n );\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if (\n (info && !isEqual(this.info, info)) ||\n (roles.length && !isEqual(this.roles, roles) && info)\n ) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\n }\n\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n\n /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus?.controls);\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object to signify the intent to join for unclaimed PMR scenarios\n */\nexport default class ReconnectionError extends Error {\n code: any;\n error: any;\n sdkMessage: any;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.RECONNECTION.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.RECONNECTION.NAME;\n this.sdkMessage = ERROR_DICTIONARY.RECONNECTION.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.RECONNECTION.CODE;\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\nimport ReconnectionError from './reconnection';\n\n/**\n * Error object for cases when new reconnection cannot be started\n */\nexport default class ReconnectionNotStartedError extends ReconnectionError {\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n message: string = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.MESSAGE,\n error: any = null\n ) {\n super(message, error);\n this.name = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.NAME;\n this.sdkMessage = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.CODE;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n RECONNECTION_STATE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {RECONNECTION_STATE}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = 0;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.rejoinAttempts = 0;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n }\n\n /**\n * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n try {\n await this.webex.meetings.startReachability();\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\n } catch (reconnectError) {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.recovered',\n payload: {\n recoveredBy: 'new',\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\n }\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'\n );\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo?.url) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'\n );\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.clearPreviousRequests();\n mediaRequestManager.commit();\n }\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n","import _Object$getOwnPropertySymbols from \"core-js/library/fn/object/get-own-property-symbols.js\";\nimport objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (_Object$getOwnPropertySymbols) {\n var sourceSymbolKeys = _Object$getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","import _Object$keys from \"core-js/library/fn/object/keys.js\";\nexport default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = _Object$keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import uuid from 'uuid';\nimport {debounce} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore\nimport {deviceType} from '@webex/common';\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n ALERT,\n ALTERNATE_REDIRECT_TRUE,\n BREAKOUTS,\n CALL,\n CONTROLS,\n DECLINE,\n END,\n FLOOR_ACTION,\n HTTP_VERBS,\n LEAVE,\n LOCI,\n PARTICIPANT,\n PROVISIONAL_TYPE_DIAL_IN,\n PROVISIONAL_TYPE_DIAL_OUT,\n REACHABILITY,\n SEND_DTMF_ENDPOINT,\n _SLIDES_,\n ANNOTATION,\n IP_VERSION,\n} from '../constants';\nimport {SendReactionOptions, ToggleReactionsOptions} from './request.type';\nimport MeetingUtil from './util';\nimport {AnnotationInfo} from '../annotation/annotation.types';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n changeVideoLayoutDebounced: any;\n meetingRef: WeakRef;\n locusDeltaRequest: (options: object) => Promise;\n buildLocusDeltaRequestOptions: (options: object) => Promise;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n const {meeting, ...otherAttrs} = attrs;\n\n super(otherAttrs, options);\n\n this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);\n this.buildLocusDeltaRequestOptions = MeetingUtil.generateBuildLocusDeltaRequestOptions(meeting);\n\n this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {\n leading: true,\n trailing: true,\n });\n }\n\n /**\n * Returns joinCookie from boundedStorage if present.\n * @returns {Object} joinCookie\n */\n private getJoinCookie = async () => {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n const joinCookie = JSON.parse(joinCookieRaw);\n if (joinCookie) {\n return joinCookie;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return null;\n };\n\n /**\n * Make a network request to join a meeting\n * @param {Object} options\n * @param {String} options.sipUri\n * @param {String} options.deviceUrl\n * @param {String} options.locusUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @param {boolean} options.ensureConversation\n * @param {boolean} options.moderator\n * @param {boolean} options.pin\n * @param {boolean} options.moveToResource\n * @param {Object} options.roapMessage\n * @param {boolean} options.breakoutsSupported\n * @param {String} options.locale,\n * @param {Array} options.deviceCapabilities\n * @param {boolean} options.liveAnnotationSupported\n * @param {String} options.alias\n * @returns {Promise}\n */\n async joinMeeting(options: {\n sipUri: string;\n deviceUrl: string;\n locusUrl: string;\n locusClusterUrl: string;\n resourceId: string;\n correlationId: string;\n ensureConversation: boolean;\n moderator: boolean;\n pin: boolean;\n moveToResource: boolean;\n roapMessage: any;\n asResourceOccupant: any;\n inviteeAddress: any;\n meetingNumber: any;\n permissionToken: any;\n preferTranscoding: any;\n reachability: any;\n breakoutsSupported: boolean;\n locale?: string;\n deviceCapabilities?: Array;\n liveAnnotationSupported: boolean;\n ipVersion?: IP_VERSION;\n alias?: string;\n }) {\n const {\n asResourceOccupant,\n inviteeAddress,\n meetingNumber,\n permissionToken,\n deviceUrl,\n locusUrl,\n locusClusterUrl,\n resourceId,\n correlationId,\n ensureConversation,\n moderator,\n pin,\n moveToResource,\n roapMessage,\n reachability,\n preferTranscoding,\n breakoutsSupported,\n locale,\n deviceCapabilities = [],\n liveAnnotationSupported,\n ipVersion,\n alias,\n } = options;\n\n LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);\n\n let url = '';\n\n const joinCookie = await this.getJoinCookie();\n\n const body: any = {\n asResourceOccupant,\n device: {\n url: deviceUrl,\n // @ts-ignore - config comes from registerPlugin\n deviceType: this.config.meetings.deviceType,\n },\n usingResource: resourceId || null,\n moveMediaToResource: (resourceId && moveToResource) || false,\n correlationId,\n respOnlySdp: true,\n allowMultiDevice: true,\n ensureConversation: ensureConversation || false,\n supportsNativeLobby: 1,\n clientMediaPreferences: {\n preferTranscoding: preferTranscoding ?? true,\n joinCookie,\n ipver: ipVersion,\n },\n };\n\n if (alias) {\n body.alias = alias;\n }\n\n if (breakoutsSupported) {\n deviceCapabilities.push(BREAKOUTS.BREAKOUTS_SUPPORTED);\n }\n if (liveAnnotationSupported) {\n deviceCapabilities.push(ANNOTATION.ANNOTATION_ON_SHARE_SUPPORTED);\n }\n\n // append installationId to device config if it exists\n // @ts-ignore\n if (this.webex.internal.device.config.installationId) {\n // @ts-ignore\n body.device.installationId = this.webex.internal.device.config.installationId;\n }\n\n if (locale) {\n body.locale = locale;\n }\n\n // add deviceCapabilities prop\n if (deviceCapabilities.length) {\n body.deviceCapabilities = deviceCapabilities;\n }\n // @ts-ignore\n if (this.webex.meetings.geoHintInfo) {\n // @ts-ignore\n body.device.countryCode = this.webex.meetings.geoHintInfo.countryCode;\n // @ts-ignore\n body.device.regionCode = this.webex.meetings.geoHintInfo.regionCode;\n body.device.localIp =\n // @ts-ignore\n CallDiagnosticUtils.anonymizeIPAddress(this.webex.meetings.geoHintInfo.clientAddress) ||\n undefined;\n }\n\n if (moderator !== undefined) {\n body.moderator = moderator;\n }\n\n if (permissionToken) {\n body.permissionToken = permissionToken;\n }\n\n if (pin !== undefined) {\n body.pin = pin;\n }\n\n if (locusUrl) {\n url = `${locusUrl}/${PARTICIPANT}`;\n } else if (inviteeAddress || meetingNumber) {\n try {\n let clusterUrl;\n\n if (locusClusterUrl) {\n clusterUrl = `https://${locusClusterUrl}/locus/api/v1`;\n } else {\n // @ts-ignore\n await this.webex.internal.services.waitForCatalog('postauth');\n // @ts-ignore\n clusterUrl = this.webex.internal.services.get('locus');\n }\n\n url = `${clusterUrl}/${LOCI}/${CALL}`;\n body.invitee = {\n address: inviteeAddress || `wbxmn:${meetingNumber}`,\n };\n } catch (e) {\n LoggerProxy.logger.error(\n `Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`\n );\n throw e;\n }\n }\n\n // TODO: -- this will be resolved in SDK request\n url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);\n\n if (resourceId === inviteeAddress) {\n body.callPreferences = {\n requestedMedia: [_SLIDES_],\n };\n }\n\n if (roapMessage || reachability) {\n body.localMedias = [\n {\n localSdp: JSON.stringify({\n roapMessage,\n reachability,\n }),\n },\n ];\n }\n\n /// @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: url,\n body,\n });\n }\n\n /**\n * Send a request to refresh the captcha\n * @param {Object} options\n * @param {String} options.captchaRefreshUrl\n * @param {String} options.captchaId\n * @returns {Promise}\n * @private\n */\n private refreshCaptcha({\n captchaRefreshUrl,\n captchaId,\n }: {\n captchaRefreshUrl: string;\n captchaId: string;\n }) {\n const body = {\n captchaId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: captchaRefreshUrl,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial in device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialInUrl identifier for the to-be provisioned device\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialIn({\n locusUrl,\n dialInUrl,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialInUrl: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialIn --> Provisioning a dial in device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_IN,\n url: dialInUrl,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Make a network request to add a dial out device\n * @param {Object} options\n * @param {String} options.correlationId\n * @param {String} options.locusUrl url for the meeting\n * @param {String} options.dialOutUrl identifier for the to-be provisioned device\n * @param {String} options.phoneNumber phone number to dial out to\n * @param {String} options.clientUrl identifier for the web device\n * @returns {Promise}\n * @private\n */\n private dialOut({\n locusUrl,\n dialOutUrl,\n phoneNumber,\n clientUrl,\n correlationId,\n }: {\n correlationId: string;\n locusUrl: string;\n dialOutUrl: string;\n phoneNumber: string;\n clientUrl: string;\n }) {\n LoggerProxy.logger.info(\n 'Meeting:request#dialOut --> Provisioning a dial out device',\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n provisionalType: PROVISIONAL_TYPE_DIAL_OUT,\n url: dialOutUrl,\n dialoutAddress: phoneNumber,\n clientUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Sends a requests to get the latest locus DTO, it might be a full Locus or a delta, depending on the url provided\n * @param {Object} options\n * @param {String} options.locusUrl sync url to get ht elatest locus delta\n * @returns {Promise}\n */\n getLocusDTO(options: {url: string}) {\n const {url} = options;\n\n if (url) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: url,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#getLocusDTO --> Error getting latest locus, error ${err}`\n );\n\n throw err;\n });\n }\n\n return Promise.reject();\n }\n\n /**\n * Make a network request to make a provisioned phone leave the meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.phoneUrl\n * @param {String} options.correlationId\n * @param {String} options.selfId\n * @returns {Promise}\n * @private\n */\n private disconnectPhoneAudio({\n locusUrl,\n phoneUrl,\n correlationId,\n selfId,\n }: {\n locusUrl: string;\n phoneUrl: string;\n correlationId: string;\n selfId: string;\n }) {\n LoggerProxy.logger.info(\n `Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,\n correlationId\n );\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n\n const body = {\n device: {\n deviceType: deviceType.PROVISIONAL,\n url: phoneUrl,\n },\n correlationId,\n };\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n }).catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`\n );\n\n throw err;\n });\n }\n\n /**\n * Prepares request options to to leave a meeting\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @param {String} options.selfId\n * @param {Url} options.deviceUrl\n * @param {String} options.resourceId,\n * @param {String} options.correlationId\n * @returns {Object} request options\n */\n prepareLeaveMeetingRequestOptions({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n }\n\n /**\n * Make a network request to leave a meeting\n * @param {Object} options\n * @returns {Promise}\n */\n leaveMeeting({\n locusUrl,\n selfId,\n deviceUrl: url,\n resourceId,\n correlationId,\n }: {\n locusUrl: string;\n selfId: string;\n deviceUrl: string;\n resourceId: string;\n correlationId: string;\n }) {\n LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);\n\n const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url,\n },\n usingResource: resourceId || null,\n correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Builds request options to leave a meeting\n * @param {Object} options\n * @returns {Object} request options\n */\n buildLeaveMeetingRequestOptions(options: any) {\n return this.buildLocusDeltaRequestOptions(this.prepareLeaveMeetingRequestOptions(options));\n }\n\n /**\n * Make a network request to acknowledge a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.correlationId\n * @returns {Promise}\n */\n acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n correlationId: options.correlationId,\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * Makes a network request to lock the meeting\n * @param {Object} options\n * @param {Boolean} options.lock Whether it is locked or not\n * @returns {Promise}\n */\n lockMeeting(options) {\n const uri = `${options.locusUrl}/${CONTROLS}`;\n const body = {\n lock: {\n locked: options.lock,\n },\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n });\n }\n\n /**\n * Make a network request to decline a meeting\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.reason\n * @returns {Promise}\n */\n declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;\n const body = {\n device: {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ...(options.reason && {reason: options.reason}),\n };\n\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n });\n }\n\n /**\n * change the content floor grant\n * @param {Object} options options for floor grant\n * @param {String} options.disposition floor action (granted/released)\n * @param {String} options.personUrl personUrl who is requesting floor\n * @param {String} options.deviceUrl Url of a device\n * @param {String} options.resourceId Populated if you are paired to a device\n * @param {String} options.uri floor grant uri\n * @param {String} options.shareInstanceId id for current share\n * @returns {Promise}\n */\n changeMeetingFloor(\n options:\n | {\n disposition: string;\n personUrl: string;\n deviceUrl: string;\n resourceId: string;\n uri: string;\n annotationInfo: AnnotationInfo;\n shareInstanceId: string;\n }\n | any\n ) {\n let floorReq: any = {disposition: options.disposition};\n\n /* istanbul ignore else */\n if (options.disposition === FLOOR_ACTION.GRANTED) {\n floorReq = {\n beneficiary: {\n url: options.personUrl,\n devices: [\n {\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n url: options.deviceUrl,\n },\n ],\n },\n disposition: options.disposition,\n requester: {\n url: options.personUrl,\n },\n };\n }\n\n const body: any = {\n floor: floorReq,\n resourceUrl: options.resourceUrl,\n };\n\n if (options?.shareInstanceId) {\n body.floor.shareInstanceId = options.shareInstanceId;\n }\n\n if (options?.resourceToken) {\n body.resourceToken = options?.resourceToken;\n }\n if (options?.annotationInfo) {\n body.annotation = options?.annotationInfo;\n }\n\n // @ts-ignore\n return this.request({\n uri: options.uri,\n method: HTTP_VERBS.PUT,\n body,\n });\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @returns {Promise}\n */\n sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,\n body: {\n deviceUrl,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n },\n },\n });\n }\n\n /**\n * Sends a request to the controls endpoint to set the video layout\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.deviceUrl\n * @param {String} options.layoutType a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} options.main preferred dimensions for the remote main video stream\n * @param {Number} options.main.width preferred width of main video stream\n * @param {Number} options.main.height preferred height of main video stream\n * @param {Object} options.content preferred dimensions for the remote content share stream\n * @param {Number} options.content.width preferred width of content share stream\n * @param {Number} options.content.height preferred height of content share stream\n * @returns {Promise}\n */\n changeVideoLayout({\n locusUrl,\n deviceUrl,\n layoutType,\n main,\n content,\n }: {\n locusUrl: string;\n deviceUrl: string;\n layoutType: string;\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n }) {\n // send main/content renderInfo only if both width and height are specified\n if (main && (!main.width || !main.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for main: ${JSON.stringify(\n main\n )}`\n )\n );\n }\n\n if (content && (!content.width || !content.height)) {\n return Promise.reject(\n new Error(\n `Both width and height must be specified. One of them is missing for content: ${JSON.stringify(\n content\n )}`\n )\n );\n }\n\n const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;\n const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;\n\n const layoutParams =\n renderInfoMain || renderInfoContent\n ? {\n renderInfo: {\n main: renderInfoMain,\n content: renderInfoContent,\n },\n }\n : undefined;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri: `${locusUrl}/${CONTROLS}`,\n body: {\n layout: {\n deviceUrl,\n type: layoutType,\n layoutParams,\n },\n },\n });\n }\n\n /**\n * Make a network request to end meeting for all\n * @param {Object} options\n * @param {Url} options.locusUrl\n * @returns {Promise}\n */\n endMeetingForAll({locusUrl}: {locusUrl: string}) {\n const uri = `${locusUrl}/${END}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.POST,\n uri,\n });\n }\n\n /**\n * Send a locus keepAlive (used in lobby)\n * @param {Object} options\n * @param {Url} options.keepAliveUrl\n * @returns {Promise}\n */\n keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: keepAliveUrl,\n });\n }\n\n /**\n * Make a network request to send a reaction.\n * @param {Object} options\n * @param {Url} options.reactionChannelUrl\n * @param {Reaction} options.reaction\n * @param {string} options.senderID\n * @returns {Promise}\n */\n sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {\n const uri = reactionChannelUrl;\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri,\n body: {\n sender: {participantId},\n reaction,\n },\n });\n }\n\n /**\n * Make a network request to enable or disable reactions.\n * @param {boolean} options.enable - determines if we need to enable or disable.\n * @param {locusUrl} options.locusUrl\n * @returns {Promise}\n */\n toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {\n const uri = `${locusUrl}/${CONTROLS}`;\n\n // @ts-ignore\n return this.locusDeltaRequest({\n method: HTTP_VERBS.PUT,\n uri,\n body: {\n reactions: {\n enabled: enable,\n },\n requestingParticipantId,\n },\n });\n }\n\n getLocusStatusByUrl(locusUrl: string) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.GET,\n uri: locusUrl,\n });\n }\n}\n","export interface IExternalRoles {\n cohost: boolean;\n moderator: boolean;\n presenter: boolean;\n}\n\nexport enum ServerRoles {\n Cohost = 'COHOST',\n Moderator = 'MODERATOR',\n Presenter = 'PRESENTER',\n}\n\nexport type ServerRoleShape = {\n type: ServerRoles;\n hasRole: boolean;\n};\n\nexport type ParticipantWithRoles = {\n controls: {\n role: {\n roles: Array;\n };\n };\n};\n\n// values are inherited from locus so don't update these\nexport enum MediaStatus {\n RECVONLY = 'RECVONLY', // participant only receiving and not sending\n SENDONLY = 'SENDONLY', // participant only sending and not receiving\n SENDRECV = 'SENDRECV', // participant both sending and receiving\n INACTIVE = 'INACTIVE', // participant is not connected to media source\n UNKNOWN = 'UNKNOWN', // participant has not added media in the meeting\n}\n\nexport interface IMediaStatus {\n audio: MediaStatus;\n video: MediaStatus;\n}\n","import {\n IExternalRoles,\n ParticipantWithRoles,\n ServerRoles,\n ServerRoleShape,\n IMediaStatus,\n} from './types';\nimport {\n _USER_,\n _RESOURCE_ROOM_,\n _OBSERVE_,\n _WAIT_,\n _LEFT_,\n _JOINED_,\n _IDLE_,\n _IN_LOBBY_,\n _NOT_IN_MEETING_,\n _IN_MEETING_,\n AUDIO_STATUS,\n VIDEO_STATUS,\n _SEND_RECEIVE_,\n _RECEIVE_ONLY_,\n _CALL_,\n VIDEO,\n AUDIO,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst MemberUtil: any = {};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.canReclaimHost = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'canReclaimHostRole could not be processed, participant is undefined.'\n );\n }\n\n return participant.canReclaimHostRole || false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {[ServerRoleShape]}\n */\nMemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array =>\n participant?.controls?.role?.roles;\n\n/**\n * @param {Object} participant the locus participant\n * @param {ServerRoles} controlRole the search role\n * @returns {Boolean}\n */\nMemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>\n MemberUtil.getControlsRoles(participant)?.some(\n (role) => role.type === controlRole && role.hasRole\n );\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>\n MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {IExternalRoles}\n */\nMemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {\n const roles = {\n cohost: MemberUtil.hasCohost(participant),\n moderator: MemberUtil.hasModerator(participant),\n presenter: MemberUtil.hasPresenter(participant),\n };\n\n return roles;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isUser = (participant: any) => participant && participant.type === _USER_;\n\nMemberUtil.isModerator = (participant) => participant && participant.moderator;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isGuest = (participant: any) => participant && participant.guest;\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isDevice = (participant: any) => participant && participant.type === _RESOURCE_ROOM_;\n\nMemberUtil.isModeratorAssignmentProhibited = (participant) =>\n participant && participant.moderatorAssignmentNotAllowed;\n\n/**\n * checks to see if the participant id is the same as the passed id\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isSame = (participant: any, id: string) =>\n participant && (participant.id === id || (participant.person && participant.person.id === id));\n\n/**\n * checks to see if the participant id is the same as the passed id for associated devices\n * there are multiple ids that can be used\n * @param {Object} participant the locus participant\n * @param {String} id\n * @returns {Boolean}\n */\nMemberUtil.isAssociatedSame = (participant: any, id: string) =>\n participant &&\n participant.associatedUsers &&\n participant.associatedUsers.some(\n (user) => user.id === id || (user.person && user.person.id === id)\n );\n\n/**\n * @param {Object} participant the locus participant\n * @param {Boolean} isGuest\n * @param {String} status\n * @returns {Boolean}\n */\nMemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>\n participant &&\n participant.guest &&\n ((participant.devices &&\n participant.devices[0] &&\n participant.devices[0].intent &&\n participant.devices[0].intent.type === _WAIT_ &&\n // @ts-ignore\n isGuest &&\n status === _IN_LOBBY_) ||\n // @ts-ignore\n !status === _IN_MEETING_);\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isAudioMuted = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Audio could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isVideoMuted = (participant: any): boolean => {\n if (!participant) {\n throw new ParameterError('Video could not be processed, participant is undefined.');\n }\n\n return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isHandRaised = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Raise hand could not be processed, participant is undefined.');\n }\n\n return participant.controls?.hand?.raised || false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isBreakoutsSupported = (participant) => {\n if (!participant) {\n throw new ParameterError('Breakout support could not be processed, participant is undefined.');\n }\n\n return !participant.doesNotSupportBreakouts;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isInterpretationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'Interpretation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.doesNotSupportSiInterpreter;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isLiveAnnotationSupported = (participant) => {\n if (!participant) {\n throw new ParameterError(\n 'LiveAnnotation support could not be processed, participant is undefined.'\n );\n }\n\n return !participant.annotatorAssignmentNotAllowed;\n};\n\n/**\n * utility method for audio/video muted status\n * @param {any} participant\n * @param {String} statusAccessor\n * @param {String} controlsAccessor\n * @returns {Boolean | undefined}\n */\nMemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {\n // check remote mute\n const remoteMute = participant?.controls?.[controlsAccessor]?.muted;\n if (remoteMute === true) {\n return true;\n }\n\n // check local mute\n const localStatus = participant?.status?.[statusAccessor];\n if (localStatus === _RECEIVE_ONLY_) {\n return true;\n }\n if (localStatus === _SEND_RECEIVE_) {\n return false;\n }\n\n return remoteMute;\n};\n\n/**\n * utility method for getting the recording member for later comparison\n * @param {Object} controls\n * @returns {String|null}\n */\nMemberUtil.getRecordingMember = (controls: any) => {\n if (!controls) {\n return null;\n }\n if (controls.record && controls.record.recording && controls.record.meta) {\n return controls.record.meta.modifiedBy;\n }\n\n return null;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {Boolean}\n */\nMemberUtil.isRecording = (participant: any) => {\n if (!participant) {\n throw new ParameterError('Recording could not be processed, participant is undefined.');\n }\n if (participant.controls && participant.controls.localRecord) {\n return participant.controls.localRecord.recording;\n }\n\n return false;\n};\n\nMemberUtil.isRemovable = (isSelf, isGuest, isInMeeting, type) => {\n if (isGuest || isSelf) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isInMeeting) {\n return true;\n }\n\n return false;\n};\n\nMemberUtil.isMutable = (isSelf, isDevice, isInMeeting, isMuted, type) => {\n if (!isInMeeting) {\n return false;\n }\n if (isMuted) {\n return false;\n }\n if (type === _CALL_) {\n return false;\n }\n if (isSelf || isDevice) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractStatus = (participant: any) => {\n if (!(participant && participant.devices && participant.devices.length)) {\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _JOINED_) {\n return _IN_MEETING_;\n }\n if (participant.state === _IDLE_) {\n if (participant.devices && participant.devices.length > 0) {\n const foundDevice = participant.devices.find(\n (device) =>\n device.intent && (device.intent.type === _WAIT_ || device.intent.type === _OBSERVE_)\n );\n\n return foundDevice ? _IN_LOBBY_ : _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n }\n if (participant.state === _LEFT_) {\n return _NOT_IN_MEETING_;\n }\n\n return _NOT_IN_MEETING_;\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractId = (participant: any) => {\n if (participant) {\n return participant.id;\n }\n\n return null;\n};\n\n/**\n * extracts the media status from nested participant object\n * @param {Object} participant the locus participant\n * @returns {Object}\n */\nMemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {\n if (!participant) {\n throw new ParameterError('Media status could not be extracted, participant is undefined.');\n }\n\n return {\n audio: participant.status?.audioStatus,\n video: participant.status?.videoStatus,\n };\n};\n\n/**\n * @param {Object} participant the locus participant\n * @returns {String}\n */\nMemberUtil.extractName = (participant: any) => {\n if (participant && participant.person) {\n return participant.person.name;\n }\n\n return null;\n};\n\nexport default MemberUtil;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';\nimport {IExternalRoles, IMediaStatus, ParticipantWithRoles} from './types';\n\nimport MemberUtil from './util';\n\n/**\n * @class Member\n */\nexport default class Member {\n associatedUser: any;\n canReclaimHost: boolean;\n id: any;\n isAudioMuted: any;\n isContentSharing: any;\n isDevice: any;\n isGuest: any;\n isHandRaised: any;\n isHost: any;\n isInLobby: any;\n isInMeeting: any;\n isModerator: any;\n isModeratorAssignmentProhibited: any;\n isMutable: any;\n isNotAdmitted: any;\n isRecording: any;\n isRemovable: any;\n isSelf: any;\n isUser: any;\n isVideoMuted: any;\n roles: IExternalRoles;\n mediaStatus: IMediaStatus;\n name: any;\n participant: any;\n status: any;\n supportsBreakouts: boolean;\n supportsInterpretation: boolean;\n supportLiveAnnotation: boolean;\n type: any;\n namespace = MEETINGS;\n\n /**\n * @param {Object} participant - the locus participant\n * @param {Object} [options] - constructor params\n * @param {String} options.selfId\n * @param {String} options.hostId\n * @param {String} options.contentSharingId\n * @param {String} options.type\n * @returns {Member}\n * @memberof Member\n */\n constructor(\n participant: object,\n options:\n | {\n selfId: string;\n hostId: string;\n contentSharingId: string;\n type: string;\n }\n | any = {}\n ) {\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.canReclaimHost = false;\n /**\n * The server participant object\n * @instance\n * @type {Object}\n * @private\n * @memberof Member\n */\n this.participant = null;\n /**\n * The member id\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.id = null;\n /**\n * The member name\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.name = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isAudioMuted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isVideoMuted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isHandRaised = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.supportsBreakouts = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.supportLiveAnnotation = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isSelf = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isHost = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isGuest = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isInLobby = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isInMeeting = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isNotAdmitted = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isContentSharing = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.status = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isDevice = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isUser = null;\n /**\n * Is this member associated to another user by way of pairing (typical of devices)\n * @instance\n * @type {String}\n * @public\n * @memberof Member\n */\n this.associatedUser = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isRecording = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isMutable = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isRemovable = null;\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof Member\n */\n this.type = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isModerator = null;\n /**\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Member\n */\n this.isModeratorAssignmentProhibited = null;\n\n /**\n * @instance\n * @type {IExternalRoles}\n * @public\n * @memberof Member\n */\n this.roles = null;\n\n /**\n * @instance\n * @type {IMediaStatus}\n * @public\n * @memberof Member\n * @example {audio: MediaStatus.RECVONLY, video: MediaStatus.SENDRECV}\n */\n this.mediaStatus = {\n audio: null,\n video: null,\n };\n // TODO: more participant types\n // such as native client, web client, is a device, what type of phone, etc\n this.processParticipant(participant);\n this.processParticipantOptions(participant, options);\n this.processMember();\n }\n\n /**\n * set all the participant values extracted directly from locus participant\n * @param {Object} participant the locus participant object\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processParticipant(participant: object) {\n this.participant = participant;\n if (participant) {\n this.canReclaimHost = MemberUtil.canReclaimHost(participant);\n this.id = MemberUtil.extractId(participant);\n this.name = MemberUtil.extractName(participant);\n this.isAudioMuted = MemberUtil.isAudioMuted(participant);\n this.isVideoMuted = MemberUtil.isVideoMuted(participant);\n this.isHandRaised = MemberUtil.isHandRaised(participant);\n this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);\n this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);\n this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);\n this.isGuest = MemberUtil.isGuest(participant);\n this.isUser = MemberUtil.isUser(participant);\n this.isDevice = MemberUtil.isDevice(participant);\n this.isModerator = MemberUtil.isModerator(participant);\n this.isModeratorAssignmentProhibited =\n MemberUtil.isModeratorAssignmentProhibited(participant);\n this.processStatus(participant);\n this.processRoles(participant as ParticipantWithRoles);\n // must be done last\n this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);\n }\n }\n\n /**\n * Use the members options and participant values to set on the member\n * @param {Object} participant the locus participant object\n * @param {Object} options the passed in options, what was set on members\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processParticipantOptions(participant: object, options: any) {\n if (participant && options) {\n this.processIsSelf(participant, options.selfId);\n this.processIsHost(participant, options.hostId);\n this.processIsContentSharing(participant, options.contentSharingId);\n this.processType(options.type);\n this.processIsRecording(participant, options.recordingId);\n }\n }\n\n /**\n * processes what already exists on the member to determine other info about the member\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processMember() {\n // must occur after self, guest, meeting, and type properties are calculated\n this.isRemovable = MemberUtil.isRemovable(\n this.isSelf,\n this.isGuest,\n this.isInMeeting,\n this.type\n );\n // must occur after self, device, meeting, mute status, and type properties are calculated\n this.isMutable = MemberUtil.isMutable(\n this.isSelf,\n this.isDevice,\n this.isInMeeting,\n this.isAudioMuted,\n this.type\n );\n\n this.mediaStatus = MemberUtil.extractMediaStatus(this.participant);\n }\n\n /**\n * set the status on member object\n * @param {Object} participant the locus participant object\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processStatus(participant: object) {\n this.status = MemberUtil.extractStatus(participant);\n switch (this.status) {\n case _IN_LOBBY_:\n this.isInLobby = true;\n this.isInMeeting = false;\n break;\n case _IN_MEETING_:\n this.isInLobby = false;\n this.isInMeeting = true;\n break;\n case _NOT_IN_MEETING_:\n this.isInLobby = false;\n this.isInMeeting = false;\n break;\n default:\n this.isInLobby = false;\n this.isInMeeting = false;\n }\n }\n\n /**\n * set the isContentSharing on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsContentSharing(flag: boolean) {\n this.isContentSharing = flag;\n }\n\n /**\n * set the isHost on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsHost(flag: boolean) {\n this.isHost = flag;\n }\n\n /**\n * set the isSelf on member\n * @param {Boolean} flag\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public setIsSelf(flag: boolean) {\n this.isSelf = flag;\n }\n\n /**\n * determine if this member is content sharing\n * @param {Object} participant\n * @param {String} sharingId\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public processIsContentSharing(participant: object, sharingId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isContentSharing = MemberUtil.isSame(participant, sharingId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isContentSharing = MemberUtil.isAssociatedSame(participant, sharingId);\n }\n }\n\n /**\n * Determine if this member is recording\n * @param {Object} participant\n * @param {String} recordingId\n * @returns {undefined}\n * @public\n * @memberof Member\n */\n public processIsRecording(participant: object, recordingId: string) {\n this.isRecording = MemberUtil.isSame(participant, recordingId);\n }\n\n /**\n * determine if this member is the self\n * @param {Object} participant\n * @param {String} selfId\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processIsSelf(participant: object, selfId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isSelf = MemberUtil.isSame(participant, selfId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isSelf = MemberUtil.isAssociatedSame(participant, selfId);\n this.associatedUser = selfId;\n }\n }\n\n /**\n * determine if this member is the host\n * @param {Object} participant\n * @param {String} hostId\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processIsHost(participant: object, hostId: string) {\n if (MemberUtil.isUser(participant)) {\n this.isHost = MemberUtil.isSame(participant, hostId);\n } else if (MemberUtil.isDevice(participant)) {\n this.isHost = MemberUtil.isAssociatedSame(participant, hostId);\n }\n }\n\n /**\n * process the roles that have been applied to this member\n * @param {Object} participant\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processRoles(participant: ParticipantWithRoles) {\n this.roles = MemberUtil.extractControlRoles(participant);\n }\n\n /**\n * set the type for the member, could be MEETING or CALL\n * @param {String} type\n * @returns {undefined}\n * @private\n * @memberof Member\n */\n private processType(type: string) {\n this.type = type;\n }\n}\n","import * as MEETINGCONSTANTS from '../../constants';\n\n/**\n * Extended Error object for reclaim host role empty or wrong key\n */\nexport class ReclaimHostEmptyWrongKeyError extends Error {\n sdkMessage: string;\n error: null;\n code: number;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY\n .MESSAGE,\n error: any = null\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ReclaimHostEmptyWrongKeyError);\n }\n\n this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY.NAME;\n this.sdkMessage =\n message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY.MESSAGE;\n this.error = error;\n\n this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY.CODE;\n }\n}\n\n/**\n * Extended Error object for reclaim host role not supported\n */\nexport class ReclaimHostNotSupportedError extends Error {\n sdkMessage: string;\n error: null;\n code: number;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.MESSAGE,\n error: any = null\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ReclaimHostNotSupportedError);\n }\n\n this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.NAME;\n this.sdkMessage =\n message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.MESSAGE;\n this.error = error;\n\n this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_SUPPORTED.CODE;\n }\n}\n\n/**\n * Extended Error object for reclaim host role not allowed for other participants\n */\nexport class ReclaimHostNotAllowedError extends Error {\n sdkMessage: string;\n error: null;\n code: number;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.MESSAGE,\n error: any = null\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ReclaimHostNotAllowedError);\n }\n\n this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.NAME;\n this.sdkMessage =\n message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.MESSAGE;\n this.error = error;\n\n this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_NOT_ALLOWED.CODE;\n }\n}\n\n/**\n * Extended Error object for reclaim host role when user is host already\n */\nexport class ReclaimHostIsHostAlreadyError extends Error {\n sdkMessage: string;\n error: null;\n code: number;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(\n message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.MESSAGE,\n error: any = null\n ) {\n super(message);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ReclaimHostIsHostAlreadyError);\n }\n\n this.name = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.NAME;\n this.sdkMessage =\n message || MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.MESSAGE;\n this.error = error;\n\n this.code = MEETINGCONSTANTS.ERROR_DICTIONARY.RECLAIM_HOST_ROLE_IS_ALREADY_HOST.CODE;\n }\n}\n","import {MEETINGS} from '../constants';\n\n/**\n * @class MembersCollection\n */\nexport default class MembersCollection {\n members: any;\n namespace = MEETINGS;\n /**\n * @param {Object} locus\n * @memberof Members\n */\n constructor() {\n this.members = {};\n }\n\n set(id, member) {\n this.members[id] = member;\n }\n\n setAll(members) {\n this.members = members;\n }\n\n /**\n * @param {String} id\n * @returns {Member}\n */\n get(id: string) {\n return this.members[id];\n }\n\n /**\n * @returns {Object} returns an object map of Member instances\n * @memberof MembersCollection\n */\n getAll() {\n return this.members;\n }\n\n /**\n * @returns {void}\n * reset members\n */\n reset() {\n this.members = {};\n }\n}\n","import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl) => ({\n requestingParticipantId,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n","// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport MembersUtil from './util';\nimport MeetingUtil from '../meeting/util';\n\n/**\n * @class MembersRequest\n */\nexport default class MembersRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n locusDeltaRequest: (options: object) => Promise;\n\n /**\n * Constructor\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: {meeting: any}, options: object) {\n const {meeting, ...otherAttrs} = attrs;\n super(otherAttrs, options);\n\n this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);\n }\n\n /**\n *\n * @param {Object} options with format of {invitee: string, locusUrl: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl\n * @memberof MembersRequest\n */\n addMembers(options: any) {\n if (\n !(\n !options ||\n !options.invitee ||\n !options.invitee.emailAddress ||\n !options.invitee.email ||\n !options.invitee.phoneNumber ||\n !options.locusUrl\n )\n ) {\n throw new ParameterError(\n 'invitee must be passed and the associated locus url for this meeting object must be defined.'\n );\n }\n const requestParams = MembersUtil.getAddMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n *\n * @param {Object} options\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have memberIds AND locusUrl\n * @memberof MembersRequest\n */\n admitMember(options: any) {\n if (!options || !options.locusUrl || !options.memberIds) {\n throw new ParameterError(\n 'memberIds must be an array passed and the associated locus url for this meeting object must be defined.'\n );\n }\n const requestParams = MembersUtil.getAdmitMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to remove a member\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.memberId ID of member\n * @returns {Promise}\n */\n removeMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRemoveMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to mute a member\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.memberId ID of member\n * @returns {Promise}\n */\n muteMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getMuteMemberRequestParams(options);\n\n // @ts-ignore\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.memberId ID of PSTN user\n * @returns {Promise}\n */\n assignRolesMember(options: any) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRoleAssignmentMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to raise or lower a member's hand\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.memberId ID of member\n * @returns {Promise}\n */\n raiseOrLowerHandMember(options) {\n if (!options || !options.locusUrl || !options.memberId) {\n throw new ParameterError(\n 'memberId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getRaiseHandMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to lower all hands\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.requestingParticipantId ID of requesting participant\n * @returns {Promise}\n */\n lowerAllHandsMember(options) {\n if (!options || !options.locusUrl || !options.requestingParticipantId) {\n throw new ParameterError(\n 'requestingParticipantId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getLowerAllHandsMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n *\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have requestingParticipantId AND locusUrl\n * @memberof MembersRequest\n */\n editDisplayNameMember(options: {locusUrl: string; requestingParticipantId: string}) {\n if (!options || !options.locusUrl || !options.requestingParticipantId) {\n throw new ParameterError(\n 'requestingParticipantId must be defined, and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.editDisplayNameMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to raise or lower a member's hand\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.memberId ID of member\n * @param {String} options.moderator ID of moderator\n * @returns {Promise}\n */\n transferHostToMember(options) {\n if (!options || !options.locusUrl || !options.memberId || !options.moderator) {\n throw new ParameterError(\n 'memberId must be defined, the associated locus url, and the moderator for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.getTransferHostToMemberRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * Sends a request to the DTMF endpoint to send tones\n * @param {Object} options\n * @param {String} options.locusUrl\n * @param {String} options.url device url SIP user\n * @param {String} options.tones a string of one or more DTMF tones to send\n * @param {String} options.memberId ID of PSTN user\n * @returns {Promise}\n */\n sendDialPadKey(options: {locusUrl: string; url: string; tones: string; memberId: string}) {\n // @ts-ignore\n if (\n !options ||\n !options.locusUrl ||\n !options.memberId ||\n !options.url ||\n // @ts-ignore\n (!options.tones && options.tones !== 0)\n ) {\n throw new ParameterError(\n 'memberId must be defined, the associated locus url, the device url and DTMF tones for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.generateSendDTMFRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n\n /**\n * @param {Object} options with format of {invitee: string, locusUrl: string}\n * @returns {Promise}\n * @throws {Error} if the options are not valid and complete, must have invitee with emailAddress OR email AND locusUrl\n * @memberof MembersRequest\n */\n cancelPhoneInvite(options: any) {\n if (!(options?.invitee?.phoneNumber || options?.locusUrl)) {\n throw new ParameterError(\n 'invitee must be passed and the associated locus url for this meeting object must be defined.'\n );\n }\n\n const requestParams = MembersUtil.generateCancelInviteRequestParams(options);\n\n return this.locusDeltaRequest(requestParams);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {isEmpty} from 'lodash';\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {\n MEETINGS,\n EVENT_TRIGGERS,\n FLOOR_ACTION,\n CONTENT,\n WHITEBOARD,\n ASSIGN_ROLES_ERROR_CODES,\n} from '../constants';\nimport Trigger from '../common/events/trigger-proxy';\nimport Member from '../member';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport ParameterError from '../common/errors/parameter';\nimport {\n ReclaimHostEmptyWrongKeyError,\n ReclaimHostIsHostAlreadyError,\n ReclaimHostNotAllowedError,\n ReclaimHostNotSupportedError,\n} from '../common/errors/reclaim-host-role-errors';\n\nimport MembersCollection from './collection';\nimport MembersRequest from './request';\nimport MembersUtil from './util';\nimport {ReceiveSlotManager} from '../multistream/receiveSlotManager';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\nimport {ServerRoleShape} from './types';\n\n/**\n * Members Update Event\n * Emitted when something in the roster list needs to be updated\n * @event members:update\n * @instance\n * @property {Object} delta the changes to the members list\n * @property {Array} delta.updated array only the updates, includes removals, as they will have updated status and member properties\n * @property {Array} delta.added array added members to the meeting\n * @property {Array} full array the full members collection\n * @memberof Members\n */\n\n/**\n * Members Content Update Event\n * Emitted when who is sharing changes\n * @event members:content:update\n * @instance\n * @property {String} activeContentSharingId\n * @property {String} endedContentSharingId\n * @memberof Members\n */\n\n/**\n * Members Host Update Event\n * Emitted when who is the host changes\n * @event members:host:update\n * @instance\n * @property {String} activeHostId\n * @property {String} endedHostId\n * @memberof Members\n */\n\n/**\n * Members Self Update Event\n * Emitted when who is the self changes\n * @event members:self:update\n * @instance\n * @property {String} activeSelfId\n * @property {String} endedSelfId\n * @memberof Members\n */\n\n/**\n * @class Members\n */\nexport default class Members extends StatelessWebexPlugin {\n hostId: any;\n locusUrl: any;\n mediaShareContentId: any;\n mediaShareWhiteboardId: any;\n membersCollection: any;\n membersRequest: any;\n receiveSlotManager: ReceiveSlotManager;\n mediaRequestManagers: {\n audio: MediaRequestManager;\n video: MediaRequestManager;\n };\n\n recordingId: any;\n selfId: any;\n type: any;\n\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n * @memberof Members\n */\n constructor(attrs: any, options: object) {\n super({}, options);\n /**\n * The Members Request object to interact with server\n * @instance\n * @type {MembersRequest}\n * @private\n * @memberof Members\n */\n\n // @ts-ignore\n this.membersRequest = new MembersRequest(\n {\n meeting: attrs.meeting,\n },\n options\n );\n /**\n * The Members Collection cache\n * @instance\n * @type {MembersCollection}\n * @private\n * @memberof Members\n */\n this.membersCollection = new MembersCollection();\n /**\n * The current locus url for the active meeting\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.locusUrl = attrs.locusUrl || null;\n /**\n * The current hostId for the meeting\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.hostId = null;\n /**\n * The current type for the meeting, could be MEETING or CALL\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.type = null;\n /**\n * Locus has a self object, sent individually to the client\n * i.e., each person in the call gets their own self object from locus.\n * We need to maintain that self object, because we also get information about all the participants\n * and differentiate those participants from self.\n * The self id shouldnt ever change, but it does have properties that will change\n * and we use values in locus-info, such as to determine if i am admitted to the meeting or not as guest.\n * The current selfId for the meeting\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.selfId = null;\n /**\n * The current mediaShareContentId for the meeting\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.mediaShareContentId = null;\n /**\n * The current mediaShareWhiteboardId for the meeting\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.mediaShareWhiteboardId = null;\n /**\n * The current recordingId for the meeting, if it exists\n * @instance\n * @type {String}\n * @private\n * @memberof Members\n */\n this.recordingId = null;\n\n /**\n * reference to a ReceiveSlotManager instance (for multistream)\n * @private\n */\n this.receiveSlotManager = attrs.receiveSlotManager;\n\n /**\n * reference to a MediaRequestManager instance that manages main video requests (for multistream)\n * @private\n */\n this.mediaRequestManagers = attrs.mediaRequestManagers;\n }\n\n /**\n * Internal update the self Id value\n * @param {Object} payload\n * @param {Object} payload.newSelf\n * @param {Object} payload.oldSelf\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n locusSelfUpdate(payload: {newSelf: any; oldSelf: any}) {\n let newSelfId = null;\n let oldSelfId = null;\n\n if (payload) {\n if (payload.newSelf) {\n newSelfId = payload.newSelf.id;\n }\n if (payload.oldSelf) {\n oldSelfId = payload.oldSelf.id;\n }\n }\n if (newSelfId) {\n const theSelf = this.membersCollection.get(newSelfId);\n\n if (theSelf) {\n theSelf.setIsSelf(true);\n }\n }\n if (oldSelfId) {\n const notSelf = this.membersCollection.get(oldSelfId);\n\n if (notSelf) {\n notSelf.setIsSelf(false);\n }\n }\n this.selfId = newSelfId;\n Trigger.trigger(\n this,\n {\n file: 'members',\n function: 'locusSelfUpdate',\n },\n EVENT_TRIGGERS.MEMBERS_SELF_UPDATE,\n {\n activeSelfId: newSelfId,\n endedSelfId: oldSelfId,\n }\n );\n }\n\n /**\n * Internal update the hostId value\n * @param {Object} payload\n * @param {Object} payload.newHost\n * @param {Object} payload.oldHost\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n locusHostUpdate(payload: {newHost: any; oldHost: any}) {\n let newHostId = null;\n let oldHostId = null;\n\n if (payload) {\n if (payload.newHost) {\n newHostId = payload.newHost.id;\n }\n if (payload.oldHost) {\n oldHostId = payload.oldHost.id;\n }\n }\n if (newHostId) {\n const theHost = this.membersCollection.get(newHostId);\n\n if (theHost) {\n theHost.setIsHost(true);\n }\n }\n if (oldHostId) {\n const notHost = this.membersCollection.get(oldHostId);\n\n if (notHost) {\n notHost.setIsHost(false);\n }\n }\n this.hostId = newHostId;\n Trigger.trigger(\n this,\n {\n file: 'members',\n function: 'locusHostUpdate',\n },\n EVENT_TRIGGERS.MEMBERS_HOST_UPDATE,\n {\n activeHostId: newHostId,\n endedHostId: oldHostId,\n }\n );\n }\n\n /**\n * clear member collection\n * @returns {void}\n * @private\n * @memberof Members\n */\n clearMembers() {\n this.membersCollection.reset();\n Trigger.trigger(\n this,\n {\n file: 'members',\n function: 'clearMembers',\n },\n EVENT_TRIGGERS.MEMBERS_CLEAR,\n {}\n );\n }\n\n /**\n * when new participant updates come in, both delta and full participants, update them in members collection\n * delta object in the event will have {updated, added} and full will be the full membersCollection\n * @param {Object} payload\n * @param {Object} payload.participants\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n locusParticipantsUpdate(payload: {participants: object; isReplace?: boolean}) {\n if (payload) {\n if (payload.isReplace) {\n this.clearMembers();\n }\n const delta = this.handleLocusInfoUpdatedParticipants(payload);\n const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates\n\n this.receiveSlotManager?.updateMemberIds();\n\n Trigger.trigger(\n this,\n {\n file: 'members',\n function: 'locusParticipantsUpdate',\n },\n EVENT_TRIGGERS.MEMBERS_UPDATE,\n {\n delta,\n full,\n isReplace: !!payload.isReplace,\n }\n );\n }\n }\n\n /**\n * Internal update the content id\n * @param {Object} payload\n * @param {Object} payload.current\n * @param {Object} payload.previous\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n locusMediaSharesUpdate(payload: {current: any; previous: any}) {\n const currentContent = payload.current?.content;\n const previousContent = payload.previous?.content;\n const currentWhiteboard = payload.current?.whiteboard;\n const previousWhiteboard = payload.previous?.whiteboard;\n let whoSharing = null;\n let whoStopped = null;\n\n if (currentContent?.beneficiaryId) {\n if (currentContent.disposition === FLOOR_ACTION.GRANTED) {\n whoSharing = currentContent.beneficiaryId;\n this.mediaShareWhiteboardId = null;\n this.mediaShareContentId = whoSharing;\n }\n\n if (previousContent?.disposition === FLOOR_ACTION.GRANTED) {\n if (currentContent.disposition === FLOOR_ACTION.RELEASED) {\n whoStopped = currentContent.beneficiaryId;\n this.mediaShareContentId = null;\n } else if (\n currentContent.disposition === FLOOR_ACTION.GRANTED &&\n currentContent.beneficiaryId !== previousContent.beneficiaryId\n ) {\n whoStopped = previousContent.beneficiaryId;\n }\n }\n }\n\n if (currentWhiteboard?.beneficiaryId) {\n if (currentWhiteboard.disposition === FLOOR_ACTION.GRANTED) {\n whoSharing = currentWhiteboard.beneficiaryId;\n this.mediaShareContentId = null;\n this.mediaShareWhiteboardId = whoSharing;\n }\n\n if (previousWhiteboard?.disposition === FLOOR_ACTION.GRANTED) {\n if (currentWhiteboard.disposition === FLOOR_ACTION.RELEASED) {\n whoStopped = currentWhiteboard.beneficiaryId;\n this.mediaShareWhiteboardId = null;\n } else if (\n currentWhiteboard.disposition === FLOOR_ACTION.GRANTED &&\n currentWhiteboard.beneficiaryId !== previousWhiteboard.beneficiaryId\n ) {\n whoStopped = previousWhiteboard.beneficiaryId;\n }\n }\n }\n\n if (whoSharing) {\n const shareMember = this.membersCollection.get(whoSharing);\n\n if (shareMember) {\n shareMember.setIsContentSharing(true);\n }\n }\n if (whoStopped) {\n const stopMember = this.membersCollection.get(whoStopped);\n\n if (stopMember) {\n stopMember.setIsContentSharing(false);\n }\n }\n\n Trigger.trigger(\n this,\n {\n file: 'members',\n function: 'locusMediaSharesUpdate',\n },\n EVENT_TRIGGERS.MEMBERS_CONTENT_UPDATE,\n {\n activeSharingId: whoSharing,\n endedSharingId: whoStopped,\n }\n );\n }\n\n /**\n * Internal update the locus url value\n * @param {Object} payload\n * @param {String} payload.locusUrl\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n locusUrlUpdate(payload: any) {\n if (payload) {\n this.setLocusUrl(null, payload);\n }\n }\n\n /**\n * Internal update the type of meeting\n * @param {Object} payload\n * @param {String} payload.type\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n locusFullStateTypeUpdate(payload: {type: string}) {\n // TODO: at some point there could be a timing issue here, for updating each member\n // ie., if the type changes AND there is no locus update, then each member will not know the type of call\n // which means they cannot determine isMutable && isRemovable\n // for now this scenario is impossible to occur since we always get a locus update when the type changes\n // except for in delta locus meetings, but in that case, the type will always have been set differently\n // from the outset anyway\n if (payload) {\n this.setType(payload);\n }\n }\n\n /**\n * sets values in the members collection for updated and added properties from delta\n * @param {Object} membersUpdate {updated: [], added: []}\n * @returns {Object} membersCollection\n * @private\n * @memberof Members\n */\n private handleMembersUpdate(membersUpdate: any) {\n if (membersUpdate) {\n if (membersUpdate.updated) {\n this.constructMembers(membersUpdate.updated);\n }\n if (membersUpdate.added) {\n this.constructMembers(membersUpdate.added);\n }\n }\n\n return this.membersCollection.getAll();\n }\n\n /**\n * set members to the member collection from each updated/added lists as passed in\n * @param {Array} list\n * @returns {undefined}\n * @private\n * @memberof Members\n */\n private constructMembers(list: Array) {\n list.forEach((member) => {\n this.membersCollection.set(member.id, member);\n });\n }\n\n /**\n * Internal update the participants value\n * @param {Object} payload\n * @returns {Object}\n * @private\n * @memberof Members\n */\n private handleLocusInfoUpdatedParticipants(payload: any) {\n this.hostId = payload.hostId || this.hostId;\n this.selfId = payload.selfId || this.selfId;\n this.recordingId = payload.recordingId;\n if (!payload.participants) {\n LoggerProxy.logger.warn(\n 'Members:index#handleLocusInfoUpdatedParticipants --> participants payload is missing.'\n );\n }\n const memberUpdate = this.update(payload.participants);\n\n return memberUpdate;\n }\n\n /**\n * Update the locus Url\n * @param {Object} locus\n * @param {String} [locusUrl] optional, takes precedence\n * @throws {ParameterError}\n * @returns {undefined}\n * @public\n * @memberof Members\n */\n public setLocusUrl(locus: any, locusUrl: string = null) {\n if (locusUrl) {\n this.locusUrl = locusUrl;\n } else if (locus && (locus.locusUrl || locus.url)) {\n this.locusUrl = locus.locusUrl || locus.url;\n } else {\n throw new ParameterError(\n 'Setting locusUrl for the Members module should be done with a locus object or locusUrl'\n );\n }\n }\n\n /**\n * Update the host id\n * @param {Object} locus\n * @param {String} [hostId] optional, takes precedence\n * @throws {ParameterError}\n * @returns {undefined}\n * @public\n * @memberof Members\n */\n public setHostId(locus: any, hostId: string = null) {\n if (hostId) {\n this.hostId = hostId;\n } else if (locus) {\n this.hostId = locus && locus.owner && locus.owner.info ? locus.owner.info : null;\n } else {\n throw new ParameterError(\n 'Setting hostid for the Members module should be done with a locus object or hostId'\n );\n }\n }\n\n /**\n * Update the type\n * @param {Object} fullState\n * @param {String} [type] optional, takes precedence\n * @throws {ParameterError}\n * @returns {undefined}\n * @public\n * @memberof Members\n */\n public setType(fullState: any, type: string = null) {\n if (type) {\n this.type = type;\n } else if (fullState) {\n this.type = (fullState && fullState.type) || null;\n } else {\n throw new ParameterError(\n 'Setting type for the Members module should be done with a fullstate object or type string'\n );\n }\n }\n\n /**\n * Update the self Id\n * @param {Object} locus\n * @param {String} [selfId] optional, takes precedence\n * @throws {Error}\n * @returns {undefined}\n * @memberof Members\n */\n setSelfId(locus: any, selfId: string = null) {\n if (selfId) {\n this.selfId = selfId;\n } else if (locus) {\n this.selfId =\n locus && locus.self && locus.self.person && locus.self.person.id\n ? locus.self.person.id\n : null;\n } else {\n throw new ParameterError(\n 'Setting selfid for the Members module should be done with a locus object or selfId'\n );\n }\n }\n\n /**\n * Update the media share content id\n * @param {Object} locus\n * @param {String} [contentId] optional, takes precedence\n * @throws {Error}\n * @returns {undefined}\n * @memberof Members\n */\n setMediaShareContentId(locus: any, contentId?: string) {\n if (contentId) {\n this.mediaShareContentId = contentId;\n } else if (locus) {\n const contentMediaShare =\n locus.mediaShares &&\n locus.mediaShares.length &&\n locus.mediaShares.find((mediaShare) => mediaShare.name === CONTENT);\n\n this.mediaShareContentId =\n (contentMediaShare &&\n contentMediaShare.floor &&\n contentMediaShare.floor.beneficiary &&\n contentMediaShare.floor.beneficiary.id) ||\n null;\n } else {\n throw new ParameterError(\n 'Setting hostid for the Members module should be done with a locus object or hostId'\n );\n }\n }\n\n /**\n * Update the media share whiteboard id\n * @param {Object} locus\n * @param {String} [whiteboardId] optional, takes precedence\n * @throws {Error}\n * @returns {undefined}\n * @memberof Members\n */\n setMediaShareWhiteboardId(locus: any, whiteboardId?: string) {\n if (whiteboardId) {\n this.mediaShareWhiteboardId = whiteboardId;\n } else if (locus) {\n const whiteboardMediaShare =\n locus.mediaShares &&\n locus.mediaShares.length &&\n locus.mediaShares.find((mediaShare) => mediaShare.name === WHITEBOARD);\n\n this.mediaShareWhiteboardId =\n (whiteboardMediaShare &&\n whiteboardMediaShare.floor &&\n whiteboardMediaShare.floor.beneficiary &&\n whiteboardMediaShare.floor.beneficiary.id) ||\n null;\n } else {\n throw new ParameterError(\n 'Setting hostid for the Members module should be done with a locus object or hostId'\n );\n }\n }\n\n /**\n * Find all the updates, and added members\n * Removed/left members will end up in updates\n * Each array contains only members\n * @param {Array} participants the locus participants\n * @returns {Object} {added: {Array}, updated: {Array}}\n * @private\n * @memberof Members\n */\n private update(participants: Array) {\n const membersUpdate = {added: [], updated: []};\n\n if (participants) {\n participants.forEach((participant) => {\n if (participant.hideInRoster) {\n return;\n }\n const existing = this.membersCollection.get(participant.id);\n\n if (existing) {\n // TODO: compare existing member to new participant coming in properties and determine if updated (this helps for non delta events)\n // on client re renders, but we will have to determine what values to compare to determine difference, premature optimization\n membersUpdate.updated.push(\n new Member(participant, {\n recordingId: this.recordingId,\n selfId: this.selfId,\n hostId: this.hostId,\n contentSharingId: this.mediaShareContentId,\n whiteboardSharingId: this.mediaShareWhiteboardId,\n type: this.type,\n })\n );\n } else {\n membersUpdate.added.push(\n new Member(participant, {\n recordingId: this.recordingId,\n selfId: this.selfId,\n hostId: this.hostId,\n contentSharingId: this.mediaShareContentId,\n whiteboardSharingId: this.mediaShareWhiteboardId,\n type: this.type,\n })\n );\n }\n });\n }\n\n return membersUpdate;\n }\n\n /**\n * Adds a guest Member to the associated meeting\n * @param {String} invitee\n * @param {Boolean} [alertIfActive]\n * @returns {Promise}\n * @memberof Members\n */\n addMember(invitee: any, alertIfActive?: boolean) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError('The associated locus url for this meeting object must be defined.')\n );\n }\n if (MembersUtil.isInvalidInvitee(invitee)) {\n return Promise.reject(\n new ParameterError(\n 'The invitee must be defined with either a valid email, emailAddress or phoneNumber property.'\n )\n );\n }\n const options = MembersUtil.generateAddMemberOptions(invitee, this.locusUrl, alertIfActive);\n\n return this.membersRequest.addMembers(options);\n }\n\n /**\n * Cancels an outgoing PSTN call to the associated meeting\n * @param {String} invitee\n * @returns {Promise}\n * @memberof Members\n */\n cancelPhoneInvite(invitee: any) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError('The associated locus url for this meeting object must be defined.')\n );\n }\n if (MembersUtil.isInvalidInvitee(invitee)) {\n return Promise.reject(\n new ParameterError('The invitee must be defined with a valid phoneNumber property.')\n );\n }\n const options = MembersUtil.cancelPhoneInviteOptions(invitee, this.locusUrl);\n\n return this.membersRequest.cancelPhoneInvite(options);\n }\n\n /**\n * Admits waiting members (invited guests to meeting)\n * @param {Array} memberIds\n * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public admitMembers(\n memberIds: Array,\n sessionLocusUrls?: {authorizingLocusUrl: string; mainLocusUrl: string}\n ) {\n if (isEmpty(memberIds)) {\n return Promise.reject(new ParameterError('No member ids provided to admit.'));\n }\n const options = {\n sessionLocusUrls,\n ...MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl),\n };\n\n return this.membersRequest.admitMember(options);\n }\n\n /**\n * Removes a member from the meeting\n * @param {String} memberId\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public removeMember(memberId: string) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError('The associated locus url for this meeting object must be defined.')\n );\n }\n if (!memberId) {\n return Promise.reject(\n new ParameterError('The member id must be defined to remove the member.')\n );\n }\n const options = MembersUtil.generateRemoveMemberOptions(memberId, this.locusUrl);\n\n return this.membersRequest.removeMember(options);\n }\n\n /**\n * Audio mutes another member in a meeting\n * @param {String} memberId\n * @param {boolean} [mute] default true\n * @param {boolean} [isAudio] default true\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public muteMember(memberId: string, mute = true, isAudio = true) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError(\n 'The associated locus url for this meetings members object must be defined.'\n )\n );\n }\n if (!memberId) {\n return Promise.reject(\n new ParameterError('The member id must be defined to mute the member.')\n );\n }\n const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl, isAudio);\n\n return this.membersRequest.muteMember(options);\n }\n\n /**\n * Assign role(s) to a member in the meeting\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles - to assign an array of roles\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public assignRoles(memberId: string, roles: Array) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError(\n 'The associated locus url for this meetings members object must be defined.'\n )\n );\n }\n if (!memberId) {\n return Promise.reject(\n new ParameterError('The member id must be defined to assign the roles to a member.')\n );\n }\n const options = MembersUtil.generateRoleAssignmentMemberOptions(memberId, roles, this.locusUrl);\n\n return this.membersRequest.assignRolesMember(options).catch((error: any) => {\n const errorCode = error.body?.errorCode;\n switch (errorCode) {\n case ASSIGN_ROLES_ERROR_CODES.ReclaimHostNotSupportedErrorCode:\n return Promise.reject(new ReclaimHostNotSupportedError());\n case ASSIGN_ROLES_ERROR_CODES.ReclaimHostNotAllowedErrorCode:\n return Promise.reject(new ReclaimHostNotAllowedError());\n case ASSIGN_ROLES_ERROR_CODES.ReclaimHostEmptyWrongKeyErrorCode:\n return Promise.reject(new ReclaimHostEmptyWrongKeyError());\n case ASSIGN_ROLES_ERROR_CODES.ReclaimHostIsHostAlreadyErrorCode:\n return Promise.reject(new ReclaimHostIsHostAlreadyError());\n default:\n return Promise.reject(error);\n }\n });\n }\n\n /**\n * Raise or lower the hand of a member in a meeting\n * @param {String} memberId\n * @param {boolean} [raise] - to raise hand (=true) or lower (=false), default: true\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public raiseOrLowerHand(memberId: string, raise = true) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError(\n 'The associated locus url for this meetings members object must be defined.'\n )\n );\n }\n if (!memberId) {\n return Promise.reject(\n new ParameterError('The member id must be defined to raise/lower the hand of the member.')\n );\n }\n const options = MembersUtil.generateRaiseHandMemberOptions(memberId, raise, this.locusUrl);\n\n return this.membersRequest.raiseOrLowerHandMember(options);\n }\n\n /**\n * Lower all hands of members in a meeting\n * @param {String} requestingMemberId - id of the participant which requested the lower all hands\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public lowerAllHands(requestingMemberId: string) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError(\n 'The associated locus url for this meetings members object must be defined.'\n )\n );\n }\n if (!requestingMemberId) {\n return Promise.reject(\n new ParameterError(\n 'The requestingMemberId must be defined to lower all hands in a meeting.'\n )\n );\n }\n const options = MembersUtil.generateLowerAllHandsMemberOptions(\n requestingMemberId,\n this.locusUrl\n );\n\n return this.membersRequest.lowerAllHandsMember(options);\n }\n\n /**\n * Transfers the host to another member\n * @param {String} memberId\n * @param {boolean} [moderator] default true\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public transferHostToMember(memberId: string, moderator = true) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError(\n 'The associated locus url for this meetings members object must be defined.'\n )\n );\n }\n if (!memberId) {\n return Promise.reject(\n new ParameterError('The member id must be defined to transfer host to the member.')\n );\n }\n const options = MembersUtil.generateTransferHostMemberOptions(\n memberId,\n moderator,\n this.locusUrl\n );\n\n return this.membersRequest.transferHostToMember(options);\n }\n\n /**\n * Sends DTMF tones for the PSTN member of a meeting\n * @param {String} tones a string of one or more DTMF tones to send\n * @param {String} memberId member id\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public sendDialPadKey(tones = '', memberId = '') {\n // @ts-ignore\n if (!tones && tones !== 0) {\n return Promise.reject(new ParameterError('DMTF tones must be passed in'));\n }\n\n const member = this.membersCollection.get(memberId);\n\n if (!member) {\n return Promise.reject(new ParameterError('there is no member associated with that Id'));\n }\n\n const {locusUrl} = this;\n\n const deviceArray = member.participant.devices;\n const device = deviceArray.find(({deviceType}) => deviceType === 'SIP');\n const url = device?.url;\n\n if (locusUrl && url) {\n const options = MembersUtil.genderateSendDTMFOptions(url, tones, memberId, locusUrl);\n\n return this.membersRequest.sendDialPadKey(options);\n }\n\n return Promise.reject(\n new Error(\n 'Members:index#sendDialPadKey --> cannot send DTMF, meeting does not have a connection to the \"locus\" call control service.'\n )\n );\n }\n\n /** Finds a member that has any device with a csi matching provided value\n *\n * @param {number} csi\n * @returns {Member}\n */\n findMemberByCsi(csi) {\n return Object.values(this.membersCollection.getAll()).find((member) =>\n // @ts-ignore\n member.participant?.devices?.find((device) =>\n device.csis?.find((memberCsi) => memberCsi === csi)\n )\n );\n }\n\n /**\n * Returns an array of a member's CSIs matching the mediaType and mediaContent\n *\n * @param {string} memberId\n * @param {string} mediaType 'audio' or 'video'\n * @param {string} mediaContent 'main' or 'slides'\n * @returns {Member}\n */\n getCsisForMember(memberId, mediaType = 'video', mediaContent = 'main') {\n const csis = [];\n\n this.membersCollection.get(memberId)?.participant?.devices?.forEach((device) => {\n if (device.mediaSessions) {\n const deviceCsis = device.mediaSessions\n ?.filter(\n (mediaSession) =>\n mediaSession.mediaType === mediaType && mediaSession.mediaContent === mediaContent\n )\n .map((mediaSession) => mediaSession.csi);\n\n csis.push(...deviceCsis);\n }\n });\n\n return csis;\n }\n\n /**\n * Edit display name of participants in a meeting\n * @param {string} memberId - id of the participant who is receiving request\n * @param {string} requestingParticipantId - id of the participant who is sending request (optional)\n * @param {string} [alias] - alias name\n * @returns {Promise}\n * @public\n * @memberof Members\n */\n public editDisplayName(memberId: string, requestingParticipantId: string, alias: string) {\n if (!this.locusUrl) {\n return Promise.reject(\n new ParameterError(\n 'The associated locus url for this meetings members object must be defined.'\n )\n );\n }\n if (!memberId) {\n return Promise.reject(\n new ParameterError('The member id must be defined to edit display name of the member.')\n );\n }\n\n const {locusUrl} = this;\n\n const options = MembersUtil.generateEditDisplayNameMemberOptions(\n memberId,\n requestingParticipantId,\n alias,\n locusUrl\n );\n\n return this.membersRequest.editDisplayNameMember(options);\n }\n}\n","import type {\n NoiseReductionEffectOptions,\n VirtualBackgroundEffectOptions,\n} from '@webex/media-helpers';\nimport {Enum} from '../constants';\n\ntype INoiseReductionEffect = Omit<\n NoiseReductionEffectOptions,\n 'authToken' | 'workletProcessorUrl' | 'legacyProcessorUrl'\n>;\ntype IVirtualBackgroundEffect = Omit;\n\nexport type {INoiseReductionEffect, IVirtualBackgroundEffect};\n\nexport const MEETING_KEY = {\n CONVERSATION_URL: 'conversationUrl',\n SIP_URI: 'sipUri',\n LOCUS_URL: 'locusUrl',\n MEETINGNUMBER: 'meetingNumber',\n CORRELATION_ID: 'correlationId',\n} as const;\n\nexport type MEETING_KEY = Enum;\n","/* globals window */\n\nimport {\n _CREATED_,\n _INCOMING_,\n _JOINED_,\n _LEFT_,\n DESTINATION_TYPE,\n _MOVED_,\n BREAKOUTS,\n EVENT_TRIGGERS,\n LOCUS,\n LOCUSEVENT,\n ROAP,\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\nimport {MEETING_KEY} from './meetings.types';\n\n/**\n * Meetings Media Codec Missing Event\n * Emitted when H.264 codec is not\n * found in the browser.\n * @event media:codec:missing\n * @instance\n * @memberof MeetingsUtil\n */\n\n/**\n * Meetings Media Codec Loaded Event\n * Emitted when H.264 codec has been\n * loaded in the browser.\n * @event media:codec:loaded\n * @instance\n * @memberof MeetingsUtil\n */\n\nconst MeetingsUtil: any = {};\n\nMeetingsUtil.getMeetingAddedType = (type: DESTINATION_TYPE) =>\n type === DESTINATION_TYPE.LOCUS_ID ? _INCOMING_ : _CREATED_;\n\nMeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {\n const {data} = envelope;\n const {eventType} = data;\n\n if (eventType === LOCUSEVENT.MESSAGE_ROAP) {\n const meeting = meetingCollection.getByKey(MEETING_KEY.CORRELATION_ID, data.correlationId);\n\n if (meeting) {\n const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {\n correlation_id: data.correlationId,\n seq,\n message_type: messageType,\n error_type: errorType,\n error_cause: errorCause,\n });\n\n if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n meeting.roap.turnDiscovery.handleTurnDiscoveryResponse(data.message, 'from mercury');\n } else {\n const roapMessage = {\n seq,\n messageType,\n sdp: data.message.sdps?.length > 0 ? data.message.sdps[0] : undefined,\n tieBreaker,\n errorType,\n errorCause,\n };\n\n meeting.roapMessageReceived(roapMessage);\n }\n }\n }\n};\n\nMeetingsUtil.getMediaServer = (sdp) => {\n let mediaServer;\n\n // Attempt to collect the media server from the roap message.\n try {\n mediaServer = sdp\n .split('\\r\\n')\n .find((line) => line.startsWith('o='))\n .split(' ')\n .shift()\n .replace('o=', '');\n } catch {\n mediaServer = undefined;\n }\n\n return mediaServer;\n};\n\nMeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {\n let devices = [];\n\n if (locus) {\n if (locus && locus.self && locus.self.devices) {\n devices = locus.self.devices;\n }\n\n const foundDevice = devices.find((device) => device.url === deviceUrl);\n\n if (foundDevice && foundDevice.correlationId) {\n return foundDevice.correlationId;\n }\n }\n\n return false;\n};\n\nMeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {\n let result = '';\n\n if (userPreferences?.sites?.length) {\n const defaultSite = userPreferences.sites.find((site) => site.default);\n\n if (defaultSite) {\n result = defaultSite.siteUrl;\n } else {\n result = userPreferences.sites[0].siteUrl;\n }\n }\n\n return result;\n};\n\n/**\n * Will check to see if the H.264 media codec is supported.\n * @async\n * @private\n * @returns {Promise}\n */\nMeetingsUtil.hasH264Codec = async () => {\n let hasCodec = false;\n\n try {\n const pc = new window.RTCPeerConnection();\n const offer = await pc.createOffer({offerToReceiveVideo: true});\n\n if (offer.sdp.match(/^a=rtpmap:\\d+\\s+H264\\/\\d+/m)) {\n hasCodec = true;\n }\n pc.close();\n } catch (error) {\n LoggerProxy.logger.warn(\n 'Meetings:util#hasH264Codec --> Error creating peerConnection for H.264 test.'\n );\n }\n\n return hasCodec;\n};\n\n/**\n * Notifies the user whether or not the H.264\n * codec is present. Will continuously check\n * until max duration.\n * @async\n * @private\n * @param {object} options\n * @param {Number} options.firstChecked Timestamp in milliseconds\n * @param {boolean} options.disableNotifications Default is false. Boolean to enable/disable notification and events\n * @returns {undefined}\n */\nMeetingsUtil.checkH264Support = async function checkH264Support(options: {\n firstChecked: number;\n disableNotifications: boolean;\n}) {\n const {hasH264Codec} = MeetingsUtil;\n const {firstChecked, disableNotifications} = options || {};\n const delay = 5e3; // ms\n const maxDuration = 3e5; // ms\n const shouldTrigger = firstChecked === undefined;\n const shouldStopChecking = firstChecked && Date.now() - firstChecked >= maxDuration;\n\n // Disable notifications and start H.264 download only\n if (disableNotifications) {\n hasH264Codec();\n\n return;\n }\n\n // Codec loaded trigger event notification\n if (await hasH264Codec()) {\n Trigger.trigger(\n this,\n {\n file: 'meetings/util',\n function: 'checkH264Support',\n },\n EVENT_TRIGGERS.MEDIA_CODEC_LOADED\n );\n LoggerProxy.logger.log('Meetings:util#checkH264Support --> H264 codec loaded successfully.');\n\n return;\n }\n\n // Stop checking if past the timelimit\n if (shouldStopChecking) {\n LoggerProxy.logger.error(\n 'Meetings:util#checkH264Support --> Timed out waiting for H264 codec to load.'\n );\n\n return;\n }\n\n // Trigger only once\n if (shouldTrigger) {\n Trigger.trigger(\n this,\n {\n file: 'meetings/util',\n function: 'checkH264Support',\n },\n EVENT_TRIGGERS.MEDIA_CODEC_MISSING\n );\n LoggerProxy.logger.log('Meetings:util#checkH264Support --> H264 codec is missing.');\n }\n\n // Keep checking in intervals to see if codec loaded\n window.setTimeout(() => {\n const timestamp = firstChecked || Date.now();\n\n MeetingsUtil.checkH264Support.call(this, {firstChecked: timestamp});\n }, delay);\n};\n\n/**\n * get device from locus data\n * @param {Object} newLocus new locus data\n * @param {String} deviceUrl current device url\n * @returns {Object}\n */\nMeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {\n if (newLocus?.self?.devices?.length > 0) {\n return newLocus.self.devices.find((device) => device.url === deviceUrl);\n }\n\n return null;\n};\n\n/**\n * get self device joined status from locus data\n * @param {Object} meeting current meeting data\n * @param {Object} newLocus new locus data\n * @param {String} deviceUrl current device url\n * @returns {Object}\n */\nMeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {\n const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);\n if (thisDevice) {\n if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {\n return (\n thisDevice.state === _JOINED_ ||\n (thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)\n );\n }\n }\n\n return false;\n};\n\n/**\n * check the new locus is breakout session's one or not\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n */\nMeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {\n return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;\n};\n\n/**\n * check the locus is valid breakout locus or not\n * @param {Object} locus\n * @returns {boolean}\n * @private\n */\nMeetingsUtil.isValidBreakoutLocus = (locus: any) => {\n const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;\n const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);\n const selfJoined = locus.self?.state === _JOINED_;\n\n return isLocusAsBreakout && !inActiveStatus && selfJoined;\n};\nexport default MeetingsUtil;\n","enum RecordingAction {\n Start = 'Start',\n Stop = 'Stop',\n Pause = 'Pause',\n Resume = 'Resume',\n}\n\nexport default RecordingAction;\n","import {DISPLAY_HINTS, SELF_POLICY} from '../constants';\nimport RecordingAction from './enums';\nimport MeetingUtil from '../meeting/util';\n\nconst canUserStart = (\n displayHints: Array,\n userPolicies: Record\n): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst canUserPause = (\n displayHints: Array,\n userPolicies: Record\n): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst canUserResume = (\n displayHints: Array,\n userPolicies: Record\n): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst canUserStop = (\n displayHints: Array,\n userPolicies: Record\n): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst extractLocusId = (url: string) => {\n return url?.split('/').pop();\n};\n\nconst deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {\n let recording;\n let paused;\n\n switch (action) {\n case RecordingAction.Start:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Stop:\n recording = false;\n paused = false;\n break;\n case RecordingAction.Resume:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Pause:\n recording = true;\n paused = true;\n break;\n default:\n throw new Error(`Recording state cannot be derived from invalid action: ${action}`);\n }\n\n return {\n recording,\n paused,\n };\n};\n\nexport default {\n canUserStart,\n canUserPause,\n canUserResume,\n canUserStop,\n deriveRecordingStates,\n extractLocusId,\n};\n","enum Setting {\n disallowUnmute = 'DisallowUnmute',\n muteOnEntry = 'MuteOnEntry',\n muted = 'Muted',\n}\n\nenum Control {\n audio = 'audio',\n raiseHand = 'raiseHand',\n reactions = 'reactions',\n shareControl = 'shareControl',\n video = 'video',\n viewTheParticipantList = 'viewTheParticipantList',\n}\n\nexport {Control, Setting};\n\nexport default Setting;\n","import {DISPLAY_HINTS} from '../constants';\nimport {Control} from './enums';\nimport {\n ControlConfig,\n AudioProperties,\n RaiseHandProperties,\n ReactionsProperties,\n ViewTheParticipantListProperties,\n VideoProperties,\n} from './types';\n\n/**\n * The Controls Options Manager utilities\n *\n * @internal\n */\nclass Utils {\n /**\n * Validate if enabling mute on entry can be set.\n *\n * @param {Array} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetMuteOnEntry(displayHints: Array): boolean {\n return displayHints.includes(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);\n }\n\n /**\n * Validate if allowing unmuting can be set.\n *\n * @param {Array} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetDisallowUnmute(displayHints: Array): boolean {\n return displayHints.includes(DISPLAY_HINTS.ENABLE_HARD_MUTE);\n }\n\n /**\n * Validate if disabling mute on entry can be set.\n *\n * @param {Array} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetMuteOnEntry(displayHints: Array): boolean {\n return displayHints.includes(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);\n }\n\n /**\n * Validate if enabling muting can be set.\n *\n * @param {Array} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetDisallowUnmute(displayHints: Array): boolean {\n return displayHints.includes(DISPLAY_HINTS.DISABLE_HARD_MUTE);\n }\n\n /**\n * Validate if muting all can be set.\n *\n * @param {Array} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canSetMuted(displayHints: Array): boolean {\n return displayHints.includes(DISPLAY_HINTS.MUTE_ALL);\n }\n\n /**\n * Validate if unmuting all can be set.\n *\n * @param {Array} displayHints - Display Hints to use when validating.\n * @returns {boolean} - True if the action is allowed.\n */\n public static canUnsetMuted(displayHints: Array): boolean {\n return displayHints.includes(DISPLAY_HINTS.UNMUTE_ALL);\n }\n\n /**\n * Validate an array of hints are allowed based on a full collection of hints.\n *\n * @param {Object} config - Configuration Object.\n * @param {Array} config.requiredHints - Hints required for validation.\n * @param {Array} config.displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static hasHints(config: {requiredHints: Array; displayHints: Array}) {\n const {requiredHints, displayHints} = config;\n\n return requiredHints.every((hint) => displayHints.includes(hint));\n }\n\n /**\n * Validate that the self policy object contains the required policies.\n *\n * @param {Object} config - Configuration Object.\n * @param {Array} config.requiredPolicies - Policies required for validation.\n * @param {Array} config.policies - All available policies.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static hasPolicies(config: {requiredPolicies: Array; policies: Array}) {\n const {requiredPolicies, policies = {}} = config;\n\n return requiredPolicies.every((hint) => policies[hint]);\n }\n\n /**\n * Validate if an audio-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig} control - Audio control config to validate.\n * @param {Array} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateAudio(\n control: ControlConfig,\n displayHints: Array\n ) {\n const requiredHints = [];\n\n if (control.properties.muted === true) {\n requiredHints.push(DISPLAY_HINTS.MUTE_ALL);\n }\n if (control.properties.muted === false) {\n requiredHints.push(DISPLAY_HINTS.UNMUTE_ALL);\n }\n if (control.properties.disallowUnmute === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_HARD_MUTE);\n }\n if (control.properties.disallowUnmute === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_HARD_MUTE);\n }\n if (control.properties.muteOnEntry === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);\n }\n if (control.properties.muteOnEntry === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n public static canUpdateRaiseHand(\n control: ControlConfig,\n displayHints: Array\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_RAISE_HAND);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_RAISE_HAND);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if an reactions-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig} control - Reaction control config to validate.\n * @param {Array} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateReactions(\n control: ControlConfig,\n displayHints: Array\n ) {\n const requiredHints = [];\n\n // This additional if statement avoids the display hint discrepency due to\n // the service blocking partial requests with this property only.\n if (control.properties.showDisplayNameWithReactions !== undefined) {\n if (control.properties.showDisplayNameWithReactions === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);\n }\n if (control.properties.showDisplayNameWithReactions === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);\n }\n } else {\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_REACTIONS);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_REACTIONS);\n }\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if an share-control-scoped control is allowed to be sent to the service.\n *\n * @param {Array} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateShareControl(displayHints: Array) {\n return Utils.hasHints({requiredHints: [DISPLAY_HINTS.SHARE_CONTROL], displayHints});\n }\n\n /**\n * Validate if an view-the-participants-list-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig} control - View Participants List control config to validate.\n * @param {Array} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateViewTheParticipantsList(\n control: ControlConfig,\n displayHints: Array\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate if a video-scoped control is allowed to be sent to the service.\n *\n * @param {ControlConfig} control - Video control config to validate.\n * @param {Array} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdateVideo(\n control: ControlConfig,\n displayHints: Array\n ) {\n const requiredHints = [];\n\n if (control.properties.enabled === true) {\n requiredHints.push(DISPLAY_HINTS.ENABLE_VIDEO);\n }\n if (control.properties.enabled === false) {\n requiredHints.push(DISPLAY_HINTS.DISABLE_VIDEO);\n }\n\n return Utils.hasHints({requiredHints, displayHints});\n }\n\n /**\n * Validate that a control can be sent to the service based on the provided\n * display hints.\n *\n * @param {ControlConfig} control - Control to validate.\n * @param {Array} displayHints - All available hints.\n * @returns {boolean} - True if all of the actions are allowed.\n */\n public static canUpdate(control: ControlConfig, displayHints: Array) {\n let determinant: boolean;\n\n switch (control.scope) {\n case Control.audio:\n determinant = Utils.canUpdateAudio(control as ControlConfig, displayHints);\n break;\n\n case Control.raiseHand:\n determinant = Utils.canUpdateRaiseHand(\n control as ControlConfig,\n displayHints\n );\n break;\n\n case Control.reactions:\n determinant = Utils.canUpdateReactions(\n control as ControlConfig,\n displayHints\n );\n break;\n\n case Control.shareControl:\n determinant = Utils.canUpdateShareControl(displayHints);\n break;\n\n case Control.video:\n determinant = Utils.canUpdateVideo(control as ControlConfig, displayHints);\n break;\n\n case Control.viewTheParticipantList:\n determinant = Utils.canUpdateViewTheParticipantsList(\n control as ControlConfig,\n displayHints\n );\n break;\n\n default:\n determinant = false;\n }\n\n return determinant;\n }\n}\n\nexport default Utils;\n","/* globals MediaStream */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nconst MediaUtil: any = {};\n\nMediaUtil.createMediaStream = (tracks) => {\n if (!tracks) {\n LoggerProxy.logger.error(\"Media:util#createMediaStream --> Tracks don't exist\");\n }\n const filtredTracks = tracks.filter((element) => !!element);\n\n return new MediaStream(filtredTracks);\n};\n\nexport default MediaUtil;\n","import {Reaction, ReactionServerType, SkinTone, SkinToneType} from './reactions.type';\n\nconst Reactions: Record = {\n smile: {\n type: 'smile',\n codepoints: '1F642',\n shortcodes: ':slightly_smiling_face:',\n },\n sad: {\n type: 'sad',\n codepoints: '1F625',\n shortcodes: ':sad_but_relieved_face:',\n },\n wow: {\n type: 'wow',\n codepoints: '1F62E',\n shortcodes: ':open_mouth:',\n },\n haha: {\n type: 'haha',\n codepoints: '1F603',\n shortcodes: ':smiley:',\n },\n celebrate: {\n type: 'celebrate',\n codepoints: '1F389',\n shortcodes: ':party_popper:',\n },\n clap: {\n type: 'clap',\n codepoints: '1F44F',\n shortcodes: ':clap:',\n },\n thumb_up: {\n type: 'thumb_up',\n codepoints: '1F44D',\n shortcodes: ':thumbsup:',\n },\n thumb_down: {\n type: 'thumb_down',\n codepoints: '1F44E',\n shortcodes: ':thumbsdown:',\n },\n heart: {\n type: 'heart',\n codepoints: '2764',\n shortcodes: ':heart:',\n },\n fire: {\n type: 'fire',\n codepoints: '1F525',\n shortcodes: ':fire:',\n },\n prayer: {\n type: 'prayer',\n codepoints: '1F64F',\n shortcodes: ':pray:',\n },\n speed_up: {\n type: 'speed_up',\n codepoints: '1F407',\n shortcodes: ':rabbit:',\n },\n slow_down: {\n type: 'slow_down',\n codepoints: '1F422',\n shortcodes: ':turtle:',\n },\n};\n\nconst SkinTones: Record = {\n normal: {\n type: 'normal_skin_tone',\n codepoints: '',\n shortcodes: '',\n },\n light: {\n type: 'light_skin_tone',\n codepoints: '1F3FB',\n shortcodes: ':skin-tone-2:',\n },\n medium_light: {\n type: 'medium_light_skin_tone',\n codepoints: '1F3FC',\n shortcodes: ':skin-tone-3:',\n },\n medium: {\n type: 'medium_skin_tone',\n codepoints: '1F3FD',\n shortcodes: ':skin-tone-4:',\n },\n medium_dark: {\n type: 'medium_dark_skin_tone',\n codepoints: '1F3FE',\n shortcodes: ':skin-tone-5:',\n },\n dark: {\n type: 'dark_skin_tone',\n codepoints: '1F3FF',\n shortcodes: ':skin-tone-6:',\n },\n};\n\nexport {Reactions, SkinTones};\n","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n return privateMap.get(receiver);\n}","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n return descriptor.value;\n}","import classApplyDescriptorSet from \"./classApplyDescriptorSet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"set\");\n classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n}","export default function _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n descriptor.value = value;\n }\n}","/* eslint-disable valid-jsdoc */\nimport {\n MediaType,\n ReceiveSlot as WcmeReceiveSlot,\n ReceiveSlotEvents as WcmeReceiveSlotEvents,\n StreamState,\n} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nexport const ReceiveSlotEvents = {\n SourceUpdate: 'sourceUpdate',\n MaxFsUpdate: 'maxFsUpdate',\n};\n\nexport type {StreamState} from '@webex/internal-media-core';\nexport type CSI = number;\nexport type MemberId = string;\nexport type ReceiveSlotId = string;\n\nlet receiveSlotCounter = 0;\n\nexport type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;\n\n/**\n * Class representing a receive slot. A single receive slot is able to receive a single track\n * for example some participant's main video or audio\n */\nexport class ReceiveSlot extends EventsScope {\n private readonly mcReceiveSlot: WcmeReceiveSlot;\n\n private readonly findMemberIdCallback: FindMemberIdCallback;\n\n public readonly id: ReceiveSlotId;\n\n public readonly mediaType: MediaType;\n\n #memberId?: MemberId;\n\n #csi?: CSI;\n\n #sourceState: StreamState;\n\n /**\n * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()\n * to create any receive slots\n *\n * @param {MediaType} mediaType\n * @param {ReceiveSlot} mcReceiveSlot\n * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI\n */\n constructor(\n mediaType: MediaType,\n mcReceiveSlot: WcmeReceiveSlot,\n findMemberIdCallback: FindMemberIdCallback\n ) {\n super();\n\n receiveSlotCounter += 1;\n\n this.findMemberIdCallback = findMemberIdCallback;\n this.mediaType = mediaType;\n this.mcReceiveSlot = mcReceiveSlot;\n this.#sourceState = 'no source';\n this.id = `r${receiveSlotCounter}`;\n\n this.setupEventListeners();\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.#memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.#csi;\n }\n\n /**\n * Set the max frame size for this slot\n * @param newFs frame size\n */\n public setMaxFs(newFs) {\n // emit event for media request manager to listen to\n\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.MaxFsUpdate,\n {\n maxFs: newFs,\n }\n );\n }\n\n /**\n * Getter for sourceState\n */\n public get sourceState() {\n return this.#sourceState;\n }\n\n /**\n * registers event handlers with the underlying ReceiveSlot\n */\n private setupEventListeners() {\n const scope = {\n file: 'meeting/receiveSlot',\n function: 'setupEventListeners',\n };\n\n this.mcReceiveSlot.on(\n WcmeReceiveSlotEvents.SourceUpdate,\n (state: StreamState, csi?: number) => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`\n );\n this.#memberId = csi ? this.findMemberIdCallback(csi) : undefined;\n this.#csi = csi;\n this.#sourceState = state;\n\n this.emit(scope, ReceiveSlotEvents.SourceUpdate, {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n });\n }\n );\n }\n\n /** Tries to find the member id for this receive slot if it hasn't got one */\n public findMemberId() {\n if (this.#memberId === undefined && this.#csi) {\n this.#memberId = this.findMemberIdCallback(this.#csi);\n\n if (this.#memberId) {\n // if we found the memberId, simulate source update so that the client app knows that something's changed\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.SourceUpdate,\n {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n }\n );\n }\n }\n }\n\n /**\n * @returns {string} a log message used to identify the receive slot\n */\n public get logString() {\n return `ReceiveSlot - ${this.id}: ${JSON.stringify(this.mcReceiveSlot.id)}`;\n }\n\n /**\n * The MediaStream object associated with this slot.\n *\n * @returns {MediaStream} The MediaStreamTrack.\n */\n get stream(): MediaStream {\n return this.mcReceiveSlot.stream;\n }\n\n /**\n * The underlying WCME receive slot\n */\n get wcmeReceiveSlot(): WcmeReceiveSlot {\n return this.mcReceiveSlot;\n }\n}\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable import/prefer-default-export */\nimport {MediaType, ReceiveSlot as WcmeReceiveSlot} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {FindMemberIdCallback, ReceiveSlot} from './receiveSlot';\n\nexport type CreateSlotCallback = (mediaType: MediaType) => Promise;\n\nexport type {CSI, FindMemberIdCallback} from './receiveSlot';\n\n/**\n * Manages all receive slots used by a meeting. WMCE receive slots cannot be ever deleted,\n * so this manager has a pool in order to re-use the slots that were released earlier.\n */\nexport class ReceiveSlotManager {\n private allocatedSlots: {[key in MediaType]: ReceiveSlot[]};\n\n private freeSlots: {[key in MediaType]: ReceiveSlot[]};\n\n private createSlotCallback: CreateSlotCallback;\n\n private findMemberIdByCsiCallback: FindMemberIdCallback;\n\n /**\n * Constructor\n * @param {Meeting} meeting\n */\n constructor(\n createSlotCallback: CreateSlotCallback,\n findMemberIdByCsiCallback: FindMemberIdCallback\n ) {\n this.allocatedSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n this.freeSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n this.createSlotCallback = createSlotCallback;\n this.findMemberIdByCsiCallback = findMemberIdByCsiCallback;\n }\n\n /**\n * Creates a new receive slot or returns one from the existing pool of free slots\n *\n * @param {MediaType} mediaType\n * @returns {Promise}\n */\n async allocateSlot(mediaType: MediaType): Promise {\n // try to use one of the free ones\n const availableSlot = this.freeSlots[mediaType].pop();\n\n if (availableSlot) {\n this.allocatedSlots[mediaType].push(availableSlot);\n\n LoggerProxy.logger.log(`${mediaType}: receive slot re-used: ${availableSlot.id}`);\n\n return availableSlot;\n }\n\n // we have to create a new one\n const wcmeReceiveSlot = await this.createSlotCallback(mediaType);\n\n const receiveSlot = new ReceiveSlot(mediaType, wcmeReceiveSlot, this.findMemberIdByCsiCallback);\n\n this.allocatedSlots[mediaType].push(receiveSlot);\n LoggerProxy.logger.log(`${mediaType}: new receive slot allocated: ${receiveSlot.id}`);\n\n return receiveSlot;\n }\n\n /**\n * Releases the slot back to the pool so it can be re-used by others in the future\n * @param {ReceiveSlot} slot\n */\n releaseSlot(slot: ReceiveSlot) {\n const idx = this.allocatedSlots[slot.mediaType].findIndex(\n (allocatedSlot) => allocatedSlot === slot\n );\n\n if (idx >= 0) {\n this.allocatedSlots[slot.mediaType].splice(idx, 1);\n this.freeSlots[slot.mediaType].push(slot);\n LoggerProxy.logger.log(`${slot.mediaType}: receive slot released: ${slot.id}`);\n } else {\n LoggerProxy.logger.warn(\n `ReceiveSlotManager#releaseSlot --> trying to release a ${slot.mediaType}} slot that is not managed by this ReceiveSlotManager`\n );\n }\n }\n\n /**\n * Resets the slot manager - this method should be called when the media connection is torn down\n */\n reset() {\n this.allocatedSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n this.freeSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n }\n\n /**\n * Returns statistics about the managed slots\n *\n * @returns {Object}\n */\n getStats() {\n const numAllocatedSlots = {};\n const numFreeSlots = {};\n\n Object.keys(this.allocatedSlots).forEach((key) => {\n if (this.allocatedSlots[key].length > 0) {\n numAllocatedSlots[key] = this.allocatedSlots[key].length;\n }\n });\n\n Object.keys(this.freeSlots).forEach((key) => {\n if (this.freeSlots[key].length > 0) {\n numFreeSlots[key] = this.freeSlots[key].length;\n }\n });\n\n return {\n numAllocatedSlots,\n numFreeSlots,\n };\n }\n\n /**\n * Tries to find the member id on all allocated receive slots\n * This function should be called when new members are added to the meeting.\n */\n updateMemberIds() {\n Object.keys(this.allocatedSlots).forEach((key) => {\n this.allocatedSlots[key].forEach((slot: ReceiveSlot) => {\n slot.findMemberId();\n });\n });\n }\n\n /**\n * Find a receive slot by a ssrc.\n *\n * @param ssrc - The ssrc of the receive slot to find.\n * @returns - The receive slot with this ssrc, undefined if not found.\n */\n findReceiveSlotBySsrc(ssrc: number): ReceiveSlot | undefined {\n return Object.values(this.allocatedSlots)\n .flat()\n .find((r) => ssrc && r.wcmeReceiveSlot?.id?.ssrc === ssrc);\n }\n}\n","import {\n SendSlot,\n MediaType,\n LocalStream,\n MultistreamRoapMediaConnection,\n NamedMediaGroup,\n} from '@webex/internal-media-core';\n\nexport default class SendSlotManager {\n private readonly slots: Map = new Map();\n private readonly LoggerProxy: any;\n\n constructor(LoggerProxy: any) {\n this.LoggerProxy = LoggerProxy;\n }\n\n /**\n * This method is used to create a sendSlot for the given mediaType and returns the created sendSlot\n * @param {MultistreamRoapMediaConnection} mediaConnection MultistreamRoapMediaConnection for which a sendSlot needs to be created\n * @param {MediaType} mediaType MediaType for which a sendSlot needs to be created (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {boolean} active This is optional boolean to set the active state of the sendSlot. Default is true\n * @returns {SendSlot} slot The created sendSlot\n */\n public createSlot(\n mediaConnection: MultistreamRoapMediaConnection,\n mediaType: MediaType,\n active = true\n ): SendSlot {\n if (this.slots.has(mediaType)) {\n throw new Error(`Slot for ${mediaType} already exists`);\n }\n\n const slot: SendSlot = mediaConnection.createSendSlot(mediaType, active);\n\n this.slots.set(mediaType, slot);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->createSlot#Created slot for ${mediaType} with active ${active}`\n );\n\n return slot;\n }\n\n /**\n * This method is used to retrieve the sendSlot for the given mediaType\n * @param {MediaType} mediaType of which the slot needs to be retrieved\n * @returns {SendSlot}\n */\n public getSlot(mediaType: MediaType): SendSlot {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n return slot;\n }\n\n /**\n * Allow users to specify 'namedMediaGroups' to indicate which named media group its audio should be sent to.\n * @param {MediaType} mediaType MediaType of the sendSlot to which the audio stream needs to be send to the media group\n * @param {[]}namedMediaGroups - Allow users to specify 'namedMediaGroups'.If the value of 'namedMediaGroups' is zero,\n * named media group will be canceled and the audio stream will be sent to the floor.\n * @returns {void}\n */\n public setNamedMediaGroups(mediaType: MediaType, namedMediaGroups: NamedMediaGroup[]) {\n if (mediaType !== MediaType.AudioMain) {\n throw new Error(\n `sendSlotManager cannot set named media group which media type is ${mediaType}`\n );\n }\n\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n slot.setNamedMediaGroups(namedMediaGroups);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setNamedMediaGroups#set named media group ${namedMediaGroups}`\n );\n }\n\n /**\n * This method publishes the given stream to the sendSlot for the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot to which a stream needs to be published (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {LocalStream} stream LocalStream to be published\n * @returns {Promise}\n */\n public async publishStream(mediaType: MediaType, stream: LocalStream): Promise {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.publishStream(stream);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->publishStream#Published stream for ${mediaType} and stream with label ${stream.label} and muted ${stream.muted}`\n );\n }\n\n /**\n * This method unpublishes the stream from the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot from which a stream needs to be unpublished (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @returns {Promise}\n */\n public async unpublishStream(mediaType: MediaType): Promise {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.unpublishStream();\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->unpublishStream#Unpublished stream for ${mediaType}`\n );\n }\n\n /**\n * This method is used to set the active state of the sendSlot for the given mediaType\n * @param {MediaType} mediaType The MediaType of the sendSlot for which the active state needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {boolean} active The boolean to set the active state of the sendSlot. Default is true\n * @returns {void}\n */\n public setActive(mediaType: MediaType, active = true): void {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n slot.active = active;\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setActive#Set active for ${mediaType} to ${active}`\n );\n }\n\n /**\n * This method is used to set the codec parameters for the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {Object} codecParameters\n * @returns {Promise}\n */\n public async setCodecParameters(\n mediaType: MediaType,\n codecParameters: {\n [key: string]: string | undefined; // As per ts-sdp undefined is considered as a valid value to be used for codec parameters\n }\n ): Promise {\n // These codec parameter changes underneath are SDP value changes that are taken care by WCME automatically. So no need for any change in streams from the web sdk side\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.setCodecParameters(codecParameters);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->setCodecParameters#Set codec parameters for ${mediaType} to ${codecParameters}`\n );\n }\n\n /**\n * This method is used to delete the codec parameters for the sendSlot of the given mediaType\n * @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be deleted (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)\n * @param {Array} parameters Array of keys of the codec parameters to be deleted\n * @returns {Promise}\n */\n public async deleteCodecParameters(mediaType: MediaType, parameters: string[]): Promise {\n const slot = this.slots.get(mediaType);\n\n if (!slot) {\n throw new Error(`Slot for ${mediaType} does not exist`);\n }\n\n await slot.deleteCodecParameters(parameters);\n\n this.LoggerProxy.logger.info(\n `SendSlotsManager->deleteCodecParameters#Deleted the following codec parameters -> ${parameters} for ${mediaType}`\n );\n }\n\n /**\n * This method is used to reset the SendSlotsManager by deleting all the sendSlots\n * @returns {undefined}\n */\n public reset(): void {\n this.slots.clear();\n }\n}\n","/* eslint-disable valid-jsdoc */\nimport {MediaType, StreamState} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\n\nexport const RemoteMediaEvents = {\n SourceUpdate: ReceiveSlotEvents.SourceUpdate,\n Stopped: 'stopped',\n};\n\nexport type RemoteVideoResolution =\n | 'thumbnail' // the smallest possible resolution, 90p or less\n | 'very small' // 180p or less\n | 'small' // 360p or less\n | 'medium' // 720p or less\n | 'large' // 1080p or less\n | 'best'; // highest possible resolution\n\n/**\n * Converts pane size into h264 maxFs\n * @param {PaneSize} paneSize\n * @returns {number}\n */\nexport function getMaxFs(paneSize: RemoteVideoResolution): number {\n let maxFs;\n\n switch (paneSize) {\n case 'thumbnail':\n maxFs = 60;\n break;\n case 'very small':\n maxFs = 240;\n break;\n case 'small':\n maxFs = 920;\n break;\n case 'medium':\n maxFs = 3600;\n break;\n case 'large':\n maxFs = 8192;\n break;\n case 'best':\n maxFs = 8192; // for now 'best' is 1080p, so same as 'large'\n break;\n default:\n LoggerProxy.logger.warn(\n `RemoteMedia#getMaxFs --> unsupported paneSize: ${paneSize}, using \"medium\" instead`\n );\n maxFs = 3600;\n }\n\n return maxFs;\n}\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n};\n\nexport type RemoteMediaId = string;\n\nlet remoteMediaCounter = 0;\n\n/**\n * Class representing a remote audio/video stream.\n *\n * Internally it is associated with a specific receive slot\n * and a media request for it.\n */\nexport class RemoteMedia extends EventsScope {\n private receiveSlot?: ReceiveSlot;\n\n private readonly mediaRequestManager: MediaRequestManager;\n\n private readonly options: Options;\n\n private mediaRequestId?: MediaRequestId;\n\n public readonly id: RemoteMediaId;\n\n /**\n * Constructs RemoteMedia instance\n *\n * @param receiveSlot\n * @param mediaRequestManager\n * @param options\n */\n constructor(\n receiveSlot: ReceiveSlot,\n mediaRequestManager: MediaRequestManager,\n options?: Options\n ) {\n super();\n remoteMediaCounter += 1;\n this.receiveSlot = receiveSlot;\n this.mediaRequestManager = mediaRequestManager;\n this.options = options || {};\n this.setupEventListeners();\n this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;\n }\n\n /**\n * Supply the width and height of the video element\n * to restrict the requested resolution to this size\n * @param width width of the video element\n * @param height height of the video element\n */\n public setSizeHint(width, height) {\n // only base on height for now\n let fs: number;\n\n if (height < 135) {\n fs = 60;\n } else if (height < 270) {\n fs = 240;\n } else if (height < 540) {\n fs = 920;\n } else if (height <= 720) {\n fs = 3600;\n } else {\n fs = 8192;\n }\n\n this.receiveSlot?.setMaxFs(fs);\n }\n\n /**\n * Invalidates the remote media by clearing the reference to a receive slot and\n * cancelling the media request.\n * After this call the remote media is unusable.\n *\n * @param {boolean} commit - whether to commit the cancellation of the media request\n * @internal\n */\n public stop(commit = true) {\n this.cancelMediaRequest(commit);\n this.receiveSlot?.removeAllListeners();\n this.receiveSlot = undefined;\n this.emit(\n {\n file: 'multistream/remoteMedia',\n function: 'stop',\n },\n RemoteMediaEvents.Stopped,\n {}\n );\n }\n\n /**\n * Sends a new media request. This method can only be used for receiver-selected policy,\n * because only in that policy we have a 1-1 relationship between RemoteMedia and MediaRequest\n * and the request id is then stored in this RemoteMedia instance.\n * For active-speaker policy, the same request is shared among many RemoteMedia instances,\n * so it's managed through RemoteMediaGroup\n *\n * @internal\n */\n public sendMediaRequest(csi: CSI, commit: boolean) {\n if (this.mediaRequestId) {\n this.cancelMediaRequest(false);\n }\n\n if (!this.receiveSlot) {\n throw new Error('sendMediaRequest() called on an invalidated RemoteMedia instance');\n }\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'receiver-selected',\n csi,\n },\n receiveSlots: [this.receiveSlot],\n codecInfo: this.options.resolution && {\n codec: 'h264',\n maxFs: getMaxFs(this.options.resolution),\n },\n },\n commit\n );\n }\n\n /**\n * @internal\n */\n public cancelMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * registers event listeners on the receive slot and forwards all the events\n */\n private setupEventListeners() {\n if (this.receiveSlot) {\n const scope = {\n file: 'multistream/remoteMedia',\n function: 'setupEventListeners',\n };\n\n this.receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {\n this.emit(scope, RemoteMediaEvents.SourceUpdate, data);\n });\n }\n }\n\n /**\n * Getter for mediaType\n */\n public get mediaType(): MediaType {\n return this.receiveSlot?.mediaType;\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.receiveSlot?.memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.receiveSlot?.csi;\n }\n\n /**\n * Getter for source state\n */\n public get sourceState(): StreamState {\n return this.receiveSlot?.sourceState;\n }\n\n /**\n * Getter for remote media stream\n */\n public get stream() {\n return this.receiveSlot?.stream;\n }\n\n /**\n * @internal\n * @returns {ReceiveSlot}\n */\n public getUnderlyingReceiveSlot() {\n return this.receiveSlot;\n }\n}\n","/* eslint-disable require-jsdoc */\nimport {\n StreamRequest,\n Policy,\n ActiveSpeakerInfo,\n ReceiverSelectedInfo,\n CodecInfo as WcmeCodecInfo,\n H264Codec,\n getRecommendedMaxBitrateForFrameSize,\n RecommendedOpusBitrates,\n NamedMediaGroup,\n} from '@webex/internal-media-core';\nimport {cloneDeepWith, debounce, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\nimport {getMaxFs} from './remoteMedia';\n\nexport interface ActiveSpeakerPolicyInfo {\n policy: 'active-speaker';\n priority: number;\n crossPriorityDuplication: boolean;\n crossPolicyDuplication: boolean;\n preferLiveVideo: boolean;\n namedMediaGroups?: NamedMediaGroup[];\n}\n\nexport interface ReceiverSelectedPolicyInfo {\n policy: 'receiver-selected';\n csi: number;\n}\n\nexport type PolicyInfo = ActiveSpeakerPolicyInfo | ReceiverSelectedPolicyInfo;\n\nexport interface H264CodecInfo {\n codec: 'h264';\n maxFs?: number;\n maxFps?: number;\n maxMbps?: number;\n maxWidth?: number;\n maxHeight?: number;\n}\n\nexport type CodecInfo = H264CodecInfo; // we'll add AV1 here in the future when it's available\n\nexport interface MediaRequest {\n policyInfo: PolicyInfo;\n receiveSlots: Array;\n codecInfo?: CodecInfo;\n preferredMaxFs?: number;\n handleMaxFs?: ({maxFs}: {maxFs: number}) => void;\n}\n\nexport type MediaRequestId = string;\n\nconst CODEC_DEFAULTS = {\n h264: {\n maxFs: 8192,\n maxFps: 3000,\n maxMbps: 245760,\n },\n};\n\nconst DEBOUNCED_SOURCE_UPDATE_TIME = 1000;\n\ntype DegradationPreferences = {\n maxMacroblocksLimit: number;\n};\n\ntype SendMediaRequestsCallback = (streamRequests: StreamRequest[]) => void;\ntype Kind = 'audio' | 'video';\n\ntype Options = {\n degradationPreferences: DegradationPreferences;\n kind: Kind;\n trimRequestsToNumOfSources: boolean; // if enabled, AS speaker requests will be trimmed based on the calls to setNumCurrentSources()\n};\n\ntype ClientRequestsMap = {[key: MediaRequestId]: MediaRequest};\n\nexport class MediaRequestManager {\n private sendMediaRequestsCallback: SendMediaRequestsCallback;\n\n private kind: Kind;\n\n private counter: number;\n\n private clientRequests: ClientRequestsMap;\n\n private degradationPreferences: DegradationPreferences;\n\n private sourceUpdateListener: () => void;\n\n private debouncedSourceUpdateListener: () => void;\n\n private previousStreamRequests: Array = [];\n\n private trimRequestsToNumOfSources: boolean;\n private numTotalSources: number;\n private numLiveSources: number;\n\n constructor(sendMediaRequestsCallback: SendMediaRequestsCallback, options: Options) {\n this.sendMediaRequestsCallback = sendMediaRequestsCallback;\n this.counter = 0;\n this.numLiveSources = 0;\n this.numTotalSources = 0;\n this.clientRequests = {};\n this.degradationPreferences = options.degradationPreferences;\n this.kind = options.kind;\n this.trimRequestsToNumOfSources = options.trimRequestsToNumOfSources;\n this.sourceUpdateListener = this.commit.bind(this);\n this.debouncedSourceUpdateListener = debounce(\n this.sourceUpdateListener,\n DEBOUNCED_SOURCE_UPDATE_TIME\n );\n }\n\n public setDegradationPreferences(degradationPreferences: DegradationPreferences) {\n this.degradationPreferences = degradationPreferences;\n this.sendRequests(); // re-send requests after preferences are set\n }\n\n private getDegradedClientRequests(clientRequests: ClientRequestsMap) {\n const maxFsLimits = [\n getMaxFs('best'),\n getMaxFs('large'),\n getMaxFs('medium'),\n getMaxFs('small'),\n getMaxFs('very small'),\n getMaxFs('thumbnail'),\n ];\n\n // reduce max-fs until total macroblocks is below limit\n for (let i = 0; i < maxFsLimits.length; i += 1) {\n let totalMacroblocksRequested = 0;\n Object.values(clientRequests).forEach((mr) => {\n if (mr.codecInfo) {\n mr.codecInfo.maxFs = Math.min(\n mr.preferredMaxFs || CODEC_DEFAULTS.h264.maxFs,\n mr.codecInfo.maxFs || CODEC_DEFAULTS.h264.maxFs,\n maxFsLimits[i]\n );\n // we only consider sources with \"live\" state\n const slotsWithLiveSource = mr.receiveSlots.filter((rs) => rs.sourceState === 'live');\n totalMacroblocksRequested += mr.codecInfo.maxFs * slotsWithLiveSource.length;\n }\n });\n if (totalMacroblocksRequested <= this.degradationPreferences.maxMacroblocksLimit) {\n if (i !== 0) {\n LoggerProxy.logger.warn(\n `multistream:mediaRequestManager --> too many streams with high max-fs, frame size will be limited to ${maxFsLimits[i]}`\n );\n }\n break;\n } else if (i === maxFsLimits.length - 1) {\n LoggerProxy.logger.warn(\n `multistream:mediaRequestManager --> even with frame size limited to ${maxFsLimits[i]} you are still requesting too many streams, consider reducing the number of requests`\n );\n }\n }\n }\n\n /**\n * Returns true if two stream requests are the same, false otherwise.\n *\n * @param {StreamRequest} streamRequestA - Stream request A for comparison.\n * @param {StreamRequest} streamRequestB - Stream request B for comparison.\n * @returns {boolean} - Whether they are equal.\n */\n // eslint-disable-next-line class-methods-use-this\n public isEqual(streamRequestA: StreamRequest, streamRequestB: StreamRequest) {\n return (\n JSON.stringify(streamRequestA._toJmpStreamRequest()) ===\n JSON.stringify(streamRequestB._toJmpStreamRequest())\n );\n }\n\n /**\n * Compares new stream requests to previous ones and determines\n * if they are the same.\n *\n * @param {StreamRequest[]} newRequests - Array with new requests.\n * @returns {boolean} - True if they are equal, false otherwise.\n */\n private checkIsNewRequestsEqualToPrev(newRequests: StreamRequest[]) {\n return (\n !isEmpty(this.previousStreamRequests) &&\n this.previousStreamRequests.length === newRequests.length &&\n this.previousStreamRequests.every((req, idx) => this.isEqual(req, newRequests[idx]))\n );\n }\n\n /**\n * Returns the maxPayloadBitsPerSecond per Stream\n *\n * If MediaRequestManager kind is \"audio\", a constant bitrate will be returned.\n * If MediaRequestManager kind is \"video\", the bitrate will be calculated based\n * on maxFs (default h264 maxFs as fallback if maxFs is not defined)\n *\n * @param {MediaRequest} mediaRequest - mediaRequest to take data from\n * @returns {number} maxPayloadBitsPerSecond\n */\n private getMaxPayloadBitsPerSecond(mediaRequest: MediaRequest): number {\n if (this.kind === 'audio') {\n // return mono_music bitrate default if the kind of mediarequest manager is audio:\n return RecommendedOpusBitrates.FB_MONO_MUSIC;\n }\n\n return getRecommendedMaxBitrateForFrameSize(\n mediaRequest.codecInfo.maxFs || CODEC_DEFAULTS.h264.maxFs\n );\n }\n\n /**\n * Returns the max Macro Blocks per second (maxMbps) per H264 Stream\n *\n * The maxMbps will be calculated based on maxFs and maxFps\n * (default h264 maxFps as fallback if maxFps is not defined)\n *\n * @param {MediaRequest} mediaRequest - mediaRequest to take data from\n * @returns {number} maxMbps\n */\n // eslint-disable-next-line class-methods-use-this\n private getH264MaxMbps(mediaRequest: MediaRequest): number {\n // fallback for maxFps (not needed for maxFs, since there is a fallback already in getDegradedClientRequests)\n const maxFps = mediaRequest.codecInfo.maxFps || CODEC_DEFAULTS.h264.maxFps;\n\n // divided by 100 since maxFps is 3000 (for 30 frames per seconds)\n return (mediaRequest.codecInfo.maxFs * maxFps) / 100;\n }\n\n /**\n * Clears the previous stream requests.\n *\n * @returns {void}\n */\n public clearPreviousRequests(): void {\n this.previousStreamRequests = [];\n }\n\n /** Modifies the passed in clientRequests and makes sure that in total they don't ask\n * for more streams than there are available.\n *\n * @param {Object} clientRequests\n * @returns {void}\n */\n private trimRequests(clientRequests: ClientRequestsMap) {\n const preferLiveVideo = this.getPreferLiveVideo();\n\n if (!this.trimRequestsToNumOfSources) {\n return;\n }\n\n // preferLiveVideo being undefined means that there are no active-speaker requests so we don't need to do any trimming\n if (preferLiveVideo === undefined) {\n return;\n }\n\n let numStreamsAvailable = preferLiveVideo ? this.numLiveSources : this.numTotalSources;\n\n Object.values(clientRequests)\n .sort((a, b) => {\n // we have to count how many streams we're asking for\n // and should not ask for more than numStreamsAvailable in total,\n // so we might need to trim active-speaker requests and first ones to trim should be\n // the ones with lowest priority\n\n // receiver-selected requests have priority over active-speakers\n if (a.policyInfo.policy === 'receiver-selected') {\n return -1;\n }\n if (b.policyInfo.policy === 'receiver-selected') {\n return 1;\n }\n\n // and active-speakers are sorted by descending priority\n return b.policyInfo.priority - a.policyInfo.priority;\n })\n .forEach((request) => {\n // we only trim active-speaker requests\n if (request.policyInfo.policy === 'active-speaker') {\n const trimmedCount = Math.min(numStreamsAvailable, request.receiveSlots.length);\n\n request.receiveSlots.length = trimmedCount;\n\n numStreamsAvailable -= trimmedCount;\n } else {\n numStreamsAvailable -= request.receiveSlots.length;\n }\n\n if (numStreamsAvailable < 0) {\n numStreamsAvailable = 0;\n }\n });\n }\n\n private getPreferLiveVideo(): boolean | undefined {\n let preferLiveVideo;\n\n Object.values(this.clientRequests).forEach((mr) => {\n if (mr.policyInfo.policy === 'active-speaker') {\n // take the value from first encountered active speaker request\n if (preferLiveVideo === undefined) {\n preferLiveVideo = mr.policyInfo.preferLiveVideo;\n }\n\n if (mr.policyInfo.preferLiveVideo !== preferLiveVideo) {\n throw new Error(\n 'a mix of active-speaker groups with different values for preferLiveVideo is not supported'\n );\n }\n }\n });\n\n return preferLiveVideo;\n }\n\n private cloneClientRequests(): ClientRequestsMap {\n // we clone the client requests but without cloning the ReceiveSlots that they reference\n return cloneDeepWith(this.clientRequests, (value, key) => {\n if (key === 'receiveSlots') {\n return [...value];\n }\n\n return undefined;\n });\n }\n\n private sendRequests() {\n const streamRequests: StreamRequest[] = [];\n\n // clone the requests so that any modifications we do to them don't affect the original ones\n const clientRequests = this.cloneClientRequests();\n\n this.trimRequests(clientRequests);\n this.getDegradedClientRequests(clientRequests);\n\n // map all the client media requests to wcme stream requests\n Object.values(clientRequests).forEach((mr) => {\n if (mr.receiveSlots.length > 0) {\n streamRequests.push(\n new StreamRequest(\n mr.policyInfo.policy === 'active-speaker'\n ? Policy.ActiveSpeaker\n : Policy.ReceiverSelected,\n mr.policyInfo.policy === 'active-speaker'\n ? new ActiveSpeakerInfo(\n mr.policyInfo.priority,\n mr.policyInfo.crossPriorityDuplication,\n mr.policyInfo.crossPolicyDuplication,\n mr.policyInfo.preferLiveVideo,\n mr.policyInfo.namedMediaGroups\n )\n : new ReceiverSelectedInfo(mr.policyInfo.csi),\n mr.receiveSlots.map((receiveSlot) => receiveSlot.wcmeReceiveSlot),\n this.getMaxPayloadBitsPerSecond(mr),\n mr.codecInfo && [\n new WcmeCodecInfo(\n 0x80,\n new H264Codec(\n mr.codecInfo.maxFs,\n mr.codecInfo.maxFps || CODEC_DEFAULTS.h264.maxFps,\n this.getH264MaxMbps(mr),\n mr.codecInfo.maxWidth,\n mr.codecInfo.maxHeight\n )\n ),\n ]\n )\n );\n }\n });\n\n //! IMPORTANT: this is only a temporary fix. This will soon be done in the jmp layer (@webex/json-multistream)\n // https://jira-eng-gpk2.cisco.com/jira/browse/WEBEX-326713\n if (!this.checkIsNewRequestsEqualToPrev(streamRequests)) {\n this.sendMediaRequestsCallback(streamRequests);\n this.previousStreamRequests = streamRequests;\n LoggerProxy.logger.info(`multistream:sendRequests --> media requests sent. `);\n } else {\n LoggerProxy.logger.info(\n `multistream:sendRequests --> detected duplicate WCME requests, skipping them... `\n );\n }\n }\n\n public addRequest(mediaRequest: MediaRequest, commit = true): MediaRequestId {\n // eslint-disable-next-line no-plusplus\n const newId = `${this.counter++}`;\n\n this.clientRequests[newId] = mediaRequest;\n\n const eventHandler = ({maxFs}) => {\n mediaRequest.preferredMaxFs = maxFs;\n this.debouncedSourceUpdateListener();\n };\n mediaRequest.handleMaxFs = eventHandler;\n\n mediaRequest.receiveSlots.forEach((rs) => {\n rs.on(ReceiveSlotEvents.SourceUpdate, this.sourceUpdateListener);\n rs.on(ReceiveSlotEvents.MaxFsUpdate, mediaRequest.handleMaxFs);\n });\n\n if (commit) {\n this.commit();\n }\n\n return newId;\n }\n\n public cancelRequest(requestId: MediaRequestId, commit = true) {\n const mediaRequest = this.clientRequests[requestId];\n\n mediaRequest?.receiveSlots.forEach((rs) => {\n rs.off(ReceiveSlotEvents.SourceUpdate, this.sourceUpdateListener);\n rs.off(ReceiveSlotEvents.MaxFsUpdate, mediaRequest.handleMaxFs);\n });\n\n delete this.clientRequests[requestId];\n\n if (commit) {\n this.commit();\n }\n }\n\n public commit() {\n return this.sendRequests();\n }\n\n public reset() {\n this.clientRequests = {};\n this.numTotalSources = 0;\n this.numLiveSources = 0;\n }\n\n public setNumCurrentSources(numTotalSources: number, numLiveSources: number) {\n this.numTotalSources = numTotalSources;\n this.numLiveSources = numLiveSources;\n\n this.sendRequests();\n }\n}\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable require-jsdoc */\n/* eslint-disable import/prefer-default-export */\nimport {forEach} from 'lodash';\nimport {NamedMediaGroup} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {getMaxFs, RemoteMedia, RemoteVideoResolution} from './remoteMedia';\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot} from './receiveSlot';\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n preferLiveVideo?: boolean; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n namedMediaGroup?: NamedMediaGroup; // applies only to named media groups for audio\n};\n\nexport class RemoteMediaGroup {\n private mediaRequestManager: MediaRequestManager;\n\n private priority: number;\n\n private options: Options;\n\n private unpinnedRemoteMedia: RemoteMedia[];\n\n private mediaRequestId?: MediaRequestId; // id of the \"active-speaker\" media request id\n\n private pinnedRemoteMedia: RemoteMedia[];\n\n constructor(\n mediaRequestManager: MediaRequestManager,\n receiveSlots: ReceiveSlot[],\n priority: number,\n commitMediaRequest: boolean,\n options: Options = {}\n ) {\n this.mediaRequestManager = mediaRequestManager;\n this.priority = priority;\n this.options = options;\n\n this.unpinnedRemoteMedia = receiveSlots.map(\n (slot) =>\n new RemoteMedia(slot, this.mediaRequestManager, {\n resolution: this.options.resolution,\n })\n );\n this.pinnedRemoteMedia = [];\n\n this.sendActiveSpeakerMediaRequest(commitMediaRequest);\n }\n\n /**\n * Gets the array of remote media elements from the group\n *\n * @param {string} filter - 'all' (default) returns both pinned and unpinned\n * @returns {Array}\n */\n public getRemoteMedia(filter: 'all' | 'pinned' | 'unpinned' = 'all') {\n if (filter === 'unpinned') {\n // return a shallow copy so that the client cannot modify this.unpinnedRemoteMedia array\n return [...this.unpinnedRemoteMedia];\n }\n if (filter === 'pinned') {\n // return a shallow copy so that the client cannot modify this.pinnedRemoteMedia array\n return [...this.pinnedRemoteMedia];\n }\n\n return [...this.unpinnedRemoteMedia, ...this.pinnedRemoteMedia];\n }\n\n /**\n * Sets CSIs for multiple RemoteMedia instances belonging to this RemoteMediaGroup.\n * For each entry in the remoteMediaCsis array:\n * - if csi is specified, the RemoteMedia instance is pinned to that CSI\n * - if csi is undefined, the RemoteMedia instance is unpinned\n * @internal\n */\n public setActiveSpeakerCsis(\n remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[],\n commit = true\n ): void {\n forEach(remoteMediaCsis, ({csi, remoteMedia}) => {\n if (csi) {\n if (!(this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {\n const unpinId = this.unpinnedRemoteMedia.indexOf(remoteMedia);\n if (unpinId >= 0) {\n this.unpinnedRemoteMedia.splice(unpinId, 1);\n this.pinnedRemoteMedia.push(remoteMedia);\n } else {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n }\n remoteMedia.sendMediaRequest(csi, false);\n } else {\n if (!(this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {\n const pinId = this.pinnedRemoteMedia.indexOf(remoteMedia);\n if (pinId >= 0) {\n this.pinnedRemoteMedia.splice(pinId, 1);\n this.unpinnedRemoteMedia.push(remoteMedia);\n } else {\n throw new Error(\n `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n }\n remoteMedia.cancelMediaRequest(false);\n }\n });\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n if (commit) {\n this.mediaRequestManager.commit();\n }\n }\n\n /**\n * Pins a specific remote media instance to a specfic CSI, so the media will\n * no longer come from active speaker, but from that CSI.\n * If no CSI is given, the current CSI value is used.\n *\n */\n public pin(remoteMedia: RemoteMedia, csi?: CSI): void {\n // if csi is not specified, use the current one\n const targetCsi = csi || remoteMedia.csi;\n\n if (!targetCsi) {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it has no CSI set and no CSI value was given`\n );\n }\n\n if (this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n if (targetCsi === remoteMedia.csi) {\n // remote media already pinned to target CSI, nothing to do\n LoggerProxy.logger.log(\n `RemoteMediaGroup#pin --> remote media ${remoteMedia.id} already pinned`\n );\n\n return;\n }\n } else {\n const idx = this.unpinnedRemoteMedia.indexOf(remoteMedia);\n\n if (idx < 0) {\n throw new Error(\n `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n\n this.unpinnedRemoteMedia.splice(idx, 1);\n this.pinnedRemoteMedia.push(remoteMedia);\n\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n }\n\n remoteMedia.sendMediaRequest(targetCsi, false);\n this.mediaRequestManager.commit();\n }\n\n /**\n * Unpins a remote media instance, so that it will again provide media from active speakers\n *\n */\n public unpin(remoteMedia: RemoteMedia) {\n if (this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n LoggerProxy.logger.log(\n `RemoteMediaGroup#pin --> remote media ${remoteMedia.id} already unpinned`\n );\n\n return;\n }\n const idx = this.pinnedRemoteMedia.indexOf(remoteMedia);\n\n if (idx < 0) {\n throw new Error(\n `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`\n );\n }\n\n this.pinnedRemoteMedia.splice(idx, 1);\n this.unpinnedRemoteMedia.push(remoteMedia);\n\n remoteMedia.cancelMediaRequest(false);\n this.cancelActiveSpeakerMediaRequest(false);\n this.sendActiveSpeakerMediaRequest(false);\n this.mediaRequestManager.commit();\n }\n\n public isPinned(remoteMedia: RemoteMedia) {\n if (this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n return false;\n }\n if (this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0) {\n return true;\n }\n\n throw new Error(`remote media object ${remoteMedia.id} not found in the group`);\n }\n\n /**\n * setPreferLiveVideo - sets preferLiveVideo to true/false\n * @internal\n */\n public setPreferLiveVideo(preferLiveVideo: boolean, commit: boolean) {\n if (this.options.preferLiveVideo !== preferLiveVideo) {\n this.options.preferLiveVideo = preferLiveVideo;\n this.sendActiveSpeakerMediaRequest(commit);\n }\n }\n\n private sendActiveSpeakerMediaRequest(commit: boolean) {\n this.cancelActiveSpeakerMediaRequest(false);\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'active-speaker',\n priority: this.priority,\n crossPriorityDuplication: false,\n crossPolicyDuplication: false,\n preferLiveVideo: !!this.options?.preferLiveVideo,\n namedMediaGroups: this.options.namedMediaGroup?.value\n ? [this.options?.namedMediaGroup]\n : undefined,\n },\n receiveSlots: this.unpinnedRemoteMedia.map((remoteMedia) =>\n remoteMedia.getUnderlyingReceiveSlot()\n ) as ReceiveSlot[],\n codecInfo: this.options.resolution && {\n codec: 'h264',\n maxFs: getMaxFs(this.options.resolution),\n },\n },\n commit\n );\n }\n\n private cancelActiveSpeakerMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * setNamedMediaGroup - sets named media group type and value\n * @internal\n */\n public setNamedMediaGroup(namedMediaGroup: NamedMediaGroup, commit: boolean) {\n if (\n this.options.namedMediaGroup.value !== namedMediaGroup.value ||\n this.options.namedMediaGroup.type !== namedMediaGroup.type\n ) {\n this.options.namedMediaGroup = namedMediaGroup;\n this.sendActiveSpeakerMediaRequest(commit);\n }\n }\n\n /**\n * Invalidates the remote media group by clearing the references to the receive slots\n * used by all remote media from that group and cancelling all media requests.\n * After this call the remote media group is unusable.\n *\n * @param{boolean} commit whether to commit the cancellation of media requests\n * @internal\n */\n public stop(commit = true) {\n this.unpinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));\n this.pinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));\n this.cancelActiveSpeakerMediaRequest(false);\n\n if (commit) {\n this.mediaRequestManager.commit();\n }\n }\n\n /**\n * Checks if a given RemoteMedia instance belongs to this group.\n *\n * @param remoteMedia RemoteMedia instance to check\n * @param filter controls which remote media from the group to check\n * @returns true if remote media is found\n */\n public includes(\n remoteMedia: RemoteMedia,\n filter: 'all' | 'pinned' | 'unpinned' = 'all'\n ): boolean {\n if (filter === 'pinned') {\n return this.pinnedRemoteMedia.includes(remoteMedia);\n }\n if (filter === 'unpinned') {\n return this.unpinnedRemoteMedia.includes(remoteMedia);\n }\n\n return (\n this.unpinnedRemoteMedia.includes(remoteMedia) || this.pinnedRemoteMedia.includes(remoteMedia)\n );\n }\n}\n","/* eslint-disable valid-jsdoc */\nimport {cloneDeep, forEach, remove} from 'lodash';\nimport {EventMap} from 'typed-emitter';\nimport {MediaType, NamedMediaGroup} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nimport {RemoteMedia, RemoteVideoResolution} from './remoteMedia';\nimport {ReceiveSlot, CSI} from './receiveSlot';\nimport {ReceiveSlotManager} from './receiveSlotManager';\nimport {RemoteMediaGroup} from './remoteMediaGroup';\nimport {MediaRequestManager} from './mediaRequestManager';\nimport {NAMED_MEDIA_GROUP_TYPE_AUDIO} from '../constants';\n\nexport type PaneSize = RemoteVideoResolution;\nexport type LayoutId = string;\nexport type PaneId = string;\nexport type PaneGroupId = string;\n\nexport interface ActiveSpeakerVideoPaneGroup {\n id: PaneGroupId;\n numPanes: number; // maximum number of panes in the group (actual number may be lower, if there are not enough participants in the meeting)\n size: PaneSize; // preferred size for all panes in the group\n priority: number; // 0-255 (255 = highest priority), each group must have a different priority from all other groups\n}\n\nexport interface MemberVideoPane {\n id: PaneId;\n size: PaneSize;\n csi?: CSI;\n}\n\nexport interface VideoLayout {\n screenShareVideo?: {\n size: PaneSize;\n };\n activeSpeakerVideoPaneGroups?: ActiveSpeakerVideoPaneGroup[]; // list of active speaker video pane groups\n memberVideoPanes?: MemberVideoPane[]; // list of video panes for specific members, CSI values can be changed later via setVideoPaneCsi()\n}\n\nexport interface Configuration {\n audio: {\n numOfActiveSpeakerStreams: number; // number of audio streams we want to receive\n numOfScreenShareStreams: number; // 1 should be enough, because in webex only 1 person at a time can be presenting screen share\n };\n video: {\n preferLiveVideo: boolean; // applies to all pane groups with active speaker policy\n initialLayoutId: LayoutId;\n\n layouts: {[key: LayoutId]: VideoLayout}; // a map of all available layouts, a layout can be set via setLayout() method\n };\n namedMediaGroup?: NamedMediaGroup;\n}\n\n/* Predefined layouts: */\n\n// An \"all equal\" grid, with size up to 3 x 3 = 9:\nconst AllEqualLayout: VideoLayout = {\n activeSpeakerVideoPaneGroups: [\n {\n id: 'main',\n numPanes: 9,\n size: 'best',\n priority: 255,\n },\n ],\n};\n\n// A layout with just a single remote active speaker video pane:\nconst SingleLayout: VideoLayout = {\n activeSpeakerVideoPaneGroups: [\n {\n id: 'main',\n numPanes: 1,\n size: 'best',\n priority: 255,\n },\n ],\n};\n\n// A layout with 1 big pane for the highest priority active speaker and 5 small panes for other active speakers:\nconst OnePlusFiveLayout: VideoLayout = {\n activeSpeakerVideoPaneGroups: [\n {\n id: 'mainBigOne',\n numPanes: 1,\n size: 'large',\n priority: 255,\n },\n {\n id: 'secondarySetOfSmallPanes',\n numPanes: 5,\n size: 'very small',\n priority: 254,\n },\n ],\n};\n\n// A layout with 2 big panes for 2 main active speakers and a strip of 6 small panes for other active speakers:\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst TwoMainPlusSixSmallLayout: VideoLayout = {\n activeSpeakerVideoPaneGroups: [\n {\n id: 'mainGroupWith2BigPanes',\n numPanes: 2,\n size: 'large',\n priority: 255,\n },\n {\n id: 'secondaryGroupOfSmallPanes',\n numPanes: 6,\n size: 'small',\n priority: 254,\n },\n ],\n};\n\n// A strip of 8 small video panes (thumbnails) displayed at the top of a remote screenshare:\nconst RemoteScreenShareWithSmallThumbnailsLayout: VideoLayout = {\n screenShareVideo: {size: 'best'},\n activeSpeakerVideoPaneGroups: [\n {\n id: 'thumbnails',\n numPanes: 8,\n size: 'thumbnail',\n priority: 255,\n },\n ],\n};\n\n// A staged layout with 4 pre-selected meeting participants in the main 2x2 grid and 6 small panes for other active speakers at the top:\nconst Stage2x2With6ThumbnailsLayout: VideoLayout = {\n activeSpeakerVideoPaneGroups: [\n {\n id: 'thumbnails',\n numPanes: 6,\n size: 'thumbnail',\n priority: 255,\n },\n ],\n memberVideoPanes: [\n {id: 'stage-1', size: 'medium', csi: undefined},\n {id: 'stage-2', size: 'medium', csi: undefined},\n {id: 'stage-3', size: 'medium', csi: undefined},\n {id: 'stage-4', size: 'medium', csi: undefined},\n ],\n};\n\n/**\n * Default configuration:\n * - uses 3 audio streams\n * - prefers active speakers with live video (e.g. are not audio only or video muted) over active speakers without live video\n * - has a few layouts defined, including 1 that contains remote screen share (ScreenShareView)\n */\nexport const DefaultConfiguration: Configuration = {\n audio: {\n numOfActiveSpeakerStreams: 3,\n numOfScreenShareStreams: 1,\n },\n video: {\n preferLiveVideo: true,\n initialLayoutId: 'AllEqual',\n\n layouts: {\n AllEqual: AllEqualLayout,\n OnePlusFive: OnePlusFiveLayout,\n Single: SingleLayout,\n Stage: Stage2x2With6ThumbnailsLayout,\n ScreenShareView: RemoteScreenShareWithSmallThumbnailsLayout,\n },\n },\n};\n\nexport enum Event {\n // events for audio streams\n AudioCreated = 'AudioCreated',\n InterpretationAudioCreated = 'InterpretationAudioCreated',\n ScreenShareAudioCreated = 'ScreenShareAudioCreated',\n\n // events for video streams\n VideoLayoutChanged = 'VideoLayoutChanged',\n}\n\nexport interface VideoLayoutChangedEventData {\n layoutId: LayoutId;\n activeSpeakerVideoPanes: {\n [key: PaneGroupId]: RemoteMediaGroup;\n };\n memberVideoPanes: {[key: PaneId]: RemoteMedia};\n screenShareVideo?: RemoteMedia;\n}\nexport interface Events extends EventMap {\n // audio\n [Event.AudioCreated]: (audio: RemoteMediaGroup) => void;\n [Event.ScreenShareAudioCreated]: (screenShareAudio: RemoteMediaGroup) => void;\n\n // video\n [Event.VideoLayoutChanged]: (data: VideoLayoutChangedEventData) => void;\n}\n\n/**\n * A helper class that manages all remote audio/video streams in order to achieve a predefined set of layouts.\n * It also creates a fixed number of audio streams and these don't change during the meeting.\n *\n * Things that RemoteMediaManager does:\n * - owns the receive slots (creates them when needed, and re-uses them when switching layouts)\n * - constructs appropriate RemoteMedia and RemoteMediaGroup objects and sends appropriate mediaRequests\n */\nexport class RemoteMediaManager extends EventsScope {\n private config: Configuration;\n\n private started: boolean;\n\n private receiveSlotManager: ReceiveSlotManager;\n\n private mediaRequestManagers: {\n audio: MediaRequestManager;\n video: MediaRequestManager;\n screenShareAudio: MediaRequestManager;\n screenShareVideo: MediaRequestManager;\n };\n\n private currentLayout?: VideoLayout;\n\n private slots: {\n audio: {\n main: ReceiveSlot[];\n si: ReceiveSlot;\n };\n screenShare: {\n audio: ReceiveSlot[];\n video?: ReceiveSlot;\n };\n video: {\n unused: ReceiveSlot[];\n activeSpeaker: ReceiveSlot[];\n receiverSelected: ReceiveSlot[];\n };\n };\n\n private media: {\n audio: {\n main?: RemoteMediaGroup;\n si?: RemoteMediaGroup;\n };\n video: {\n activeSpeakerGroups: {\n [key: PaneGroupId]: RemoteMediaGroup;\n };\n memberPanes: {[key: PaneId]: RemoteMedia};\n };\n screenShare: {\n audio?: RemoteMediaGroup;\n video?: RemoteMediaGroup;\n };\n };\n\n private receiveSlotAllocations: {\n activeSpeaker: {[key: PaneGroupId]: {slots: ReceiveSlot[]}};\n receiverSelected: {[key: PaneId]: ReceiveSlot};\n };\n\n private currentLayoutId?: LayoutId;\n\n /**\n * Constructor\n *\n * @param {ReceiveSlotManager} receiveSlotManager\n * @param {{audio: MediaRequestManager, video: mediaRequestManagers}} mediaRequestManagers\n * @param {Configuration} config Configuration describing what video layouts to use during the meeting\n */\n constructor(\n receiveSlotManager: ReceiveSlotManager,\n mediaRequestManagers: {\n audio: MediaRequestManager;\n video: MediaRequestManager;\n screenShareAudio: MediaRequestManager;\n screenShareVideo: MediaRequestManager;\n },\n config: Configuration = DefaultConfiguration\n ) {\n super();\n this.started = false;\n this.config = config;\n this.receiveSlotManager = receiveSlotManager;\n this.mediaRequestManagers = mediaRequestManagers;\n this.media = {\n audio: {\n main: undefined,\n si: undefined,\n },\n video: {\n activeSpeakerGroups: {},\n memberPanes: {},\n },\n screenShare: {\n audio: undefined,\n video: undefined,\n },\n };\n\n this.checkConfigValidity();\n\n this.slots = {\n audio: {\n main: [],\n si: undefined,\n },\n screenShare: {\n audio: [],\n video: undefined,\n },\n video: {\n unused: [],\n activeSpeaker: [],\n receiverSelected: [],\n },\n };\n\n this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};\n\n LoggerProxy.logger.log(\n `RemoteMediaManager#constructor --> RemoteMediaManager created with config: ${JSON.stringify(\n this.config\n )}`\n );\n }\n\n /**\n * Checks if configuration is valid, throws an error if it's not\n */\n private checkConfigValidity() {\n if (!(this.config.video.initialLayoutId in this.config.video.layouts)) {\n throw new Error(\n `invalid config: initialLayoutId \"${this.config.video.initialLayoutId}\" doesn't match any of the layouts`\n );\n }\n\n // check if each layout is valid\n Object.values(this.config.video.layouts).forEach((layout) => {\n const groupIds = {};\n const paneIds = {};\n const groupPriorites = {};\n\n layout.activeSpeakerVideoPaneGroups?.forEach((group) => {\n if (groupIds[group.id]) {\n throw new Error(\n `invalid config: duplicate active speaker video pane group id: ${group.id}`\n );\n }\n groupIds[group.id] = true;\n\n if (groupPriorites[group.priority]) {\n throw new Error(\n `invalid config: multiple active speaker video pane groups have same priority: ${group.priority}`\n );\n }\n groupPriorites[group.priority] = true;\n });\n\n layout.memberVideoPanes?.forEach((pane) => {\n if (paneIds[pane.id]) {\n throw new Error(`invalid config: duplicate member video pane id: ${pane.id}`);\n }\n paneIds[pane.id] = true;\n });\n });\n }\n\n /**\n * Starts the RemoteMediaManager.\n *\n * @returns {Promise}\n */\n public async start() {\n if (this.started) {\n throw new Error('start() failure: already started');\n }\n this.started = true;\n\n await this.createAudioMedia();\n\n await this.createScreenShareReceiveSlots();\n this.createScreenShareAudioMedia();\n\n await this.preallocateVideoReceiveSlots();\n\n await this.setLayout(this.config.video.initialLayoutId);\n }\n\n /**\n * Releases all the used resources (like allocated receive slots). This function needs\n * to be called when we leave the meeting, etc.\n */\n public stop() {\n // invalidate all remoteMedia objects\n this.invalidateCurrentRemoteMedia({\n audio: true,\n video: true,\n screenShareAudio: true,\n screenShareVideo: true,\n commit: true,\n });\n\n // release all audio receive slots\n this.slots.audio.main.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));\n this.slots.audio.main.length = 0;\n if (this.slots.audio.si) {\n this.receiveSlotManager.releaseSlot(this.slots.audio.si);\n }\n\n // release screen share slots\n this.slots.screenShare.audio.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));\n this.slots.screenShare.audio.length = 0;\n if (this.slots.screenShare.video) {\n this.receiveSlotManager.releaseSlot(this.slots.screenShare.video);\n this.slots.screenShare.video = undefined;\n }\n\n // release video slots\n this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};\n\n this.slots.video.unused.push(...this.slots.video.activeSpeaker);\n this.slots.video.activeSpeaker.length = 0;\n\n this.slots.video.unused.push(...this.slots.video.receiverSelected);\n this.slots.video.receiverSelected.length = 0;\n\n this.releaseUnusedVideoSlots();\n\n this.currentLayout = undefined;\n this.currentLayoutId = undefined;\n this.started = false;\n }\n\n /**\n * Returns the total number of main video panes required for a given layout\n *\n * @param {VideoLayout} layout\n * @returns {number}\n */\n private getRequiredNumVideoSlotsForLayout(layout?: VideoLayout) {\n if (!layout) {\n return 0;\n }\n\n const activeSpeakerCount =\n layout.activeSpeakerVideoPaneGroups?.reduce(\n (sum, paneGroup) => sum + paneGroup.numPanes,\n 0\n ) || 0;\n\n const receiverSelectedCount = layout.memberVideoPanes?.length || 0;\n\n return activeSpeakerCount + receiverSelectedCount;\n }\n\n /**\n * Allocates the maximum number of panes that any of the configured layouts will require.\n * We do this at the beginning, because it's more efficient (much faster) then allocating receive slots\n * later, after the SDP exchange was done.\n */\n private async preallocateVideoReceiveSlots() {\n const maxNumVideoPanesRequired = Object.values(this.config.video.layouts).reduce(\n (maxValue, layout) => Math.max(maxValue, this.getRequiredNumVideoSlotsForLayout(layout)),\n 0\n );\n\n while (this.slots.video.unused.length < maxNumVideoPanesRequired) {\n // eslint-disable-next-line no-await-in-loop\n this.slots.video.unused.push(\n // eslint-disable-next-line no-await-in-loop\n await this.receiveSlotManager.allocateSlot(MediaType.VideoMain)\n );\n }\n }\n\n /**\n * Changes the layout (triggers Event.VideoLayoutChanged)\n *\n * @param {LayoutId} layoutId new layout id\n * @returns {Promise}\n */\n public async setLayout(layoutId: LayoutId) {\n if (!(layoutId in this.config.video.layouts)) {\n throw new Error(\n `invalid layoutId: \"${layoutId}\" doesn't match any of the configured layouts`\n );\n }\n if (!this.started) {\n throw new Error('setLayout() called before start()');\n }\n LoggerProxy.logger.log(`RemoteMediaManager#setLayout --> new layout selected: ${layoutId}`);\n\n this.currentLayoutId = layoutId;\n this.currentLayout = cloneDeep(this.config.video.layouts[this.currentLayoutId]);\n\n await this.updateVideoReceiveSlots();\n this.updateVideoRemoteMediaObjects();\n this.updateScreenShareVideoRemoteMediaObject();\n this.emitVideoLayoutChangedEvent();\n }\n\n /**\n * Returns the currently selected layout id\n *\n * @returns {LayoutId}\n */\n public getLayoutId(): LayoutId | undefined {\n return this.currentLayoutId;\n }\n\n /**\n * sets the preferLiveVideo\n */\n public setPreferLiveVideo(preferLiveVideo: boolean) {\n LoggerProxy.logger.log(\n `RemoteMediaManager#setPreferLiveVideo --> setPreferLiveVideo is called to set preferLiveVideo to ${preferLiveVideo}`\n );\n this.config.video.preferLiveVideo = preferLiveVideo;\n Object.values(this.media.video.activeSpeakerGroups).forEach((activeSpeakerGroup) => {\n activeSpeakerGroup.setPreferLiveVideo(preferLiveVideo, false);\n });\n this.mediaRequestManagers.video.commit();\n }\n\n /**\n * Sets CSIs for multiple RemoteMedia instances belonging to RemoteMediaGroup.\n * For each entry in the remoteMediaCsis array:\n * - if csi is specified, the RemoteMedia instance is pinned to that CSI\n * - if csi is undefined, the RemoteMedia instance is unpinned\n */\n public setActiveSpeakerCsis(remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[]) {\n Object.values(this.media.video.activeSpeakerGroups).forEach((remoteMediaGroup) => {\n const groupRemoteMediaCsis = remoteMediaCsis.filter(({remoteMedia}) =>\n remoteMediaGroup.includes(remoteMedia)\n );\n if (groupRemoteMediaCsis.length > 0) {\n remoteMediaGroup.setActiveSpeakerCsis(groupRemoteMediaCsis, false);\n }\n });\n this.mediaRequestManagers.video.commit();\n }\n\n /**\n * Sets which named media group need receiving\n * @param {MediaType} mediaType of the stream\n * @param {number} languageCode of the stream. If the languageId is 0, the named media group request will be canceled,\n * and only receive the main audio stream.\n * @returns {void}\n */\n public async setReceiveNamedMediaGroup(mediaType: MediaType, languageId: number) {\n if (mediaType !== MediaType.AudioMain) {\n throw new Error(`cannot set receive named media group which media type is ${mediaType}`);\n }\n\n const value = languageId;\n if (value === this.config.namedMediaGroup?.value) {\n return;\n }\n\n this.config.namedMediaGroup = {\n type: NAMED_MEDIA_GROUP_TYPE_AUDIO,\n value,\n };\n\n if (!this.media.audio.si) {\n await this.createInterpretationAudioMedia(true);\n } else {\n this.media.audio.si.setNamedMediaGroup(this.config.namedMediaGroup, true);\n }\n }\n\n /**\n * Creates the audio slots\n */\n private async createAudioMedia() {\n // create si audio request\n await this.createInterpretationAudioMedia(false);\n\n // create main audio receive slots\n for (let i = 0; i < this.config.audio.numOfActiveSpeakerStreams; i += 1) {\n // eslint-disable-next-line no-await-in-loop\n const slot = await this.receiveSlotManager.allocateSlot(MediaType.AudioMain);\n\n this.slots.audio.main.push(slot);\n }\n\n // create a remote media group for main audio\n this.media.audio.main = new RemoteMediaGroup(\n this.mediaRequestManagers.audio,\n this.slots.audio.main,\n 255,\n true\n );\n\n this.emit(\n {file: 'multistream/remoteMediaManager', function: 'createAudioMedia'},\n Event.AudioCreated,\n this.media.audio.main\n );\n }\n\n /**\n * Creates the audio slots for named media\n */\n private async createInterpretationAudioMedia(commitRequest: boolean) {\n // create slot for interpretation language audio\n if (\n this.config.namedMediaGroup?.type === NAMED_MEDIA_GROUP_TYPE_AUDIO &&\n this.config.namedMediaGroup?.value\n ) {\n this.slots.audio.si = await this.receiveSlotManager.allocateSlot(MediaType.AudioMain);\n\n // create a remote media group for si audio\n this.media.audio.si = new RemoteMediaGroup(\n this.mediaRequestManagers.audio,\n [this.slots.audio.si],\n 255,\n commitRequest,\n {\n namedMediaGroup: this.config.namedMediaGroup,\n }\n );\n\n this.emit(\n {file: 'multistream/remoteMediaManager', function: 'createInterpretationAudioMedia'},\n Event.InterpretationAudioCreated,\n this.media.audio.si\n );\n }\n }\n\n /**\n * Creates receive slots required for receiving screen share audio and video\n */\n private async createScreenShareReceiveSlots() {\n // audio\n for (let i = 0; i < this.config.audio.numOfScreenShareStreams; i += 1) {\n // eslint-disable-next-line no-await-in-loop\n const slot = await this.receiveSlotManager.allocateSlot(MediaType.AudioSlides);\n\n this.slots.screenShare.audio.push(slot);\n }\n\n // video\n const isAnyLayoutContainingScreenShareVideo = Object.values(this.config.video.layouts).some(\n (layout) => !!layout.screenShareVideo\n );\n\n if (isAnyLayoutContainingScreenShareVideo) {\n this.slots.screenShare.video = await this.receiveSlotManager.allocateSlot(\n MediaType.VideoSlides\n );\n }\n }\n\n /**\n * Creates RemoteMedia objects for screen share\n */\n private createScreenShareAudioMedia() {\n if (this.slots.screenShare.audio.length > 0) {\n this.media.screenShare.audio = new RemoteMediaGroup(\n this.mediaRequestManagers.screenShareAudio,\n this.slots.screenShare.audio,\n 255,\n true\n );\n\n this.emit(\n {file: 'multistream/remoteMediaManager', function: 'createScreenShareAudioMedia'},\n Event.ScreenShareAudioCreated,\n this.media.screenShare.audio\n );\n }\n }\n\n /**\n * Goes over all receiver-selected slots and keeps only the ones that are required by a given layout,\n * the rest are all moved to the \"unused\" list\n */\n private trimReceiverSelectedSlots() {\n const requiredCsis = {};\n\n // fill requiredCsis with all the CSIs that the given layout requires\n this.currentLayout?.memberVideoPanes?.forEach((memberVideoPane) => {\n if (memberVideoPane.csi !== undefined) {\n requiredCsis[memberVideoPane.csi] = true;\n }\n });\n\n const isCsiNeededByCurrentLayout = (csi?: CSI): boolean => {\n if (csi === undefined) {\n return false;\n }\n\n return !!requiredCsis[csi];\n };\n\n // keep receiverSelected slots that match our new requiredCsis, move the rest of receiverSelected slots to unused\n const notNeededReceiverSelectedSlots = remove(\n this.slots.video.receiverSelected,\n (slot) => isCsiNeededByCurrentLayout(slot.csi) === false\n );\n\n this.slots.video.unused.push(...notNeededReceiverSelectedSlots);\n }\n\n /**\n * Releases all the \"unused\" video slots.\n */\n private releaseUnusedVideoSlots() {\n this.slots.video.unused.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));\n this.slots.video.unused.length = 0;\n }\n\n /**\n * Allocates receive slots to all active speaker video panes\n * in the current selected layout.\n *\n * Allocation tries to keep the same order of the slots between the previous\n * layout and the new one. Sorting helps making sure that highest priority slots\n * go in the same order in the new layout.\n */\n private allocateSlotsToActiveSpeakerPaneGroups() {\n this.currentLayout?.activeSpeakerVideoPaneGroups\n // sorting in descending order based on group priority\n ?.sort((a, b) => (a.priority < b.priority ? 1 : -1))\n ?.forEach((group) => {\n this.receiveSlotAllocations.activeSpeaker[group.id] = {slots: []};\n\n for (let paneIndex = 0; paneIndex < group.numPanes; paneIndex += 1) {\n // allocate a slot from the \"unused\" list, by grabbing in same order (shift) as previous layout\n const freeSlot = this.slots.video.unused.shift();\n\n if (freeSlot) {\n this.slots.video.activeSpeaker.push(freeSlot);\n this.receiveSlotAllocations.activeSpeaker[group.id].slots.push(freeSlot);\n }\n }\n });\n }\n\n /**\n * Allocates receive slots to all receiver selected video panes\n * in the current selected layout\n */\n private allocateSlotsToReceiverSelectedVideoPaneGroups() {\n this.currentLayout?.memberVideoPanes?.forEach((memberPane) => {\n // check if there is existing slot for this csi\n const existingSlot = this.slots.video.receiverSelected.find(\n (slot) => slot.csi === memberPane.csi\n );\n\n const isExistingSlotAlreadyAllocated = Object.values(\n this.receiveSlotAllocations.receiverSelected\n ).includes(existingSlot);\n\n if (memberPane.csi !== undefined && existingSlot && !isExistingSlotAlreadyAllocated) {\n // found it, so use it\n this.receiveSlotAllocations.receiverSelected[memberPane.id] = existingSlot;\n } else {\n // allocate a slot from the \"unused\" list\n const freeSlot = this.slots.video.unused.pop();\n\n if (freeSlot) {\n this.slots.video.receiverSelected.push(freeSlot);\n this.receiveSlotAllocations.receiverSelected[memberPane.id] = freeSlot;\n }\n }\n });\n }\n\n /**\n * Ensures that we have enough slots for the current layout.\n */\n private async refillRequiredSlotsIfNeeded() {\n const requiredNumSlots = this.getRequiredNumVideoSlotsForLayout(this.currentLayout);\n const totalNumSlots =\n this.slots.video.unused.length +\n this.slots.video.activeSpeaker.length +\n this.slots.video.receiverSelected.length;\n\n if (totalNumSlots < requiredNumSlots) {\n let numSlotsToCreate = requiredNumSlots - totalNumSlots;\n\n while (numSlotsToCreate > 0) {\n // eslint-disable-next-line no-await-in-loop\n this.slots.video.unused.push(\n // eslint-disable-next-line no-await-in-loop\n await this.receiveSlotManager.allocateSlot(MediaType.VideoMain)\n );\n numSlotsToCreate -= 1;\n }\n }\n }\n\n /**\n * Move all active speaker slots to \"unused\"\n */\n private trimActiveSpeakerSlots() {\n this.slots.video.unused.push(...this.slots.video.activeSpeaker);\n this.slots.video.activeSpeaker.length = 0;\n }\n\n /**\n * Logs the state of the receive slots\n */\n private logMainVideoReceiveSlots() {\n let logMessage = '';\n forEach(this.receiveSlotAllocations.activeSpeaker, (group, groupName) => {\n logMessage += `\\ngroup: ${groupName}\\n${group.slots\n .map((slot) => slot.logString)\n .join(', ')}`;\n });\n\n logMessage += '\\nreceiverSelected:\\n';\n forEach(this.receiveSlotAllocations.receiverSelected, (slot, key) => {\n logMessage += ` ${key}: ${slot.logString}\\n`;\n });\n\n LoggerProxy.logger.log(\n `RemoteMediaManager#logMainVideoReceiveSlots --> MAIN VIDEO receive slots: unused=${this.slots.video.unused.length}, activeSpeaker=${this.slots.video.activeSpeaker.length}, receiverSelected=${this.slots.video.receiverSelected.length}${logMessage}`\n );\n }\n\n /** logs main audio slots */\n private logMainAudioReceiveSlots() {\n LoggerProxy.logger.log(\n `RemoteMediaManager#logMainAudioReceiveSlots --> MAIN AUDIO receive slots: ${this.slots.audio.main\n .map((slot) => slot.logString)\n .join(', ')}`\n );\n }\n\n /** logs slides video slots */\n private logSlidesVideoReceiveSlots() {\n LoggerProxy.logger.log(\n `RemoteMediaManager#logSlidesVideoReceiveSlots --> SLIDES VIDEO receive slot: ${this.slots.screenShare.video?.logString}`\n );\n }\n\n /** logs slides audio slots */\n private logSlidesAudioReceiveSlots() {\n LoggerProxy.logger.log(\n `RemoteMediaManager#logSlidesAudioReceiveSlots --> SLIDES AUDIO receive slots: ${this.slots.screenShare.audio\n .map((slot) => slot.logString)\n .join(', ')}`\n );\n }\n\n /** Logs all current receive slots */\n public logAllReceiveSlots() {\n this.logMainVideoReceiveSlots();\n this.logMainAudioReceiveSlots();\n this.logSlidesVideoReceiveSlots();\n this.logSlidesAudioReceiveSlots();\n }\n\n /**\n * Makes sure we have the right number of receive slots created for the current layout\n * and allocates them to the right video panes / pane groups\n *\n * @returns {Promise}\n */\n private async updateVideoReceiveSlots() {\n // move all active speaker slots to \"unused\"\n this.trimActiveSpeakerSlots();\n\n // move all no longer needed receiver-selected slots to \"unused\"\n this.trimReceiverSelectedSlots();\n\n // ensure we have enough total slots for current layout\n await this.refillRequiredSlotsIfNeeded();\n\n // allocate the slots to the right panes / pane groups\n // reset allocations\n this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};\n // allocate active speaker\n this.allocateSlotsToActiveSpeakerPaneGroups();\n // allocate receiver selected\n this.allocateSlotsToReceiverSelectedVideoPaneGroups();\n\n this.logMainVideoReceiveSlots();\n\n // If this is the initial layout, there may be some \"unused\" slots left because of the preallocation\n // done in this.preallocateVideoReceiveSlots(), so release them now\n this.releaseUnusedVideoSlots();\n }\n\n /**\n * Creates new RemoteMedia and RemoteMediaGroup objects for the current layout\n * and sends the media requests for all of them.\n */\n private updateVideoRemoteMediaObjects() {\n // invalidate all the previous remote media objects and cancel their media requests\n this.invalidateCurrentRemoteMedia({\n audio: false,\n video: true,\n screenShareAudio: false,\n screenShareVideo: false,\n commit: false,\n });\n\n // create new remoteMediaGroup objects\n this.media.video.activeSpeakerGroups = {};\n this.media.video.memberPanes = {};\n\n for (const [groupId, group] of Object.entries(this.receiveSlotAllocations.activeSpeaker)) {\n const paneGroupInCurrentLayout = this.currentLayout?.activeSpeakerVideoPaneGroups?.find(\n (groupInLayout) => groupInLayout.id === groupId\n );\n\n if (paneGroupInCurrentLayout) {\n const mediaGroup = new RemoteMediaGroup(\n this.mediaRequestManagers.video,\n group.slots,\n paneGroupInCurrentLayout.priority,\n false,\n {\n preferLiveVideo: this.config.video.preferLiveVideo,\n resolution: paneGroupInCurrentLayout.size,\n }\n );\n\n this.media.video.activeSpeakerGroups[groupId] = mediaGroup;\n } else {\n // this should never happen, because this.receiveSlotAllocations are created based on current layout configuration\n LoggerProxy.logger.warn(\n `a group id ${groupId} from this.receiveSlotAllocations.activeSpeaker cannot be found in the current layout configuration`\n );\n }\n }\n\n // create new remoteMedia objects\n for (const [paneId, slot] of Object.entries(this.receiveSlotAllocations.receiverSelected)) {\n const paneInCurrentLayout = this.currentLayout?.memberVideoPanes?.find(\n (paneInLayout) => paneInLayout.id === paneId\n );\n\n if (paneInCurrentLayout) {\n const remoteMedia = new RemoteMedia(slot, this.mediaRequestManagers.video, {\n resolution: paneInCurrentLayout.size,\n });\n\n if (paneInCurrentLayout.csi) {\n remoteMedia.sendMediaRequest(paneInCurrentLayout.csi, false);\n }\n\n this.media.video.memberPanes[paneId] = remoteMedia;\n } else {\n // this should never happen, because this.receiveSlotAllocations are created based on current layout configuration\n LoggerProxy.logger.warn(\n `a pane id ${paneId} from this.receiveSlotAllocations.receiverSelected cannot be found in the current layout configuration`\n );\n }\n }\n\n this.mediaRequestManagers.video.commit();\n }\n\n /**\n * Checks if current layout requires a screen share.\n * If it does, it creates new RemoteMediaGroup object for screen share\n * and sends the media requests for it.\n * If it doesn't, it makes sure we clean up any RemoteMediaGroup objects\n * created earlier for screen share (for previous layout).\n */\n private updateScreenShareVideoRemoteMediaObject() {\n this.invalidateCurrentRemoteMedia({\n audio: false,\n video: false,\n screenShareAudio: false,\n screenShareVideo: true,\n commit: false,\n });\n\n this.media.screenShare.video = undefined;\n\n if (this.currentLayout?.screenShareVideo) {\n // we create a group of 1, because for screen share we need to use the \"active speaker\" policy\n this.media.screenShare.video = new RemoteMediaGroup(\n this.mediaRequestManagers.screenShareVideo,\n [this.slots.screenShare.video],\n 255,\n false,\n {resolution: this.currentLayout.screenShareVideo.size}\n );\n }\n\n this.mediaRequestManagers.screenShareVideo.commit();\n }\n\n /**\n * Invalidates all remote media objects belonging to currently selected layout\n */\n private invalidateCurrentRemoteMedia(options: {\n audio: boolean;\n video: boolean;\n screenShareAudio: boolean;\n screenShareVideo: boolean;\n commit: boolean;\n }) {\n const {audio, video, screenShareAudio, screenShareVideo, commit} = options;\n\n if (audio) {\n if (this.media.audio.main) {\n this.media.audio.main.stop(commit);\n }\n if (this.media.audio.si) {\n this.media.audio.si.stop(commit);\n }\n }\n if (video) {\n Object.values(this.media.video.activeSpeakerGroups).forEach((remoteMediaGroup) => {\n remoteMediaGroup.stop(false);\n });\n Object.values(this.media.video.memberPanes).forEach((remoteMedia) => {\n remoteMedia.stop(false);\n });\n if (commit) {\n this.mediaRequestManagers.video.commit();\n }\n }\n\n if (screenShareAudio && this.media.screenShare.audio) {\n this.media.screenShare.audio.stop(commit);\n }\n if (screenShareVideo && this.media.screenShare.video) {\n this.media.screenShare.video.stop(commit);\n }\n }\n\n /** emits Event.VideoLayoutChanged */\n private emitVideoLayoutChangedEvent() {\n // todo: at this point the receive slots might still be showing a participant from previous layout, we should\n // wait for our media requests to be fulfilled, but there is no API for that right now (we could wait for source updates\n // but in some cases they might never come, or would need to always make sure to use a new set of receiver slots)\n // for now it's fine to have it like this, we will re-evaluate if it needs improving after more testing\n\n this.emit(\n {\n file: 'multistream/remoteMediaManager',\n function: 'emitVideoLayoutChangedEvent',\n },\n Event.VideoLayoutChanged,\n {\n layoutId: this.currentLayoutId,\n activeSpeakerVideoPanes: this.media.video.activeSpeakerGroups,\n memberVideoPanes: this.media.video.memberPanes,\n screenShareVideo: this.media.screenShare.video?.getRemoteMedia()[0],\n }\n );\n }\n\n /**\n * Sets a new CSI on a given remote media object\n *\n * @param {RemoteMedia} remoteMedia remote Media object to modify\n * @param {CSI} csi new CSI value, can be null if we want to stop receiving media\n */\n public setRemoteVideoCsi(remoteMedia: RemoteMedia, csi: CSI | null) {\n if (!Object.values(this.media.video.memberPanes).includes(remoteMedia)) {\n throw new Error('remoteMedia not found');\n }\n\n if (csi) {\n remoteMedia.sendMediaRequest(csi, true);\n } else {\n remoteMedia.cancelMediaRequest(true);\n }\n }\n\n /**\n * Adds a new member video pane to the currently selected layout.\n *\n * Changes to the layout are lost after a layout change.\n *\n * @param {MemberVideoPane} newPane\n * @returns {Promise}\n */\n public async addMemberVideoPane(newPane: MemberVideoPane): Promise {\n if (!this.currentLayout) {\n throw new Error('There is no current layout selected, call start() first');\n }\n\n if (!this.currentLayout?.memberVideoPanes) {\n this.currentLayout.memberVideoPanes = [];\n }\n\n if (newPane.id in this.currentLayout.memberVideoPanes) {\n throw new Error(\n `duplicate pane id ${newPane.id} - this pane already exists in current layout's memberVideoPanes`\n );\n }\n\n this.currentLayout.memberVideoPanes.push(newPane);\n\n const receiveSlot = await this.receiveSlotManager.allocateSlot(MediaType.VideoMain);\n\n this.slots.video.receiverSelected.push(receiveSlot);\n\n const remoteMedia = new RemoteMedia(receiveSlot, this.mediaRequestManagers.video, {\n resolution: newPane.size,\n });\n\n if (newPane.csi) {\n remoteMedia.sendMediaRequest(newPane.csi, true);\n }\n\n this.media.video.memberPanes[newPane.id] = remoteMedia;\n\n return remoteMedia;\n }\n\n /**\n * Removes a member video pane from the currently selected layout.\n *\n * Changes to the layout are lost after a layout change.\n *\n * @param {PaneId} paneId pane id of the pane to remove\n * @returns {Promise}\n */\n public removeMemberVideoPane(paneId: PaneId): Promise {\n if (!this.currentLayout) {\n return Promise.reject(new Error('There is no current layout selected, call start() first'));\n }\n\n if (!this.currentLayout.memberVideoPanes?.find((pane) => pane.id === paneId)) {\n // pane id doesn't exist, so nothing to do\n LoggerProxy.logger.log(\n `RemoteMediaManager#removeMemberVideoPane --> removeMemberVideoPane() called for a non-existent paneId: ${paneId} (pane not found in currentLayout.memberVideoPanes)`\n );\n\n return Promise.resolve();\n }\n\n if (!this.media.video.memberPanes[paneId]) {\n // pane id doesn't exist, so nothing to do\n LoggerProxy.logger.log(\n `RemoteMediaManager#removeMemberVideoPane --> removeMemberVideoPane() called for a non-existent paneId: ${paneId} (pane not found in this.media.video.memberPanes)`\n );\n\n return Promise.resolve();\n }\n\n const remoteMedia = this.media.video.memberPanes[paneId];\n\n const receiveSlot = remoteMedia.getUnderlyingReceiveSlot();\n\n if (receiveSlot) {\n this.receiveSlotManager.releaseSlot(receiveSlot);\n\n const index = this.slots.video.receiverSelected.indexOf(receiveSlot);\n\n if (index >= 0) {\n this.slots.video.receiverSelected.splice(index, 1);\n }\n }\n remoteMedia.stop();\n\n delete this.media.video.memberPanes[paneId];\n delete this.currentLayout.memberVideoPanes?.[paneId];\n\n return Promise.resolve();\n }\n\n /**\n * Pins an active speaker remote media object to the given CSI value. From that moment\n * onwards the remote media will only play audio/video from that specific CSI until\n * unpinActiveSpeakerVideoPane() is called or current layout is changed.\n *\n * @param {RemoteMedia} remoteMedia remote media object reference\n * @param {CSI} csi CSI value to pin to, if undefined, then current CSI value is used\n */\n public pinActiveSpeakerVideoPane(remoteMedia: RemoteMedia, csi?: CSI): void {\n const remoteMediaGroup = Object.values(this.media.video.activeSpeakerGroups).find((group) =>\n group.includes(remoteMedia, 'unpinned')\n );\n\n if (!remoteMediaGroup) {\n throw new Error(\n 'remoteMedia not found among the unpinned remote media from any active speaker group'\n );\n }\n\n remoteMediaGroup.pin(remoteMedia, csi);\n }\n\n /**\n * Unpins a remote media object from the fixed CSI value it was pinned to.\n *\n * @param {RemoteMedia} remoteMedia remote media object reference\n */\n public unpinActiveSpeakerVideoPane(remoteMedia: RemoteMedia) {\n const remoteMediaGroup = Object.values(this.media.video.activeSpeakerGroups).find((group) =>\n group.includes(remoteMedia, 'pinned')\n );\n\n if (!remoteMediaGroup) {\n throw new Error(\n 'remoteMedia not found among the pinned remote media from any active speaker group'\n );\n }\n\n remoteMediaGroup.unpin(remoteMedia);\n }\n\n /**\n * Returns true if a given remote media object belongs to an active speaker group and has been pinned.\n * Throws an error if the remote media object doesn't belong to any active speaker remote media group.\n *\n * @param {RemoteMedia} remoteMedia remote media object\n * @returns {boolean}\n */\n public isPinned(remoteMedia: RemoteMedia) {\n const remoteMediaGroup = Object.values(this.media.video.activeSpeakerGroups).find((group) =>\n group.includes(remoteMedia)\n );\n\n if (!remoteMediaGroup) {\n throw new Error(\n 'remoteMedia not found among any remote media (pinned or unpinned) from any active speaker group'\n );\n }\n\n return remoteMediaGroup.isPinned(remoteMedia);\n }\n}\n","import {ERROR_DICTIONARY} from '../constants';\n\n/**\n * Extended Error object to signify breakout related errors\n */\nexport default class BreakoutEditLockedError extends Error {\n code: any;\n error: any;\n sdkMessage: any;\n\n /**\n *\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.BREAKOUT_EDIT.NAME;\n this.sdkMessage = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.BREAKOUT_EDIT.CODE;\n }\n}\n","// eslint-disable-next-line import/prefer-default-export\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport BreakoutEditLockedError from './edit-lock-error';\nimport {BREAKOUTS} from '../constants';\n\nexport const getBroadcastRoles = (options): string[] => {\n const recipientRoles = [];\n if (!options || (!options.cohosts && !options.presenters)) {\n return recipientRoles;\n }\n if (options.cohosts) {\n recipientRoles.push('COHOST');\n }\n if (options.presenters) {\n recipientRoles.push('PRESENTER');\n }\n\n return recipientRoles;\n};\n\n/**\n * Deals with all kinds of errors of breakout service\n * @param {object} error // one of the breakout service error\n * @param {string} position // position of the error occur\n * @returns {object}\n */\nexport const boServiceErrorHandler = (error: any, position: string): any => {\n const errorCode = error?.body?.errorCode;\n const {EDIT_LOCK_TOKEN_MISMATCH, EDIT_NOT_AUTHORIZED} = BREAKOUTS.ERROR_CODE;\n let throwError;\n switch (errorCode) {\n case EDIT_LOCK_TOKEN_MISMATCH:\n throwError = new BreakoutEditLockedError('Edit lock token mismatch', error);\n break;\n case EDIT_NOT_AUTHORIZED:\n throwError = new BreakoutEditLockedError('Not authorized to interact with edit lock', error);\n break;\n default:\n throwError = error;\n }\n LoggerProxy.logger.info(`${position} --> ${throwError?.message}`);\n\n return throwError;\n};\n\n/**\n *\n * @param {object} breakout\n * @param {string} newSessionType\n * @returns {boolean}\n */\nexport const isSessionTypeChangedFromSessionToMain = (breakout, newSessionType) => {\n return (\n breakout.previous('sessionType') === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n newSessionType === BREAKOUTS.SESSION_TYPES.MAIN\n );\n};\n","import {StatelessWebexPlugin} from '@webex/webex-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {getBroadcastRoles} from './utils';\nimport {HTTP_VERBS} from '../constants';\n\n/**\n * @class BreakoutRequest\n */\nexport default class BreakoutRequest extends StatelessWebexPlugin {\n /**\n * Broadcast message to all breakout session's participants\n * @param {String} url\n * @param {String} message\n * @param {Object} options\n * @param {string} groupId\n * @param {string} sessionId\n * @returns {Promise}\n */\n broadcast({\n url,\n message,\n options,\n groupId,\n sessionId,\n }: {\n url: string;\n message: string;\n options?: object;\n groupId: string;\n sessionId?: string;\n }) {\n const roles = getBroadcastRoles(options);\n const params = {\n id: groupId,\n recipientRoles: roles.length ? roles : undefined,\n sessions: sessionId ? [{id: sessionId}] : undefined,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${url}/message`,\n body: {\n message,\n groups: [params],\n },\n }).catch((error) => {\n if (error.body && error.body.errorCode === 201409036 && error.statusCode === 409) {\n LoggerProxy.logger.info(`Breakouts#broadcast --> no joined participants`);\n } else {\n throw error;\n }\n });\n }\n}\n","// eslint-disable-next-line import/prefer-default-export\nimport {ClientEvent} from '@webex/internal-plugin-metrics';\n\nconst breakoutEvent: {\n onBreakoutMoveRequest: (eventInfo: any, submitClientEvent: any) => void;\n onBreakoutMoveResponse: (eventInfo: any, submitClientEvent: any) => void;\n onBreakoutJoinResponse: (eventInfo: any, submitClientEvent: any) => void;\n postMoveCallAnalyzer: (\n event: ClientEvent['name'],\n eventInfo: any,\n submitClientEvent: any\n ) => void;\n} = {\n onBreakoutMoveRequest: (eventInfo, submitClientEvent) => {\n breakoutEvent.postMoveCallAnalyzer(\n 'client.breakout-session.move.request',\n eventInfo,\n submitClientEvent\n );\n },\n onBreakoutMoveResponse: (eventInfo, submitClientEvent) => {\n breakoutEvent.postMoveCallAnalyzer(\n 'client.breakout-session.move.response',\n eventInfo,\n submitClientEvent\n );\n },\n onBreakoutJoinResponse: (eventInfo, submitClientEvent) => {\n breakoutEvent.postMoveCallAnalyzer(\n 'client.breakout-session.join.response',\n eventInfo,\n submitClientEvent\n );\n },\n postMoveCallAnalyzer: (event: ClientEvent['name'], eventInfo: any, submitClientEvent) => {\n if (!eventInfo?.breakoutMoveId || !eventInfo?.meeting) {\n return;\n }\n if (!eventInfo.meeting.meetingInfo?.enableConvergedArchitecture) {\n return;\n }\n submitClientEvent({\n name: event,\n payload: {\n identifiers: {\n breakoutMoveId: eventInfo.breakoutMoveId,\n breakoutSessionId: eventInfo?.currentSession?.sessionId,\n breakoutGroupId: eventInfo?.currentSession?.groupId,\n },\n },\n options: {meetingId: eventInfo.meeting.id},\n });\n },\n};\n\nexport default breakoutEvent;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport uuid from 'uuid';\nimport {_ID_, HTTP_VERBS, MEETINGS} from '../constants';\nimport Members from '../members';\nimport BreakoutRequest from './request';\nimport breakoutEvent from './events';\n/**\n * @class\n */\nconst Breakout = WebexPlugin.extend({\n idAttribute: 'sessionId',\n\n namespace: MEETINGS,\n\n breakoutRequest: BreakoutRequest,\n props: {\n active: ['boolean', false, false], // this session is active\n allowed: ['boolean', false, false], // allowed to join this session\n assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet\n assignedCurrent: ['boolean', false, false], // assigned AND current session\n requested: ['boolean', false, false], // requested by the host to join this session\n current: ['boolean', false, false], // the current joined session\n name: 'string',\n sessionId: 'string',\n sessionType: 'string',\n groupId: 'string',\n url: 'string', // where to send requests to\n requestedLastModifiedTime: 'string',\n },\n\n derived: {\n isMain: {\n cache: false, // fix issue: sometimes the derived will not change even if the deps changed\n deps: ['sessionType'],\n /**\n * If the breakout has no name, assume it is the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === 'MAIN';\n },\n },\n },\n /**\n * initializer for the Breakout class\n * @returns {void}\n */\n initialize() {\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n this.breakoutRosterLocus = null;\n },\n\n /**\n * Joins the breakout session\n * @returns {Promise}\n */\n async join() {\n const breakoutMoveId = uuid.v4();\n const deviceUrl = this.webex.internal.device.url;\n const {meetingId} = this.collection.parent;\n const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);\n breakoutEvent.onBreakoutMoveRequest(\n {currentSession: this, meeting, breakoutMoveId},\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)\n );\n const result = await this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/move`,\n body: {\n breakoutMoveId,\n deviceUrl,\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n breakoutEvent.onBreakoutMoveResponse(\n {currentSession: this, meeting, breakoutMoveId},\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)\n );\n\n return result;\n },\n\n /**\n * Leaves the breakout session to return to the main session\n * @returns {Promise}\n * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found\n */\n leave() {\n if (this.isMain) {\n throw new Error('Cannot leave the main session');\n }\n\n const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];\n\n if (!mainSession) {\n throw new Error('Cannot leave, no main session found');\n }\n\n return mainSession.join();\n },\n\n /**\n * Sends a help request for the current breakout\n * @returns {Promise}\n */\n askForHelp() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/help`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * inits the members object\n * @returns {void}\n */\n initMembers() {\n const {meetingId} = this.collection.parent;\n const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);\n this.members = new Members(\n {\n meeting,\n },\n {parent: this.webex}\n );\n },\n\n /**\n * check sequence and determine whether to update the new roster or not\n * @param {Object} locus Locus object\n * @returns {Boolean}\n */\n isNeedHandleRoster(locus: any) {\n if (!this.breakoutRosterLocus?.sequence?.entries?.length || !locus?.sequence?.entries?.length) {\n return true;\n }\n const prevSequence = this.breakoutRosterLocus.sequence.entries[0];\n const currentSequence = locus.sequence.entries[0];\n\n return currentSequence > prevSequence;\n },\n /**\n * Parses the participants from the locus object\n * @param {Object} locus Locus object\n * @returns {void}\n */\n parseRoster(locus) {\n if (!this.members) {\n this.initMembers();\n }\n if (!this.isNeedHandleRoster(locus)) {\n return;\n }\n this.breakoutRosterLocus = locus;\n this.members.locusParticipantsUpdate(locus);\n },\n\n /**\n * Broadcast message to this breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: this.groupId,\n sessionId: this.sessionId,\n });\n },\n});\n\nexport default Breakout;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport {MEETINGS} from '../constants';\n\nimport Breakout from './breakout';\n\nconst BreakoutCollection = AmpCollection.extend({\n model: Breakout,\n\n namespace: MEETINGS,\n\n mainIndex: 'sessionId',\n});\n\nexport default BreakoutCollection;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {debounce, forEach} from 'lodash';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {BREAKOUTS, MEETINGS, HTTP_VERBS, _ID_} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport breakoutEvent from './events';\nimport {boServiceErrorHandler, isSessionTypeChangedFromSessionToMain} from './utils';\n\n/**\n * @class Breakouts\n */\nconst Breakouts = WebexPlugin.extend({\n namespace: MEETINGS,\n breakoutRequest: BreakoutRequest,\n collections: {\n breakouts: BreakoutCollection,\n },\n\n props: {\n allowBackToMain: 'boolean', // only present when in a breakout session\n delayCloseTime: 'number', // appears once breakouts start\n enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts\n hasBreakoutPreAssignments: 'boolean', // appears from the moment you enable breakouts\n groupId: 'string', // appears from the moment you enable breakouts\n name: 'string', // only present when in a breakout session\n sessionId: 'string', // appears from the moment you enable breakouts\n sessionType: 'string', // appears from the moment you enable breakouts\n startTime: 'string', // appears once breakouts start\n status: 'string', // only present when in a breakout session\n url: 'string', // appears from the moment you enable breakouts\n locusUrl: 'string', // the current locus url\n breakoutServiceUrl: 'string', // the current breakout resource url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n manageGroups: 'array', // appears when manage breakouts\n preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n canManageBreakouts: 'boolean', // appear the ability to manage breakouts\n },\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n cache: false,\n deps: ['sessionType'],\n /**\n * Returns true if the user is in the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;\n },\n },\n isActiveBreakout: {\n cache: false, // fix issue: sometimes the derived will not change even if the deps changed\n deps: ['sessionType', 'status'],\n /**\n * Returns true if the breakout status is active\n * @returns {boolean}\n */\n fn() {\n return (\n this.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n (this.status === BREAKOUTS.STATUS.OPEN || this.status === BREAKOUTS.STATUS.CLOSING)\n );\n },\n },\n breakoutGroupId: {\n cache: false,\n deps: ['manageGroups'],\n /**\n * Returns the active group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n breakoutStatus: {\n cache: true,\n deps: ['isInMainSession', 'status', 'groups'],\n /**\n * Returns the breakout status\n * @returns {boolean}\n */\n fn() {\n return this.isInMainSession ? this.groups?.[0]?.status : this.status;\n },\n },\n shouldQueryPreAssignments: {\n cache: false,\n deps: ['canManageBreakouts', 'enableBreakoutSession', 'hasBreakoutPreAssignments'],\n /**\n * Returns should query preAssignments or not\n * @returns {boolean}\n */\n fn() {\n return !!(\n this.canManageBreakouts &&\n this.enableBreakoutSession &&\n this.hasBreakoutPreAssignments\n );\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:breakoutStatus', () => {\n if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.listenTo(this, 'change:shouldQueryPreAssignments', () => {\n if (this.shouldQueryPreAssignments && !this.preAssignments) {\n this.queryPreAssignments();\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', (breakout) => {\n this.debouncedQueryRosters();\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenTo(this.breakouts, 'change:requestedLastModifiedTime', (breakout) => {\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenToCurrentSessionTypeChange();\n this.listenToBreakoutRosters();\n this.listenToBreakoutHelp();\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\n this.hasSubscribedToMessage = undefined;\n },\n\n /**\n * Update the current locus url of the meeting\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n this.listenToBroadcastMessages();\n const {isInMainSession, mainLocusUrl} = this;\n if (isInMainSession || !mainLocusUrl) {\n this.set('mainLocusUrl', locusUrl);\n }\n },\n\n /**\n * Update whether self is moderator/cohost or not\n * @param {boolean} canManageBreakouts\n * @returns {void}\n */\n updateCanManageBreakouts(canManageBreakouts) {\n this.set('canManageBreakouts', canManageBreakouts);\n },\n\n /**\n * Update the current breakout resource url\n * @param {string} breakoutServiceUrl\n * @returns {void}\n */\n breakoutServiceUrlUpdate(breakoutServiceUrl) {\n this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);\n },\n\n /**\n * The initial roster lists need to be queried because you don't\n * get a breakout.roster event when you join the meeting\n * @returns {void}\n */\n queryRosters() {\n this.webex\n .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n const {\n body: {rosters},\n } = result;\n\n rosters?.forEach(({locus}) => {\n this.handleRosterUpdate(locus);\n });\n\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);\n });\n },\n\n /**\n *\n * @param {Object} locus // locus object\n * @returns {void}\n */\n handleRosterUpdate(locus) {\n const sessionId = locus.controls?.breakout?.sessionId;\n\n const session = this.breakouts.get(sessionId);\n\n if (!session) {\n return;\n }\n\n session.parseRoster(locus);\n },\n /**\n *Sets up listener for currentBreakoutSession sessionType changed\n * @returns {void}\n */\n listenToCurrentSessionTypeChange(): void {\n this.listenTo(\n this.currentBreakoutSession,\n 'change:sessionType',\n (currentBreakoutSession, sessionType) => {\n if (isSessionTypeChangedFromSessionToMain(currentBreakoutSession, sessionType)) {\n this.trigger(BREAKOUTS.EVENTS.LEAVE_BREAKOUT);\n }\n }\n );\n },\n\n /**\n * Sets up listener for broadcast messages sent to the breakout session\n * @returns {void}\n */\n listenToBroadcastMessages() {\n if (!this.webex.internal.llm.isConnected() || this.hasSubscribedToMessage) {\n return;\n }\n\n this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {\n const {\n data: {senderUserId, sentTime, message},\n } = event;\n\n this.trigger(BREAKOUTS.EVENTS.MESSAGE, {\n senderUserId,\n sentTime,\n message,\n // FIXME: This is only the current sessionId\n // We'd need to check that the dataChannelUrl is still the same\n // to guarantee that this message was sent to this session\n sessionId: this.currentBreakoutSession.sessionId,\n });\n });\n this.hasSubscribedToMessage = true;\n },\n\n /**\n * Sets up a listener for roster messags from mecury\n * @returns {void}\n */\n listenToBreakoutRosters() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {\n this.handleRosterUpdate(event.data.locus);\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n });\n },\n\n /**\n * Sets up a listener for ask help notify from mecury\n * @returns {void}\n */\n listenToBreakoutHelp() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.help', (event) => {\n const {\n data: {participant, sessionId},\n } = event;\n this.trigger(BREAKOUTS.EVENTS.ASK_FOR_HELP, {participant, sessionId});\n });\n },\n\n /**\n * get current breakout is in progress or not\n * @returns {boolean}\n */\n isBreakoutInProgress() {\n const currentStatus = this.groups?.[0]?.status || this.status;\n\n return currentStatus === BREAKOUTS.STATUS.OPEN || currentStatus === BREAKOUTS.STATUS.CLOSING;\n },\n\n /**\n * get current breakout is in closing or not\n * @returns {boolean}\n */\n isBreakoutIClosing() {\n return (this.groups?.[0]?.status || this.status) === BREAKOUTS.STATUS.CLOSING;\n },\n /**\n * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n // These values are set manually so they are unset when they are not included in params\n this.set('groups', params.groups);\n this.set('startTime', params.startTime);\n this.set('status', params.status);\n\n this.set('currentBreakoutSession', {\n sessionId: params.sessionId,\n groupId: params.groupId,\n name: params.name,\n current: true,\n sessionType: params.sessionType,\n url: params.url,\n [BREAKOUTS.SESSION_STATES.ACTIVE]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n if (!this.isBreakoutInProgress()) {\n this.clearBreakouts();\n }\n\n if (\n this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId ||\n this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId\n ) {\n // should report joined session changed\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n breakoutEvent.onBreakoutJoinResponse(\n {\n currentSession: this.currentBreakoutSession,\n meeting,\n breakoutMoveId: params.breakoutMoveId,\n },\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)\n );\n }\n },\n\n /**\n * Updates the information about available breakouts\n * @param {Object} payload\n * @returns {void}\n */\n updateBreakoutSessions(payload) {\n const breakouts = {};\n if (this.isBreakoutIClosing()) {\n // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or\n // only the MAIN session info here, if just update it, will miss the breakout roster info during\n // count down to end breakouts\n return;\n }\n if (payload.breakoutSessions) {\n forEach(BREAKOUTS.SESSION_STATES, (state) => {\n forEach(payload.breakoutSessions[state], (breakout) => {\n const {sessionId} = breakout;\n\n if (!breakouts[sessionId]) {\n breakouts[sessionId] = breakout;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;\n }\n\n breakouts[sessionId][state] = true;\n\n if (state === BREAKOUTS.SESSION_STATES.REQUESTED) {\n breakouts[sessionId].requestedLastModifiedTime = breakout.modifiedAt;\n }\n });\n });\n }\n forEach(breakouts, (breakout: typeof Breakout) => {\n // eslint-disable-next-line no-param-reassign\n breakout.url = this.url;\n });\n\n this.breakouts.set(Object.values(breakouts));\n },\n /**\n * clear breakouts collection\n * @returns {void}\n */\n clearBreakouts() {\n if (this.breakouts.length > 0) {\n this.breakouts.reset();\n }\n },\n /**\n * get main session\n * @returns {Breakout}\n */\n getMainSession() {\n if (this.isInMainSession) {\n return this.currentBreakoutSession;\n }\n\n const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];\n if (!mainSession) {\n throw new Error('no main session found');\n }\n\n return mainSession;\n },\n /**\n * Host/CoHost ask all participants return to main session\n * @returns {Promise}\n */\n askAllToReturn() {\n const mainSession = this.getMainSession();\n\n return this.webex.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/requestMove`,\n body: {\n groupId: mainSession.groupId,\n sessionId: mainSession.sessionId,\n },\n });\n },\n\n /**\n * Broadcast message to all breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n const {breakoutGroupId} = this;\n if (!breakoutGroupId) {\n throw new Error('Cannot broadcast, no breakout session found');\n }\n\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: breakoutGroupId,\n });\n },\n /**\n * Make enable breakout resource\n * @returns {Promise}\n */\n enableBreakouts() {\n if (this.breakoutServiceUrl) {\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: this.breakoutServiceUrl,\n body: {\n locusUrl: this.locusUrl,\n },\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#touchBreakout --> Error provisioning error ${err}`\n );\n throw err;\n });\n }\n\n return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));\n },\n\n /**\n * Make the meeting enable or disable breakout session\n * @param {boolean} enable\n * @returns {Promise}\n */\n async toggleBreakout(enable) {\n if (this.enableBreakoutSession === undefined) {\n const info = await this.enableBreakouts();\n // first time enable, set the initial data\n this.updateBreakout(info?.body);\n if (!enable) {\n await this.doToggleBreakout(enable);\n }\n } else {\n await this.doToggleBreakout(enable);\n }\n },\n\n /**\n * do toggle meeting breakout session enable or disable\n * @param {boolean} enable\n * @returns {Promise}\n */\n doToggleBreakout(enable) {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{enableBreakoutSession: enable},\n };\n\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\n }\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakoutInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\n });\n\n if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n this._setManageGroups(breakout);\n if (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * breakout edit locked by yourself or not\n * @returns {boolean}\n */\n hasBreakoutLocked() {\n return (\n this.editLock &&\n this.editLock.token &&\n this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED\n );\n },\n\n /**\n * send breakout edit lock\n * @returns {void}\n */\n async lockBreakout() {\n if (this.editLock && !!this.editLock.token) {\n if (this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED) {\n throw new Error('Breakout already locked');\n } else {\n this.keepEditLockAlive();\n }\n } else {\n const breakout = await this.getBreakout(true);\n if (breakout.body?.editlock) {\n this.keepEditLockAlive();\n }\n }\n },\n\n /**\n * keep edit lock alive\n * @returns {void}\n */\n keepEditLockAlive() {\n if (this.editLock && !!this.editLock.token) {\n const ttl = this.editLock.ttl < 30 ? BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;\n if (this.intervalID) {\n window.clearInterval(this.intervalID);\n }\n\n this.intervalID = window.setInterval(() => {\n this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n }).catch((error) => {\n this._clearEditLockInfo();\n\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#keepEditLockAlive'));\n });\n }, (ttl / 2) * 1000);\n }\n },\n\n /**\n * unlock edit breakout\n * @returns {void}\n */\n unLockEditBreakout() {\n if (this.editLock && !!this.editLock.token) {\n this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n })\n .then(() => {\n this._clearEditLockInfo();\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#unLockEditBreakout'));\n });\n }\n },\n\n /**\n * clear interval and edit lock info\n * @private\n * @returns {void}\n */\n _clearEditLockInfo() {\n if (this.intervalID) {\n clearInterval(this.intervalID);\n }\n this.set('editLock', {});\n },\n\n /**\n * assign participants to breakout session\n * @param {Array} sessions\n * @returns {void}\n */\n assign(sessions: any[]) {\n const internalSessions = sessions.map((item) => {\n return {\n id: item.id,\n assigned: item.memberIds,\n assignedEmails: item.emails,\n anyoneCanJoin: !!item.anyone,\n };\n });\n\n const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: internalSessions,\n },\n ],\n },\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * query preAssignments\n * @returns {void}\n */\n queryPreAssignments() {\n this.webex\n .request({uri: `${this.url}/preassignments`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n if (result.body?.groups) {\n this.set('preAssignments', result.body.groups);\n this.trigger(BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n },\n /**\n * assign participants dynamically after breakout sessions started,\n * but currently it only used for admitting participants from lobby into breakout directly\n * @param {Array} sessions\n * @returns {void}\n */\n dynamicAssign(sessions: any[]) {\n const updatedSessions = sessions.map((item) => {\n return {\n id: item.id,\n participants: item.participants,\n targetState: item.targetState,\n };\n });\n\n const body = {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: updatedSessions,\n },\n ],\n editlock: null,\n };\n\n if (this.editLock && this.editLock.token) {\n body.editlock = this.editLock;\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/dynamicAssign`,\n body,\n });\n },\n /**\n * trigger ASK_RETURN_TO_MAIN event when main session requested\n * @param {Object} breakout\n * @returns {void}\n */\n triggerReturnToMainEvent(breakout) {\n if (breakout.isMain && breakout.requested) {\n this.trigger(BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);\n }\n },\n});\n\nexport default Breakouts;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {MEETINGS} from '../constants';\n\nconst SILanguage = WebexPlugin.extend({\n idAttribute: 'languageName',\n\n namespace: MEETINGS,\n props: {\n languageCode: 'number',\n languageName: 'string',\n },\n});\n\nexport default SILanguage;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport {MEETINGS} from '../constants';\n\nimport SILanguage from './siLanguage';\n\nconst SILanguageCollection = AmpCollection.extend({\n model: SILanguage,\n\n namespace: MEETINGS,\n\n mainIndex: 'languageName',\n});\n\nexport default SILanguageCollection;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, INTERPRETATION, MEETINGS} from '../constants';\n\nimport SILanguageCollection from './collection';\n\n/**\n * @class SimultaneousInterpretation\n */\nconst SimultaneousInterpretation = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n siLanguages: SILanguageCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current meeting's locus url\n approvalUrl: 'string', // appears current meeting's approval url for handoff between interpreters\n originalLanguage: 'string', // appears current meeting's original language\n sourceLanguage: 'string', // appears self interpreter's source language\n targetLanguage: 'string', // appears self interpreter's target language\n receiveLanguage: 'string', // appears self's receive language\n order: 'number', // appears the order of self as interpreter\n isActive: 'boolean', // appears self is interpreter and is active\n selfParticipantId: 'string', // appears the self participant id\n canManageInterpreters: 'boolean', // appears the ability to manage interpreters\n supportLanguages: 'array', // appears the support languages\n meetingSIEnabled: 'boolean', // appears the meeting support SI feature\n hostSIEnabled: 'boolean', // appears the meeting host/interpreter feature of SI enabled\n selfIsInterpreter: 'boolean', // current user is interpreter or not\n },\n derived: {\n shouldQuerySupportLanguages: {\n cache: false,\n deps: ['canManageInterpreters', 'hostSIEnabled'],\n /**\n * Returns should query support languages or not\n * @returns {boolean}\n */\n fn() {\n return !!(this.canManageInterpreters && this.hostSIEnabled);\n },\n },\n },\n /**\n * initialize for interpretation\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:shouldQuerySupportLanguages', () => {\n if (this.canManageInterpreters && !this.supportLanguages) {\n this.querySupportLanguages();\n }\n });\n this.listenToHandoffRequests();\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\n },\n /**\n * Update the current locus url of the meeting\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n /**\n * Update the approval url for handoff\n * @param {string} approvalUrl // approval url\n * @returns {void}\n */\n approvalUrlUpdate(approvalUrl) {\n this.set('approvalUrl', approvalUrl);\n },\n /**\n * Update whether self has capability to manage interpreters (only host can manage it)\n * @param {boolean} canManageInterpreters\n * @returns {void}\n */\n updateCanManageInterpreters(canManageInterpreters) {\n this.set('canManageInterpreters', canManageInterpreters);\n },\n /**\n * Update whether the meeting's host si is enabled or not\n * @param {boolean} hostSIEnabled\n * @returns {void}\n */\n updateHostSIEnabled(hostSIEnabled) {\n this.set('hostSIEnabled', hostSIEnabled);\n },\n\n /**\n * Update whether the meeting support SI feature or not from meeting info\n * @param {boolean} meetingSIEnabled\n * @param {boolean} selfIsInterpreter\n * @returns {void}\n */\n updateMeetingSIEnabled(meetingSIEnabled: boolean, selfIsInterpreter): void {\n this.set('meetingSIEnabled', meetingSIEnabled);\n this.set('selfIsInterpreter', selfIsInterpreter);\n },\n\n /**\n * Update the interpretation languages channels which user can choose to subscribe\n * @param {Object} interpretation\n * @returns {void}\n */\n updateInterpretation(interpretation) {\n this.siLanguages.set(interpretation?.siLanguages || []);\n },\n /**\n * Update self's interpretation information (self is interpreter)\n * @param {Object} interpretation\n * @param {String} selfParticipantId\n * @returns {bool} is target language changed\n */\n updateSelfInterpretation({interpretation, selfParticipantId}) {\n const preTargetLanguage = this.targetLanguage;\n const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =\n interpretation || {};\n this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});\n this.set('selfParticipantId', selfParticipantId);\n this.set('selfIsInterpreter', !!targetLanguage);\n\n return !!(preTargetLanguage !== targetLanguage);\n },\n\n /**\n * Get the language code of the interpreter target language\n * @returns {number}\n */\n getTargetLanguageCode() {\n if (this.selfIsInterpreter) {\n return this.siLanguages.get(this.targetLanguage)?.languageCode;\n }\n\n return 0;\n },\n\n /**\n * query interpretation languages\n * @returns {Promise}\n */\n querySupportLanguages() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.locusUrl}/languages/interpretation`,\n })\n .then((result) => {\n this.set('supportLanguages', result.body?.siLanguages);\n this.trigger(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#querySupportLanguages failed', error);\n throw error;\n });\n },\n /**\n * get interpreters of the meeting\n * @returns {Promise}\n */\n getInterpreters() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.locusUrl}/interpretation/interpreters`,\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#getInterpreters failed', error);\n throw error;\n });\n },\n /**\n * update interpreters of the meeting\n * @param {Array} interpreters\n * @returns {Promise}\n */\n updateInterpreters(interpreters) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n interpretation: {\n interpreters,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);\n throw error;\n });\n },\n /**\n * Change direction of interpretation for an interpreter participant\n * @returns {Promise}\n */\n changeDirection() {\n if (!this.sourceLanguage || !this.targetLanguage) {\n return Promise.reject(new Error('Missing sourceLanguage or targetLanguage'));\n }\n\n if (!this.selfParticipantId) {\n return Promise.reject(new Error('Missing self participant id'));\n }\n\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,\n body: {\n interpretation: {\n sourceLanguage: this.targetLanguage,\n targetLanguage: this.sourceLanguage,\n isActive: this.isActive,\n order: this.order,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);\n throw error;\n });\n },\n /**\n * Sets up a listener for handoff requests from mercury\n * @returns {void}\n */\n listenToHandoffRequests() {\n this.listenTo(this.webex.internal.mercury, 'event:locus.approval_request', (event) => {\n if (event?.data?.approval?.resourceType === INTERPRETATION.RESOURCE_TYPE) {\n const {receivers, initiator, actionType, url} = event.data.approval;\n const receiverId = receivers?.[0]?.participantId;\n const isReceiver = !!receiverId && receiverId === this.selfParticipantId;\n const senderId = initiator?.participantId;\n const isSender = !!senderId && senderId === this.selfParticipantId;\n if (!isReceiver && !isSender) {\n return;\n }\n this.trigger(INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, {\n actionType,\n isReceiver,\n isSender,\n senderId,\n receiverId,\n url,\n });\n }\n });\n },\n /**\n * handoff the active interpreter role to another interpreter in same group, only the interpreter is allowed to call this api\n * @param {string} participantId the participant id you want to hand off\n * @returns {Promise}\n */\n handoffInterpreter(participantId) {\n if (!participantId) {\n return Promise.reject(new Error('Missing target participant id'));\n }\n if (!this.approvalUrl) {\n return Promise.reject(new Error('Missing approval url'));\n }\n\n return this.request({\n method: HTTP_VERBS.POST,\n uri: this.approvalUrl,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.OFFERED,\n resourceType: INTERPRETATION.RESOURCE_TYPE,\n receivers: [\n {\n participantId,\n },\n ],\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#handoffInterpreter failed', error);\n throw error;\n });\n },\n /**\n * the in-active interpreter request to hand off the active role to self\n * @returns {Promise}\n */\n requestHandoff() {\n if (!this.approvalUrl) {\n return Promise.reject(new Error('Missing approval url'));\n }\n\n return this.request({\n method: HTTP_VERBS.POST,\n uri: this.approvalUrl,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.REQUESTED,\n resourceType: INTERPRETATION.RESOURCE_TYPE,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#requestHandoff failed', error);\n throw error;\n });\n },\n /**\n * accept the request of handoff\n * @param {String} url the url get from last approval event\n * @returns {Promise}\n */\n acceptRequest(url) {\n if (!url) {\n return Promise.reject(new Error('Missing the url to accept'));\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: url,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.ACCEPTED,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#acceptRequest failed', error);\n throw error;\n });\n },\n /**\n * decline the request of handoff\n * @param {String} url the url get from last approval event\n * @returns {Promise}\n */\n declineRequest(url) {\n if (!url) {\n return Promise.reject(new Error('Missing the url to decline'));\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: url,\n body: {\n actionType: INTERPRETATION.ACTION_TYPE.DECLINED,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:interpretation#declineRequest failed', error);\n throw error;\n });\n },\n});\n\nexport default SimultaneousInterpretation;\n","export const EVENT_TRIGGERS = {\n ANNOTATION_STROKE_DATA: 'annotation:strokeData',\n ANNOTATION_COMMAND: 'annotation:command',\n};\nexport const ANNOTATION_RESOURCE_TYPE = 'AnnotationOnShare';\nexport const ANNOTATION_RELAY_TYPES = {\n ANNOTATION_CLIENT: 'annotation.client',\n};\n\nexport const ANNOTATION_STATUS = {\n NO_ANNOTATION: 'NO_ANNOTATION',\n RUNNING_ANNOTATION: 'RUNNING_ANNOTATION',\n};\n\nexport enum ANNOTATION_POLICY {\n ANYONE_CAN_ANNOTATE = 'AnyoneCanAnnotate',\n APPROVAL = 'Approval',\n ANNOTATION_NOT_ALLOWED = 'AnnotationNotAllowed',\n}\n\nexport const ANNOTATION_REQUEST_TYPE = {\n ANNOTATION_MESSAGE: 'annotation_message',\n};\n\nexport const enum ANNOTATION_ACTION_TYPE {\n REQUESTED = 'REQUESTED',\n ACCEPTED = 'ACCEPTED',\n DECLINED = 'DECLINED',\n OFFERED = 'OFFERED',\n CANCELED = 'CANCELED',\n EXPIRED = 'EXPIRED',\n REVOKED = 'REVOKED',\n CLOSED = 'CLOSED',\n}\n\nexport const ANNOTATION = 'annotation';\n","import uuid from 'uuid';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport TriggerProxy from '../common/events/trigger-proxy';\n\nimport {\n EVENT_TRIGGERS,\n ANNOTATION_RELAY_TYPES,\n ANNOTATION,\n ANNOTATION_REQUEST_TYPE,\n ANNOTATION_ACTION_TYPE,\n ANNOTATION_RESOURCE_TYPE,\n} from './constants';\n\nimport {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';\nimport {HTTP_VERBS} from '../constants';\n\n/**\n * @description Annotation to handle LLM and Mercury message and locus API\n * @class\n */\nclass AnnotationChannel extends WebexPlugin implements IAnnotationChannel {\n namespace = ANNOTATION;\n\n private seqNum: number;\n\n hasSubscribedToEvents: boolean;\n\n approvalUrl: string;\n locusUrl: string;\n deviceUrl: string;\n\n /**\n * Initializes annotation module\n */\n constructor(...args) {\n super(...args);\n this.seqNum = 1;\n }\n\n /**\n * Process Stroke Data\n * @param {object} data\n * @returns {void}\n */\n private processStrokeMessage(data) {\n const {request} = data;\n this.decryptContent(request.value.encryptionKeyUrl, request.value.content).then(\n (decryptedContent) => {\n request.value.content = decryptedContent;\n TriggerProxy.trigger(\n this,\n {\n file: 'annotation',\n function: 'processStrokeMessage',\n },\n EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,\n {\n payload: data,\n }\n );\n }\n );\n }\n\n /** bind all events from mercury\n * @param {Object} e\n * @returns {undefined}\n */\n private eventCommandProcessor(e) {\n if (\n e?.data?.eventType === 'locus.approval_request' &&\n e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&\n e?.data?.approval?.actionType\n ) {\n TriggerProxy.trigger(\n this,\n {\n file: 'annotation',\n function: 'approval_request',\n },\n EVENT_TRIGGERS.ANNOTATION_COMMAND,\n {\n type: e.data.approval.actionType,\n payload: e.data.approval,\n }\n );\n }\n }\n\n /** bind all events from llm\n * @param {Object} e\n * @returns {undefined}\n */\n private eventDataProcessor(e) {\n switch (e?.data?.relayType) {\n case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:\n this.processStrokeMessage(e.data);\n break;\n default:\n break;\n }\n }\n\n /**\n * Listen to websocket messages\n * @returns {undefined}\n */\n private listenToEvents() {\n if (!this.hasSubscribedToEvents) {\n // @ts-ignore\n this.webex.internal.mercury.on(\n 'event:locus.approval_request',\n this.eventCommandProcessor,\n this\n );\n // @ts-ignore\n this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);\n this.hasSubscribedToEvents = true;\n }\n }\n\n /**\n * set locusUrl\n * @param {string} locusUrl\n * @returns {void}\n */\n public locusUrlUpdate(locusUrl: string) {\n this.locusUrl = locusUrl;\n this.listenToEvents();\n }\n\n /**\n * set approved url\n * @param {string} approvalUrl\n * @returns {void}\n */\n public approvalUrlUpdate(approvalUrl: string) {\n this.approvalUrl = approvalUrl;\n }\n\n /**\n * accept request\n * @param {object} approval\n * @returns {Promise}\n */\n public acceptRequest(approval) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: approval.url,\n body: {\n resourceType: ANNOTATION_RESOURCE_TYPE,\n actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,\n },\n });\n }\n\n /**\n * presenter declined request annotation\n * @param {approval} approval\n * @returns {Promise}\n */\n public declineRequest(approval) {\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: approval.url,\n body: {\n resourceType: ANNOTATION_RESOURCE_TYPE,\n actionType: ANNOTATION_ACTION_TYPE.DECLINED,\n },\n });\n }\n\n /**\n * request approved annotation\n * @param {RequestData} requestData\n * @returns {Promise}\n */\n public approveAnnotation(requestData: RequestData) {\n return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);\n }\n\n /**\n * cancel approved annotation\n * @param {object} requestData\n * @param {object} approval\n * @returns {Promise}\n */\n public cancelApproveAnnotation(requestData: RequestData, approval) {\n const body: CommandRequestBody = {\n actionType: ANNOTATION_ACTION_TYPE.CANCELED,\n resourceType: 'AnnotationOnShare',\n shareInstanceId: requestData.shareInstanceId,\n };\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n url: `${approval.url}`,\n body,\n });\n }\n\n /**\n * close annotation\n * @param {object} requestData\n * @returns {Promise}\n */\n public closeAnnotation(requestData: RequestData) {\n return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);\n }\n\n /**\n * send annotation command\n * @param {ANNOTATION_ACTION_TYPE} actionType\n * @param {RequestData} requestData\n * @returns {Promise}\n */\n private sendAnnotationAction = async (\n actionType: ANNOTATION_ACTION_TYPE,\n requestData: RequestData\n ): Promise => {\n const body: CommandRequestBody = {\n actionType,\n resourceType: 'AnnotationOnShare',\n shareInstanceId: requestData.shareInstanceId,\n };\n if (requestData?.toUserId) {\n body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.POST,\n url: `${this.approvalUrl}`,\n body,\n });\n };\n\n /**\n * decrypt data\n * @param {string} encryptionKeyUrl\n * @param {string} content encrypted content\n * @returns {string} decrypted content\n */\n private decryptContent = (encryptionKeyUrl: string, content: string): Promise => {\n // @ts-ignore\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {\n return res;\n });\n };\n\n /**\n * encrypt data\n * @param {string} encryptionKeyUrl\n * @param {string} content original content\n * @returns {string} encrypted content\n */\n private encryptContent = (encryptionKeyUrl: string, content: string): Promise => {\n // @ts-ignore\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {\n return res;\n });\n };\n\n /**\n * Sends stroke data to presenter\n * @param {StrokeData} strokeData\n * @returns {void}\n */\n public sendStrokeData = (strokeData: StrokeData): void => {\n // @ts-ignore\n if (!this.webex.internal.llm.isConnected()) return;\n this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(\n (encryptedContent) => {\n this.publishEncrypted(encryptedContent, strokeData);\n }\n );\n };\n\n /**\n * private encrypted the strokes data\n * @param {string} encryptedContent\n * @param {StrokeData} strokeData\n * @returns {void}\n */\n private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {\n const data = {\n id: `${this.seqNum}`,\n type: 'publishRequest',\n recipients: {\n // @ts-ignore\n route: this.webex.internal.llm.getBinding(),\n },\n headers: {\n to: strokeData.toUserId,\n },\n data: {\n eventType: 'relay.event',\n relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,\n request: {\n value: {\n type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,\n content: encryptedContent,\n deviceId: strokeData.deviceId,\n seq: this.seqNum,\n requesterId: strokeData.requesterId,\n version: strokeData.version,\n shareInstanceId: strokeData.shareInstanceId,\n encryptionKeyUrl: strokeData.encryptionKeyUrl,\n },\n },\n },\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n timestamp: new Date().getTime(),\n sequenceNumber: this.seqNum,\n filterMessage: false,\n };\n\n // @ts-ignore\n this.webex.internal.llm.socket.send(data);\n this.seqNum += 1;\n }\n}\n\nexport default AnnotationChannel;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {MEETINGS} from '../constants';\n\nclass WebinarCollection {\n webinarInfo: any;\n\n namespace = MEETINGS;\n\n mainIndex = 'sessionId';\n\n constructor() {\n this.webinarInfo = {};\n }\n\n set(id, info) {\n this.webinarInfo[id] = info;\n }\n\n /**\n * @param {String} id\n * @returns {Member}\n */\n get(id: string) {\n return this.webinarInfo[id];\n }\n}\n\nexport default WebinarCollection;\n","/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {MEETINGS} from '../constants';\n\nimport WebinarCollection from './collection';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastUrl: 'string', // current webinar's webcast url\n webinarAttendeesSearchingUrl: 'string', // current webinarAttendeesSearching url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast url of the meeting\n * @param {string} webcastUrl // webcast url\n * @returns {void}\n */\n webcastUrlUpdate(webcastUrl) {\n this.set('webcastUrl', webcastUrl);\n },\n\n /**\n * Update the current webinarAttendeesSearching url of the meeting\n * @param {string} webinarAttendeesSearchingUrl // webinarAttendeesSearching url\n * @returns {void}\n */\n webinarAttendeesSearchingUrlUpdate(webinarAttendeesSearchingUrl) {\n this.set('webinarAttendeesSearchingUrl', webinarAttendeesSearchingUrl);\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n});\n\nexport default Webinar;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {MEETINGS} from '../constants';\n\n/**\n * IInMeetingActions\n * Type for In-Meeting Actions\n */\ninterface IInMeetingActions {\n canInviteNewParticipants?: boolean;\n canAdmitParticipant?: boolean;\n canLock?: boolean;\n canUnlock?: boolean;\n canSetMuteOnEntry?: boolean;\n canUnsetMuteOnEntry?: boolean;\n canSetDisallowUnmute?: boolean;\n canUnsetDisallowUnmute?: boolean;\n canSetMuted?: boolean;\n canUnsetMuted?: boolean;\n canAssignHost?: boolean;\n canSetPresenter?: boolean;\n canUnsetPresenter?: boolean;\n canStartRecording?: boolean;\n canPauseRecording?: boolean;\n canResumeRecording?: boolean;\n canStopRecording?: boolean;\n canRaiseHand?: boolean;\n canLowerAllHands?: boolean;\n canLowerSomeoneElsesHand?: boolean;\n bothLeaveAndEndMeetingAvailable?: boolean;\n canEnableClosedCaption?: boolean;\n canStartTranscribing?: boolean;\n canStopTranscribing?: boolean;\n isClosedCaptionActive?: boolean;\n canStartManualCaption?: boolean;\n canStopManualCaption?: boolean;\n isManualCaptionActive?: boolean;\n isSaveTranscriptsEnabled?: boolean;\n isWebexAssistantActive?: boolean;\n canViewCaptionPanel?: boolean;\n isRealTimeTranslationEnabled?: boolean;\n canSelectSpokenLanguages?: boolean;\n waitingForOthersToJoin?: boolean;\n canSendReactions?: boolean;\n canManageBreakout?: boolean;\n canBroadcastMessageToBreakout?: boolean;\n canAdmitLobbyToBreakout?: boolean;\n isBreakoutPreassignmentsEnabled?: boolean;\n canUserAskForHelp?: boolean;\n canUserRenameSelfAndObserved?: boolean;\n canUserRenameOthers?: boolean;\n canMuteAll?: boolean;\n canUnmuteAll?: boolean;\n canEnableHardMute?: boolean;\n canDisableHardMute?: boolean;\n canEnableMuteOnEntry?: boolean;\n canDisableMuteOnEntry?: boolean;\n canEnableReactions?: boolean;\n canDisableReactions?: boolean;\n canEnableReactionDisplayNames?: boolean;\n canDisableReactionDisplayNames?: boolean;\n canUpdateShareControl?: boolean;\n canEnableViewTheParticipantsList?: boolean;\n canDisableViewTheParticipantsList?: boolean;\n canEnableRaiseHand?: boolean;\n canDisableRaiseHand?: boolean;\n canEnableVideo?: boolean;\n canDisableVideo?: boolean;\n canShareFile?: boolean;\n canShareApplication?: boolean;\n canShareCamera?: boolean;\n canShareDesktop?: boolean;\n canShareContent?: boolean;\n canTransferFile?: boolean;\n canChat?: boolean;\n canDoVideo?: boolean;\n canAnnotate?: boolean;\n canUseVoip?: boolean;\n supportHQV?: boolean;\n supportHDV?: boolean;\n canShareWhiteBoard?: boolean;\n enforceVirtualBackground?: boolean;\n}\n\n/**\n * @class InMeetingActions\n */\nexport default class InMeetingActions implements IInMeetingActions {\n namespace = MEETINGS;\n\n canInviteNewParticipants = null;\n\n canAdmitParticipant = null;\n\n canLock = null;\n\n canUnlock = null;\n\n canAssignHost = null;\n\n canStartRecording = null;\n\n canPauseRecording = null;\n\n canResumeRecording = null;\n\n canStopRecording = null;\n\n canSetMuteOnEntry = null;\n\n canSetPresenter = null;\n\n canUnsetPresenter = null;\n\n canUnsetMuteOnEntry = null;\n\n canSetDisallowUnmute = null;\n\n canUnsetDisallowUnmute = null;\n\n canSetMuted = null;\n\n canUnsetMuted = null;\n\n canRaiseHand = null;\n\n canLowerAllHands = null;\n\n canLowerSomeoneElsesHand = null;\n\n bothLeaveAndEndMeetingAvailable = null;\n\n canEnableClosedCaption = null;\n\n canStartTranscribing = null;\n\n canStopTranscribing = null;\n\n isClosedCaptionActive = null;\n\n canStartManualCaption = null;\n\n canStopManualCaption = null;\n\n isManualCaptionActive = null;\n\n isSaveTranscriptsEnabled = null;\n\n isWebexAssistantActive = null;\n\n canViewCaptionPanel = null;\n\n isRealTimeTranslationEnabled = null;\n\n canSelectSpokenLanguages = null;\n\n waitingForOthersToJoin = null;\n\n canSendReactions = null;\n\n canManageBreakout = null;\n\n canBroadcastMessageToBreakout = null;\n\n canAdmitLobbyToBreakout = null;\n\n isBreakoutPreassignmentsEnabled = null;\n\n canUserAskForHelp = null;\n\n canUserRenameSelfAndObserved = null;\n\n canUserRenameOthers = null;\n\n canMuteAll = null;\n\n canUnmuteAll = null;\n\n canEnableHardMute = null;\n\n canDisableHardMute = null;\n\n canEnableMuteOnEntry = null;\n\n canDisableMuteOnEntry = null;\n\n canEnableReactions = null;\n\n canDisableReactions = null;\n\n canEnableReactionDisplayNames = null;\n\n canDisableReactionDisplayNames = null;\n\n canUpdateShareControl = null;\n\n canEnableViewTheParticipantsList = null;\n\n canDisableViewTheParticipantsList = null;\n\n canEnableRaiseHand = null;\n\n canDisableRaiseHand = null;\n\n canEnableVideo = null;\n\n canDisableVideo = null;\n\n canShareFile = null;\n\n canShareApplication = null;\n\n canShareCamera = null;\n\n canShareDesktop = null;\n\n canShareContent = null;\n\n canTransferFile = null;\n\n canChat = null;\n\n canDoVideo = null;\n\n canAnnotate = null;\n\n canUseVoip = null;\n\n supportHQV = null;\n\n enforceVirtualBackground = null;\n\n supportHDV = null;\n\n canShareWhiteBoard = null;\n\n /**\n * Returns all meeting action options\n * @returns {Object}\n */\n get = (): IInMeetingActions => ({\n canInviteNewParticipants: this.canInviteNewParticipants,\n canAdmitParticipant: this.canAdmitParticipant,\n canLock: this.canLock,\n canUnlock: this.canUnlock,\n canAssignHost: this.canAssignHost,\n canSetMuteOnEntry: this.canSetMuteOnEntry,\n canUnsetMuteOnEntry: this.canUnsetMuteOnEntry,\n canSetDisallowUnmute: this.canSetDisallowUnmute,\n canSetMuted: this.canSetMuted,\n canUnsetMuted: this.canUnsetMuted,\n canSetPresenter: this.canSetPresenter,\n canUnsetPresenter: this.canUnsetPresenter,\n canUnsetDisallowUnmute: this.canUnsetDisallowUnmute,\n canStartRecording: this.canStartRecording,\n canPauseRecording: this.canPauseRecording,\n canResumeRecording: this.canResumeRecording,\n canStopRecording: this.canStopRecording,\n canRaiseHand: this.canRaiseHand,\n canLowerAllHands: this.canLowerAllHands,\n canLowerSomeoneElsesHand: this.canLowerSomeoneElsesHand,\n bothLeaveAndEndMeetingAvailable: this.bothLeaveAndEndMeetingAvailable,\n canEnableClosedCaption: this.canEnableClosedCaption,\n canStartTranscribing: this.canStartTranscribing,\n canStopTranscribing: this.canStopTranscribing,\n isClosedCaptionActive: this.isClosedCaptionActive,\n canStartManualCaption: this.canStartManualCaption,\n canStopManualCaption: this.canStopManualCaption,\n isManualCaptionActive: this.isManualCaptionActive,\n isSaveTranscriptsEnabled: this.isSaveTranscriptsEnabled,\n isWebexAssistantActive: this.isWebexAssistantActive,\n canViewCaptionPanel: this.canViewCaptionPanel,\n isRealTimeTranslationEnabled: this.isRealTimeTranslationEnabled,\n canSelectSpokenLanguages: this.canSelectSpokenLanguages,\n waitingForOthersToJoin: this.waitingForOthersToJoin,\n canSendReactions: this.canSendReactions,\n canManageBreakout: this.canManageBreakout,\n canBroadcastMessageToBreakout: this.canBroadcastMessageToBreakout,\n canAdmitLobbyToBreakout: this.canAdmitLobbyToBreakout,\n isBreakoutPreassignmentsEnabled: this.isBreakoutPreassignmentsEnabled,\n canUserAskForHelp: this.canUserAskForHelp,\n canUserRenameSelfAndObserved: this.canUserRenameSelfAndObserved,\n canUserRenameOthers: this.canUserRenameOthers,\n canMuteAll: this.canMuteAll,\n canUnmuteAll: this.canUnmuteAll,\n canEnableHardMute: this.canEnableHardMute,\n canDisableHardMute: this.canDisableHardMute,\n canEnableMuteOnEntry: this.canEnableMuteOnEntry,\n canDisableMuteOnEntry: this.canDisableMuteOnEntry,\n canEnableReactions: this.canEnableReactions,\n canDisableReactions: this.canDisableReactions,\n canEnableReactionDisplayNames: this.canEnableReactionDisplayNames,\n canDisableReactionDisplayNames: this.canDisableReactionDisplayNames,\n canUpdateShareControl: this.canUpdateShareControl,\n canEnableViewTheParticipantsList: this.canEnableViewTheParticipantsList,\n canDisableViewTheParticipantsList: this.canDisableViewTheParticipantsList,\n canEnableRaiseHand: this.canEnableRaiseHand,\n canDisableRaiseHand: this.canDisableRaiseHand,\n canEnableVideo: this.canEnableVideo,\n canDisableVideo: this.canDisableVideo,\n canShareFile: this.canShareFile,\n canShareApplication: this.canShareApplication,\n canShareCamera: this.canShareCamera,\n canShareDesktop: this.canShareDesktop,\n canShareContent: this.canShareContent,\n canTransferFile: this.canTransferFile,\n canChat: this.canChat,\n canDoVideo: this.canDoVideo,\n canAnnotate: this.canAnnotate,\n canUseVoip: this.canUseVoip,\n enforceVirtualBackground: this.enforceVirtualBackground,\n supportHQV: this.supportHQV,\n supportHDV: this.supportHDV,\n canShareWhiteBoard: this.canShareWhiteBoard,\n });\n\n /**\n *\n * @param actions\n * @returns\n */\n\n set = (actions: Partial) => {\n const old = this.get();\n\n let changed = false;\n\n Object.keys(old).forEach((actionKey) => {\n const actionValue = actions[actionKey];\n\n if (actionValue !== undefined && actionValue !== old[actionKey]) {\n changed = true;\n this[actionKey] = actionValue;\n }\n });\n\n return changed;\n };\n}\n","// eslint-disable-next-line import/prefer-default-export\nexport const REACTION_RELAY_TYPES = {\n REACTION: 'react',\n} as const;\n","import PermissionError from '../common/errors/permission';\nimport {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport RecordingAction from './enums';\nimport Util from './util';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class RecordingController {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof RecordingController\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof RecordingInfo\n */\n private displayHints: Array = [];\n\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof RecordingInfo\n */\n private selfUserPolicies: Record;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private serviceUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private sessionId: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusId: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof RecordingController\n */\n constructor(\n request: MeetingRequest,\n options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public set(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array;\n }) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n this.locusId = Util.extractLocusId(this.locusUrl);\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setDisplayHints(hints: Array) {\n this.displayHints = hints;\n }\n\n /**\n * @param {Object} selfUserPolicies\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setUserPolicy(selfUserPolicies: Record) {\n this.selfUserPolicies = selfUserPolicies;\n }\n\n /**\n * @param {string} id\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setSessionId(id: string) {\n this.sessionId = id;\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setServiceUrl(url: string) {\n this.serviceUrl = url;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusId() {\n return this.locusId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getSessionId() {\n return this.sessionId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getServiceUrl() {\n return this.serviceUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof RecordingController\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private extract(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array;\n }) {\n this.setServiceUrl(options?.serviceUrl);\n this.setSessionId(options?.sessionId);\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingService(action: RecordingAction): Promise {\n // @ts-ignore\n return this.request.request({\n body: {\n meetingInfo: {\n locusSessionId: this.sessionId,\n },\n recording: {\n action: action.toLowerCase(),\n },\n },\n uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,\n method: HTTP_VERBS.PUT,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingControls(action: RecordingAction): Promise {\n const record = Util.deriveRecordingStates(action);\n\n LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);\n\n // @ts-ignore\n return this.request.request({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: {\n record,\n },\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingFacade(action: RecordingAction): Promise {\n LoggerProxy.logger.log(\n `RecordingController:index#recordingFacade --> recording action [${action}]`\n );\n\n // assumes action is proper cased (i.e., Example)\n if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {\n if (this.serviceUrl) {\n return this.recordingService(action);\n }\n\n return this.recordingControls(action);\n }\n\n return Promise.reject(\n new PermissionError(`${action} recording not allowed, due to moderator property.`)\n );\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public startRecording(): Promise {\n return this.recordingFacade(RecordingAction.Start);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public stopRecording(): Promise {\n return this.recordingFacade(RecordingAction.Stop);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public pauseRecording(): Promise {\n return this.recordingFacade(RecordingAction.Pause);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public resumeRecording(): Promise {\n return this.recordingFacade(RecordingAction.Resume);\n }\n}\n","import {camelCase} from 'lodash';\nimport PermissionError from '../common/errors/permission';\nimport {CONTROLS, HTTP_VERBS} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {Control, Setting} from './enums';\nimport {ControlConfig} from './types';\nimport Util from './util';\nimport {CAN_SET, CAN_UNSET, ENABLED} from './constants';\n\n/**\n * docs\n * https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html\n * https://confluence-eng-gpk2.cisco.com/conf/display/LOCUS/Hard+Mute+and+Audio+Privacy#HardMuteandAudioPrivacy-SelfMuteonEntry\n * https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?spaceKey=UC&title=WEBEX-124454%3A+UCF%3A+Hard+mute+support+for+Teams+joining+Webex+meeting\n * https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-180867\n * https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-393351\n */\n\n/**\n * @description ControlsOptionsManager is responsible for handling the behavior of participant controls when somebody joins a meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class ControlsOptionsManager {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof ControlsOptionsManager\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof ControlsOptionsManager\n */\n private displayHints: Array = [];\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof ControlsOptionsManager\n */\n private locusUrl: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof ControlsOptionsManager\n */\n constructor(\n request: MeetingRequest,\n options?: {\n locusUrl: string;\n displayHints?: Array;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @returns {void}\n * @private\n * @memberof ControlsOptionsManager\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof ControlsOptionsManager\n */\n public set(options?: {locusUrl: string; displayHints?: Array}) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof ControlsOptionsManager\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof ControlsOptionsManager\n */\n public setDisplayHints(hints: Array) {\n this.displayHints = hints;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof ControlsOptionsManager\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof ControlsOptionsManager\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof ControlsOptionsManager\n */\n private extract(options?: {locusUrl: string; displayHints?: Array}) {\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * Set controls for this meeting.\n *\n * @param {Array} controls - Spread Array of ControlConfigs\n * @returns {Promise>}- Promise resolving if the request was successful.\n */\n public update(...controls: Array) {\n const payloads = controls.map((control) => {\n if (!Object.keys(Control).includes(control.scope)) {\n throw new Error(\n `updating meeting control scope \"${control.scope}\" is not a supported scope`\n );\n }\n\n if (!Util.canUpdate(control, this.displayHints)) {\n throw new PermissionError(\n `updating meeting control scope \"${control.scope}\" not allowed, due to moderator property.`\n );\n }\n\n return {\n [control.scope]: control.properties,\n };\n });\n\n return payloads.reduce((previous, payload) => {\n return previous.then(() =>\n // @ts-ignore\n this.request.request({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: payload,\n method: HTTP_VERBS.PATCH,\n })\n );\n }, Promise.resolve());\n }\n\n /**\n * @param {Setting} setting\n * @private\n * @memberof ControlsOptionsManager\n * @returns {Promise}\n */\n private setControls(setting: {[key in Setting]?: boolean}): Promise {\n LoggerProxy.logger.log(\n `ControlsOptionsManager:index#setControls --> ${JSON.stringify(setting)}`\n );\n\n const body: Record = {};\n let error: PermissionError;\n\n let shouldSkipCheckToMergeBody = false;\n\n Object.entries(setting).forEach(([key, value]) => {\n if (\n !shouldSkipCheckToMergeBody &&\n !Util?.[`${value ? CAN_SET : CAN_UNSET}${key}`](this.displayHints)\n ) {\n error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);\n }\n\n if (error) {\n return;\n }\n\n switch (key) {\n case Setting.muted:\n shouldSkipCheckToMergeBody = true;\n body.audio = body.audio\n ? {...body.audio, [camelCase(key)]: value}\n : {[camelCase(key)]: value};\n break;\n\n case Setting.disallowUnmute:\n case Setting.muteOnEntry:\n if (Object.keys(setting).includes(Setting.muted)) {\n body.audio = body.audio\n ? {...body.audio, [camelCase(key)]: value}\n : {[camelCase(key)]: value};\n body.audio[camelCase(key)] = value;\n } else {\n body[camelCase(key)] = {[ENABLED]: value};\n }\n break;\n\n default:\n error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);\n }\n });\n\n if (error) {\n return Promise.reject(error);\n }\n\n // @ts-ignore\n return this.request.request({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body,\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @public\n * @param {boolean} enabled\n * @memberof ControlsOptionsManager\n * @returns {Promise}\n */\n public setMuteOnEntry(enabled: boolean): Promise {\n return this.setControls({[Setting.muteOnEntry]: enabled});\n }\n\n /**\n * @public\n * @param {boolean} enabled\n * @memberof ControlsOptionsManager\n * @returns {Promise}\n */\n public setDisallowUnmute(enabled: boolean): Promise {\n return this.setControls({[Setting.disallowUnmute]: enabled});\n }\n\n /**\n * @public\n * @param {boolean} mutedEnabled\n * @param {boolean} disallowUnmuteEnabled\n * @param {boolean} muteOnEntryEnabled\n * @memberof ControlsOptionsManager\n * @returns {Promise}\n */\n public setMuteAll(\n mutedEnabled: boolean,\n disallowUnmuteEnabled: boolean,\n muteOnEntryEnabled: boolean\n ): Promise {\n return this.setControls({\n [Setting.muted]: mutedEnabled,\n [Setting.disallowUnmute]: disallowUnmuteEnabled,\n [Setting.muteOnEntry]: muteOnEntryEnabled,\n });\n }\n}\n","const ENABLED = 'enabled';\nconst CAN_SET = 'canSet';\nconst CAN_UNSET = 'canUnset';\n\nexport {ENABLED, CAN_SET, CAN_UNSET};\n","/* eslint-disable valid-jsdoc */\nimport {defer} from 'lodash';\nimport {Defer} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {MEDIA, HTTP_VERBS, ROAP, IP_VERSION} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nexport type MediaRequestType = 'RoapMessage' | 'LocalMute';\nexport type RequestResult = any;\n\nexport type RoapRequest = {\n type: 'RoapMessage';\n selfUrl: string;\n mediaId: string;\n roapMessage: any;\n reachability: any;\n sequence?: any;\n joinCookie: any; // any, because this is opaque to the client, we pass whatever object we got from one backend component (Orpheus) to the other (Locus)\n ipVersion?: IP_VERSION;\n};\n\nexport type LocalMuteRequest = {\n type: 'LocalMute';\n selfUrl: string;\n mediaId: string;\n sequence?: any;\n muteOptions: {\n audioMuted?: boolean;\n videoMuted?: boolean;\n };\n};\n\nexport type Request = RoapRequest | LocalMuteRequest;\n\n/** Class representing a single /media request being sent to Locus */\nclass InternalRequestInfo {\n public readonly request: Request;\n private pendingPromises: Defer[];\n private sendRequestFn: (request: Request) => Promise;\n\n /** Constructor */\n constructor(\n request: Request,\n pendingPromise: Defer,\n sendRequestFn: (request: Request) => Promise\n ) {\n this.request = request;\n this.pendingPromises = [pendingPromise];\n this.sendRequestFn = sendRequestFn;\n }\n\n /**\n * Returns the list of pending promises associated with this request\n */\n public getPendingPromises() {\n return this.pendingPromises;\n }\n\n /**\n * Adds promises to the list of pending promises associated with this request\n */\n public addPendingPromises(pendingPromises: Defer[]) {\n this.pendingPromises.push(...pendingPromises);\n }\n\n /**\n * Executes the request. Returned promise is resolved once the request\n * is completed (no matter if it succeeded or failed).\n */\n public execute(): Promise {\n return this.sendRequestFn(this.request)\n .then((result) => {\n // resolve all the pending promises associated with this request\n this.pendingPromises.forEach((d) => d.resolve(result));\n })\n .catch((e) => {\n // reject all the pending promises associated with this request\n this.pendingPromises.forEach((d) => d.reject(e));\n });\n }\n}\n\nexport type Config = {\n device: {\n url: string;\n deviceType: string;\n countryCode?: string;\n regionCode?: string;\n };\n correlationId: string;\n meetingId: string;\n preferTranscoding: boolean;\n};\n\n/**\n * Returns true if the request is triggering confluence creation in the server\n */\nfunction isRequestAffectingConfluenceState(request: Request): boolean {\n return (\n request.type === 'RoapMessage' && request.roapMessage.messageType === ROAP.ROAP_TYPES.OFFER\n );\n}\n\n/**\n * This class manages all /media API requests to Locus. Every call to that\n * Locus API has to go through this class.\n */\nexport class LocusMediaRequest extends WebexPlugin {\n private config: Config;\n private latestAudioMuted?: boolean;\n private latestVideoMuted?: boolean;\n private isRequestInProgress: boolean;\n private queuedRequests: InternalRequestInfo[];\n private confluenceState: 'not created' | 'creation in progress' | 'created';\n /**\n * Constructor\n */\n constructor(config: Config, options: any) {\n super({}, options);\n this.isRequestInProgress = false;\n this.queuedRequests = [];\n this.config = config;\n this.confluenceState = 'not created';\n }\n\n /**\n * Add a request to the internal queue.\n */\n private addToQueue(info: InternalRequestInfo) {\n if (info.request.type === 'LocalMute' && this.queuedRequests.length > 0) {\n // We don't need additional local mute requests in the queue.\n // We only need at most 1 local mute or 1 roap request, because\n // roap requests also include mute state, so whatever request\n // is sent out, it will send the latest local mute state.\n // We only need to store the pendingPromises so that they get resolved\n // when the roap request is sent out.\n this.queuedRequests[0].addPendingPromises(info.getPendingPromises());\n\n return;\n }\n\n if (info.request.type === 'RoapMessage' && this.queuedRequests.length > 0) {\n // remove any LocalMute requests from the queue, because this Roap message\n // will also update the mute status in Locus, so they are redundant\n this.queuedRequests = this.queuedRequests.filter((r) => {\n if (r.request.type === 'LocalMute') {\n // we need to keep the pending promises from the local mute request\n // that we're removing from the queue\n info.addPendingPromises(r.getPendingPromises());\n\n return false;\n }\n\n return true;\n });\n }\n\n this.queuedRequests.push(info);\n }\n\n /**\n * Takes the next request from the queue and executes it. Once that\n * request is completed, the next one will be taken from the queue\n * and executed and this is repeated until the queue is empty.\n */\n private executeNextQueuedRequest(): void {\n if (this.isRequestInProgress) {\n return;\n }\n\n const nextRequest = this.queuedRequests.shift();\n\n if (nextRequest) {\n this.isRequestInProgress = true;\n nextRequest.execute().then(() => {\n this.isRequestInProgress = false;\n this.executeNextQueuedRequest();\n });\n }\n }\n\n /**\n * Returns latest requested audio and video mute values. If they have never been\n * requested, we assume audio/video to be muted.\n */\n private getLatestMuteState() {\n const audioMuted = this.latestAudioMuted !== undefined ? this.latestAudioMuted : true;\n const videoMuted = this.latestVideoMuted !== undefined ? this.latestVideoMuted : true;\n\n return {audioMuted, videoMuted};\n }\n\n /**\n * Prepares the uri and body for the media request to be sent to Locus\n */\n private sendHttpRequest(request: Request) {\n const uri = `${request.selfUrl}/${MEDIA}`;\n\n const {audioMuted, videoMuted} = this.getLatestMuteState();\n\n // first setup things common to all requests\n const body: any = {\n device: this.config.device,\n correlationId: this.config.correlationId,\n clientMediaPreferences: {\n preferTranscoding: this.config.preferTranscoding,\n ipver: request.type === 'RoapMessage' ? request.ipVersion : undefined,\n },\n };\n\n const localMedias: any = {\n audioMuted,\n videoMuted,\n };\n\n // now add things specific to request type\n switch (request.type) {\n case 'LocalMute':\n body.respOnlySdp = true;\n body.usingResource = null;\n break;\n\n case 'RoapMessage':\n localMedias.roapMessage = request.roapMessage;\n localMedias.reachability = request.reachability;\n body.clientMediaPreferences.joinCookie = request.joinCookie;\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {\n meetingId: this.config.meetingId,\n },\n });\n break;\n }\n\n if (request.sequence) {\n body.sequence = request.sequence;\n }\n\n body.localMedias = [\n {\n localSdp: JSON.stringify(localMedias), // this part must be JSON stringified, Locus requires this\n mediaId: request.mediaId,\n },\n ];\n\n LoggerProxy.logger.info(\n `Meeting:LocusMediaRequest#sendHttpRequest --> ${request.type} audioMuted=${audioMuted} videoMuted=${videoMuted}`\n );\n\n if (isRequestAffectingConfluenceState(request) && this.confluenceState === 'not created') {\n this.confluenceState = 'creation in progress';\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n })\n .then((result) => {\n if (isRequestAffectingConfluenceState(request)) {\n this.confluenceState = 'created';\n }\n\n if (request.type === 'RoapMessage') {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {\n meetingId: this.config.meetingId,\n },\n });\n }\n\n return result;\n })\n .catch((e) => {\n if (\n isRequestAffectingConfluenceState(request) &&\n this.confluenceState === 'creation in progress'\n ) {\n this.confluenceState = 'not created';\n }\n\n if (request.type === 'RoapMessage') {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {\n meetingId: this.config.meetingId,\n rawError: e,\n },\n });\n }\n\n throw e;\n });\n }\n\n /**\n * Sends a media request to Locus\n */\n public send(request: Request): Promise {\n if (request.type === 'LocalMute') {\n const {audioMuted, videoMuted} = request.muteOptions;\n\n if (audioMuted !== undefined) {\n this.latestAudioMuted = audioMuted;\n }\n if (videoMuted !== undefined) {\n this.latestVideoMuted = videoMuted;\n }\n\n if (this.confluenceState === 'not created') {\n // if there is no confluence, there is no point sending out local mute request\n // as it will fail so we just store the latest audio/video muted values\n // and resolve immediately, so that higher layer (MuteState class) doesn't get blocked\n // and can call us again if user mutes/unmutes again before confluence is created\n LoggerProxy.logger.info(\n 'Meeting:LocusMediaRequest#send --> called with LocalMute request before confluence creation'\n );\n\n return Promise.resolve({});\n }\n }\n\n const pendingPromise = new Defer();\n\n const newRequest = new InternalRequestInfo(\n request,\n pendingPromise,\n this.sendHttpRequest.bind(this)\n );\n\n this.addToQueue(newRequest);\n\n defer(() => this.executeNextQueuedRequest());\n\n return pendingPromise.promise;\n }\n\n /** Returns true if a confluence on the server is already created */\n public isConfluenceCreated() {\n return this.confluenceState === 'created';\n }\n}\n","import {MediaConnectionEventNames, ConnectionState} from '@webex/internal-media-core';\nimport EventsScope from '../common/events/events-scope';\nimport {Enum} from '../constants';\n\nexport const ConnectionStateEvent = {\n stateChanged: 'connectionState:changed',\n} as const;\n\nexport type ConnectionStateEvent = Enum;\n\nexport interface ConnectionStateChangedEvent {\n /**\n * Current overall connection state\n */\n state: ConnectionState;\n}\n\n/**\n * @class ConnectionStateHandler\n */\nexport class ConnectionStateHandler extends EventsScope {\n private webrtcMediaConnection: any;\n\n private mediaConnectionState: ConnectionState;\n\n /**\n * @param {WebRTCMeeting} webrtcMediaConnection\n */\n constructor(webrtcMediaConnection) {\n super();\n\n this.webrtcMediaConnection = webrtcMediaConnection;\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.handleConnectionStateChange.bind(this)\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.handleConnectionStateChange.bind(this)\n );\n }\n\n /**\n * Handler for connection state change.\n *\n * @returns {void}\n */\n private handleConnectionStateChange(): void {\n const newConnectionState = this.webrtcMediaConnection.getConnectionState();\n\n if (newConnectionState !== this.mediaConnectionState) {\n this.mediaConnectionState = newConnectionState;\n this.emit(\n {\n file: 'connectionStateHandler',\n function: 'handleConnectionStateChange',\n },\n ConnectionStateEvent.stateChanged,\n {state: this.mediaConnectionState}\n );\n }\n }\n}\n","import uuid from 'uuid';\nimport {cloneDeep, isEqual, isEmpty} from 'lodash';\nimport jwtDecode from 'jwt-decode';\n// @ts-ignore - Fix this\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\nimport {\n ClientEvent,\n ClientEventLeaveReason,\n CallDiagnosticUtils,\n CALL_DIAGNOSTIC_CONFIG,\n} from '@webex/internal-plugin-metrics';\nimport {ClientEvent as RawClientEvent} from '@webex/event-dictionary-ts';\n\nimport {\n ConnectionState,\n Errors,\n ErrorType,\n MediaConnectionEventNames,\n MediaContent,\n MediaType,\n RemoteTrackType,\n RoapMessage,\n StatsAnalyzer,\n StatsAnalyzerEventNames,\n} from '@webex/internal-media-core';\n\nimport {\n getDevices,\n LocalStream,\n LocalCameraStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream,\n LocalStreamEventNames,\n StreamEventNames,\n RemoteStream,\n} from '@webex/media-helpers';\n\nimport {\n EVENT_TRIGGERS as VOICEAEVENTS,\n TURN_ON_CAPTION_STATUS,\n type MeetingTranscriptPayload,\n} from '@webex/internal-plugin-voicea';\n\nimport {processNewCaptions} from './voicea-meeting';\n\nimport {\n MeetingNotActiveError,\n UserInLobbyError,\n NoMediaEstablishedYetError,\n UserNotJoinedError,\n AddMediaFailed,\n} from '../common/errors/webex-errors';\n\nimport NetworkQualityMonitor from '../networkQualityMonitor';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsUtil from '../common/events/util';\nimport Trigger from '../common/events/trigger-proxy';\nimport Roap, {\n type TurnDiscoveryResult,\n type TurnServerInfo,\n type TurnDiscoverySkipReason,\n} from '../roap/index';\nimport Media, {type BundlePolicy} from '../media';\nimport MediaProperties from '../media/properties';\nimport MeetingStateMachine from './state';\nimport {createMuteState} from './muteState';\nimport LocusInfo from '../locus-info';\nimport Metrics from '../metrics';\nimport ReconnectionManager from '../reconnection-manager';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\nimport MeetingRequest from './request';\nimport Members from '../members/index';\nimport MeetingUtil from './util';\nimport MeetingsUtil from '../meetings/util';\nimport RecordingUtil from '../recording-controller/util';\nimport ControlsOptionsUtil from '../controls-options-manager/util';\nimport MediaUtil from '../media/util';\nimport {Reactions, SkinTones} from '../reactions/reactions';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport {\n DESTINATION_TYPE,\n _INCOMING_,\n _JOIN_,\n AUDIO,\n CONTENT,\n DISPLAY_HINTS,\n EVENT_TRIGGERS,\n EVENT_TYPES,\n EVENTS,\n BREAKOUTS,\n FLOOR_ACTION,\n FULL_STATE,\n LAYOUT_TYPES,\n LOCUSINFO,\n MEETING_INFO_FAILURE_REASON,\n MEETING_REMOVED_REASON,\n MEETING_STATE_MACHINE,\n MEETING_STATE,\n MEETINGS,\n MQA_STATS,\n NETWORK_STATUS,\n ONLINE,\n OFFLINE,\n PASSWORD_STATUS,\n PSTN_STATUS,\n QUALITY_LEVELS,\n RECORDING_STATE,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n VIDEO,\n SELF_ROLES,\n INTERPRETATION,\n SELF_POLICY,\n MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC,\n MEETING_PERMISSION_TOKEN_REFRESH_REASON,\n ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT,\n NAMED_MEDIA_GROUP_TYPE_AUDIO,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ParameterError from '../common/errors/parameter';\nimport {\n MeetingInfoV2PasswordError,\n MeetingInfoV2CaptchaError,\n MeetingInfoV2PolicyError,\n} from '../meeting-info/meeting-info-v2';\nimport {CSI, ReceiveSlotManager} from '../multistream/receiveSlotManager';\nimport SendSlotManager from '../multistream/sendSlotManager';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\nimport {\n Configuration as RemoteMediaManagerConfiguration,\n RemoteMediaManager,\n Event as RemoteMediaManagerEvent,\n} from '../multistream/remoteMediaManager';\nimport {\n Reaction,\n ReactionServerType,\n SkinToneType,\n ProcessedReaction,\n RelayEvent,\n} from '../reactions/reactions.type';\nimport Breakouts from '../breakouts';\nimport SimultaneousInterpretation from '../interpretation';\nimport Annotation from '../annotation';\nimport Webinar from '../webinar';\n\nimport InMeetingActions from './in-meeting-actions';\nimport {REACTION_RELAY_TYPES} from '../reactions/constants';\nimport RecordingController from '../recording-controller';\nimport ControlsOptionsManager from '../controls-options-manager';\nimport PermissionError from '../common/errors/permission';\nimport {LocusMediaRequest} from './locusMediaRequest';\nimport {ConnectionStateHandler, ConnectionStateEvent} from './connectionStateHandler';\n\n// default callback so we don't call an undefined function, but in practice it should never be used\nconst DEFAULT_ICE_PHASE_CALLBACK = () => 'JOIN_MEETING_FINAL';\n\nconst logRequest = (request: any, {logText = ''}) => {\n LoggerProxy.logger.info(`${logText} - sending request`);\n\n return request\n .then((arg) => {\n LoggerProxy.logger.info(`${logText} - has been successfully sent`);\n\n return arg;\n })\n .catch((error) => {\n LoggerProxy.logger.error(`${logText} - has failed: `, error);\n throw error;\n });\n};\n\nexport type CaptionData = {\n id: string;\n isFinal: boolean;\n translations: Array;\n text: string;\n currentCaptionLanguage: string;\n timestamp: string;\n speaker: string;\n};\n\nexport type Transcription = {\n languageOptions: {\n captionLanguages?: string; // list of supported caption languages from backend\n maxLanguages?: number;\n spokenLanguages?: Array; // list of supported spoken languages from backend\n currentCaptionLanguage?: string; // current caption language - default is english\n requestedCaptionLanguage?: string; // requested caption language\n currentSpokenLanguage?: string; // current spoken language - default is english\n };\n status: string;\n isListening: boolean;\n commandText: string;\n captions: Array;\n showCaptionBox: boolean;\n transcribingRequestStatus: string;\n isCaptioning: boolean;\n speakerProxy: Map;\n interimCaptions: Map;\n};\n\nexport type LocalStreams = {\n microphone?: LocalMicrophoneStream;\n camera?: LocalCameraStream;\n screenShare?: {\n audio?: LocalSystemAudioStream;\n video?: LocalDisplayStream;\n };\n};\n\nexport type AddMediaOptions = {\n localStreams?: LocalStreams;\n audioEnabled?: boolean; // if not specified, default value true is used\n videoEnabled?: boolean; // if not specified, default value true is used\n shareAudioEnabled?: boolean; // if not specified, default value true is used\n shareVideoEnabled?: boolean; // if not specified, default value true is used\n remoteMediaManagerConfig?: RemoteMediaManagerConfiguration; // applies only to multistream meetings\n bundlePolicy?: BundlePolicy; // applies only to multistream meetings\n allowMediaInLobby?: boolean; // allows adding media when in the lobby\n};\n\nexport type CallStateForMetrics = {\n correlationId?: string;\n joinTrigger?: string;\n loginType?: string;\n};\n\nexport const MEDIA_UPDATE_TYPE = {\n TRANSCODED_MEDIA_CONNECTION: 'TRANSCODED_MEDIA_CONNECTION',\n SHARE_FLOOR_REQUEST: 'SHARE_FLOOR_REQUEST',\n UPDATE_MEDIA: 'UPDATE_MEDIA',\n};\n\nexport enum ScreenShareFloorStatus {\n PENDING = 'floor_request_pending',\n GRANTED = 'floor_request_granted',\n RELEASED = 'floor_released',\n}\n\ntype FetchMeetingInfoParams = {\n password?: string;\n captchaCode?: string;\n extraParams?: Record;\n sendCAevents?: boolean;\n};\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n * @property {boolean} isSharing\n */\n\n/**\n * SharePreferences\n * @typedef {Object} SharePreferences\n * @property {Object} [shareConstraints]\n * @property {Boolean} [highFrameRate]\n */\n\n/**\n * JoinOptions\n * @typedef {Object} JoinOptions\n * @property {String} [resourceId]\n * @property {String} [pin]\n * @property {Boolean} [moderator]\n * @property {String|Object} [meetingQuality]\n * @property {String} [meetingQuality.remote]\n * @property {Boolean} [rejoin]\n * @property {Boolean} [enableMultistream]\n */\n\n/**\n * Recording\n * @typedef {Object} Recording\n * @property {Object} state\n * @property {String} modifiedBy\n */\n\n/**\n * Meeting State Change Event\n * Emitted when ever there is a meeting state change\n * @event meeting:stateChange\n * @instance\n * @type {Object}\n * @property {String} currentState current state of the meeting\n * @property {String} previousState previous state of the meeting\n * @memberof Meeting\n */\n\n/**\n * Media Ready Event\n * Emitted when a stream is ready to be rendered\n * @event media:ready\n * @instance\n * @type {Object}\n * @property {MediaStream} stream the media stream\n * @property {String} type what type of stream, remote, local\n * @memberof Meeting\n */\n\n/**\n * Media Stopped Event\n * Emitted when a stream has stopped sending\n * @event media:stopped\n * @instance\n * @type {Object}\n * @property {String} type what type of stream, remote, local\n * @memberof Meeting\n */\n\n/**\n * Meeting Ringing Event\n * Emitted when this client should play a ringing sound, because this member is getting an incoming meeting\n * or sending out an incoming meeting\n * @event meeting:ringing\n * @instance\n * @type {Object}\n * @property {String} type // INCOMING or JOIN\n * @property {String} id\n * @memberof Meeting\n */\n\n/**\n * Meeting Ringing Stop Event\n * Emitted when this client should stop playing a ringing sound\n * @event meeting:ringingStop\n * @instance\n * @type {Object}\n * @property {Object} type\n * @property {Boolean} type.remoteAnswered\n * @property {Boolean} type.remoteDeclined\n * @property {String} id\n * @memberof Meeting\n */\n\n/**\n * Meeting Started Sharing Local Event\n * Emitted when this member starts sharing\n * @event meeting:startedSharingLocal\n * @instance\n * @type {Object}\n * @memberof Meeting\n */\n\n/**\n * Meeting Stopped Sharing Local Event\n * Emitted when this member stops sharing\n * @event meeting:stoppedSharingLocal\n * @instance\n * @type {Object}\n * @memberof Meeting\n */\n\n/**\n * Meeting Started Sharing Remote Event\n * Emitted when remote sharing starts\n * @event meeting:startedSharingRemote\n * @instance\n * @type {Object}\n * @property {Boolean} memberId id of the meeting member that started screen share\n * @property {String} url of this content share\n * @property {String} shareInstanceId of this content share\n * @property {Object} annotation Info of this content share\n * @memberof Meeting\n *\n */\n\n/**\n * Meeting Stopped Sharing Remote Event\n * Emitted when remote screen sharing ends\n * @event meeting:stoppedSharingRemote\n * @instance\n * @type {Object}\n * @memberof Meeting\n */\n\n/**\n * Meeting Locked Event\n * Emitted when a meeting is locked\n * @event meeting:locked\n * @instance\n * @type {Object}\n * @property {Object} info\n * @memberof Meeting\n */\n\n/**\n * Meeting Unlocked Event\n * Emitted when a meeting is unlocked\n * @event meeting:unlocked\n * @instance\n * @type {Object}\n * @property {Object} info\n * @memberof Meeting\n */\n\n/**\n * Meeting Actions Update Event\n * Emitted when a user can take actions on a meeting such as lock, unlock, assign host\n * @event meeting:actionsUpdate\n * @instance\n * @type {Object}\n * @property {Boolean} canLock\n * @property {Boolean} canUnlock\n * @property {Boolean} canAssignHost\n * @memberof Meeting\n */\n\n/**\n * Meeting Unmuted By Others Event\n * Emitted when a member is unmuted by another member\n * @event meeting:self:unmutedByOthers\n * @instance\n * @type {Object}\n * @property {Object} payload\n * @memberof Meeting\n */\n\n/**\n * Meeting Muted By Others Event\n * Emitted when a member is muted by another member\n * @event meeting:self:mutedByOthers\n * @instance\n * @type {Object}\n * @property {Object} payload\n * @property {Boolean} payload.unmuteAllowed - whether the user is allowed to unmute self\n * @memberof Meeting\n */\n\n/**\n * Meeting Muted By Others Event\n * Emitted when the host(moderator)/co-host requests a user to unmute\n * @event meeting:self:requestedToUnmute\n * @instance\n * @type {Object}\n * @property {Object} payload\n * @memberof Meeting\n */\n\n/**\n * Meeting Self Guest Admitted Event\n * Emitted when a joined user get admitted to the meeting by another member or host\n * @event meeting:self:guestAdmitted\n * @instance\n * @type {Object}\n * @property {Object} payload\n * @memberof Meeting\n */\n\n/**\n * Meeting Self Lobby Waiting Event\n * Emitted when joined user enters the lobby and is waiting for the webex meeting to begin\n * @event meeting:self:lobbyWaiting\n * @instance\n * @type {Object}\n * @property {Object} reason Reason why user left the meeting\n * @memberof Meeting\n */\n\n/**\n * Meeting Self Left State\n * Emitted when user is inactive for more then 40 seconds, User can rejoin the meeting again\n * @event meeting:self:left\n * @instance\n * @type {Object}\n * @property {Object} payload\n * @memberof Meeting\n */\n\n/**\n * Reconnection Starting Event\n * Emitted when reconnection of media to the active meeting was successful\n * @event meeting:reconnectionStarting\n * @instance\n * @memberof Meeting\n */\n\n/**\n * Reconnection Success Event\n * Emitted when reconnection of media to the active meeting was successful\n * @event meeting:reconnectionSuccess\n * @instance\n * @type {Object}\n * @property {Object} reconnect\n * @memberof Meeting\n */\n\n/**\n * Reconnection Failure Event\n * Emitted when reconnection of media to the active meeting was successful\n * @event meeting:reconnectionFailure\n * @instance\n * @type {Object}\n * @property {Error} error\n * @memberof Meeting\n */\n\n/**\n * Meeting network quality event\n * Emitted on each interval of retrieving stats Analyzer data\n * @event network:quality\n * @type {Object}\n * @property {string} mediaType {video|audio}\n * @property {number} networkQualityScore - {1|0} 1 indicates acceptable uplink 0 indicates unacceptable uplink based on threshold\n * @memberof Meeting\n */\n\n/**\n * @description Meeting is the crux of the plugin\n * @export\n * @class Meeting\n */\nexport default class Meeting extends StatelessWebexPlugin {\n attrs: any;\n audio: any;\n breakouts: any;\n simultaneousInterpretation: any;\n annotation: any;\n webinar: any;\n conversationUrl: string;\n callStateForMetrics: CallStateForMetrics;\n destination: string;\n destinationType: DESTINATION_TYPE;\n deviceUrl: string;\n hostId: string;\n id: string;\n isMultistream: boolean;\n locusUrl: string;\n mediaConnections: any[];\n mediaId?: string;\n meetingFiniteStateMachine: any;\n meetingInfo: any;\n meetingRequest: MeetingRequest;\n members: Members;\n options: object;\n orgId: string;\n owner: string;\n partner: any;\n policy: string;\n reconnectionManager: ReconnectionManager;\n resource: string;\n roap: Roap;\n roapSeq: number;\n selfUrl?: string; // comes from Locus, initialized by updateMeetingObject()\n sipUri: string;\n type: string;\n userId: string;\n video: any;\n callEvents: any[];\n datachannelUrl: string;\n deferJoin: Promise;\n dialInDeviceStatus: string;\n dialInUrl: string;\n dialOutDeviceStatus: string;\n dialOutUrl: string;\n fetchMeetingInfoTimeoutId: NodeJS.Timeout;\n floorGrantPending: boolean;\n hasJoinedOnce: boolean;\n hasWebsocketConnected: boolean;\n inMeetingActions: InMeetingActions;\n isLocalShareLive: boolean;\n isRoapInProgress: boolean;\n keepAliveTimerId: NodeJS.Timeout;\n lastVideoLayoutInfo: any;\n locusInfo: any;\n locusMediaRequest?: LocusMediaRequest;\n mediaProperties: MediaProperties;\n mediaRequestManagers: {\n audio: MediaRequestManager;\n video: MediaRequestManager;\n screenShareAudio: MediaRequestManager;\n screenShareVideo: MediaRequestManager;\n };\n\n meetingInfoFailureReason: string;\n meetingInfoFailureCode?: number;\n meetingInfoExtraParams?: Record;\n networkQualityMonitor: NetworkQualityMonitor;\n networkStatus?: NETWORK_STATUS;\n passwordStatus: string;\n queuedMediaUpdates: any[];\n recording: any;\n remoteMediaManager: RemoteMediaManager | null;\n recordingController: RecordingController;\n controlsOptionsManager: ControlsOptionsManager;\n requiredCaptcha: any;\n receiveSlotManager: ReceiveSlotManager;\n selfUserPolicies: any;\n enforceVBGImagesURL: string;\n shareStatus: string;\n screenShareFloorState: ScreenShareFloorStatus;\n statsAnalyzer: StatsAnalyzer;\n transcription: Transcription;\n updateMediaConnections: (mediaConnections: any[]) => void;\n userDisplayHints: any;\n endCallInitJoinReq: any;\n endJoinReqResp: any;\n endLocalSDPGenRemoteSDPRecvDelay: any;\n joinedWith: any;\n locusId: any;\n startCallInitJoinReq: any;\n startJoinReqResp: any;\n startLocalSDPGenRemoteSDPRecvDelay: any;\n wirelessShare: any;\n guest: any;\n meetingJoinUrl: any;\n meetingNumber: any;\n meetingState: any;\n permissionToken: string;\n permissionTokenPayload: any;\n permissionTokenReceivedLocalTime: number;\n resourceId: any;\n resourceUrl: string;\n selfId: string;\n state: any;\n localAudioStreamMuteStateHandler: () => void;\n localVideoStreamMuteStateHandler: () => void;\n localOutputTrackChangeHandler: () => void;\n roles: any[];\n environment: string;\n namespace = MEETINGS;\n allowMediaInLobby: boolean;\n localShareInstanceId: string;\n remoteShareInstanceId: string;\n turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n turnServerUsed: boolean;\n areVoiceaEventsSetup = false;\n isMoveToInProgress = false;\n\n voiceaListenerCallbacks: object = {\n [VOICEAEVENTS.VOICEA_ANNOUNCEMENT]: (payload: Transcription['languageOptions']) => {\n this.transcription.languageOptions = payload;\n\n LoggerProxy.logger.debug(\n `${EventsUtil.getScopeLog({\n file: 'meeting/index',\n function: 'setUpVoiceaListeners',\n })}event#${EVENT_TRIGGERS.MEETING_STARTED_RECEIVING_TRANSCRIPTION}`\n );\n\n if (this.getCurUserType() !== 'host') {\n delete payload.spokenLanguages;\n }\n\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.MEETING_STARTED_RECEIVING_TRANSCRIPTION, payload);\n },\n [VOICEAEVENTS.CAPTIONS_TURNED_ON]: () => {\n this.transcription.status = TURN_ON_CAPTION_STATUS.ENABLED;\n },\n [VOICEAEVENTS.EVA_COMMAND]: (payload) => {\n const {data} = payload;\n\n this.transcription.isListening = !!data.isListening;\n this.transcription.commandText = data.text ?? '';\n },\n [VOICEAEVENTS.NEW_CAPTION]: (data: MeetingTranscriptPayload) => {\n processNewCaptions({data, meeting: this});\n\n LoggerProxy.logger.debug(\n `${EventsUtil.getScopeLog({\n file: 'meeting/index',\n function: 'setUpVoiceaListeners',\n })}event#${EVENT_TRIGGERS.MEETING_CAPTION_RECEIVED}`\n );\n\n // @ts-ignore\n this.trigger(EVENT_TRIGGERS.MEETING_CAPTION_RECEIVED, {\n captions: this.transcription.captions,\n interimCaptions: this.transcription.interimCaptions,\n });\n },\n };\n\n private addMediaData: {\n retriedWithTurnServer: boolean;\n icePhaseCallback: () => string;\n };\n\n private sendSlotManager: SendSlotManager = new SendSlotManager(LoggerProxy);\n private deferSDPAnswer?: Defer; // used for waiting for a response\n private sdpResponseTimer?: ReturnType;\n private hasMediaConnectionConnectedAtLeastOnce: boolean;\n private joinWithMediaRetryInfo?: {isRetry: boolean; prevJoinResponse?: any};\n private connectionStateHandler?: ConnectionStateHandler;\n private iceCandidateErrors: Map;\n private iceCandidatesCount: number;\n\n /**\n * @param {Object} attrs\n * @param {Object} options\n * @constructor\n * @memberof Meeting\n */\n constructor(attrs: any, options: object) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @readonly\n * @private\n * @memberof Meeting\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @readonly\n * @private\n * @memberof Meeting\n */\n this.options = options;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.id = uuid.v4();\n /**\n * Call state used for metrics\n * @instance\n * @type {CallStateForMetrics}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.callStateForMetrics = attrs.callStateForMetrics || {};\n const correlationId = attrs.correlationId || attrs.callStateForMetrics?.correlationId;\n if (correlationId) {\n LoggerProxy.logger.log(\n `Meetings:index#constructor --> Initializing the meeting object with correlation id from app ${correlationId}`\n );\n this.callStateForMetrics.correlationId = correlationId;\n } else {\n this.callStateForMetrics.correlationId = this.id;\n }\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.userId = attrs.userId;\n /**\n * Organization ID\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.orgId = attrs.orgId;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.resource = attrs.resource;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.deviceUrl = attrs.deviceUrl;\n /**\n * @instance\n * @type {Object}\n * @readonly\n * @public\n * @memberof Meeting\n */\n // TODO: needs to be defined as a class\n this.meetingInfo = {};\n /**\n * @instance\n * @type {Breakouts}\n * @public\n * @memberof Meeting\n */\n // @ts-ignore\n this.breakouts = new Breakouts({meetingId: this.id}, {parent: this.webex});\n /**\n * @instance\n * @type {SimultaneousInterpretation}\n * @public\n * @memberof Meeting\n */\n // @ts-ignore\n this.simultaneousInterpretation = new SimultaneousInterpretation({}, {parent: this.webex});\n /**\n * @instance\n * @type {Annotation}\n * @public\n * @memberof Meeting\n */\n // @ts-ignore\n this.annotation = new Annotation({parent: this.webex});\n /**\n * @instance\n * @type {Webinar}\n * @public\n * @memberof Meeting\n */\n // @ts-ignore\n this.webinar = new Webinar({}, {parent: this.webex});\n /**\n * helper class for managing receive slots (for multistream media connections)\n */\n this.receiveSlotManager = new ReceiveSlotManager(\n (mediaType: MediaType) => {\n if (!this.mediaProperties?.webrtcMediaConnection) {\n return Promise.reject(new Error('Webrtc media connection is missing'));\n }\n\n return this.mediaProperties.webrtcMediaConnection.createReceiveSlot(mediaType);\n },\n (csi: CSI) => (this.members.findMemberByCsi(csi) as any)?.id\n );\n /**\n * Object containing helper classes for managing media requests for audio/video/screenshare (for multistream media connections)\n * All multistream media requests sent out for this meeting have to go through them.\n */\n this.mediaRequestManagers = {\n audio: new MediaRequestManager(\n (mediaRequests) => {\n if (!this.mediaProperties.webrtcMediaConnection) {\n LoggerProxy.logger.warn(\n 'Meeting:index#mediaRequestManager --> trying to send audio media request before media connection was created'\n );\n\n return;\n }\n this.mediaProperties.webrtcMediaConnection.requestMedia(\n MediaType.AudioMain,\n mediaRequests\n );\n },\n {\n // @ts-ignore - config coming from registerPlugin\n degradationPreferences: this.config.degradationPreferences,\n kind: 'audio',\n trimRequestsToNumOfSources: false,\n }\n ),\n video: new MediaRequestManager(\n (mediaRequests) => {\n if (!this.mediaProperties.webrtcMediaConnection) {\n LoggerProxy.logger.warn(\n 'Meeting:index#mediaRequestManager --> trying to send video media request before media connection was created'\n );\n\n return;\n }\n this.mediaProperties.webrtcMediaConnection.requestMedia(\n MediaType.VideoMain,\n mediaRequests\n );\n },\n {\n // @ts-ignore - config coming from registerPlugin\n degradationPreferences: this.config.degradationPreferences,\n kind: 'video',\n trimRequestsToNumOfSources: true,\n }\n ),\n screenShareAudio: new MediaRequestManager(\n (mediaRequests) => {\n if (!this.mediaProperties.webrtcMediaConnection) {\n LoggerProxy.logger.warn(\n 'Meeting:index#mediaRequestManager --> trying to send screenshare audio media request before media connection was created'\n );\n\n return;\n }\n this.mediaProperties.webrtcMediaConnection.requestMedia(\n MediaType.AudioSlides,\n mediaRequests\n );\n },\n {\n // @ts-ignore - config coming from registerPlugin\n degradationPreferences: this.config.degradationPreferences,\n kind: 'audio',\n trimRequestsToNumOfSources: false,\n }\n ),\n screenShareVideo: new MediaRequestManager(\n (mediaRequests) => {\n if (!this.mediaProperties.webrtcMediaConnection) {\n LoggerProxy.logger.warn(\n 'Meeting:index#mediaRequestManager --> trying to send screenshare video media request before media connection was created'\n );\n\n return;\n }\n this.mediaProperties.webrtcMediaConnection.requestMedia(\n MediaType.VideoSlides,\n mediaRequests\n );\n },\n {\n // @ts-ignore - config coming from registerPlugin\n degradationPreferences: this.config.degradationPreferences,\n kind: 'video',\n trimRequestsToNumOfSources: false,\n }\n ),\n };\n /**\n * @instance\n * @type {Members}\n * @public\n * @memberof Meeting\n */\n this.members = new Members(\n {\n locusUrl: attrs.locus && attrs.locus.url,\n receiveSlotManager: this.receiveSlotManager,\n mediaRequestManagers: this.mediaRequestManagers,\n meeting: this,\n },\n // @ts-ignore - Fix type\n {parent: this.webex}\n );\n /**\n * @instance\n * @type {Roap}\n * @readonly\n * @private\n * @memberof Meeting\n */\n // @ts-ignore - Fix type\n this.roap = new Roap({}, {parent: this.webex});\n /**\n * indicates if an SDP exchange is happening\n *\n * @instance\n * @type {Boolean}\n * @readonly\n * @private\n * @memberof Meeting\n */\n this.isRoapInProgress = false;\n /**\n * created later\n * @instance\n * @type {ReconnectionManager}\n * @readonly\n * @private\n * @memberof Meeting\n */\n this.reconnectionManager = new ReconnectionManager(this);\n /**\n * created with media connection\n * @instance\n * @type {MuteState}\n * @private\n * @memberof Meeting\n */\n this.audio = null;\n /**\n * created with media connection\n * @instance\n * @type {MuteState}\n * @private\n * @memberof Meeting\n */\n this.video = null;\n /**\n * @instance\n * @type {MeetingStateMachine}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.meetingFiniteStateMachine = MeetingStateMachine.create(this);\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.conversationUrl = null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.locusUrl = (attrs.locus && attrs.locus.url) || null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.sipUri = null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.destination = attrs.destination;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.destinationType = attrs.destinationType;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.partner = null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.type = null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.owner = null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.hostId = null;\n /**\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.policy = null;\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof Meeting\n */\n this.meetingRequest = new MeetingRequest(\n {\n meeting: this,\n },\n options\n );\n /**\n * @instance\n * @type {Array}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.mediaConnections = null;\n\n /**\n * If true, then media is sent over multiple separate streams.\n * If false, then media is transcoded by the server into a single stream.\n */\n this.isMultistream = false;\n /**\n * Fetching meeting info can be done randomly 2-5 mins before meeting start\n * In case it is done before the timer expires, this timeout id is reset to cancel the timer.\n * @instance\n * @type {Number}\n * @readonly\n * @private\n * @memberof Meeting\n */\n this.fetchMeetingInfoTimeoutId = null;\n\n /**\n * Update the MediaConnections property with new information\n * @param {array} mediaConnections\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n this.updateMediaConnections = (mediaConnections: any[]) => {\n if (!isEqual(this.mediaConnections, mediaConnections)) {\n // grab last/latest item in the new mediaConnections information\n this.mediaConnections = mediaConnections.slice(-1);\n }\n };\n /**\n * Passing only info as we send basic info for meeting added event\n * @instance\n * @type {MediaProperties}\n * @public\n * @memberof Meeting\n */\n this.mediaProperties = new MediaProperties();\n /**\n * @instance\n * @type {InMeetingActions}\n * @public\n * @memberof Meeting\n */\n this.inMeetingActions = new InMeetingActions();\n /**\n * @instance\n * @type {string}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.shareStatus = SHARE_STATUS.NO_SHARE;\n /**\n * @instance\n * @type {ScreenShareFloorStatus}\n * @private\n * @memberof\n */\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n /**\n * @instance\n * @type {Array}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.callEvents = [];\n /**\n * There is a pending floor requested by the user\n * @instance\n * @type {boolean}\n * @private\n * @memberof Meeting\n */\n this.floorGrantPending = false;\n /**\n * The latest status of the dial in device (can be \"JOINED\", \"CONNECTED\", \"LEFT\",\n * \"TRANSFERRING\", \"SUCCESS\" or \"\")\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.dialInDeviceStatus = PSTN_STATUS.UNKNOWN;\n /**\n * the url for provisioned device used to dial in\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.dialInUrl = '';\n /**\n * The latest status of the dial out device (can be \"JOINED\", \"CONNECTED\", \"LEFT\",\n * \"TRANSFERRING\", \"SUCCESS\" or \"\")\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.dialOutDeviceStatus = PSTN_STATUS.UNKNOWN;\n /**\n * the url for provisioned device used to dial out\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.dialOutUrl = '';\n /**\n * @instance\n * @type {StatsAnalyzer}\n * @private\n * @memberof Meeting\n */\n this.statsAnalyzer = null;\n /**\n * @instance\n * @type {NetworkQualityMonitor}\n * @private\n * @memberof Meeting\n */\n this.networkQualityMonitor = null;\n /**\n * Indicates network status of the webrtc media connection\n * @instance\n * @type {String}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.networkStatus = undefined;\n /**\n * Passing only info as we send basic info for meeting added event\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof Meeting\n */\n // @ts-ignore - Fix type\n this.locusInfo = new LocusInfo(this.updateMeetingObject.bind(this), this.webex, this.id);\n\n // We had to add listeners first before setting up the locus instance\n /**\n * @instance\n * @type {Recording}\n * @readonly\n * @public\n * @memberof Meeting\n */\n this.recording = null;\n\n /**\n * Promise that exists if joining, and resolves upon method completion.\n * @instance\n * @type {Promise}\n * @private\n * @memberof Meeting\n */\n this.deferJoin = undefined;\n\n /**\n * Staus of websocket connection/mercury connection.\n * @instance\n * @type {Boolean}\n * @private\n * @memberof Meeting\n */\n // @ts-ignore - Fix type\n this.hasWebsocketConnected = this.webex.internal.mercury.connected;\n\n /**\n * Last sent render information\n * @instance\n * @type {Object}\n * @private\n * @memberof Meeting\n */\n this.lastVideoLayoutInfo = {layoutType: undefined, main: undefined, content: undefined};\n\n /**\n * Queue of pending media updates requested by the app\n * @instance\n * @type {Array}\n * @private\n * @memberof Meeting\n */\n this.queuedMediaUpdates = [];\n\n /**\n * Meeting transcription object\n * @instance\n * @type {Transcription}\n * @private\n * @memberof Meeting\n */\n this.transcription = {\n captions: [],\n isListening: false,\n commandText: '',\n languageOptions: {},\n showCaptionBox: false,\n transcribingRequestStatus: 'INACTIVE',\n isCaptioning: false,\n interimCaptions: {} as Map,\n speakerProxy: {} as Map,\n } as Transcription;\n\n /**\n * Password status. If it's PASSWORD_STATUS.REQUIRED then verifyPassword() needs to be called\n * with the correct password before calling join()\n * @instance\n * @type {PASSWORD_STATUS}\n * @public\n * @memberof Meeting\n */\n this.passwordStatus = PASSWORD_STATUS.UNKNOWN;\n\n /**\n * Information about required captcha. If null, then no captcha is required. status. If it's PASSWORD_STATUS.REQUIRED then verifyPassword() needs to be called\n * with the correct password before calling join()\n * @instance\n * @type {Object}\n * @property {string} captchaId captcha id\n * @property {string} verificationImageURL Url of the captcha image\n * @property {string} verificationAudioURL Url of the captcha audio file\n * @property {string} refreshURL Url used for refreshing the captcha (don't use it directly, call refreshCaptcha() instead)\n * @public\n * @memberof Meeting\n */\n this.requiredCaptcha = null;\n\n /**\n * Indicates the reason for last failure to obtain meeting.meetingInfo. MEETING_INFO_FAILURE_REASON.NONE if meeting info was\n * retrieved successfully\n * @instance\n * @type {MEETING_INFO_FAILURE_REASON}\n * @private\n * @memberof Meeting\n */\n this.meetingInfoFailureReason = undefined;\n\n /**\n * The numeric code, if any, associated with the last failure to obtain the meeting info\n * @instance\n * @type {number}\n * @private\n * @memberof Meeting\n */\n this.meetingInfoFailureCode = undefined;\n\n /**\n * Repeating timer used to send keepAlives when in lobby\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.keepAliveTimerId = null;\n\n /**\n * id for tracking Local Share instances in Call Analyzer\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.localShareInstanceId = null;\n\n /**\n * id for tracking Remote Share instances in Call Analyzer\n * @instance\n * @type {String}\n * @private\n * @memberof Meeting\n */\n this.remoteShareInstanceId = null;\n\n /**\n * The class that helps to control recording functions: start, stop, pause, resume, etc\n * @instance\n * @type {RecordingController}\n * @public\n * @memberof Meeting\n */\n this.recordingController = new RecordingController(this.meetingRequest, {\n serviceUrl: this.locusInfo?.links?.services?.record?.url,\n sessionId: this.locusInfo?.fullState?.sessionId,\n locusUrl: this.locusInfo?.url,\n displayHints: [],\n });\n\n /**\n * The class that helps to control recording functions: start, stop, pause, resume, etc\n * @instance\n * @type {ControlsOptionsManager}\n * @public\n * @memberof Meeting\n */\n this.controlsOptionsManager = new ControlsOptionsManager(this.meetingRequest, {\n locusUrl: this.locusInfo?.url,\n displayHints: [],\n });\n\n this.setUpLocusInfoListeners();\n this.locusInfo.init(attrs.locus ? attrs.locus : {});\n this.hasJoinedOnce = false;\n\n /**\n * helper class for managing remote streams\n */\n this.remoteMediaManager = null;\n\n this.localAudioStreamMuteStateHandler = () => {\n this.audio?.handleLocalStreamMuteStateChange(this);\n };\n\n this.localVideoStreamMuteStateHandler = () => {\n this.video?.handleLocalStreamMuteStateChange(this);\n };\n\n // The handling of output track changes should be done inside\n // @webex/internal-media-core, but for now we have to do it here, because\n // RoapMediaConnection has to use raw MediaStreamTracks in its API until\n // the Calling SDK also moves to using webrtc-core streams\n this.localOutputTrackChangeHandler = () => {\n if (!this.isMultistream) {\n this.updateTranscodedMediaConnection();\n }\n };\n\n /**\n * Promise that exists if SDP offer has been generated, and resolves once sdp answer is received.\n * @instance\n * @type {Defer}\n * @private\n * @memberof Meeting\n */\n this.deferSDPAnswer = undefined;\n\n /**\n * Timer for waiting for sdp answer.\n * @instance\n * @type {ReturnType}\n * @private\n * @memberof Meeting\n */\n this.sdpResponseTimer = undefined;\n\n /**\n * Reason why TURN discovery is skipped.\n * @instance\n * @type {string}\n * @public\n * @memberof Meeting\n */\n this.turnDiscoverySkippedReason = undefined;\n\n /**\n * Whether TURN discovery is used or not.\n * @instance\n * @type {boolean}\n * @public\n * @memberof Meeting\n */\n this.turnServerUsed = false;\n\n /**\n * Contains information used during the addMedia() operation:\n * retriedWithTurnServer - whether retry was done using TURN Discovery\n * icePhaseCallback - callback for determining the value for icePhase when sending failure event to CA\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof Meeting\n */\n this.addMediaData = {\n retriedWithTurnServer: false,\n icePhaseCallback: DEFAULT_ICE_PHASE_CALLBACK,\n };\n\n /**\n * Whether or not the media connection has ever successfully connected.\n * @instance\n * @type {boolean}\n * @private\n * @memberof Meeting\n */\n this.hasMediaConnectionConnectedAtLeastOnce = false;\n\n /**\n * Information needed for a retry of a call to joinWithMedia\n * @instance\n * @type {{isRetry: boolean; prevJoinResponse?: any}}\n * @private\n * @memberof Meeting\n */\n this.joinWithMediaRetryInfo = {isRetry: false, prevJoinResponse: undefined};\n\n /**\n * Connection state handler\n * @instance\n * @type {ConnectionStateHandler}\n * @private\n * @memberof Meeting\n */\n this.connectionStateHandler = undefined;\n\n /**\n * ICE Candidates errors map\n * @instance\n * @type {Map<[number, string], number>}\n * @private\n * @memberof Meeting\n */\n this.iceCandidateErrors = new Map();\n\n /**\n * Gathered ICE Candidates count\n * @instance\n * @type {number}\n * @private\n * @memberof Meeting\n */\n this.iceCandidatesCount = 0;\n }\n\n /**\n * Temporary func to return webex object,\n * in order to access internal plugin metrics\n * in the utils file.\n * @internal\n * @returns {object} webex object\n */\n getWebexObject() {\n // @ts-ignore\n return this.webex;\n }\n\n /**\n * returns meeting is joined\n * @private\n * @memberof Meeting\n * @returns {Boolean}\n */\n private isJoined() {\n return this.joinedWith?.state === 'JOINED';\n }\n\n /**\n * Returns whether this meeting is a Locus CALL\n * @returns {Boolean}\n */\n isLocusCall() {\n return this.type === 'CALL';\n }\n\n /**\n * Getter - Returns callStateForMetrics.correlationId\n * @returns {string}\n */\n get correlationId() {\n return this.callStateForMetrics.correlationId;\n }\n\n /**\n * Setter - sets callStateForMetrics.correlationId\n * @param {string} correlationId\n */\n set correlationId(correlationId: string) {\n this.callStateForMetrics.correlationId = correlationId;\n }\n\n /**\n * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event\n * @param {any} info\n * @param {string} [meetingLookupUrl] Lookup url, defined when the meeting info fetched\n * @returns {void}\n */\n private setMeetingInfo(info, meetingLookupUrl) {\n this.meetingInfo = info ? {...info, meetingLookupUrl} : null;\n this.meetingInfoFailureReason = MEETING_INFO_FAILURE_REASON.NONE;\n\n this.requiredCaptcha = null;\n if (\n this.passwordStatus === PASSWORD_STATUS.REQUIRED ||\n this.passwordStatus === PASSWORD_STATUS.VERIFIED\n ) {\n this.passwordStatus = PASSWORD_STATUS.VERIFIED;\n } else {\n this.passwordStatus = PASSWORD_STATUS.NOT_REQUIRED;\n }\n\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'fetchMeetingInfo',\n },\n EVENT_TRIGGERS.MEETING_INFO_AVAILABLE\n );\n\n this.updateMeetingActions();\n }\n\n /**\n * Add pre-fetched meeting info\n *\n * The passed meeting info should be be complete, e.g.: fetched after password or captcha provided\n *\n * @param {Object} meetingInfo - Complete meeting info\n * @param {FetchMeetingInfoParams} fetchParams - Fetch parameters for validation\n * @param {String|undefined} meetingLookupUrl - Lookup url, defined when the meeting info fetched\n * @returns {Promise}\n */\n public async injectMeetingInfo(\n meetingInfo: any,\n fetchParams: FetchMeetingInfoParams,\n meetingLookupUrl: string | undefined\n ): Promise {\n await this.prepForFetchMeetingInfo(fetchParams, 'injectMeetingInfo');\n\n this.parseMeetingInfo(meetingInfo, this.destination);\n this.setMeetingInfo(meetingInfo, meetingLookupUrl);\n }\n\n /**\n * Validate fetch parameters and clear the fetchMeetingInfoTimeout timeout\n *\n * @param {FetchMeetingInfoParams} fetchParams - fetch parameters for validation\n * @param {String} caller - Name of the caller for logging\n *\n * @returns {Promise}\n * @private\n */\n private prepForFetchMeetingInfo(\n {password = null, captchaCode = null, extraParams = {}}: FetchMeetingInfoParams,\n caller: string\n ): Promise {\n // when fetch meeting info is called directly by the client, we want to clear out the random timer for sdk to do it\n if (this.fetchMeetingInfoTimeoutId) {\n clearTimeout(this.fetchMeetingInfoTimeoutId);\n this.fetchMeetingInfoTimeoutId = undefined;\n }\n if (captchaCode && !this.requiredCaptcha) {\n return Promise.reject(\n new Error(`${caller}() called with captchaCode when captcha was not required`)\n );\n }\n if (\n password &&\n this.passwordStatus !== PASSWORD_STATUS.REQUIRED &&\n this.passwordStatus !== PASSWORD_STATUS.UNKNOWN\n ) {\n return Promise.reject(\n new Error(`${caller}() called with password when password was not required`)\n );\n }\n\n this.meetingInfoExtraParams = cloneDeep(extraParams);\n\n return Promise.resolve();\n }\n\n /**\n * Internal method for fetching meeting info\n *\n * @returns {Promise}\n */\n private async fetchMeetingInfoInternal({\n destination,\n destinationType,\n password = null,\n captchaCode = null,\n extraParams = {},\n sendCAevents = false,\n }): Promise {\n try {\n const captchaInfo = captchaCode\n ? {code: captchaCode, id: this.requiredCaptcha.captchaId}\n : null;\n\n const info = await this.attrs.meetingInfoProvider.fetchMeetingInfo(\n destination,\n destinationType,\n password,\n captchaInfo,\n // @ts-ignore - config coming from registerPlugin\n this.config.installedOrgID,\n this.locusId,\n extraParams,\n {meetingId: this.id, sendCAevents}\n );\n\n this.parseMeetingInfo(info?.body, this.destination, info?.errors);\n this.setMeetingInfo(info?.body, info?.url);\n\n return Promise.resolve();\n } catch (err) {\n this.updateMeetingActions();\n\n if (err instanceof MeetingInfoV2PolicyError) {\n this.meetingInfoFailureReason = MEETING_INFO_FAILURE_REASON.POLICY;\n this.meetingInfoFailureCode = err.wbxAppApiCode;\n\n if (err.meetingInfo) {\n this.meetingInfo = err.meetingInfo;\n }\n\n throw new PermissionError();\n } else if (err instanceof MeetingInfoV2PasswordError) {\n LoggerProxy.logger.info(\n // @ts-ignore\n `Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ${this.destination} - password required (code=${err?.body?.code}).`\n );\n\n // when wbxappapi requires password it still populates partial meeting info in the response\n if (err.meetingInfo) {\n this.meetingInfo = err.meetingInfo;\n this.meetingNumber = err.meetingInfo.meetingNumber;\n }\n\n this.meetingInfoFailureCode = err.wbxAppApiCode;\n\n this.passwordStatus = PASSWORD_STATUS.REQUIRED;\n this.meetingInfoFailureReason = MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;\n if (this.requiredCaptcha) {\n // this is a workaround for captcha service bug, see WEBEX-224862\n await this.refreshCaptcha();\n }\n\n throw new PasswordError();\n } else if (err instanceof MeetingInfoV2CaptchaError) {\n LoggerProxy.logger.info(\n // @ts-ignore\n `Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ${this.destination} - captcha required (code=${err?.body?.code}).`\n );\n\n this.meetingInfoFailureReason = this.requiredCaptcha\n ? MEETING_INFO_FAILURE_REASON.WRONG_CAPTCHA\n : MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;\n\n this.meetingInfoFailureCode = err.wbxAppApiCode;\n\n if (err.isPasswordRequired) {\n this.passwordStatus = PASSWORD_STATUS.REQUIRED;\n }\n\n this.requiredCaptcha = err.captchaInfo;\n throw new CaptchaError();\n } else {\n this.meetingInfoFailureReason = MEETING_INFO_FAILURE_REASON.OTHER;\n throw err;\n }\n }\n }\n\n /**\n * Refreshes the meeting info permission token (it's required for joining meetings)\n *\n * @param {string} [reason] used for metrics and logging purposes (optional)\n * @returns {Promise}\n */\n public async refreshPermissionToken(reason?: string): Promise {\n if (!this.meetingInfo?.permissionToken) {\n LoggerProxy.logger.info(\n `Meeting:index#refreshPermissionToken --> cannot refresh the permission token, because we don't have it (reason=${reason})`\n );\n\n return;\n }\n\n const isStartingSpaceInstantV2Meeting =\n this.destinationType === DESTINATION_TYPE.CONVERSATION_URL &&\n // @ts-ignore - config coming from registerPlugin\n this.config.experimental.enableAdhocMeetings &&\n // @ts-ignore\n this.webex.meetings.preferredWebexSite;\n\n const destination = isStartingSpaceInstantV2Meeting\n ? this.meetingInfo.meetingJoinUrl\n : this.destination;\n const destinationType = isStartingSpaceInstantV2Meeting\n ? DESTINATION_TYPE.MEETING_LINK\n : this.destinationType;\n\n const permissionTokenExpiryInfo = this.getPermissionTokenExpiryInfo();\n\n const timeLeft = permissionTokenExpiryInfo?.timeLeft;\n const expiryTime = permissionTokenExpiryInfo?.expiryTime;\n const currentTime = permissionTokenExpiryInfo?.currentTime;\n\n LoggerProxy.logger.info(\n `Meeting:index#refreshPermissionToken --> refreshing permission token, destinationType=${destinationType}, timeLeft=${timeLeft}, permissionTokenExpiry=${expiryTime}, currentTimestamp=${currentTime},reason=${reason}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.PERMISSION_TOKEN_REFRESH, {\n correlationId: this.correlationId,\n timeLeft,\n expiryTime,\n currentTime,\n reason,\n destinationType,\n });\n\n try {\n await this.fetchMeetingInfoInternal({\n destination,\n destinationType,\n extraParams: {\n ...this.meetingInfoExtraParams,\n permissionToken: this.meetingInfo.permissionToken,\n },\n sendCAevents: true, // because if we're refreshing the permissionToken, it means that user is intending to join that meeting, so we want CA events\n });\n } catch (error) {\n LoggerProxy.logger.info(\n 'Meeting:index#refreshPermissionToken --> failed to refresh the permission token:',\n error\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.PERMISSION_TOKEN_REFRESH_ERROR, {\n correlationId: this.correlationId,\n reason: error.message,\n stack: error.stack,\n });\n\n throw error;\n }\n }\n\n /**\n * Fetches meeting information.\n * @param {Object} options\n * @param {String} [options.password] optional\n * @param {String} [options.captchaCode] optional\n * @param {Boolean} [options.sendCAevents] optional - Whether to submit Call Analyzer events or not. Default: false.\n * @public\n * @memberof Meeting\n * @returns {Promise}\n */\n public async fetchMeetingInfo(options: FetchMeetingInfoParams) {\n await this.prepForFetchMeetingInfo(options, 'fetchMeetingInfo');\n\n return this.fetchMeetingInfoInternal({\n destination: this.destination,\n destinationType: this.destinationType,\n ...options,\n });\n }\n\n /**\n * Checks if the supplied password/host key is correct. It returns a promise with information whether the\n * password and captcha code were correct or not.\n * @param {String} password - this can be either a password or a host key, can be undefined if only captcha was required\n * @param {String} captchaCode - can be undefined if captcha was not required by the server\n * @param {Boolean} sendCAevents - whether Call Analyzer events should be sent when fetching meeting information\n * @public\n * @memberof Meeting\n * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}\n */\n public verifyPassword(password: string, captchaCode: string, sendCAevents = false) {\n return this.fetchMeetingInfo({\n password,\n captchaCode,\n sendCAevents,\n })\n .then(() => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_SUCCESS);\n\n return {\n isPasswordValid: true,\n requiredCaptcha: null,\n failureReason: MEETING_INFO_FAILURE_REASON.NONE,\n };\n })\n .catch((error) => {\n if (error instanceof PasswordError || error instanceof CaptchaError) {\n return {\n isPasswordValid: this.passwordStatus === PASSWORD_STATUS.VERIFIED,\n requiredCaptcha: this.requiredCaptcha,\n failureReason: this.meetingInfoFailureReason,\n };\n }\n throw error;\n });\n }\n\n /**\n * Refreshes the captcha. As a result the meeting will have new captcha id, image and audio.\n * If the refresh operation fails, meeting remains with the old captcha properties.\n * @public\n * @memberof Meeting\n * @returns {Promise}\n */\n public refreshCaptcha() {\n if (!this.requiredCaptcha) {\n return Promise.reject(new Error('There is no captcha to refresh'));\n }\n\n // in order to get fully populated uris for captcha audio and image in response to refresh captcha request\n // we have to pass the wbxappapi hostname as the siteFullName parameter\n const {hostname} = new URL(this.requiredCaptcha.refreshURL);\n\n return (\n this.meetingRequest\n // @ts-ignore\n .refreshCaptcha({\n captchaRefreshUrl: `${this.requiredCaptcha.refreshURL}&siteFullName=${hostname}`,\n captchaId: this.requiredCaptcha.captchaId,\n })\n .then((response) => {\n this.requiredCaptcha.captchaId = response.body.captchaID;\n this.requiredCaptcha.verificationImageURL = response.body.verificationImageURL;\n this.requiredCaptcha.verificationAudioURL = response.body.verificationAudioURL;\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meeting:index#refreshCaptcha --> Error Unable to refresh captcha for ${this.destination} - ${error}`\n );\n throw error;\n })\n );\n }\n\n /**\n * Posts metrics event for this meeting. Allows the app to send Call Analyzer events.\n * @param {String} eventName - Call Analyzer event\n * @public\n * @memberof Meeting\n * @returns {Promise}\n */\n public postMetrics(eventName: ClientEvent['name']) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: eventName,\n options: {\n meetingId: this.id,\n },\n });\n }\n\n /**\n * Proxy function for all the listener set ups\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusInfoListeners() {\n // meeting update listeners\n this.setUpLocusInfoSelfListener();\n this.setUpLocusInfoMeetingListener();\n this.setUpLocusServicesListener();\n // members update listeners\n this.setUpLocusFullStateListener();\n this.setUpLocusUrlListener();\n this.setUpLocusHostListener();\n this.setUpLocusSelfListener();\n this.setUpLocusParticipantsListener();\n this.setupLocusControlsListener();\n this.setUpLocusMediaSharesListener();\n this.setUpLocusEmbeddedAppsListener();\n this.setUpLocusInfoMeetingInfoListener();\n this.setUpLocusInfoAssignHostListener();\n this.setUpLocusInfoMediaInactiveListener();\n this.setUpBreakoutsListener();\n this.setUpInterpretationListener();\n }\n\n /**\n * Set up the listeners for breakouts\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n setUpBreakoutsListener() {\n this.breakouts.on(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING, () => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_CLOSING\n );\n });\n\n this.breakouts.on(BREAKOUTS.EVENTS.MESSAGE, (messageEvent) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_MESSAGE,\n messageEvent\n );\n });\n\n this.breakouts.on(BREAKOUTS.EVENTS.MEMBERS_UPDATE, () => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE\n );\n });\n\n this.breakouts.on(BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN, () => {\n if (this.isJoined()) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_ASK_RETURN_TO_MAIN\n );\n }\n });\n\n this.breakouts.on(BREAKOUTS.EVENTS.LEAVE_BREAKOUT, () => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_LEAVE\n );\n });\n\n this.breakouts.on(BREAKOUTS.EVENTS.ASK_FOR_HELP, (helpEvent) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_ASK_FOR_HELP,\n helpEvent\n );\n });\n\n this.breakouts.on(BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE, () => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpBreakoutsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_PRE_ASSIGNMENTS_UPDATE\n );\n });\n }\n\n /**\n * Set up the listeners for interpretation\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpInterpretationListener() {\n // TODO: check if its getting used or not\n this.simultaneousInterpretation.on(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE, () => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpInterpretationListener',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_SUPPORT_LANGUAGES_UPDATE\n );\n });\n // TODO: check if its getting used or not\n this.simultaneousInterpretation.on(\n INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED,\n (payload) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpInterpretationListener',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_HANDOFF_REQUESTS_ARRIVED,\n payload\n );\n }\n );\n }\n\n /**\n * Set up the listeners for captions\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpVoiceaListeners() {\n // @ts-ignore\n this.webex.internal.voicea.listenToEvents();\n\n // @ts-ignore\n this.webex.internal.voicea.on(\n VOICEAEVENTS.VOICEA_ANNOUNCEMENT,\n this.voiceaListenerCallbacks[VOICEAEVENTS.VOICEA_ANNOUNCEMENT]\n );\n\n // @ts-ignore\n this.webex.internal.voicea.on(\n VOICEAEVENTS.CAPTIONS_TURNED_ON,\n this.voiceaListenerCallbacks[VOICEAEVENTS.CAPTIONS_TURNED_ON]\n );\n\n // @ts-ignore\n this.webex.internal.voicea.on(\n VOICEAEVENTS.EVA_COMMAND,\n this.voiceaListenerCallbacks[VOICEAEVENTS.EVA_COMMAND]\n );\n\n // @ts-ignore\n this.webex.internal.voicea.on(\n VOICEAEVENTS.NEW_CAPTION,\n this.voiceaListenerCallbacks[VOICEAEVENTS.NEW_CAPTION]\n );\n\n this.areVoiceaEventsSetup = true;\n }\n\n /**\n * Set up the locus info listener for meetings disconnected due to inactivity\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusInfoMediaInactiveListener() {\n // User gets kicked off the meeting due to inactivity or user did a refresh\n this.locusInfo.on(EVENTS.DISCONNECT_DUE_TO_INACTIVITY, (res) => {\n // https:// jira-eng-gpk2.cisco.com/jira/browse/SPARK-240520\n // TODO: send custom parameter explaining why the inactivity happened\n // refresh , no media or network got dsconnected or something else\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.DISCONNECT_DUE_TO_INACTIVITY, {\n correlation_id: this.correlationId,\n locus_id: this.locusId,\n });\n\n // Upload logs on media inactivity\n // Normally media should not be inactive\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoMediaInactiveListener',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n\n LoggerProxy.logger.error(\n `Meeting:index#setUpLocusInfoMediaInactiveListener --> Meeting disconnected due to inactivity: ${res.reason}`\n );\n\n // @ts-ignore - config coming from registerPlugin\n if (this.config.reconnection.autoRejoin) {\n this.reconnect();\n } else {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoMediaInactiveListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_LEFT,\n res.reason\n );\n }\n });\n }\n\n /**\n * Set up the locus info listener for assign host permissions on a meeting\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusInfoAssignHostListener() {\n this.locusInfo.on(EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST, (payload) => {\n const changed = this.inMeetingActions.set({\n canAssignHost: payload.canAssignHost,\n });\n\n if (changed) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoAssignHostListener',\n },\n EVENT_TRIGGERS.MEETING_ACTIONS_UPDATE,\n this.inMeetingActions.get()\n );\n }\n });\n }\n\n /**\n * Set up the internal locus info full state object listener\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusFullStateListener() {\n this.locusInfo.on(LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE, (payload) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusFullStateListener',\n },\n EVENT_TRIGGERS.MEETING_STATE_CHANGE,\n {\n payload,\n }\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE, (payload) => {\n this.members.locusFullStateTypeUpdate(payload);\n });\n }\n\n /**\n * sets the network status on meeting object\n * @param {NETWORK_STATUS} networkStatus\n * @private\n * @returns {undefined}\n * @memberof Meeting\n */\n private setNetworkStatus(networkStatus?: NETWORK_STATUS) {\n if (networkStatus === NETWORK_STATUS.DISCONNECTED) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setNetworkStatus',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED\n );\n } else if (\n networkStatus === NETWORK_STATUS.CONNECTED &&\n this.networkStatus === NETWORK_STATUS.DISCONNECTED\n ) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setNetworkStatus',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_CONNECTED\n );\n }\n\n this.networkStatus = networkStatus;\n }\n\n /**\n * Set up the locus info self listener\n * update self value for members and updates the member\n * notifies consumer with members:self:update {activeSelfId endedSelfId}\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusSelfListener() {\n this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_SELF, (payload) => {\n this.members.locusSelfUpdate(payload);\n this.pstnUpdate(payload);\n\n // If user moved to a JOINED state and there is a pending floor grant trigger it\n this.requestScreenShareFloorIfPending();\n });\n }\n\n /**\n * Notify any changes on the pstn devices\n * @param {Object} payload\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private pstnUpdate(payload: any) {\n if (this.locusInfo.self) {\n const dialInPstnDevice = payload.newSelf?.pstnDevices.find(\n (device) => device.url === this.dialInUrl\n );\n const dialOutPstnDevice = payload.newSelf?.pstnDevices.find(\n (device) => device.url === this.dialOutUrl\n );\n let changed = false;\n\n if (dialInPstnDevice) {\n const newStatus = dialInPstnDevice.dialingStatus ?? dialInPstnDevice.state;\n\n if (newStatus !== this.dialInDeviceStatus) {\n this.dialInDeviceStatus = newStatus;\n changed = true;\n }\n }\n\n if (dialOutPstnDevice) {\n const newStatus = dialOutPstnDevice.dialingStatus ?? dialOutPstnDevice.state;\n\n if (newStatus !== this.dialOutDeviceStatus) {\n this.dialOutDeviceStatus = newStatus;\n changed = true;\n }\n }\n\n if (changed) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_PHONE_AUDIO_UPDATE,\n {\n dialIn: {\n status: this.dialInDeviceStatus,\n attendeeId: dialInPstnDevice?.attendeeId,\n },\n dialOut: {\n status: this.dialOutDeviceStatus,\n attendeeId: dialOutPstnDevice?.attendeeId,\n reason: dialOutPstnDevice?.reason,\n },\n }\n );\n }\n }\n }\n\n /**\n * Set up the locus info host listener\n * update host value for members and updates the member\n * notifies consumer with members:host:update: {activeHostId, endedHostId}\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusHostListener() {\n this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_HOST, (payload) => {\n this.members.locusHostUpdate(payload);\n });\n }\n\n /**\n * Set up the locus info participants update listener\n * update members collection value for members\n * notifies consumer with members:update\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusParticipantsListener() {\n this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, (payload) => {\n this.members.locusParticipantsUpdate(payload);\n });\n }\n\n /**\n * Set up the locus info recording update listener\n * update recording value for the meeting\n * notifies consumer with:\n * meeting:recording:started\n * meeting:recording:stopped\n * meeting:recording:paused\n * meeting:recording:resumed\n *\n * Set up the locus info meeeting container listener\n * update meetingContainerUrl value for the meeting\n * notifies consumer with:\n * meeting:meetingContainer:update\n *\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setupLocusControlsListener() {\n this.locusInfo.on(\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n ({state, modifiedBy, lastModified}) => {\n let event;\n\n switch (state) {\n case RECORDING_STATE.RECORDING:\n event = EVENT_TRIGGERS.MEETING_STARTED_RECORDING;\n break;\n case RECORDING_STATE.IDLE:\n event = EVENT_TRIGGERS.MEETING_STOPPED_RECORDING;\n break;\n case RECORDING_STATE.PAUSED:\n event = EVENT_TRIGGERS.MEETING_PAUSED_RECORDING;\n break;\n case RECORDING_STATE.RESUMED:\n event = EVENT_TRIGGERS.MEETING_RESUMED_RECORDING;\n break;\n default:\n event = null;\n break;\n }\n\n // `RESUMED` state should be converted to `RECORDING` after triggering the event\n this.recording = {\n state: state === RECORDING_STATE.RESUMED ? RECORDING_STATE.RECORDING : state,\n modifiedBy,\n lastModified,\n };\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n event,\n this.recording\n );\n }\n );\n\n this.locusInfo.on(\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n ({meetingContainerUrl}) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n EVENT_TRIGGERS.MEETING_MEETING_CONTAINER_UPDATE,\n {meetingContainerUrl}\n );\n }\n );\n\n this.locusInfo.on(\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n ({caption, transcribing}) => {\n // user need to be joined to start the llm and receive transcription\n if (this.isJoined()) {\n // @ts-ignore - config coming from registerPlugin\n if (transcribing && !this.transcription) {\n this.startTranscription();\n } else if (!transcribing && this.transcription) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION,\n {caption, transcribing}\n );\n }\n }\n }\n );\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, ({enable}) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n EVENT_TRIGGERS.MEETING_MANUAL_CAPTION_UPDATED,\n {enable}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, ({breakout}) => {\n this.breakouts.updateBreakout(breakout);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE\n );\n });\n\n this.locusInfo.on(\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n ({interpretation}) => {\n this.simultaneousInterpretation.updateInterpretation(interpretation);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n }\n );\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, ({entryExitTone}) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupLocusControlsListener',\n },\n EVENT_TRIGGERS.MEETING_ENTRY_EXIT_TONE_UPDATE,\n {entryExitTone}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED,\n {state}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_SHARE_CONTROL_UPDATED,\n {state}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED,\n {state}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_REACTIONS_UPDATED,\n {state}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED,\n {state}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_RAISE_HAND_UPDATED,\n {state}\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, ({state}) => {\n Trigger.trigger(\n this,\n {file: 'meeting/index', function: 'setupLocusControlsListener'},\n EVENT_TRIGGERS.MEETING_CONTROLS_VIDEO_UPDATED,\n {state}\n );\n });\n }\n\n /**\n * Trigger annotation info update event\n @returns {undefined}\n @param {object} contentShare\n @param {object} previousContentShare\n */\n private triggerAnnotationInfoEvent(contentShare, previousContentShare) {\n if (\n contentShare?.annotation &&\n !isEqual(contentShare?.annotation, previousContentShare?.annotation)\n ) {\n Trigger.trigger(\n // @ts-ignore\n this.webex.meetings,\n {\n file: 'meeting/index',\n function: 'triggerAnnotationInfoEvent',\n },\n EVENT_TRIGGERS.MEETING_UPDATE_ANNOTATION_INFO,\n {\n annotationInfo: contentShare?.annotation,\n meetingId: this.id,\n resourceType: contentShare?.resourceType,\n }\n );\n }\n }\n\n /**\n * Set up the locus info media shares listener\n * update content and whiteboard sharing id value for members, and updates the member\n * notifies consumer with members:content:update {activeContentSharingId, endedContentSharingId}\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusMediaSharesListener() {\n // Will get triggered on local and remote share\n this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, async (payload) => {\n const {content: contentShare, whiteboard: whiteboardShare} = payload.current;\n const previousContentShare = payload.previous?.content;\n const previousWhiteboardShare = payload.previous?.whiteboard;\n\n this.triggerAnnotationInfoEvent(contentShare, previousContentShare);\n\n if (\n contentShare.beneficiaryId === previousContentShare?.beneficiaryId &&\n contentShare.disposition === previousContentShare?.disposition &&\n contentShare.deviceUrlSharing === previousContentShare.deviceUrlSharing &&\n whiteboardShare.beneficiaryId === previousWhiteboardShare?.beneficiaryId &&\n whiteboardShare.disposition === previousWhiteboardShare?.disposition &&\n whiteboardShare.resourceUrl === previousWhiteboardShare?.resourceUrl &&\n contentShare.resourceType === previousContentShare?.resourceType\n ) {\n // nothing changed, so ignore\n // (this happens when we steal presentation from remote)\n return;\n }\n\n let newShareStatus = this.shareStatus;\n\n // REMOTE - check if remote started sharing\n if (\n this.selfId !== contentShare.beneficiaryId &&\n contentShare.disposition === FLOOR_ACTION.GRANTED\n ) {\n // CONTENT - sharing content remote\n newShareStatus = SHARE_STATUS.REMOTE_SHARE_ACTIVE;\n }\n // LOCAL - check if we started sharing content\n else if (\n this.selfId === contentShare.beneficiaryId &&\n contentShare.disposition === FLOOR_ACTION.GRANTED &&\n contentShare.deviceUrlSharing === this.deviceUrl\n ) {\n // CONTENT - sharing content local\n newShareStatus = SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n }\n // SAME USER REMOTE - check if same user started sharing content from another client\n else if (\n this.selfId === contentShare.beneficiaryId &&\n contentShare.disposition === FLOOR_ACTION.GRANTED &&\n contentShare.deviceUrlSharing !== this.deviceUrl\n ) {\n // CONTENT - same user sharing content remote\n newShareStatus = SHARE_STATUS.REMOTE_SHARE_ACTIVE;\n }\n // If we did not hit the cases above, no one is sharng content, so we check if we are sharing whiteboard\n // There is no concept of local/remote share for whiteboard\n // It does not matter who requested to share the whiteboard, everyone gets the same view\n else if (whiteboardShare.disposition === FLOOR_ACTION.GRANTED) {\n // WHITEBOARD - sharing whiteboard\n newShareStatus = SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;\n }\n // or if content share is either released or null and whiteboard share is either released or null, no one is sharing\n else if (\n ((previousContentShare && contentShare.disposition === FLOOR_ACTION.RELEASED) ||\n contentShare.disposition === null) &&\n ((previousWhiteboardShare && whiteboardShare.disposition === FLOOR_ACTION.RELEASED) ||\n whiteboardShare.disposition === null)\n ) {\n newShareStatus = SHARE_STATUS.NO_SHARE;\n }\n\n if (newShareStatus !== this.shareStatus) {\n const oldShareStatus = this.shareStatus;\n\n // update our state before we send out any notifications\n this.shareStatus = newShareStatus;\n\n // send out \"stop\" notifications for the old state\n switch (oldShareStatus) {\n case SHARE_STATUS.REMOTE_SHARE_ACTIVE:\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'remoteShare',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_REMOTE\n );\n break;\n\n case SHARE_STATUS.LOCAL_SHARE_ACTIVE:\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'localShare',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.SELF_STOPPED,\n }\n );\n break;\n\n case SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE:\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'stopWhiteboardShare',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD\n );\n break;\n\n case SHARE_STATUS.NO_SHARE:\n // nothing to do\n break;\n\n default:\n break;\n }\n\n // send \"start\" notifications for the new state\n switch (newShareStatus) {\n case SHARE_STATUS.REMOTE_SHARE_ACTIVE: {\n const sendStartedSharingRemote = () => {\n this.remoteShareInstanceId = contentShare.shareInstanceId;\n\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'remoteShare',\n },\n EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE,\n {\n memberId: contentShare.beneficiaryId,\n url: contentShare.url,\n shareInstanceId: this.remoteShareInstanceId,\n annotationInfo: contentShare.annotation,\n resourceType: contentShare.resourceType,\n }\n );\n };\n\n try {\n // if a remote participant is stealing the presentation from us\n if (\n this.mediaProperties.mediaDirection?.sendShare &&\n oldShareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE\n ) {\n await this.unpublishStreams([\n this.mediaProperties.shareVideoStream,\n this.mediaProperties.shareAudioStream,\n ]);\n }\n } finally {\n sendStartedSharingRemote();\n }\n break;\n }\n\n case SHARE_STATUS.LOCAL_SHARE_ACTIVE:\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'share',\n },\n EVENT_TRIGGERS.MEETING_STARTED_SHARING_LOCAL\n );\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.floor-granted.local',\n payload: {\n mediaType: 'share',\n shareInstanceId: this.localShareInstanceId,\n },\n options: {meetingId: this.id},\n });\n break;\n\n case SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE:\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'startWhiteboardShare',\n },\n EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD,\n {\n resourceUrl: whiteboardShare.resourceUrl,\n memberId: whiteboardShare.beneficiaryId,\n }\n );\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.floor-granted.local',\n payload: {\n mediaType: 'whiteboard',\n },\n options: {\n meetingId: this.id,\n },\n });\n break;\n\n case SHARE_STATUS.NO_SHARE:\n // nothing to do\n break;\n\n default:\n break;\n }\n\n this.members.locusMediaSharesUpdate(payload);\n } else if (newShareStatus === SHARE_STATUS.REMOTE_SHARE_ACTIVE) {\n // if we got here, then some remote participant has stolen\n // the presentation from another remote participant\n this.remoteShareInstanceId = contentShare.shareInstanceId;\n\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'remoteShare',\n },\n EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE,\n {\n memberId: contentShare.beneficiaryId,\n url: contentShare.url,\n shareInstanceId: this.remoteShareInstanceId,\n annotationInfo: contentShare.annotation,\n resourceType: contentShare.resourceType,\n }\n );\n this.members.locusMediaSharesUpdate(payload);\n } else if (newShareStatus === SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) {\n // if we got here, then some remote participant has stolen\n // the presentation from another remote participant\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'startWhiteboardShare',\n },\n EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD,\n {\n resourceUrl: whiteboardShare.resourceUrl,\n memberId: whiteboardShare.beneficiaryId,\n }\n );\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.floor-granted.local',\n payload: {\n mediaType: 'whiteboard',\n },\n options: {\n meetingId: this.id,\n },\n });\n this.members.locusMediaSharesUpdate(payload);\n }\n });\n }\n\n /**\n * Set up the locus info url listener\n * update locus_url value for members\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusUrlListener() {\n this.locusInfo.on(EVENTS.LOCUS_INFO_UPDATE_URL, (payload) => {\n this.members.locusUrlUpdate(payload);\n this.breakouts.locusUrlUpdate(payload);\n this.simultaneousInterpretation.locusUrlUpdate(payload);\n this.annotation.locusUrlUpdate(payload);\n this.locusUrl = payload;\n this.locusId = this.locusUrl?.split('/').pop();\n this.recordingController.setLocusUrl(this.locusUrl);\n this.controlsOptionsManager.setLocusUrl(this.locusUrl);\n this.webinar.locusUrlUpdate(payload);\n\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusSelfListener',\n },\n EVENT_TRIGGERS.MEETING_LOCUS_URL_UPDATE,\n {locusUrl: payload}\n );\n });\n }\n\n /**\n * Set up the locus info service link listener\n * update the locusInfo for recording controller\n * does not currently re-emit the event as it's internal only\n * payload is unused\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusServicesListener() {\n this.locusInfo.on(LOCUSINFO.EVENTS.LINKS_SERVICES, (payload) => {\n this.recordingController.setServiceUrl(payload?.services?.record?.url);\n this.recordingController.setSessionId(this.locusInfo?.fullState?.sessionId);\n this.breakouts.breakoutServiceUrlUpdate(payload?.services?.breakout?.url);\n this.annotation.approvalUrlUpdate(payload?.services?.approval?.url);\n this.simultaneousInterpretation.approvalUrlUpdate(payload?.services?.approval?.url);\n this.webinar.webcastUrlUpdate(payload?.services?.webcast?.url);\n this.webinar.webinarAttendeesSearchingUrlUpdate(\n payload?.services?.webinarAttendeesSearching?.url\n );\n });\n }\n\n /**\n * Set up the locus info meeting info listener\n * @returns {undefined}\n * @private\n * @memberof meeting\n */\n private setUpLocusInfoMeetingInfoListener() {\n this.locusInfo.on(LOCUSINFO.EVENTS.MEETING_LOCKED, (payload) => {\n if (payload) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoMeetingInfoListener',\n },\n EVENT_TRIGGERS.MEETING_LOCKED,\n {\n payload,\n }\n );\n }\n });\n this.locusInfo.on(LOCUSINFO.EVENTS.MEETING_UNLOCKED, (payload) => {\n if (payload) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoMeetingInfoListener',\n },\n EVENT_TRIGGERS.MEETING_UNLOCKED,\n {\n payload,\n }\n );\n }\n });\n this.locusInfo.on(LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, ({isInitializing}) => {\n this.updateMeetingActions();\n this.recordingController.setDisplayHints(this.userDisplayHints);\n this.recordingController.setUserPolicy(this.selfUserPolicies);\n this.controlsOptionsManager.setDisplayHints(this.userDisplayHints);\n this.handleDataChannelUrlChange(this.datachannelUrl);\n\n if (!isInitializing) {\n // send updated trigger only if locus is not initializing the meeting\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'setUpLocusInfoMeetingInfoListener',\n },\n EVENT_TRIGGERS.MEETING_INFO_UPDATED\n );\n }\n });\n }\n\n /**\n * Handles a data channel URL change\n * @param {String} datachannelUrl\n * @returns {void}\n */\n handleDataChannelUrlChange(datachannelUrl) {\n // @ts-ignore - config coming from registerPlugin\n if (datachannelUrl && this.config.enableAutomaticLLM) {\n this.updateLLMConnection();\n }\n }\n\n /**\n * Set up the locus info embedded apps listener\n * @returns {undefined}\n * @private\n * @memberof meeting\n */\n private setUpLocusEmbeddedAppsListener() {\n this.locusInfo.on(LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED, (embeddedApps) => {\n if (embeddedApps) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusEmbeddedAppsListener',\n },\n EVENT_TRIGGERS.MEETING_EMBEDDED_APPS_UPDATE,\n embeddedApps\n );\n }\n });\n }\n\n /**\n * Internal function to listen to the self object changes\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusInfoSelfListener() {\n this.locusInfo.on(LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, (payload) => {\n if (this.audio) {\n this.audio.handleServerLocalUnmuteRequired(this);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS,\n {\n payload,\n }\n );\n }\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, (payload) => {\n if (payload) {\n if (this.video) {\n payload.muted = payload.muted ?? this.video.isRemotelyMuted();\n payload.unmuteAllowed = payload.unmuteAllowed ?? this.video.isUnmuteAllowed();\n this.video.handleServerRemoteMuteUpdate(this, payload.muted, payload.unmuteAllowed);\n }\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n payload.muted\n ? EVENT_TRIGGERS.MEETING_SELF_VIDEO_MUTED_BY_OTHERS\n : EVENT_TRIGGERS.MEETING_SELF_VIDEO_UNMUTED_BY_OTHERS,\n {\n payload,\n }\n );\n }\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED, (payload) => {\n if (payload) {\n if (this.audio) {\n this.audio.handleServerRemoteMuteUpdate(this, payload.muted, payload.unmuteAllowed);\n }\n // with \"mute on entry\" server will send us remote mute even if we don't have media configured,\n // so if being muted by others, always send the notification,\n // but if being unmuted, only send it if we are also locally unmuted\n if (payload.muted || !this.audio?.isMuted()) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n payload.muted\n ? EVENT_TRIGGERS.MEETING_SELF_MUTED_BY_OTHERS\n : EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS,\n {\n payload,\n }\n );\n }\n }\n });\n this.locusInfo.on(LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED, (payload) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_REQUESTED_TO_UNMUTE,\n {\n payload,\n }\n );\n });\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST, (payload) => {\n if (payload) {\n this.startKeepAlive();\n\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_LOBBY_WAITING,\n {\n payload,\n }\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.lobby.entered',\n options: {meetingId: this.id},\n });\n }\n this.updateLLMConnection();\n });\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, async (payload) => {\n this.stopKeepAlive();\n\n if (payload) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED,\n {\n payload,\n }\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.lobby.exited',\n options: {meetingId: this.id},\n });\n }\n this.updateLLMConnection();\n });\n\n // @ts-ignore - check if MEDIA_INACTIVITY exists\n this.locusInfo.on(LOCUSINFO.EVENTS.MEDIA_INACTIVITY, () => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MEDIA_INACTIVE, {\n correlation_id: this.correlationId,\n locus_id: this.locusId,\n });\n LoggerProxy.logger.info(\n 'Meeting:index#setUpLocusInfoSelfListener --> MEDIA_INACTIVITY received, reconnecting...'\n );\n this.reconnect();\n });\n\n // There is two stats for mute one is the actual media being sent or received\n // The second on is if the audio is muted, we need to tell the statsAnalyzer when\n // the audio is muted or the user is not willing to send media\n this.locusInfo.on(LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, (status) => {\n if (this.statsAnalyzer) {\n this.statsAnalyzer.updateMediaStatus({\n actual: status,\n expected: {\n // We need to check what should be the actual direction of media\n sendAudio: this.mediaProperties.mediaDirection?.sendAudio && !this.audio?.isMuted(),\n sendVideo: this.mediaProperties.mediaDirection?.sendVideo && !this.video?.isMuted(),\n sendShare: this.mediaProperties.mediaDirection?.sendShare,\n receiveAudio: this.mediaProperties.mediaDirection?.receiveAudio,\n receiveVideo: this.mediaProperties.mediaDirection?.receiveVideo,\n receiveShare: this.mediaProperties.mediaDirection?.receiveShare,\n },\n });\n }\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE, (payload) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST,\n {\n payload,\n }\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, (payload) => {\n this.breakouts.updateBreakoutSessions(payload);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, (payload) => {\n const targetChanged = this.simultaneousInterpretation.updateSelfInterpretation(payload);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE\n );\n if (targetChanged && this.mediaProperties.audioStream) {\n this.setSendNamedMediaGroup(MediaType.AudioMain);\n }\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, (payload) => {\n const isModeratorOrCohost =\n payload.newRoles?.includes(SELF_ROLES.MODERATOR) ||\n payload.newRoles?.includes(SELF_ROLES.COHOST);\n this.breakouts.updateCanManageBreakouts(isModeratorOrCohost);\n this.simultaneousInterpretation.updateCanManageInterpreters(\n payload.newRoles?.includes(SELF_ROLES.MODERATOR)\n );\n this.webinar.updateCanManageWebcast(payload.newRoles?.includes(SELF_ROLES.MODERATOR));\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_ROLES_CHANGED,\n {\n payload,\n }\n );\n });\n\n this.locusInfo.on(LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE, (payload) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoSelfListener',\n },\n EVENT_TRIGGERS.MEETING_SELF_IS_SHARING_BLOCKED,\n {\n payload,\n }\n );\n });\n }\n\n /**\n * Add LocusInfo nested object listeners (from child to parent)\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private setUpLocusInfoMeetingListener() {\n this.locusInfo.on(EVENTS.REMOTE_RESPONSE, (payload) => {\n this.meetingFiniteStateMachine.remote(payload);\n\n if (payload.remoteDeclined) {\n this.leave({reason: payload.reason})\n .then(() => {\n LoggerProxy.logger.info(\n 'Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Attempting to leave meeting.'\n );\n })\n .catch((error) => {\n // @ts-ignore\n LoggerProxy.logger.error(\n `Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ${this}, error: ${error}`\n );\n });\n }\n });\n this.locusInfo.on(EVENTS.DESTROY_MEETING, async (payload) => {\n // if self state is NOT left\n\n // TODO: Handle sharing and wireless sharing when meeting end\n if (this.wirelessShare) {\n if (this.mediaProperties.shareVideoStream) {\n await this.setLocalShareVideoStream(undefined);\n }\n if (this.mediaProperties.shareAudioStream) {\n await this.setLocalShareAudioStream(undefined);\n }\n }\n // when multiple WEB deviceType join with same user\n // and some of the devices are joined and some are left\n // when your own device is still connected you want to leave and destroy\n // else you want to just destroy\n // this looks odd because when it leaves it should destroy, but we get a\n // leave response and we should destroy it on the next event loop\n // the leave response gets parsed and we decide if we want to destroy the meeting\n // the first time we just leave it, the second time it comes it destroys it from the collection\n if (payload.shouldLeave) {\n // TODO: We should do cleaning of meeting object if the shouldLeave: false because there might be meeting object which we are not cleaning\n\n try {\n await this.leave({reason: payload.reason});\n\n LoggerProxy.logger.warn(\n 'Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. The meeting has been left, but has not been destroyed, you should see a later event for leave.'\n );\n } catch (error) {\n // @ts-ignore\n LoggerProxy.logger.error(\n `Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ${this}, error: ${error}`\n );\n }\n } else {\n LoggerProxy.logger.info(\n 'Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON',\n payload.reason\n );\n\n MeetingUtil.cleanUp(this);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setUpLocusInfoMeetingListener',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: payload.reason,\n meetingId: this.id,\n }\n );\n }\n });\n }\n\n /**\n * Set meeting values rather than events\n * @param {Object} object\n * @returns {undefined}\n * @private\n * @memberof Meeting\n * // TODO: is this function necessary?\n */\n private updateMeetingObject(object: object) {\n // Validate if these are valid meeting object property\n // TODO: add a check to make sure the value passed in the constructor\n // is not changed by any delta event\n if (object && Object.keys(object).length) {\n Object.keys(object).forEach((key) => {\n this[key] = object[key];\n });\n }\n }\n\n /**\n * Invite a guest to the call that isn't normally part of this call\n * @param {Object} invitee\n * @param {String} invitee.emailAddress\n * @param {String} invitee.email\n * @param {String} invitee.phoneNumber\n * @param {Boolean} [alertIfActive]\n * @returns {Promise} see #members.addMember\n * @public\n * @memberof Meeting\n */\n public invite(\n invitee: {\n emailAddress: string;\n email: string;\n phoneNumber: string;\n },\n alertIfActive = true\n ) {\n return this.members.addMember(invitee, alertIfActive);\n }\n\n /**\n * Cancel an outgoing phone call invitation made during a meeting\n * @param {Object} invitee\n * @param {String} invitee.phoneNumber\n * @returns {Promise} see #members.cancelPhoneInvite\n * @public\n * @memberof Meeting\n */\n public cancelPhoneInvite(invitee: {phoneNumber: string}) {\n return this.members.cancelPhoneInvite(invitee);\n }\n\n /**\n * Admit the guest(s) to the call once they are waiting.\n * If the host/cohost is in a breakout session, the locus url\n * of the session must be provided as the authorizingLocusUrl.\n * Regardless of host/cohost location, the locus Id (lid) in\n * the path should be the locus Id of the main, which means the\n * locus url of the api call must be from the main session.\n * If these loucs urls are not provided, the function will do the check.\n * @param {Array} memberIds\n * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}\n * @returns {Promise} see #members.admitMembers\n * @public\n * @memberof Meeting\n */\n public admit(\n memberIds: Array,\n sessionLocusUrls?: {authorizingLocusUrl: string; mainLocusUrl: string}\n ) {\n let locusUrls = sessionLocusUrls;\n if (!locusUrls) {\n const {locusUrl, mainLocusUrl} = this.breakouts;\n if (locusUrl && mainLocusUrl) {\n locusUrls = {authorizingLocusUrl: locusUrl, mainLocusUrl};\n }\n }\n\n return this.members.admitMembers(memberIds, locusUrls);\n }\n\n /**\n * Remove the member from the meeting, boot them\n * @param {String} memberId\n * @returns {Promise} see #members.removeMember\n * @public\n * @memberof Meeting\n */\n public remove(memberId: string) {\n return this.members.removeMember(memberId);\n }\n\n /**\n * Mute another member from the meeting\n * @param {String} memberId\n * @param {Boolean} mute\n * @returns {Promise} see #members.muteMember\n * @public\n * @memberof Meeting\n */\n public mute(memberId: string, mute = true) {\n return this.members.muteMember(memberId, mute);\n }\n\n /**\n * Transfer the moderator role to another eligible member\n * @param {String} memberId\n * @param {Boolean} moderator\n * @returns {Promise} see #members.transferHostToMember\n * @public\n * @memberof Meeting\n */\n public transfer(memberId: string, moderator = true) {\n return this.members.transferHostToMember(memberId, moderator);\n }\n\n /**\n * Reference to the Members object\n * @returns {Members}\n * @public\n * @memberof Meeting\n */\n public getMembers() {\n return this.members;\n }\n\n /**\n * Sets the meeting info on the class instance\n * @param {Object} meetingInfo\n * @param {String} meetingInfo.conversationUrl\n * @param {String} meetingInfo.locusUrl\n * @param {String} meetingInfo.sipUri\n * @param {String} [meetingInfo.sipUrl]\n * @param {String} [meetingInfo.sipMeetingUri]\n * @param {String} [meetingInfo.meetingNumber]\n * @param {String} [meetingInfo.meetingJoinUrl]\n * @param {String} [meetingInfo.hostId]\n * @param {String} [meetingInfo.permissionToken]\n * @param {String} [meetingInfo.channel]\n * @param {Object} meetingInfo.owner\n * @param {Object | String} destination locus object with meeting data or destination string (sip url, meeting link, etc)\n * @param {Object | String} errors Meeting info request error\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n parseMeetingInfo(\n meetingInfo: {\n conversationUrl: string;\n locusUrl: string;\n sipUri: string;\n owner: object;\n sipUrl?: string;\n sipMeetingUri?: string;\n meetingNumber?: string;\n meetingJoinUrl?: string;\n hostId?: string;\n permissionToken?: string;\n channel?: string;\n },\n destination: object | string | null = null,\n errors: any = undefined\n ) {\n // We try to use as much info from Locus meeting object, stored in destination\n\n let locusMeetingObject;\n\n if (destination) {\n locusMeetingObject = typeof destination === 'object' ? destination : undefined;\n }\n\n // MeetingInfo will be undefined for 1:1 calls\n if (locusMeetingObject || (meetingInfo && !(errors?.length > 0))) {\n this.conversationUrl =\n locusMeetingObject?.conversationUrl || meetingInfo?.conversationUrl || this.conversationUrl;\n this.locusUrl = locusMeetingObject?.url || meetingInfo?.locusUrl || this.locusUrl;\n // @ts-ignore - config coming from registerPlugin\n this.setSipUri(\n // @ts-ignore\n this.config.experimental.enableUnifiedMeetings\n ? locusMeetingObject?.info.sipUri || meetingInfo?.sipUrl\n : locusMeetingObject?.info.sipUri || meetingInfo?.sipMeetingUri || this.sipUri\n );\n // @ts-ignore - config coming from registerPlugin\n if (this.config.experimental.enableUnifiedMeetings) {\n this.meetingNumber = locusMeetingObject?.info.webExMeetingId || meetingInfo?.meetingNumber;\n this.meetingJoinUrl = meetingInfo?.meetingJoinUrl;\n }\n this.owner =\n locusMeetingObject?.info.owner || meetingInfo?.owner || meetingInfo?.hostId || this.owner;\n this.permissionToken = meetingInfo?.permissionToken;\n if (this.permissionToken) {\n this.setPermissionTokenPayload(meetingInfo?.permissionToken);\n this.setSelfUserPolicies();\n }\n // Need to populate environment when sending CA event\n this.environment = locusMeetingObject?.info.channel || meetingInfo?.channel;\n }\n MeetingUtil.parseInterpretationInfo(this, meetingInfo);\n }\n\n /**\n * Indicates whether policy can be applied\n * @returns {boolean}\n */\n private arePolicyRestrictionsSupported() {\n // If we don't have policies we can't support policies\n if (!this.selfUserPolicies) {\n return false;\n }\n\n // 1-2-1 calls and SIP dialling will have no meeting info\n // so cannot support policy information\n if (isEmpty(this.meetingInfo)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Updates the meeting actions (display hints), depends on locus display hints, user policy and app api info\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n private updateMeetingActions() {\n let changed = false;\n changed = this.inMeetingActions.set({\n canUseVoip:\n (this.meetingInfo?.supportVoIP === true &&\n ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_VOIP],\n policies: this.selfUserPolicies,\n })) ||\n !this.arePolicyRestrictionsSupported(),\n canDoVideo:\n (ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_VIDEO],\n policies: this.selfUserPolicies,\n }) &&\n !!this.meetingInfo?.video) ||\n !this.arePolicyRestrictionsSupported(),\n supportHDV:\n (ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_HDV],\n policies: this.selfUserPolicies,\n }) &&\n this.meetingInfo?.video?.supportHDV) ||\n !this.arePolicyRestrictionsSupported(),\n enforceVirtualBackground:\n ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.ENFORCE_VIRTUAL_BACKGROUND],\n policies: this.selfUserPolicies,\n }) && this.arePolicyRestrictionsSupported(),\n supportHQV:\n (ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_HQV],\n policies: this.selfUserPolicies,\n }) &&\n this.meetingInfo?.video?.supportHQV) ||\n !this.arePolicyRestrictionsSupported(),\n });\n if (this.userDisplayHints !== undefined) {\n changed =\n this.inMeetingActions.set({\n canInviteNewParticipants: MeetingUtil.canInviteNewParticipants(this.userDisplayHints),\n canAdmitParticipant: MeetingUtil.canAdmitParticipant(this.userDisplayHints),\n canLock: MeetingUtil.canUserLock(this.userDisplayHints),\n canUnlock: MeetingUtil.canUserUnlock(this.userDisplayHints),\n canShareWhiteBoard: MeetingUtil.canShareWhiteBoard(this.userDisplayHints),\n canSetDisallowUnmute: ControlsOptionsUtil.canSetDisallowUnmute(this.userDisplayHints),\n canUnsetDisallowUnmute: ControlsOptionsUtil.canUnsetDisallowUnmute(this.userDisplayHints),\n canSetMuteOnEntry: ControlsOptionsUtil.canSetMuteOnEntry(this.userDisplayHints),\n canUnsetMuteOnEntry: ControlsOptionsUtil.canUnsetMuteOnEntry(this.userDisplayHints),\n canSetMuted: ControlsOptionsUtil.canSetMuted(this.userDisplayHints),\n canUnsetMuted: ControlsOptionsUtil.canUnsetMuted(this.userDisplayHints),\n canStartRecording: RecordingUtil.canUserStart(\n this.userDisplayHints,\n this.selfUserPolicies\n ),\n canStopRecording: RecordingUtil.canUserStop(this.userDisplayHints, this.selfUserPolicies),\n canPauseRecording: RecordingUtil.canUserPause(\n this.userDisplayHints,\n this.selfUserPolicies\n ),\n canResumeRecording: RecordingUtil.canUserResume(\n this.userDisplayHints,\n this.selfUserPolicies\n ),\n canRaiseHand: MeetingUtil.canUserRaiseHand(this.userDisplayHints),\n canLowerAllHands: MeetingUtil.canUserLowerAllHands(this.userDisplayHints),\n canLowerSomeoneElsesHand: MeetingUtil.canUserLowerSomeoneElsesHand(this.userDisplayHints),\n bothLeaveAndEndMeetingAvailable: MeetingUtil.bothLeaveAndEndMeetingAvailable(\n this.userDisplayHints\n ),\n canEnableClosedCaption: MeetingUtil.canEnableClosedCaption(this.userDisplayHints),\n canStartTranscribing: MeetingUtil.canStartTranscribing(this.userDisplayHints),\n canStopTranscribing: MeetingUtil.canStopTranscribing(this.userDisplayHints),\n isClosedCaptionActive: MeetingUtil.isClosedCaptionActive(this.userDisplayHints),\n canStartManualCaption: MeetingUtil.canStartManualCaption(this.userDisplayHints),\n canStopManualCaption: MeetingUtil.canStopManualCaption(this.userDisplayHints),\n isManualCaptionActive: MeetingUtil.isManualCaptionActive(this.userDisplayHints),\n isSaveTranscriptsEnabled: MeetingUtil.isSaveTranscriptsEnabled(this.userDisplayHints),\n isWebexAssistantActive: MeetingUtil.isWebexAssistantActive(this.userDisplayHints),\n canViewCaptionPanel: MeetingUtil.canViewCaptionPanel(this.userDisplayHints),\n isRealTimeTranslationEnabled: MeetingUtil.isRealTimeTranslationEnabled(\n this.userDisplayHints\n ),\n canSelectSpokenLanguages: MeetingUtil.canSelectSpokenLanguages(this.userDisplayHints),\n waitingForOthersToJoin: MeetingUtil.waitingForOthersToJoin(this.userDisplayHints),\n canSendReactions: MeetingUtil.canSendReactions(\n this.inMeetingActions.canSendReactions,\n this.userDisplayHints\n ),\n canManageBreakout: MeetingUtil.canManageBreakout(this.userDisplayHints),\n canBroadcastMessageToBreakout: MeetingUtil.canBroadcastMessageToBreakout(\n this.userDisplayHints,\n this.selfUserPolicies\n ),\n canAdmitLobbyToBreakout: MeetingUtil.canAdmitLobbyToBreakout(this.userDisplayHints),\n isBreakoutPreassignmentsEnabled: MeetingUtil.isBreakoutPreassignmentsEnabled(\n this.userDisplayHints\n ),\n canUserAskForHelp: MeetingUtil.canUserAskForHelp(this.userDisplayHints),\n canUserRenameSelfAndObserved: MeetingUtil.canUserRenameSelfAndObserved(\n this.userDisplayHints\n ),\n canUserRenameOthers: MeetingUtil.canUserRenameOthers(this.userDisplayHints),\n canMuteAll: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.MUTE_ALL],\n displayHints: this.userDisplayHints,\n }),\n canUnmuteAll: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.UNMUTE_ALL],\n displayHints: this.userDisplayHints,\n }),\n canEnableHardMute: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_HARD_MUTE],\n displayHints: this.userDisplayHints,\n }),\n canDisableHardMute: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_HARD_MUTE],\n displayHints: this.userDisplayHints,\n }),\n canEnableMuteOnEntry: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY],\n displayHints: this.userDisplayHints,\n }),\n canDisableMuteOnEntry: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY],\n displayHints: this.userDisplayHints,\n }),\n canEnableReactions: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_REACTIONS],\n displayHints: this.userDisplayHints,\n }),\n canDisableReactions: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_REACTIONS],\n displayHints: this.userDisplayHints,\n }),\n canEnableReactionDisplayNames: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME],\n displayHints: this.userDisplayHints,\n }),\n canDisableReactionDisplayNames: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME],\n displayHints: this.userDisplayHints,\n }),\n canUpdateShareControl: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.SHARE_CONTROL],\n displayHints: this.userDisplayHints,\n }),\n canEnableViewTheParticipantsList: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST],\n displayHints: this.userDisplayHints,\n }),\n canDisableViewTheParticipantsList: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST],\n displayHints: this.userDisplayHints,\n }),\n canEnableRaiseHand: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_RAISE_HAND],\n displayHints: this.userDisplayHints,\n }),\n canDisableRaiseHand: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_RAISE_HAND],\n displayHints: this.userDisplayHints,\n }),\n canEnableVideo: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.ENABLE_VIDEO],\n displayHints: this.userDisplayHints,\n }),\n canDisableVideo: ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.DISABLE_VIDEO],\n displayHints: this.userDisplayHints,\n }),\n canShareFile:\n (ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.SHARE_FILE],\n displayHints: this.userDisplayHints,\n }) &&\n ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_FILE_SHARE],\n policies: this.selfUserPolicies,\n })) ||\n !this.arePolicyRestrictionsSupported,\n canTransferFile: ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_FILE_TRANSFER],\n policies: this.selfUserPolicies,\n }),\n canChat: ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_CHAT],\n policies: this.selfUserPolicies,\n }),\n canShareApplication:\n (ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.SHARE_APPLICATION],\n displayHints: this.userDisplayHints,\n }) &&\n ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_APP_SHARE],\n policies: this.selfUserPolicies,\n })) ||\n !this.arePolicyRestrictionsSupported(),\n canShareCamera:\n ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.SHARE_CAMERA],\n displayHints: this.userDisplayHints,\n }) &&\n ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_CAMERA_SHARE],\n policies: this.selfUserPolicies,\n }),\n canShareDesktop:\n (ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.SHARE_DESKTOP],\n displayHints: this.userDisplayHints,\n }) &&\n ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_DESKTOP_SHARE],\n policies: this.selfUserPolicies,\n })) ||\n !this.arePolicyRestrictionsSupported(),\n canShareContent:\n ControlsOptionsUtil.hasHints({\n requiredHints: [DISPLAY_HINTS.SHARE_CONTENT],\n displayHints: this.userDisplayHints,\n }) || !this.arePolicyRestrictionsSupported(),\n canAnnotate: ControlsOptionsUtil.hasPolicies({\n requiredPolicies: [SELF_POLICY.SUPPORT_ANNOTATION],\n policies: this.selfUserPolicies,\n }),\n }) || changed;\n }\n if (changed) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'updateMeetingActions',\n },\n EVENT_TRIGGERS.MEETING_ACTIONS_UPDATE,\n this.inMeetingActions.get()\n );\n }\n }\n\n /**\n * Sets the self user policies based on the contents of the permission token\n * @returns {void}\n */\n setSelfUserPolicies() {\n this.selfUserPolicies = this.permissionTokenPayload?.permission?.userPolicies;\n this.enforceVBGImagesURL = this.permissionTokenPayload?.permission?.enforceVBGImagesURL;\n }\n\n /**\n * Sets the permission token payload on the class instance\n *\n * @param {String} permissionToken\n * @returns {void}\n */\n public setPermissionTokenPayload(permissionToken: string) {\n this.permissionTokenPayload = jwtDecode(permissionToken);\n this.permissionTokenReceivedLocalTime = new Date().getTime();\n }\n\n /**\n * Sets the sip uri on the class instance\n * uses meeting info as precedence\n * @param {String} sipUri\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n setSipUri(sipUri: string) {\n // This can be tel no, device id or a sip uri, user Id\n this.sipUri = sipUri;\n }\n\n /**\n * Set the locus info the class instance\n * @param {Object} locus\n * @param {Array} locus.mediaConnections\n * @param {String} locus.locusUrl\n * @param {String} locus.locusId\n * @param {String} locus.mediaId\n * @param {Object} locus.host\n * @todo change name to genertic parser\n * @returns {undefined}\n * @private\n * @memberof Meeting\n */\n setLocus(\n locus:\n | {\n mediaConnections: Array;\n locusUrl: string;\n locusId: string;\n mediaId: string;\n host: object;\n }\n | any\n ) {\n const mtgLocus: any = locus.locus || locus;\n\n // LocusInfo object saves the locus object\n // this.locus = mtgLocus;\n this.mediaConnections = locus.mediaConnections;\n this.locusUrl = locus.locusUrl || locus.url;\n this.locusId = locus.locusId;\n this.selfId = locus.selfId;\n this.mediaId = locus.mediaId;\n this.hostId = mtgLocus.host ? mtgLocus.host.id : this.hostId;\n this.locusInfo.initialSetup(mtgLocus);\n }\n\n /**\n * Upload logs for the current meeting\n * @param {object} options file name and function name\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n public uploadLogs(options: object = {file: 'meeting/index', function: 'uploadLogs'}) {\n Trigger.trigger(this, options, EVENTS.REQUEST_UPLOAD_LOGS, this);\n }\n\n /**\n * Removes remote audio, video and share streams from class instance's mediaProperties\n * @returns {undefined}\n */\n unsetRemoteStreams() {\n this.mediaProperties.unsetRemoteStreams();\n }\n\n /**\n * Removes the remote stream on the class instance and triggers an event\n * to developers\n * @returns {undefined}\n * @public\n * @memberof Meeting\n * @deprecated after v1.89.3\n */\n public closeRemoteStream() {\n LoggerProxy.logger.warn(\n 'Meeting:index#closeRemoteStream --> [DEPRECATION WARNING]: closeRemoteStream has been deprecated after v1.89.3'\n );\n this.closeRemoteStreams();\n }\n\n /**\n * Removes the remote streams on the class instance and triggers an event\n * to developers\n * @returns {undefined}\n * @memberof Meeting\n */\n closeRemoteStreams() {\n const {remoteAudioStream, remoteVideoStream, remoteShareStream} = this.mediaProperties;\n\n /**\n * Triggers an event to the developer\n * @param {string} mediaType Type of media that was stopped\n * @returns {void}\n * @inner\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const triggerMediaStoppedEvent = (mediaType: string) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'closeRemoteStreams',\n },\n EVENT_TRIGGERS.MEDIA_STOPPED,\n {\n type: mediaType,\n }\n );\n };\n\n /**\n * Stops a media stream and emits an event\n * @param {RemoteStream} stream Media stream to stop\n * @param {string} type Media stream type\n * @returns {Promise}\n * @inner\n */\n // eslint-disable-next-line arrow-body-style\n const stopStream = (stream: RemoteStream, type: string) => {\n return Media.stopStream(stream).then(() => {\n triggerMediaStoppedEvent(type);\n });\n };\n\n return Promise.all([\n stopStream(remoteAudioStream, EVENT_TYPES.REMOTE_AUDIO),\n stopStream(remoteVideoStream, EVENT_TYPES.REMOTE_VIDEO),\n stopStream(remoteShareStream, EVENT_TYPES.REMOTE_SHARE),\n ]);\n }\n\n /**\n * Stores the reference to a new microphone stream, sets up the required event listeners\n * on it, cleans up previous stream, etc.\n *\n * @param {LocalMicrophoneStream | null} localStream local microphone stream\n * @returns {Promise}\n */\n private async setLocalAudioStream(localStream?: LocalMicrophoneStream) {\n const oldStream = this.mediaProperties.audioStream;\n\n oldStream?.off(\n LocalStreamEventNames.UserMuteStateChange,\n this.localAudioStreamMuteStateHandler\n );\n oldStream?.off(\n LocalStreamEventNames.SystemMuteStateChange,\n this.localAudioStreamMuteStateHandler\n );\n oldStream?.off(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n // we don't update this.mediaProperties.mediaDirection.sendAudio, because we always keep it as true to avoid extra SDP exchanges\n this.mediaProperties.setLocalAudioStream(localStream);\n\n this.audio?.handleLocalStreamChange(this);\n\n localStream?.on(\n LocalStreamEventNames.UserMuteStateChange,\n this.localAudioStreamMuteStateHandler\n );\n localStream?.on(\n LocalStreamEventNames.SystemMuteStateChange,\n this.localAudioStreamMuteStateHandler\n );\n localStream?.on(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n if (!this.isMultistream || !localStream) {\n // for multistream WCME automatically un-publishes the old stream when we publish a new one\n await this.unpublishStream(MediaType.AudioMain, oldStream);\n }\n await this.publishStream(MediaType.AudioMain, this.mediaProperties.audioStream);\n }\n\n /**\n * Stores the reference to a new camera stream, sets up the required event listeners\n * on it, cleans up previous stream, etc.\n *\n * @param {LocalCameraStream | null} localStream local camera stream\n * @returns {Promise}\n */\n private async setLocalVideoStream(localStream?: LocalCameraStream) {\n const oldStream = this.mediaProperties.videoStream;\n\n oldStream?.off(\n LocalStreamEventNames.UserMuteStateChange,\n this.localVideoStreamMuteStateHandler\n );\n oldStream?.off(\n LocalStreamEventNames.SystemMuteStateChange,\n this.localVideoStreamMuteStateHandler\n );\n oldStream?.off(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n // we don't update this.mediaProperties.mediaDirection.sendVideo, because we always keep it as true to avoid extra SDP exchanges\n this.mediaProperties.setLocalVideoStream(localStream);\n\n this.video?.handleLocalStreamChange(this);\n\n localStream?.on(\n LocalStreamEventNames.UserMuteStateChange,\n this.localVideoStreamMuteStateHandler\n );\n localStream?.on(\n LocalStreamEventNames.SystemMuteStateChange,\n this.localVideoStreamMuteStateHandler\n );\n localStream?.on(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n if (!this.isMultistream || !localStream) {\n // for multistream WCME automatically un-publishes the old stream when we publish a new one\n await this.unpublishStream(MediaType.VideoMain, oldStream);\n }\n await this.publishStream(MediaType.VideoMain, this.mediaProperties.videoStream);\n }\n\n /**\n * Stores the reference to a new screen share stream, sets up the required event listeners\n * on it, cleans up previous stream, etc.\n * It also sends the floor grant/release request.\n *\n * @param {LocalDisplayStream | undefined} localDisplayStream local display stream\n * @returns {Promise}\n */\n private async setLocalShareVideoStream(localDisplayStream?: LocalDisplayStream) {\n const oldStream = this.mediaProperties.shareVideoStream;\n\n oldStream?.off(\n LocalStreamEventNames.SystemMuteStateChange,\n this.handleShareVideoStreamMuteStateChange\n );\n oldStream?.off(StreamEventNames.Ended, this.handleShareVideoStreamEnded);\n oldStream?.off(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n this.mediaProperties.setLocalShareVideoStream(localDisplayStream);\n\n localDisplayStream?.on(\n LocalStreamEventNames.SystemMuteStateChange,\n this.handleShareVideoStreamMuteStateChange\n );\n localDisplayStream?.on(StreamEventNames.Ended, this.handleShareVideoStreamEnded);\n localDisplayStream?.on(\n LocalStreamEventNames.OutputTrackChange,\n this.localOutputTrackChangeHandler\n );\n\n this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareStream();\n\n if (!this.isMultistream || !localDisplayStream) {\n // for multistream WCME automatically un-publishes the old stream when we publish a new one\n await this.unpublishStream(MediaType.VideoSlides, oldStream);\n }\n await this.publishStream(MediaType.VideoSlides, this.mediaProperties.shareVideoStream);\n }\n\n /**\n * Stores the reference to a new screen share audio stream, sets up the required event listeners\n * on it, cleans up previous stream, etc.\n *\n * @param {LocalSystemAudioStream | undefined} localSystemAudioStream local system audio stream\n * @returns {Promise}\n */\n private async setLocalShareAudioStream(localSystemAudioStream?: LocalSystemAudioStream) {\n const oldStream = this.mediaProperties.shareAudioStream;\n\n oldStream?.off(StreamEventNames.Ended, this.handleShareAudioStreamEnded);\n oldStream?.off(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n this.mediaProperties.setLocalShareAudioStream(localSystemAudioStream);\n\n localSystemAudioStream?.on(StreamEventNames.Ended, this.handleShareAudioStreamEnded);\n localSystemAudioStream?.on(\n LocalStreamEventNames.OutputTrackChange,\n this.localOutputTrackChangeHandler\n );\n\n this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareStream();\n\n if (!this.isMultistream || !localSystemAudioStream) {\n // for multistream WCME automatically un-publishes the old stream when we publish a new one\n await this.unpublishStream(MediaType.AudioSlides, oldStream);\n }\n await this.publishStream(MediaType.AudioSlides, this.mediaProperties.shareAudioStream);\n }\n\n /**\n * Handles the local audio stream publish state change event\n * @internal\n * @param {Object} options parameters functionName, isPublished, mediaType and stream needed to trigger event\n * @returns {undefined}\n */\n private emitPublishStateChangeEvent(options: {\n functionName: string;\n isPublished: boolean;\n mediaType: MediaType;\n stream: LocalStream;\n }) {\n const {functionName, isPublished, mediaType, stream} = options;\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: functionName,\n },\n EVENT_TRIGGERS.MEETING_STREAM_PUBLISH_STATE_CHANGED,\n {\n isPublished,\n mediaType,\n stream,\n }\n );\n }\n\n /**\n * Removes references to local streams. This function should be called\n * on cleanup when we leave the meeting etc.\n *\n * @internal\n * @returns {void}\n */\n public cleanupLocalStreams() {\n const {audioStream, videoStream, shareAudioStream, shareVideoStream} = this.mediaProperties;\n\n audioStream?.off(\n LocalStreamEventNames.UserMuteStateChange,\n this.localAudioStreamMuteStateHandler\n );\n audioStream?.off(\n LocalStreamEventNames.SystemMuteStateChange,\n this.localAudioStreamMuteStateHandler\n );\n audioStream?.off(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n videoStream?.off(\n LocalStreamEventNames.UserMuteStateChange,\n this.localVideoStreamMuteStateHandler\n );\n videoStream?.off(\n LocalStreamEventNames.SystemMuteStateChange,\n this.localVideoStreamMuteStateHandler\n );\n videoStream?.off(LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);\n\n shareAudioStream?.off(StreamEventNames.Ended, this.handleShareAudioStreamEnded);\n shareAudioStream?.off(\n LocalStreamEventNames.OutputTrackChange,\n this.localOutputTrackChangeHandler\n );\n\n shareVideoStream?.off(\n LocalStreamEventNames.SystemMuteStateChange,\n this.handleShareVideoStreamMuteStateChange\n );\n shareVideoStream?.off(StreamEventNames.Ended, this.handleShareVideoStreamEnded);\n shareVideoStream?.off(\n LocalStreamEventNames.OutputTrackChange,\n this.localOutputTrackChangeHandler\n );\n\n this.mediaProperties.setLocalAudioStream(undefined);\n this.mediaProperties.setLocalVideoStream(undefined);\n this.mediaProperties.setLocalShareAudioStream(undefined);\n this.mediaProperties.setLocalShareVideoStream(undefined);\n\n this.mediaProperties.mediaDirection.sendAudio = false;\n this.mediaProperties.mediaDirection.sendVideo = false;\n this.mediaProperties.mediaDirection.sendShare = false;\n\n if (audioStream) {\n this.emitPublishStateChangeEvent({\n functionName: 'cleanupLocalStreams',\n isPublished: false,\n mediaType: MediaType.AudioMain,\n stream: audioStream,\n });\n }\n if (videoStream) {\n this.emitPublishStateChangeEvent({\n functionName: 'cleanupLocalStreams',\n isPublished: false,\n mediaType: MediaType.VideoMain,\n stream: videoStream,\n });\n }\n if (shareVideoStream) {\n this.emitPublishStateChangeEvent({\n functionName: 'cleanupLocalStreams',\n isPublished: false,\n mediaType: MediaType.VideoSlides,\n stream: shareVideoStream,\n });\n }\n if (shareAudioStream) {\n this.emitPublishStateChangeEvent({\n functionName: 'cleanupLocalStreams',\n isPublished: false,\n mediaType: MediaType.AudioSlides,\n stream: shareAudioStream,\n });\n }\n }\n\n /**\n * sets up listner for mercury event\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n public setMercuryListener() {\n // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury\n // if the meeting has active peer connections, it should try to reconnect.\n // @ts-ignore\n this.webex.internal.mercury.on(ONLINE, () => {\n LoggerProxy.logger.info('Meeting:index#setMercuryListener --> Web socket online');\n\n // Only send restore event when it was disconnected before and for connected later\n if (!this.hasWebsocketConnected) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.mercury.connection.restored',\n options: {meetingId: this.id},\n });\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MERCURY_CONNECTION_RESTORED, {\n correlation_id: this.correlationId,\n });\n }\n this.hasWebsocketConnected = true;\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(OFFLINE, () => {\n LoggerProxy.logger.error('Meeting:index#setMercuryListener --> Web socket offline');\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.mercury.connection.lost',\n options: {meetingId: this.id},\n });\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MERCURY_CONNECTION_FAILURE, {\n correlation_id: this.correlationId,\n });\n });\n }\n\n /**\n * Close the peer connections and remove them from the class.\n * Cleanup any media connection related things.\n *\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public closePeerConnections() {\n if (this.mediaProperties.webrtcMediaConnection) {\n if (this.remoteMediaManager) {\n this.remoteMediaManager.stop();\n this.remoteMediaManager = null;\n }\n\n Object.values(this.mediaRequestManagers).forEach((mediaRequestManager) =>\n mediaRequestManager.reset()\n );\n\n this.receiveSlotManager.reset();\n this.mediaProperties.webrtcMediaConnection.close();\n this.sendSlotManager.reset();\n this.setNetworkStatus(undefined);\n }\n\n this.audio = null;\n this.video = null;\n\n return Promise.resolve();\n }\n\n /**\n * Unsets the peer connections on the class\n * warning DO NOT CALL WITHOUT CLOSING PEER CONNECTIONS FIRST\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n public unsetPeerConnections() {\n this.mediaProperties.unsetPeerConnection();\n // @ts-ignore - config coming from registerPlugin\n if (this.config.reconnection.detection) {\n // @ts-ignore\n this.webex.internal.mercury.off(ONLINE);\n // @ts-ignore\n this.webex.internal.mercury.off(OFFLINE);\n }\n }\n\n /**\n * Convenience method to set the correlation id for the callStateForMetrics\n * @param {String} id correlation id to set on the callStateForMetrics\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n public setCorrelationId(id: string) {\n this.callStateForMetrics.correlationId = id;\n }\n\n /**\n * Update the callStateForMetrics\n * @param {CallStateForMetrics} callStateForMetrics updated values for callStateForMetrics\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n public updateCallStateForMetrics(callStateForMetrics: CallStateForMetrics) {\n this.callStateForMetrics = {...this.callStateForMetrics, ...callStateForMetrics};\n }\n\n /**\n * Enqueue request for screenshare floor and set the status to pending\n * @returns {Promise}\n * @private\n * @memberof Meeting\n */\n private enqueueScreenShareFloorRequest() {\n this.screenShareFloorState = ScreenShareFloorStatus.PENDING;\n\n return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE_FLOOR_REQUEST);\n }\n\n /**\n * Mute the audio for a meeting\n * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set\n * @public\n * @memberof Meeting\n */\n public muteAudio() {\n if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n // @ts-ignore\n if (!this.mediaId) {\n // Happens when addMedia and mute are triggered in succession\n return Promise.reject(new NoMediaEstablishedYetError());\n }\n\n if (!this.audio) {\n return Promise.reject(new ParameterError('no audio control associated to the meeting'));\n }\n\n // First, stop sending the local audio media\n return logRequest(\n this.audio\n .handleClientRequest(this, true)\n .then(() => {\n MeetingUtil.handleAudioLogging(this.mediaProperties.audioStream);\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.muted',\n payload: {trigger: 'user-interaction', mediaType: 'audio'},\n options: {meetingId: this.id},\n });\n })\n .catch((error) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MUTE_AUDIO_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw error;\n }),\n {\n logText: `Meeting:index#muteAudio --> correlationId=${this.correlationId} muting audio`,\n }\n );\n }\n\n /**\n * Unmute meeting audio\n * @returns {Promise} resolves data from muting audio {mute, self} or rejects if there is no audio set\n * @public\n * @memberof Meeting\n */\n public unmuteAudio() {\n if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n // @ts-ignore\n if (!this.mediaId) {\n // Happens when addMedia and mute are triggered in succession\n return Promise.reject(new NoMediaEstablishedYetError());\n }\n\n if (!this.audio) {\n return Promise.reject(new ParameterError('no audio control associated to the meeting'));\n }\n\n // First, send the control to unmute the participant on the server\n return logRequest(\n this.audio\n .handleClientRequest(this, false)\n .then(() => {\n MeetingUtil.handleAudioLogging(this.mediaProperties.audioStream);\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.unmuted',\n payload: {trigger: 'user-interaction', mediaType: 'audio'},\n options: {meetingId: this.id},\n });\n })\n .catch((error) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UNMUTE_AUDIO_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw error;\n }),\n {\n logText: `Meeting:index#unmuteAudio --> correlationId=${this.correlationId} unmuting audio`,\n }\n );\n }\n\n /**\n * Mute the video for a meeting\n * @returns {Promise} resolves data from muting video {mute, self} or rejects if there is no video set\n * @public\n * @memberof Meeting\n */\n public muteVideo() {\n if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n // @ts-ignore\n if (!this.mediaId) {\n // Happens when addMedia and mute are triggered in succession\n return Promise.reject(new NoMediaEstablishedYetError());\n }\n\n if (!this.video) {\n return Promise.reject(new ParameterError('no video control associated to the meeting'));\n }\n\n return logRequest(\n this.video\n .handleClientRequest(this, true)\n .then(() => {\n MeetingUtil.handleVideoLogging(this.mediaProperties.videoStream);\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.muted',\n payload: {trigger: 'user-interaction', mediaType: 'video'},\n options: {meetingId: this.id},\n });\n })\n .catch((error) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MUTE_VIDEO_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw error;\n }),\n {\n logText: `Meeting:index#muteVideo --> correlationId=${this.correlationId} muting video`,\n }\n );\n }\n\n /**\n * Unmute meeting video\n * @returns {Promise} resolves data from muting video {mute, self} or rejects if there is no video set\n * @public\n * @memberof Meeting\n */\n public unmuteVideo() {\n if (!MeetingUtil.isUserInJoinedState(this.locusInfo)) {\n return Promise.reject(new UserNotJoinedError());\n }\n\n // @ts-ignore\n if (!this.mediaId) {\n // Happens when addMedia and mute are triggered in succession\n return Promise.reject(new NoMediaEstablishedYetError());\n }\n\n if (!this.video) {\n return Promise.reject(new ParameterError('no audio control associated to the meeting'));\n }\n\n return logRequest(\n this.video\n .handleClientRequest(this, false)\n .then(() => {\n MeetingUtil.handleVideoLogging(this.mediaProperties.videoStream);\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.unmuted',\n payload: {trigger: 'user-interaction', mediaType: 'video'},\n options: {meetingId: this.id},\n });\n })\n .catch((error) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UNMUTE_VIDEO_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw error;\n }),\n {\n logText: `Meeting:index#unmuteVideo --> correlationId=${this.correlationId} unmuting video`,\n }\n );\n }\n\n /**\n * Shorthand function to join AND set up media\n * @param {Object} options - options to join with media\n * @param {JoinOptions} [options.joinOptions] - see #join()\n * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()\n * @returns {Promise} -- {join: see join(), media: see addMedia()}\n * @public\n * @memberof Meeting\n * @example\n * joinWithMedia({\n * joinOptions: {resourceId: 'resourceId' },\n * mediaOptions: {\n * localStreams: { microphone: microphoneStream, camera: cameraStream }\n * }\n * })\n */\n public async joinWithMedia(\n options: {\n joinOptions?: any;\n mediaOptions?: AddMediaOptions;\n } = {}\n ) {\n const {mediaOptions, joinOptions = {}} = options;\n const {isRetry, prevJoinResponse} = this.joinWithMediaRetryInfo;\n\n if (!mediaOptions?.allowMediaInLobby) {\n return Promise.reject(\n new ParameterError('joinWithMedia() can only be used with allowMediaInLobby set to true')\n );\n }\n this.allowMediaInLobby = true;\n\n LoggerProxy.logger.info('Meeting:index#joinWithMedia called');\n\n let joined = false;\n let joinResponse = prevJoinResponse;\n\n try {\n let turnServerInfo;\n let turnDiscoverySkippedReason;\n let forceTurnDiscovery = false;\n\n if (!joinResponse) {\n // This is the 1st attempt or a retry after join request failed -> we need to do a join with TURN discovery\n\n // @ts-ignore\n joinOptions.reachability = await this.webex.meetings.reachability.getReachabilityResults();\n const turnDiscoveryRequest = await this.roap.generateTurnDiscoveryRequestMessage(\n this,\n true\n );\n\n ({turnDiscoverySkippedReason} = turnDiscoveryRequest);\n joinOptions.roapMessage = turnDiscoveryRequest.roapMessage;\n\n LoggerProxy.logger.info(\n 'Meeting:index#joinWithMedia ---> calling join with joinOptions, ',\n joinOptions\n );\n\n joinResponse = await this.join(joinOptions);\n\n joined = true;\n\n // if we sent out TURN discovery Roap message with join, process the TURN discovery response\n if (joinOptions.roapMessage) {\n ({turnServerInfo, turnDiscoverySkippedReason} =\n await this.roap.handleTurnDiscoveryHttpResponse(this, joinResponse));\n\n this.turnDiscoverySkippedReason = turnDiscoverySkippedReason;\n this.turnServerUsed = !!turnServerInfo;\n\n if (turnServerInfo === undefined) {\n this.roap.abortTurnDiscovery();\n }\n }\n } else {\n // This is a retry, when join succeeded but addMedia failed, so we'll just call addMedia() again,\n // but we need to ensure that it also does a new TURN discovery\n forceTurnDiscovery = true;\n joined = true;\n }\n\n const mediaResponse = await this.addMediaInternal(\n () => {\n return this.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';\n },\n turnServerInfo,\n forceTurnDiscovery,\n mediaOptions\n );\n\n this.joinWithMediaRetryInfo = {isRetry: false, prevJoinResponse: undefined};\n\n return {\n join: joinResponse,\n media: mediaResponse,\n };\n } catch (error) {\n LoggerProxy.logger.error('Meeting:index#joinWithMedia --> ', error);\n\n let leaveError;\n\n this.roap.abortTurnDiscovery();\n\n if (joined && isRetry) {\n try {\n await this.leave({resourceId: joinOptions?.resourceId, reason: 'joinWithMedia failure'});\n } catch (e) {\n LoggerProxy.logger.error('Meeting:index#joinWithMedia --> leave error', e);\n leaveError = e;\n }\n }\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.JOIN_WITH_MEDIA_FAILURE,\n {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl?.split('/').pop(), // if join fails, we may end up with no locusUrl\n reason: error.message,\n stack: error.stack,\n leaveErrorReason: leaveError?.message,\n isRetry,\n },\n {\n type: error.name,\n }\n );\n\n // if this was the first attempt, let's do a retry\n let shouldRetry = !isRetry;\n\n if (CallDiagnosticUtils.isSdpOfferCreationError(error)) {\n // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,\n // so there is no point doing a retry\n shouldRetry = false;\n }\n\n if (shouldRetry) {\n LoggerProxy.logger.warn('Meeting:index#joinWithMedia --> retrying call to joinWithMedia');\n this.joinWithMediaRetryInfo.isRetry = true;\n this.joinWithMediaRetryInfo.prevJoinResponse = joinResponse;\n\n return this.joinWithMedia(options);\n }\n\n this.joinWithMediaRetryInfo = {isRetry: false, prevJoinResponse: undefined};\n\n throw error;\n }\n }\n\n /**\n * Initiates the reconnection of the media in the meeting\n *\n * @param {object} options\n * @returns {Promise} resolves with {reconnect} or errors with {error}\n * @public\n * @memberof Meeting\n */\n public reconnect(options?: object) {\n LoggerProxy.logger.log(\n `Meeting:index#reconnect --> attempting to reconnect meeting ${this.id}`\n );\n\n if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {\n return Promise.reject(\n new ParameterError('Cannot reconnect, ReconnectionManager must first be defined.')\n );\n }\n\n // @ts-ignore - currentMediaStatus coming from SelfUtil\n if (!MeetingUtil.isMediaEstablished(this.currentMediaStatus)) {\n return Promise.reject(\n new ParameterError('Cannot reconnect, Media has not established to reconnect')\n );\n }\n\n return this.reconnectionManager\n .reconnect(options, async () => {\n await this.waitForRemoteSDPAnswer();\n await this.waitForMediaConnectionConnected();\n })\n .then(() => {\n LoggerProxy.logger.log('Meeting:index#reconnect --> Meeting reconnect success');\n })\n .catch((error) => {\n if (error instanceof ReconnectionNotStartedError) {\n LoggerProxy.logger.log('Meeting:index#reconnect --> Meeting reconnect not started');\n\n return Promise.resolve();\n }\n LoggerProxy.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);\n\n this.uploadLogs({\n file: 'meeting/index',\n function: 'reconnect',\n });\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Check if the meeting supports the Webex Assistant feature\n * @returns {boolean}\n * @throws TranscriptionNotSupportedError\n */\n isTranscriptionSupported() {\n if (this.locusInfo.controls.transcribe?.caption) {\n return true;\n }\n\n LoggerProxy.logger.error(\n 'Meeting:index#isTranscriptionSupported --> Closed Captions is not enabled/supported'\n );\n\n return false;\n }\n\n /**\n * Check if the meeting supports the Reactions\n * @returns {boolean}\n */\n isReactionsSupported() {\n if (this.locusInfo?.controls?.reactions.enabled) {\n return true;\n }\n\n LoggerProxy.logger.error('Meeting:index#isReactionsSupported --> Reactions is not supported');\n\n return false;\n }\n\n /**\n * sets Caption language for the meeting\n * @param {string} language\n * @returns {Promise}\n */\n public setCaptionLanguage(language: string) {\n return new Promise((resolve, reject) => {\n if (!this.isTranscriptionSupported()) {\n LoggerProxy.logger.error(\n 'Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported'\n );\n\n reject(new Error('Webex Assistant is not enabled/supported'));\n }\n\n try {\n const voiceaListenerCaptionUpdate = (payload) => {\n // @ts-ignore\n this.webex.internal.voicea.off(\n VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE,\n voiceaListenerCaptionUpdate\n );\n const {statusCode} = payload;\n\n if (statusCode === 200) {\n this.transcription.languageOptions = {\n ...this.transcription.languageOptions,\n currentCaptionLanguage: language,\n };\n resolve(language);\n } else {\n reject(payload);\n }\n };\n // @ts-ignore\n this.webex.internal.voicea.on(\n VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE,\n voiceaListenerCaptionUpdate\n );\n // @ts-ignore\n this.webex.internal.voicea.requestLanguage(language);\n } catch (error) {\n LoggerProxy.logger.error(`Meeting:index#setCaptionLanguage --> ${error}`);\n\n reject(error);\n }\n });\n }\n\n /**\n * sets Spoken language for the meeting\n * @param {string} language\n * @returns {Promise}\n */\n public setSpokenLanguage(language: string) {\n return new Promise((resolve, reject) => {\n if (!this.isTranscriptionSupported()) {\n LoggerProxy.logger.error(\n 'Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported'\n );\n\n reject(new Error('Webex Assistant is not enabled/supported'));\n }\n\n if (this.getCurUserType() !== 'host') {\n LoggerProxy.logger.error(\n 'Meeting:index#setSpokenLanguage --> Only host can set spoken language'\n );\n\n reject(new Error('Only host can set spoken language'));\n }\n\n try {\n const voiceaListenerLanguageUpdate = (payload) => {\n // @ts-ignore\n this.webex.internal.voicea.off(\n VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,\n voiceaListenerLanguageUpdate\n );\n const {languageCode} = payload;\n\n if (languageCode) {\n this.transcription.languageOptions = {\n ...this.transcription.languageOptions,\n currentSpokenLanguage: languageCode,\n };\n resolve(languageCode);\n } else {\n reject(payload);\n }\n };\n\n // @ts-ignore\n this.webex.internal.voicea.on(\n VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,\n voiceaListenerLanguageUpdate\n );\n\n // @ts-ignore\n this.webex.internal.voicea.setSpokenLanguage(language);\n } catch (error) {\n LoggerProxy.logger.error(`Meeting:index#setSpokenLanguage --> ${error}`);\n\n reject(error);\n }\n });\n }\n\n /**\n * This method will enable the transcription for the current meeting if the meeting has enabled/supports Webex Assistant\n * @param {Object} options object with spokenlanguage setting\n * @public\n * @returns {Promise} a promise to open the WebSocket connection\n */\n public async startTranscription(options?: {spokenLanguage?: string}) {\n if (this.isJoined()) {\n LoggerProxy.logger.info(\n 'Meeting:index#startTranscription --> Attempting to enable transcription!'\n );\n\n try {\n if (!this.areVoiceaEventsSetup) {\n this.setUpVoiceaListeners();\n }\n\n // @ts-ignore\n await this.webex.internal.voicea.turnOnCaptions(options?.spokenLanguage);\n } catch (error) {\n LoggerProxy.logger.error(`Meeting:index#startTranscription --> ${error}`);\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.RECEIVE_TRANSCRIPTION_FAILURE, {\n correlation_id: this.correlationId,\n reason: error.message,\n stack: error.stack,\n });\n }\n } else {\n LoggerProxy.logger.error(\n `Meeting:index#startTranscription --> meeting joined : ${this.isJoined()}`\n );\n throw new Error('Meeting is not joined');\n }\n }\n\n /**\n * Callback called when a relay event is received from meeting LLM Connection\n * @param {RelayEvent} e Event object coming from LLM Connection\n * @private\n * @returns {void}\n */\n private processRelayEvent = (e: RelayEvent): void => {\n switch (e.data.relayType) {\n case REACTION_RELAY_TYPES.REACTION:\n if (\n // @ts-ignore - config coming from registerPlugin\n (this.config.receiveReactions || options.receiveReactions) &&\n this.isReactionsSupported()\n ) {\n const {name} = this.members.membersCollection.get(e.data.sender.participantId);\n const processedReaction: ProcessedReaction = {\n reaction: e.data.reaction,\n sender: {\n id: e.data.sender.participantId,\n name,\n },\n };\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'join',\n },\n EVENT_TRIGGERS.MEETING_RECEIVE_REACTIONS,\n processedReaction\n );\n }\n break;\n default:\n break;\n }\n };\n\n /**\n * This method stops receiving transcription for the current meeting\n * @returns {void}\n */\n stopTranscription() {\n if (this.transcription) {\n // @ts-ignore\n this.webex.internal.voicea.off(\n VOICEAEVENTS.VOICEA_ANNOUNCEMENT,\n this.voiceaListenerCallbacks[VOICEAEVENTS.VOICEA_ANNOUNCEMENT]\n );\n\n // @ts-ignore\n this.webex.internal.voicea.off(\n VOICEAEVENTS.CAPTIONS_TURNED_ON,\n this.voiceaListenerCallbacks[VOICEAEVENTS.CAPTIONS_TURNED_ON]\n );\n\n // @ts-ignore\n this.webex.internal.voicea.off(\n VOICEAEVENTS.EVA_COMMAND,\n this.voiceaListenerCallbacks[VOICEAEVENTS.EVA_COMMAND]\n );\n\n // @ts-ignore\n this.webex.internal.voicea.off(\n VOICEAEVENTS.NEW_CAPTION,\n this.voiceaListenerCallbacks[VOICEAEVENTS.NEW_CAPTION]\n );\n\n this.areVoiceaEventsSetup = false;\n this.triggerStopReceivingTranscriptionEvent();\n }\n }\n\n /**\n * triggers an event to notify that the user\n * will not receive any more transcription\n * @private\n * @returns{void}\n */\n private triggerStopReceivingTranscriptionEvent() {\n LoggerProxy.logger.info(`\n Meeting:index#stopReceivingTranscription -->\n closed voicea event listeners successfully.`);\n\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'triggerStopReceivingTranscriptionEvent',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION\n );\n }\n\n /**\n * This is a callback for the LLM event that is triggered when it comes online\n * This method in turn will trigger an event to the developers that the LLM is connected\n * @private\n * @memberof Meeting\n * @returns {null}\n */\n private handleLLMOnline = (): void => {\n // @ts-ignore\n this.webex.internal.llm.off('online', this.handleLLMOnline);\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'handleLLMOnline',\n },\n EVENT_TRIGGERS.MEETING_TRANSCRIPTION_CONNECTED,\n undefined\n );\n };\n\n /**\n * Specify joining via audio (option: pstn), video, screenshare\n * @param {JoinOptions} options A configurable options object for joining a meeting\n * @returns {Promise} the join response\n * @public\n * @memberof Meeting\n * Scenario A: Joining own claimed personal meeting room\n * Scenario B: Joining other's claimed personal meeting room, do pass pin (if desired to join as host, or nullify), do pass moderator\n * Scenario C: Joining an unclaimed personal meeting room, -do not- pass pin or moderator on first try, -do- pass pin and moderator\n * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop\n * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)\n */\n public async join(options: any = {}) {\n // @ts-ignore - fix type\n if (!this.webex.meetings.registered) {\n const errorMessage = 'Meeting:index#join --> Device not registered';\n const error = new Error(errorMessage);\n\n LoggerProxy.logger.error(errorMessage);\n\n return Promise.reject(error);\n }\n\n // If a join request is being processed, refer to the deferred promise.\n if (this.deferJoin) {\n return this.deferJoin;\n }\n\n // Scope-up the resolve/reject methods for handling within join().\n let joinFailed;\n let joinSuccess;\n\n // Create a deferred promise for a consistent resolve value from utils.\n // This also prevents redundant API calls.\n this.deferJoin = new Promise((resolve, reject) => {\n joinFailed = reject;\n joinSuccess = resolve;\n });\n\n if (options.correlationId) {\n this.setCorrelationId(options.correlationId);\n LoggerProxy.logger.log(\n `Meeting:index#join --> Using a new correlation id from app ${this.correlationId}`\n );\n }\n\n if (!this.hasJoinedOnce) {\n this.hasJoinedOnce = true;\n } else if (!options.correlationId) {\n LoggerProxy.logger.log(\n `Meeting:index#join --> Generating a new correlation id for meeting ${this.id}`\n );\n LoggerProxy.logger.log(\n `Meeting:index#join --> Previous correlation id ${this.correlationId}`\n );\n this.setCorrelationId(uuid.v4());\n LoggerProxy.logger.log(`Meeting:index#join --> New correlation id ${this.correlationId}`);\n }\n\n if (options.rejoin) {\n this.meetingFiniteStateMachine.reset();\n }\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.initiated',\n payload: {\n trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',\n isRoapCallEnabled: true,\n pstnAudioType: options?.pstnAudioType,\n },\n options: {meetingId: this.id},\n });\n\n LoggerProxy.logger.log('Meeting:index#join --> Joining a meeting');\n\n if (this.meetingFiniteStateMachine.state === MEETING_STATE_MACHINE.STATES.ENDED) {\n this.meetingFiniteStateMachine.reset();\n }\n if (this.meetingFiniteStateMachine.state !== MEETING_STATE_MACHINE.STATES.RINGING) {\n this.meetingFiniteStateMachine.ring(_JOIN_);\n }\n\n // TODO: does this really need to be here?\n if (options.resourceId && this.destination && options.resourceId === this.destination) {\n this.wirelessShare = true;\n }\n\n if (options.meetingQuality) {\n if (typeof options.meetingQuality === 'string') {\n if (!QUALITY_LEVELS[options.meetingQuality]) {\n const errorMessage = `Meeting:index#join --> ${options.meetingQuality} not defined`;\n const error = new Error(errorMessage);\n\n LoggerProxy.logger.error(errorMessage);\n\n joinFailed(error);\n this.deferJoin = undefined;\n\n return Promise.reject(error);\n }\n\n this.mediaProperties.setRemoteQualityLevel(options.meetingQuality);\n }\n\n if (typeof options.meetingQuality === 'object') {\n if (!QUALITY_LEVELS[options.meetingQuality.remote]) {\n const errorMessage = `Meeting:index#join --> ${options.meetingQuality.remote} not defined`;\n\n LoggerProxy.logger.error(errorMessage);\n\n const error = new Error(errorMessage);\n\n joinFailed(error);\n this.deferJoin = undefined;\n\n return Promise.reject(new Error(errorMessage));\n }\n\n if (options.meetingQuality.remote) {\n this.mediaProperties.setRemoteQualityLevel(options.meetingQuality.remote);\n }\n }\n }\n\n this.isMultistream = !!options.enableMultistream;\n\n try {\n // refresh the permission token if its about to expire in 10sec\n await this.checkAndRefreshPermissionToken(\n MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC,\n MEETING_PERMISSION_TOKEN_REFRESH_REASON\n );\n } catch (error) {\n LoggerProxy.logger.error('Meeting:index#join --> Failed to refresh permission token:', error);\n\n if (\n error instanceof CaptchaError ||\n error instanceof PasswordError ||\n error instanceof PermissionError\n ) {\n this.meetingFiniteStateMachine.fail(error);\n\n // Upload logs on refreshpermissionToken refresh Failure\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'join',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n\n joinFailed(error);\n\n this.deferJoin = undefined;\n\n // if refresh permission token requires captcha, password or permission, we are throwing the errors\n // and bubble it up to client\n return Promise.reject(error);\n }\n }\n\n return MeetingUtil.joinMeetingOptions(this, options)\n .then((join) => {\n this.meetingFiniteStateMachine.join();\n this.setupLocusMediaRequest();\n\n LoggerProxy.logger.log('Meeting:index#join --> Success');\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.JOIN_SUCCESS, {\n correlation_id: this.correlationId,\n });\n\n joinSuccess(join);\n\n this.deferJoin = undefined;\n\n return join;\n })\n .catch((error) => {\n this.meetingFiniteStateMachine.fail(error);\n LoggerProxy.logger.error('Meeting:index#join --> Failed', error);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.join.response',\n payload: {\n identifiers: {meetingLookupUrl: this.meetingInfo?.meetingLookupUrl},\n },\n options: {meetingId: this.id, rawError: error},\n });\n\n // TODO: change this to error codes and pre defined dictionary\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.JOIN_FAILURE, {\n correlation_id: this.correlationId,\n reason: error.error?.message,\n stack: error.stack,\n });\n\n // Upload logs on join Failure\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'join',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n\n joinFailed(error);\n\n this.deferJoin = undefined;\n\n return Promise.reject(error);\n })\n .then((join) => {\n // @ts-ignore - config coming from registerPlugin\n if (this.config.enableAutomaticLLM) {\n // @ts-ignore\n this.webex.internal.llm.on('online', this.handleLLMOnline);\n this.updateLLMConnection()\n .catch((error) => {\n LoggerProxy.logger.error(\n 'Meeting:index#join --> Transcription Socket Connection Failed',\n error\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LLM_CONNECTION_AFTER_JOIN_FAILURE, {\n correlation_id: this.correlationId,\n reason: error?.message,\n stack: error.stack,\n });\n })\n .then(() => {\n LoggerProxy.logger.info(\n 'Meeting:index#join --> Transcription Socket Connection Success'\n );\n });\n }\n\n return join;\n });\n }\n\n /**\n * Connects to low latency mercury and reconnects if the address has changed\n * It will also disconnect if called when the meeting has ended\n * @param {String} datachannelUrl\n * @returns {Promise}\n */\n async updateLLMConnection() {\n // @ts-ignore - Fix type\n const {url, info: {datachannelUrl} = {}} = this.locusInfo;\n\n const isJoined = this.isJoined();\n\n // @ts-ignore - Fix type\n if (this.webex.internal.llm.isConnected()) {\n if (\n // @ts-ignore - Fix type\n url === this.webex.internal.llm.getLocusUrl() &&\n // @ts-ignore - Fix type\n datachannelUrl === this.webex.internal.llm.getDatachannelUrl() &&\n isJoined\n ) {\n return undefined;\n }\n // @ts-ignore - Fix type\n await this.webex.internal.llm.disconnectLLM();\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);\n }\n\n if (!isJoined) {\n return undefined;\n }\n\n // @ts-ignore - Fix type\n return this.webex.internal.llm\n .registerAndConnect(url, datachannelUrl)\n .then((registerAndConnectResult) => {\n // @ts-ignore - Fix type\n this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);\n // @ts-ignore - Fix type\n this.webex.internal.llm.on('event:relay.event', this.processRelayEvent);\n LoggerProxy.logger.info(\n 'Meeting:index#updateLLMConnection --> enabled to receive relay events!'\n );\n\n return Promise.resolve(registerAndConnectResult);\n });\n }\n\n /**\n * Use phone for meeting audio\n * @param {String} phoneNumber If provided, it will dial-out using this number. If not provided, dial-in will be used\n * @returns {Promise} Resolves once the dial-in or dial-out request has completed, or rejects if it failed\n * @public\n * @memberof Meeting\n */\n public usePhoneAudio(phoneNumber: string) {\n if (!phoneNumber) {\n return this.dialInPstn();\n }\n\n return this.dialOutPstn(phoneNumber);\n }\n\n /**\n * Determines if the given pstnStatus is in a state which implies the phone is provisioned\n * @param {String} pstnStatus\n * @returns {Boolean}\n * @private\n * @memberof Meeting\n */\n private isPhoneProvisioned(pstnStatus: string) {\n return [PSTN_STATUS.JOINED, PSTN_STATUS.CONNECTED, PSTN_STATUS.SUCCESS].includes(pstnStatus);\n }\n\n /**\n * Enable dial-in for audio\n * @returns {Promise} Resolves once the dial-in request has completed, or rejects if it failed\n * @private\n * @memberof Meeting\n */\n private dialInPstn() {\n if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return Promise.resolve(); // prevent multiple dial in devices from being provisioned\n\n const {correlationId, locusUrl} = this;\n\n if (!this.dialInUrl) this.dialInUrl = `dialin:///${uuid.v4()}`;\n\n return (\n this.meetingRequest\n // @ts-ignore\n .dialIn({\n correlationId,\n dialInUrl: this.dialInUrl,\n locusUrl,\n clientUrl: this.deviceUrl,\n })\n .catch((error) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE, {\n correlation_id: this.correlationId,\n dial_in_url: this.dialInUrl,\n locus_id: locusUrl.split('/').pop(),\n client_url: this.deviceUrl,\n reason: error.error?.message,\n stack: error.stack,\n });\n\n return Promise.reject(error);\n })\n );\n }\n\n /**\n * Enable dial-out for audio\n * @param {String} phoneNumber Phone number to dial out to\n * @returns {Promise} Resolves once the dial-out request has completed (it doesn't wait for the user to answer the phone), or rejects if it failed\n * @private\n * @memberof Meeting\n */\n private dialOutPstn(phoneNumber: string) {\n if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return Promise.resolve(); // prevent multiple dial out devices from being provisioned\n\n const {correlationId, locusUrl} = this;\n\n if (!this.dialOutUrl) this.dialOutUrl = `dialout:///${uuid.v4()}`;\n\n return (\n this.meetingRequest\n // @ts-ignore\n .dialOut({\n correlationId,\n dialOutUrl: this.dialOutUrl,\n phoneNumber,\n locusUrl,\n clientUrl: this.deviceUrl,\n })\n .catch((error) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE, {\n correlation_id: this.correlationId,\n dial_out_url: this.dialOutUrl,\n locus_id: locusUrl.split('/').pop(),\n client_url: this.deviceUrl,\n reason: error.error?.message,\n stack: error.stack,\n });\n\n return Promise.reject(error);\n })\n );\n }\n\n /**\n * Disconnect meeting audio via phone.\n * @returns {Promise} Resolves once the phone audio disconnection has completed\n * @public\n * @memberof Meeting\n * @returns {Promise}\n */\n public disconnectPhoneAudio() {\n return Promise.all([\n this.isPhoneProvisioned(this.dialInDeviceStatus)\n ? MeetingUtil.disconnectPhoneAudio(this, this.dialInUrl)\n : Promise.resolve(),\n this.isPhoneProvisioned(this.dialOutDeviceStatus)\n ? MeetingUtil.disconnectPhoneAudio(this, this.dialOutUrl)\n : Promise.resolve(),\n ]);\n }\n\n /**\n * Moves the call to the specified resourceId\n * @param {String} resourceId\n * @returns {Promise} once the move has been completed\n * @public\n * @memberof Meeting\n */\n public moveTo(resourceId: string) {\n if (!resourceId) {\n throw new ParameterError('Cannot move call without a resourceId.');\n }\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.capabilities',\n payload: {\n mediaCapabilities: {\n rx: {\n audio: false,\n share: true,\n share_audio: false,\n video: false,\n whiteboard: false,\n },\n tx: {\n audio: false,\n share: false,\n share_audio: false,\n video: false,\n whiteboard: false,\n },\n },\n },\n options: {meetingId: this.id},\n });\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.move-media',\n options: {meetingId: this.id},\n });\n\n this.locusInfo.once(LOCUSINFO.EVENTS.SELF_OBSERVING, async () => {\n // Clean up the camera , microphone stream and re initiate it\n\n try {\n if (this.screenShareFloorState === ScreenShareFloorStatus.GRANTED) {\n await this.releaseScreenShareFloor();\n }\n const mediaSettings = {\n mediaDirection: {\n sendVideo: false,\n receiveVideo: false,\n sendAudio: false,\n receiveAudio: false,\n sendShare: false,\n receiveShare: true,\n },\n };\n\n this.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);\n this.mediaProperties.unsetRemoteMedia();\n\n // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the device answers the meeting\n // once the device answers we close the old connection and create new media server connection with only share enabled\n if (this.statsAnalyzer) {\n await this.statsAnalyzer.stopAnalyzer();\n }\n await this.closeRemoteStreams();\n await this.closePeerConnections();\n this.cleanupLocalStreams();\n this.unsetRemoteStreams();\n this.unsetPeerConnections();\n this.reconnectionManager.cleanUp();\n\n await this.addMedia({\n audioEnabled: false,\n videoEnabled: false,\n shareVideoEnabled: true,\n });\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MOVE_TO_SUCCESS);\n this.isMoveToInProgress = false;\n } catch (error) {\n LoggerProxy.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MOVE_TO_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n this.isMoveToInProgress = false;\n }\n });\n\n LoggerProxy.logger.info(\n 'Meeting:index#moveTo --> Initated moved to using resourceId',\n resourceId\n );\n\n // TODO: Check with locus if SELF_OBSERVING event would ever be not emitted\n // If yes, introduce a timeout mechanism\n this.isMoveToInProgress = true;\n\n return MeetingUtil.joinMeetingOptions(this, {resourceId, moveToResource: true})\n .then(() => {\n this.meetingFiniteStateMachine.join();\n })\n .catch((error) => {\n this.meetingFiniteStateMachine.fail(error);\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MOVE_TO_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n LoggerProxy.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);\n this.isMoveToInProgress = false;\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Moves the call from the specified resourceId, back to computer\n * @param {String} resourceId\n * @returns {Promise} once the move has been completed\n * @public\n * @memberof Meeting\n */\n public moveFrom(resourceId: string) {\n // On moveFrom ask the developer to re capture it moveFrom then updateMedia\n if (!resourceId) {\n throw new ParameterError('Cannot move call without a resourceId.');\n }\n const oldCorrelationId = this.correlationId;\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.move-media',\n options: {meetingId: this.id},\n });\n\n return MeetingUtil.joinMeetingOptions(this)\n .then(() =>\n MeetingUtil.leaveMeeting(this, {\n resourceId,\n correlationId: oldCorrelationId,\n moveMeeting: true,\n }).then(() => {\n this.resourceId = '';\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MOVE_FROM_SUCCESS);\n })\n )\n .catch((error) => {\n this.meetingFiniteStateMachine.fail(error);\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MOVE_FROM_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n LoggerProxy.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Handles ROAP_FAILURE event from the webrtc media connection\n *\n * @param {Error} error\n * @returns {void}\n */\n handleRoapFailure = (error) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const sendBehavioralMetric = (metricName, error, correlationId) => {\n const data = {\n code: error.code,\n correlation_id: correlationId,\n reason: error.message,\n stack: error.stack,\n };\n const metadata = {\n type: error.cause?.name || error.name,\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n };\n\n if (error instanceof Errors.SdpOfferCreationError) {\n sendBehavioralMetric(BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE, error, this.correlationId);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.local-sdp-generated',\n payload: {\n canProceed: false,\n },\n options: {meetingId: this.id, rawError: error},\n });\n } else if (\n error instanceof Errors.SdpOfferHandlingError ||\n error instanceof Errors.SdpAnswerHandlingError\n ) {\n sendBehavioralMetric(BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE, error, this.correlationId);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.remote-sdp-received',\n payload: {\n canProceed: false,\n },\n options: {meetingId: this.id, rawError: error},\n });\n } else if (error instanceof Errors.SdpError) {\n // this covers also the case of Errors.IceGatheringError which extends Errors.SdpError\n sendBehavioralMetric(BEHAVIORAL_METRICS.INVALID_ICE_CANDIDATE, error, this.correlationId);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.local-sdp-generated',\n payload: {\n canProceed: false,\n },\n options: {meetingId: this.id, rawError: error},\n });\n }\n };\n\n /**\n * Handles an incoming Roap message\n * @internal\n * @param {RoapMessage} roapMessage roap message\n * @returns {undefined}\n */\n public roapMessageReceived = (roapMessage: RoapMessage) => {\n const mediaServer = MeetingsUtil.getMediaServer(roapMessage.sdp);\n\n this.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);\n\n if (mediaServer) {\n this.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;\n }\n };\n\n /**\n * This function makes sure we send the right metrics when local and remote SDPs are processed/generated\n *\n * @returns {undefined}\n */\n setupSdpListeners = () => {\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED,\n () => {\n // @ts-ignore\n const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.remote-sdp-received',\n options: {meetingId: this.id},\n });\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_OFFER_TO_ANSWER_LATENCY, {\n correlation_id: this.correlationId,\n latency: cdl.getLocalSDPGenRemoteSDPRecv(),\n meetingId: this.id,\n });\n\n if (this.deferSDPAnswer) {\n this.deferSDPAnswer.resolve();\n clearTimeout(this.sdpResponseTimer);\n this.sdpResponseTimer = undefined;\n }\n }\n );\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED,\n () => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.local-sdp-generated',\n options: {meetingId: this.id},\n });\n\n // Instantiate Defer so that the SDP offer/answer exchange timeout can start, see waitForRemoteSDPAnswer()\n this.deferSDPAnswer = new Defer();\n }\n );\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED,\n () => {\n // we are sending \"remote-sdp-received\" only after we've generated the answer - this indicates that we've fully processed that incoming offer\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.remote-sdp-received',\n options: {meetingId: this.id},\n });\n }\n );\n };\n\n setupMediaConnectionListeners = () => {\n this.setupSdpListeners();\n\n this.mediaProperties.webrtcMediaConnection.on(MediaConnectionEventNames.ROAP_STARTED, () => {\n this.isRoapInProgress = true;\n });\n\n this.mediaProperties.webrtcMediaConnection.on(MediaConnectionEventNames.ROAP_DONE, () => {\n this.mediaNegotiatedEvent();\n this.isRoapInProgress = false;\n this.processNextQueuedMediaUpdate();\n });\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.ROAP_FAILURE,\n this.handleRoapFailure\n );\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND,\n (event) => {\n const LOG_HEADER = `Meeting:index#setupMediaConnectionListeners.ROAP_MESSAGE_TO_SEND --> correlationId=${this.correlationId}`;\n\n switch (event.roapMessage.messageType) {\n case 'OK':\n logRequest(\n this.roap.sendRoapOK({\n seq: event.roapMessage.seq,\n mediaId: this.mediaId,\n correlationId: this.correlationId,\n }),\n {\n logText: `${LOG_HEADER} Roap OK`,\n }\n );\n break;\n\n case 'OFFER':\n logRequest(\n this.roap\n .sendRoapMediaRequest({\n sdp: event.roapMessage.sdp,\n seq: event.roapMessage.seq,\n tieBreaker: event.roapMessage.tieBreaker,\n meeting: this, // or can pass meeting ID\n })\n .then(({roapAnswer}) => {\n if (roapAnswer) {\n LoggerProxy.logger.log(`${LOG_HEADER} received Roap ANSWER in http response`);\n\n this.roapMessageReceived(roapAnswer);\n }\n }),\n {\n logText: `${LOG_HEADER} Roap Offer`,\n }\n ).catch((error) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.remote-sdp-received',\n payload: {\n canProceed: false,\n errors: [\n // @ts-ignore\n this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode(\n {\n clientErrorCode: CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE,\n }\n ),\n ],\n },\n options: {meetingId: this.id, rawError: error},\n });\n\n this.deferSDPAnswer.reject(new Error('failed to send ROAP SDP offer'));\n clearTimeout(this.sdpResponseTimer);\n this.sdpResponseTimer = undefined;\n });\n break;\n\n case 'ANSWER':\n logRequest(\n this.roap.sendRoapAnswer({\n sdp: event.roapMessage.sdp,\n seq: event.roapMessage.seq,\n mediaId: this.mediaId,\n correlationId: this.correlationId,\n }),\n {\n logText: `${LOG_HEADER} Roap Answer`,\n }\n ).catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n };\n const metadata = {\n type: error.name,\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n });\n break;\n\n case 'ERROR':\n if (\n event.roapMessage.errorType === ErrorType.CONFLICT ||\n event.roapMessage.errorType === ErrorType.DOUBLECONFLICT\n ) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n sequence: event.roapMessage.seq,\n });\n }\n logRequest(\n this.roap.sendRoapError({\n seq: event.roapMessage.seq,\n errorType: event.roapMessage.errorType,\n mediaId: this.mediaId,\n correlationId: this.correlationId,\n }),\n {\n logText: `${LOG_HEADER} Roap Error (${event.roapMessage.errorType})`,\n }\n );\n break;\n\n default:\n LoggerProxy.logger.error(\n `${LOG_HEADER} Unsupported message type: ${event.roapMessage.messageType}`\n );\n break;\n }\n }\n );\n\n // eslint-disable-next-line no-param-reassign\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.REMOTE_TRACK_ADDED,\n (event) => {\n LoggerProxy.logger.log(\n `Meeting:index#setupMediaConnectionListeners --> REMOTE_TRACK_ADDED event received for webrtcMediaConnection: ${JSON.stringify(\n event\n )}`\n );\n\n if (event.track) {\n const mediaTrack = event.track;\n const remoteStream = new RemoteStream(MediaUtil.createMediaStream([mediaTrack]));\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n let eventType;\n\n switch (event.type) {\n case RemoteTrackType.AUDIO:\n eventType = EVENT_TYPES.REMOTE_AUDIO;\n this.mediaProperties.setRemoteAudioStream(remoteStream);\n break;\n case RemoteTrackType.VIDEO:\n eventType = EVENT_TYPES.REMOTE_VIDEO;\n this.mediaProperties.setRemoteVideoStream(remoteStream);\n break;\n case RemoteTrackType.SCREENSHARE_VIDEO:\n eventType = EVENT_TYPES.REMOTE_SHARE;\n this.mediaProperties.setRemoteShareStream(remoteStream);\n break;\n default: {\n LoggerProxy.logger.log(\n 'Meeting:index#setupMediaConnectionListeners --> unexpected track'\n );\n }\n }\n\n if (eventType && mediaTrack) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupRemoteTrackListener:MediaConnectionEventNames.REMOTE_TRACK_ADDED',\n },\n EVENT_TRIGGERS.MEDIA_READY,\n {\n type: eventType,\n stream: remoteStream.outputStream,\n }\n );\n }\n }\n }\n );\n\n this.connectionStateHandler = new ConnectionStateHandler(\n this.mediaProperties.webrtcMediaConnection\n );\n\n this.connectionStateHandler.on(ConnectionStateEvent.stateChanged, (event) => {\n const connectionFailed = () => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.CONNECTION_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusId,\n networkStatus: this.networkStatus,\n hasMediaConnectionConnectedAtLeastOnce: this.hasMediaConnectionConnectedAtLeastOnce,\n });\n\n if (this.hasMediaConnectionConnectedAtLeastOnce) {\n // we know the media connection failed and browser will not attempt to recover it any more\n // so reset the timer as it's not needed anymore, we want to reconnect immediately\n this.reconnectionManager.resetReconnectionTimer();\n\n this.reconnect({networkDisconnect: true});\n\n this.uploadLogs({\n file: 'peer-connection-manager/index',\n function: 'connectionFailed',\n });\n }\n };\n\n LoggerProxy.logger.info(\n `Meeting:index#setupMediaConnectionListeners --> correlationId=${this.correlationId} connection state changed to ${event.state}`\n );\n\n // @ts-ignore\n const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;\n switch (event.state) {\n case ConnectionState.Connecting:\n if (!this.hasMediaConnectionConnectedAtLeastOnce) {\n // Only send CA event for join flow if we haven't successfully connected media yet\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.ice.start',\n options: {\n meetingId: this.id,\n },\n });\n }\n break;\n case ConnectionState.Connected:\n if (!this.hasMediaConnectionConnectedAtLeastOnce) {\n // Only send CA event for join flow if we haven't successfully connected media yet\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.ice.end',\n payload: {\n canProceed: true,\n icePhase: 'JOIN_MEETING_FINAL',\n },\n options: {\n meetingId: this.id,\n },\n });\n }\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.CONNECTION_SUCCESS, {\n correlation_id: this.correlationId,\n locus_id: this.locusId,\n latency: cdl.getICESetupTime(),\n });\n this.setNetworkStatus(NETWORK_STATUS.CONNECTED);\n this.reconnectionManager.iceReconnected();\n this.statsAnalyzer.startAnalyzer(this.mediaProperties.webrtcMediaConnection);\n this.hasMediaConnectionConnectedAtLeastOnce = true;\n break;\n case ConnectionState.Disconnected:\n this.setNetworkStatus(NETWORK_STATUS.DISCONNECTED);\n this.reconnectionManager.waitForIceReconnect().catch(() => {\n LoggerProxy.logger.info(\n 'Meeting:index#setupMediaConnectionListeners --> state DISCONNECTED, automatic reconnection timed out.'\n );\n\n connectionFailed();\n });\n break;\n case ConnectionState.Failed:\n connectionFailed();\n break;\n default:\n break;\n }\n });\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.ACTIVE_SPEAKERS_CHANGED,\n (csis) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupMediaConnectionListeners',\n },\n EVENT_TRIGGERS.ACTIVE_SPEAKER_CHANGED,\n {\n memberIds: csis\n // @ts-ignore\n .map((csi) => this.members.findMemberByCsi(csi)?.id)\n .filter((item) => item !== undefined),\n }\n );\n }\n );\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.VIDEO_SOURCES_COUNT_CHANGED,\n (numTotalSources, numLiveSources, mediaContent) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupMediaConnectionListeners',\n },\n EVENT_TRIGGERS.REMOTE_VIDEO_SOURCE_COUNT_CHANGED,\n {\n numTotalSources,\n numLiveSources,\n mediaContent,\n }\n );\n\n if (mediaContent === MediaContent.Main) {\n this.mediaRequestManagers.video.setNumCurrentSources(numTotalSources, numLiveSources);\n }\n }\n );\n\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.AUDIO_SOURCES_COUNT_CHANGED,\n (numTotalSources, numLiveSources, mediaContent) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'setupMediaConnectionListeners',\n },\n EVENT_TRIGGERS.REMOTE_AUDIO_SOURCE_COUNT_CHANGED,\n {\n numTotalSources,\n numLiveSources,\n mediaContent,\n }\n );\n }\n );\n\n this.iceCandidateErrors.clear();\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CANDIDATE_ERROR,\n (event) => {\n const {errorCode} = event.error;\n let {errorText} = event.error;\n\n if (\n errorCode === 600 &&\n errorText === 'Address not associated with the desired network interface.'\n ) {\n return;\n }\n\n if (errorText.endsWith('.')) {\n errorText = errorText.slice(0, -1);\n }\n\n errorText = errorText.toLowerCase();\n errorText = errorText.replace(/ /g, '_');\n\n const error = `${errorCode}_${errorText}`;\n\n const count = this.iceCandidateErrors.get(error) || 0;\n\n this.iceCandidateErrors.set(error, count + 1);\n }\n );\n\n this.iceCandidatesCount = 0;\n this.mediaProperties.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CANDIDATE,\n (event) => {\n if (event.candidate) {\n this.iceCandidatesCount += 1;\n }\n }\n );\n };\n\n /**\n * Registers for all required StatsAnalyzer events\n * @private\n * @returns {void}\n * @memberof Meetings\n */\n setupStatsAnalyzerEventHandlers = () => {\n this.statsAnalyzer.on(StatsAnalyzerEventNames.MEDIA_QUALITY, (options) => {\n // TODO: might have to send the same event to the developer\n // Add ip address info if geo hint is present\n // @ts-ignore fix type\n options.data.intervalMetadata.peerReflexiveIP =\n // @ts-ignore\n this.webex.meetings.geoHintInfo?.clientAddress ||\n options.data.intervalMetadata.peerReflexiveIP ||\n MQA_STATS.DEFAULT_IP;\n // @ts-ignore\n this.webex.internal.newMetrics.submitMQE({\n name: 'client.mediaquality.event',\n options: {\n meetingId: this.id,\n networkType: options.data.networkType,\n },\n payload: {\n intervals: [options.data],\n },\n });\n });\n\n this.statsAnalyzer.on(StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED, (data) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'addMedia',\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n data\n );\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.tx.start',\n payload: {\n mediaType: data.mediaType,\n shareInstanceId: data.mediaType === 'share' ? this.localShareInstanceId : undefined,\n },\n options: {\n meetingId: this.id,\n },\n });\n });\n this.statsAnalyzer.on(StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED, (data) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.tx.stop',\n payload: {\n mediaType: data.mediaType,\n shareInstanceId: data.mediaType === 'share' ? this.localShareInstanceId : undefined,\n },\n options: {\n meetingId: this.id,\n },\n });\n });\n this.statsAnalyzer.on(StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED, (data) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'addMedia',\n },\n EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,\n data\n );\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.rx.start',\n payload: {\n mediaType: data.mediaType,\n shareInstanceId: data.mediaType === 'share' ? this.remoteShareInstanceId : undefined,\n },\n options: {\n meetingId: this.id,\n },\n });\n\n if (data.mediaType === 'share') {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.render.start',\n payload: {\n mediaType: 'share',\n shareInstanceId: this.remoteShareInstanceId,\n },\n options: {\n meetingId: this.id,\n },\n });\n }\n });\n this.statsAnalyzer.on(StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED, (data) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.rx.stop',\n payload: {\n mediaType: data.mediaType,\n shareInstanceId: data.mediaType === 'share' ? this.remoteShareInstanceId : undefined,\n },\n options: {\n meetingId: this.id,\n },\n });\n\n if (data.mediaType === 'share') {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.render.stop',\n payload: {\n mediaType: 'share',\n shareInstanceId: this.remoteShareInstanceId,\n },\n options: {\n meetingId: this.id,\n },\n });\n }\n });\n };\n\n getMediaConnectionDebugId() {\n return `MC-${this.id.substring(0, 4)}`;\n }\n\n /**\n * Creates a webrtc media connection and publishes streams to it\n *\n * @param {Object} turnServerInfo TURN server information\n * @param {BundlePolicy} [bundlePolicy] Bundle policy settings\n * @param {AddMediaOptions} [options] Options for enabling/disabling audio/video\n * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}\n */\n private async createMediaConnection(turnServerInfo, bundlePolicy?: BundlePolicy) {\n const mc = Media.createMediaConnection(\n this.isMultistream,\n this.getMediaConnectionDebugId(),\n // @ts-ignore\n this.webex,\n this.id,\n this.correlationId,\n {\n mediaProperties: this.mediaProperties,\n remoteQualityLevel: this.mediaProperties.remoteQualityLevel,\n // @ts-ignore - config coming from registerPlugin\n enableRtx: this.config.enableRtx,\n // @ts-ignore - config coming from registerPlugin\n enableExtmap: this.config.enableExtmap,\n turnServerInfo,\n bundlePolicy,\n }\n );\n\n this.mediaProperties.setMediaPeerConnection(mc);\n this.setupMediaConnectionListeners();\n\n if (this.isMultistream) {\n const [audioEnabled, videoEnabled, shareEnabled] = [\n this.mediaProperties.mediaDirection.sendAudio ||\n this.mediaProperties.mediaDirection.receiveAudio,\n this.mediaProperties.mediaDirection.sendVideo ||\n this.mediaProperties.mediaDirection.receiveVideo,\n this.mediaProperties.mediaDirection.sendShare ||\n this.mediaProperties.mediaDirection.receiveShare,\n ];\n\n this.sendSlotManager.createSlot(mc, MediaType.VideoMain, videoEnabled);\n this.sendSlotManager.createSlot(mc, MediaType.AudioMain, audioEnabled);\n this.sendSlotManager.createSlot(mc, MediaType.VideoSlides, shareEnabled);\n this.sendSlotManager.createSlot(mc, MediaType.AudioSlides, shareEnabled);\n }\n\n // publish the streams\n if (this.mediaProperties.audioStream) {\n this.setSendNamedMediaGroup(MediaType.AudioMain);\n await this.publishStream(MediaType.AudioMain, this.mediaProperties.audioStream);\n }\n if (this.mediaProperties.videoStream) {\n await this.publishStream(MediaType.VideoMain, this.mediaProperties.videoStream);\n }\n if (this.mediaProperties.shareVideoStream) {\n await this.publishStream(MediaType.VideoSlides, this.mediaProperties.shareVideoStream);\n }\n if (this.isMultistream && this.mediaProperties.shareAudioStream) {\n await this.publishStream(MediaType.AudioSlides, this.mediaProperties.shareAudioStream);\n }\n\n return mc;\n }\n\n /**\n * Listens for an event emitted by eventEmitter and emits it from the meeting object\n *\n * @private\n * @param {*} eventEmitter object from which to forward the event\n * @param {*} eventTypeToForward which event type to listen on and to forward\n * @param {string} meetingEventType event type to be used in the event emitted from the meeting object\n * @returns {void}\n */\n forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {\n eventEmitter.on(eventTypeToForward, (data) =>\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'addMedia',\n },\n meetingEventType,\n data\n )\n );\n }\n\n /**\n * Sets up all the references to local streams in this.mediaProperties before creating media connection\n * and before TURN discovery, so that the correct mute state is sent with TURN discovery roap messages.\n *\n * @private\n * @param {LocalStreams} localStreams\n * @returns {Promise}\n */\n private async setUpLocalStreamReferences(localStreams: LocalStreams) {\n const setUpStreamPromises = [];\n\n if (localStreams?.microphone && localStreams?.microphone?.readyState !== 'ended') {\n setUpStreamPromises.push(this.setLocalAudioStream(localStreams.microphone));\n }\n if (localStreams?.camera && localStreams?.camera?.readyState !== 'ended') {\n setUpStreamPromises.push(this.setLocalVideoStream(localStreams.camera));\n }\n if (\n localStreams?.screenShare?.video &&\n localStreams?.screenShare?.video?.readyState !== 'ended'\n ) {\n setUpStreamPromises.push(this.setLocalShareVideoStream(localStreams.screenShare.video));\n }\n if (\n localStreams?.screenShare?.audio &&\n localStreams?.screenShare?.audio?.readyState !== 'ended'\n ) {\n setUpStreamPromises.push(this.setLocalShareAudioStream(localStreams.screenShare.audio));\n }\n\n try {\n await Promise.all(setUpStreamPromises);\n } catch (error) {\n LoggerProxy.logger.error(\n `Meeting:index#addMedia():setUpLocalStreamReferences --> Error , `,\n error\n );\n\n throw error;\n }\n }\n\n /**\n * Calls mediaProperties.waitForMediaConnectionConnected() and sends CA client.ice.end metric on failure\n *\n * @private\n * @returns {Promise}\n */\n private async waitForMediaConnectionConnected(): Promise {\n try {\n await this.mediaProperties.waitForMediaConnectionConnected();\n } catch (error) {\n const {iceConnected} = error;\n\n if (!this.hasMediaConnectionConnectedAtLeastOnce) {\n // Only send CA event for join flow if we haven't successfully connected media yet\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.ice.end',\n payload: {\n canProceed: !this.turnServerUsed, // If we haven't done turn tls retry yet we will proceed with join attempt\n icePhase: this.addMediaData.icePhaseCallback(),\n errors: [\n // @ts-ignore\n this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode(\n {\n clientErrorCode: CallDiagnosticUtils.generateClientErrorCodeForIceFailure({\n signalingState:\n this.mediaProperties.webrtcMediaConnection?.multistreamConnection?.pc?.pc\n ?.signalingState ||\n this.mediaProperties.webrtcMediaConnection?.mediaConnection?.pc\n ?.signalingState ||\n 'unknown',\n iceConnected,\n turnServerUsed: this.turnServerUsed,\n unreachable:\n // @ts-ignore\n await this.webex.meetings.reachability\n .isWebexMediaBackendUnreachable()\n .catch(() => false),\n }),\n }\n ),\n ],\n },\n options: {\n meetingId: this.id,\n },\n });\n }\n throw new Error(\n `Timed out waiting for media connection to be connected, correlationId=${this.correlationId}`\n );\n }\n }\n\n /**\n * Enables statsAnalyser if config allows it\n *\n * @private\n * @returns {void}\n */\n private createStatsAnalyzer() {\n // @ts-ignore - config coming from registerPlugin\n if (this.config.stats.enableStatsAnalyzer) {\n // @ts-ignore - config coming from registerPlugin\n this.networkQualityMonitor = new NetworkQualityMonitor(this.config.stats);\n this.statsAnalyzer = new StatsAnalyzer({\n // @ts-ignore - config coming from registerPlugin\n config: this.config.stats,\n networkQualityMonitor: this.networkQualityMonitor,\n isMultistream: this.isMultistream,\n });\n this.setupStatsAnalyzerEventHandlers();\n this.networkQualityMonitor.on(\n EVENT_TRIGGERS.NETWORK_QUALITY,\n this.sendNetworkQualityEvent.bind(this)\n );\n }\n }\n\n /**\n * Handles device logging\n *\n * @private\n * @static\n * @returns {Promise}\n */\n private static async handleDeviceLogging(): Promise {\n try {\n const devices = await getDevices();\n\n MeetingUtil.handleDeviceLogging(devices);\n } catch {\n // getDevices may fail if we don't have browser permissions, that's ok, we still can have a media connection\n }\n }\n\n /**\n * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved\n * once the remote sdp answer has been received.\n *\n * @private\n * @returns {Promise}\n */\n private async waitForRemoteSDPAnswer(): Promise {\n const LOG_HEADER = 'Meeting:index#addMedia():waitForRemoteSDPAnswer -->';\n\n if (!this.deferSDPAnswer) {\n LoggerProxy.logger.warn(`${LOG_HEADER} offer not created yet`);\n\n return Promise.reject(\n new Error('waitForRemoteSDPAnswer() called before local sdp offer created')\n );\n }\n\n const {deferSDPAnswer} = this;\n\n this.sdpResponseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(\n `${LOG_HEADER} timeout! no REMOTE SDP ANSWER received within ${\n ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000\n } seconds`\n );\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.remote-sdp-received',\n payload: {\n canProceed: false,\n errors: [\n // @ts-ignore\n this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({\n clientErrorCode: CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE,\n }),\n ],\n },\n options: {meetingId: this.id, rawError: new Error('Timeout waiting for SDP answer')},\n });\n\n deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));\n }, ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);\n\n LoggerProxy.logger.info(`${LOG_HEADER} waiting for REMOTE SDP ANSWER...`);\n\n return deferSDPAnswer.promise;\n }\n\n /**\n * Calls establishMediaConnection with isForced = true to force turn discovery to happen\n *\n * @private\n * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]\n * @param {BundlePolicy} [bundlePolicy]\n * @returns {Promise}\n */\n private async retryEstablishMediaConnectionWithForcedTurnDiscovery(\n remoteMediaManagerConfig?: RemoteMediaManagerConfiguration,\n bundlePolicy?: BundlePolicy\n ): Promise {\n const LOG_HEADER =\n 'Meeting:index#addMedia():retryEstablishMediaConnectionWithForcedTurnDiscovery -->';\n\n try {\n await this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true);\n } catch (err) {\n LoggerProxy.logger.error(\n `${LOG_HEADER} retry with TURN-TLS failed, media connection unable to connect, `,\n err\n );\n\n throw err;\n }\n }\n\n /**\n * Does relevant clean up before retrying to establish media connection\n * and performs the retry with forced turn discovery\n *\n * @private\n * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]\n * @param {BundlePolicy} [bundlePolicy]\n * @returns {Promise}\n */\n private async retryWithForcedTurnDiscovery(\n remoteMediaManagerConfig?: RemoteMediaManagerConfiguration,\n bundlePolicy?: BundlePolicy\n ): Promise {\n this.addMediaData.retriedWithTurnServer = true;\n const LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';\n\n await this.cleanUpBeforeRetryWithTurnServer();\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_MEDIA_RETRY, {\n correlation_id: this.correlationId,\n state: this.state,\n meetingState: this.meetingState,\n reason: 'forcingTurnTls',\n });\n\n if (this.state === MEETING_STATE.STATES.LEFT) {\n LoggerProxy.logger.info(\n `${LOG_HEADER} meeting state was LEFT after first attempt to establish media connection. Attempting to rejoin. `\n );\n await this.join({rejoin: true});\n }\n\n await this.retryEstablishMediaConnectionWithForcedTurnDiscovery(\n remoteMediaManagerConfig,\n bundlePolicy\n );\n }\n\n /**\n * If waitForMediaConnectionConnected() fails when we haven't done turn discovery then we\n * attempt to establish a media connection again, but this time using turn discovery. If we\n * used turn discovery on the first pass we do not attempt connection again.\n *\n * @private\n * @param {Error} error\n * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]\n * @param {BundlePolicy} [bundlePolicy]\n * @returns {Promise}\n */\n private async handleWaitForMediaConnectionConnectedError(\n error: Error,\n remoteMediaManagerConfig?: RemoteMediaManagerConfiguration,\n bundlePolicy?: BundlePolicy\n ): Promise {\n const LOG_HEADER = 'Meeting:index#addMedia():handleWaitForMediaConnectionConnectedError -->';\n\n // @ts-ignore - config coming from registerPlugin\n if (!this.turnServerUsed) {\n LoggerProxy.logger.info(\n `${LOG_HEADER} error waiting for media to connect on UDP, TCP, retrying using TURN-TLS, `,\n error\n );\n\n await this.retryWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);\n } else {\n LoggerProxy.logger.error(\n `${LOG_HEADER} error waiting for media to connect using UDP, TCP and TURN-TLS`,\n error\n );\n\n throw new AddMediaFailed();\n }\n }\n\n /**\n * Performs TURN discovery as a separate call to the Locus /media API\n *\n * @param {boolean} isReconnecting\n * @param {boolean} isForced\n * @returns {Promise}\n */\n private async doTurnDiscovery(\n isReconnecting: boolean,\n isForced: boolean\n ): Promise {\n // @ts-ignore\n const cdl = this.webex.internal.newMetrics.callDiagnosticLatencies;\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.add-media.turn-discovery.start',\n });\n\n const turnDiscoveryResult = await this.roap.doTurnDiscovery(this, isReconnecting, isForced);\n\n this.turnDiscoverySkippedReason = turnDiscoveryResult?.turnDiscoverySkippedReason;\n this.turnServerUsed = !this.turnDiscoverySkippedReason;\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitInternalEvent({\n name: 'internal.client.add-media.turn-discovery.end',\n });\n\n if (this.turnServerUsed && turnDiscoveryResult.turnServerInfo) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_LATENCY, {\n correlation_id: this.correlationId,\n latency: cdl.getTurnDiscoveryTime(),\n turnServerUsed: this.turnServerUsed,\n retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,\n });\n }\n\n return turnDiscoveryResult;\n }\n\n /**\n * Does TURN discovery, SDP offer/answer exhange, establishes ICE connection and DTLS handshake.\n *\n * @private\n * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]\n * @param {BundlePolicy} [bundlePolicy]\n * @param {boolean} [isForced] - let isForced be true to do turn discovery regardless of reachability results\n * @param {TurnServerInfo} [turnServerInfo]\n * @returns {Promise}\n */\n private async establishMediaConnection(\n remoteMediaManagerConfig?: RemoteMediaManagerConfiguration,\n bundlePolicy?: BundlePolicy,\n isForced?: boolean,\n turnServerInfo?: TurnServerInfo\n ): Promise {\n const LOG_HEADER = 'Meeting:index#addMedia():establishMediaConnection -->';\n const isReconnecting =\n this.isMoveToInProgress || !!this.locusMediaRequest?.isConfluenceCreated();\n\n // We are forcing turn discovery if the case is moveTo and a turn server was used already\n if (this.isMoveToInProgress && this.turnServerUsed) {\n isForced = true;\n }\n\n try {\n if (!turnServerInfo) {\n ({turnServerInfo} = await this.doTurnDiscovery(isReconnecting, isForced));\n }\n\n const mc = await this.createMediaConnection(turnServerInfo, bundlePolicy);\n\n LoggerProxy.logger.info(`${LOG_HEADER} media connection created`);\n\n if (this.isMultistream) {\n this.remoteMediaManager = new RemoteMediaManager(\n this.receiveSlotManager,\n this.mediaRequestManagers,\n remoteMediaManagerConfig\n );\n\n this.forwardEvent(\n this.remoteMediaManager,\n RemoteMediaManagerEvent.AudioCreated,\n EVENT_TRIGGERS.REMOTE_MEDIA_AUDIO_CREATED\n );\n this.forwardEvent(\n this.remoteMediaManager,\n RemoteMediaManagerEvent.InterpretationAudioCreated,\n EVENT_TRIGGERS.REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED\n );\n this.forwardEvent(\n this.remoteMediaManager,\n RemoteMediaManagerEvent.ScreenShareAudioCreated,\n EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED\n );\n this.forwardEvent(\n this.remoteMediaManager,\n RemoteMediaManagerEvent.VideoLayoutChanged,\n EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED\n );\n\n await this.remoteMediaManager.start();\n }\n\n await mc.initiateOffer();\n\n await this.waitForRemoteSDPAnswer();\n\n this.handleMediaLogging(this.mediaProperties);\n } catch (error) {\n LoggerProxy.logger.error(`${LOG_HEADER} error establishing media connection, `, error);\n\n throw error;\n }\n\n try {\n await this.waitForMediaConnectionConnected();\n } catch (error) {\n await this.handleWaitForMediaConnectionConnectedError(\n error,\n remoteMediaManagerConfig,\n bundlePolicy\n );\n }\n }\n\n /**\n * Cleans up stats analyzer, peer connection, and turns off listeners\n *\n * @private\n * @returns {Promise}\n */\n private async cleanUpOnAddMediaFailure(): Promise {\n if (this.statsAnalyzer) {\n await this.statsAnalyzer.stopAnalyzer();\n }\n\n this.statsAnalyzer = null;\n\n // when media fails, we want to upload a webrtc dump to see whats going on\n // this function is async, but returns once the stats have been gathered\n await this.forceSendStatsReport({callFrom: 'addMedia'});\n\n if (this.mediaProperties.webrtcMediaConnection) {\n this.closePeerConnections();\n this.unsetPeerConnections();\n }\n }\n\n /**\n * Sends stats report, closes peer connection and cleans up any media connection\n * related things before trying to establish media connection again with turn server\n *\n * @private\n * @returns {Promise}\n */\n private async cleanUpBeforeRetryWithTurnServer(): Promise {\n // when media fails, we want to upload a webrtc dump to see whats going on\n // this function is async, but returns once the stats have been gathered\n await this.forceSendStatsReport({callFrom: 'cleanUpBeforeRetryWithTurnServer'});\n\n if (this.mediaProperties.webrtcMediaConnection) {\n if (this.remoteMediaManager) {\n this.remoteMediaManager.stop();\n this.remoteMediaManager = null;\n }\n\n Object.values(this.mediaRequestManagers).forEach((mediaRequestManager) =>\n mediaRequestManager.reset()\n );\n\n this.receiveSlotManager.reset();\n this.mediaProperties.webrtcMediaConnection.close();\n this.sendSlotManager.reset();\n\n this.mediaProperties.unsetPeerConnection();\n }\n }\n\n /**\n * Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls\n * to Locus /media API (these are used for sending Roap messages and updating audio/video mute status).\n *\n * @returns {void}\n */\n private setupLocusMediaRequest() {\n this.locusMediaRequest = new LocusMediaRequest(\n {\n correlationId: this.correlationId,\n meetingId: this.id,\n device: {\n url: this.deviceUrl,\n // @ts-ignore\n deviceType: this.config.deviceType,\n // @ts-ignore\n countryCode: this.webex.meetings.geoHintInfo?.countryCode,\n // @ts-ignore\n regionCode: this.webex.meetings.geoHintInfo?.regionCode,\n },\n preferTranscoding: !this.isMultistream,\n },\n {\n // @ts-ignore\n parent: this.webex,\n }\n );\n }\n\n /**\n * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.\n *\n * @param {AddMediaOptions} options\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n addMedia(options: AddMediaOptions = {}): Promise {\n return this.addMediaInternal(\n () => (this.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY'),\n undefined,\n false,\n options\n );\n }\n\n /**\n * Internal version of addMedia() with some more arguments for finer control of its behavior\n *\n * @param {Function} icePhaseCallback - callback to determine the icePhase for CA \"client.ice.end\" failure events\n * @param {TurnServerInfo} turnServerInfo - TURN server information\n * @param {boolean} forceTurnDiscovery - if true, TURN discovery will be done\n * @param {AddMediaOptions} options - same as options of the public addMedia() method\n * @returns {Promise}\n * @protected\n * @memberof Meeting\n */\n protected async addMediaInternal(\n icePhaseCallback: () => string,\n turnServerInfo: TurnServerInfo,\n forceTurnDiscovery,\n options: AddMediaOptions = {}\n ): Promise {\n this.addMediaData.retriedWithTurnServer = false;\n this.addMediaData.icePhaseCallback = icePhaseCallback;\n\n this.hasMediaConnectionConnectedAtLeastOnce = false;\n const LOG_HEADER = 'Meeting:index#addMedia -->';\n LoggerProxy.logger.info(\n `${LOG_HEADER} called with: options=${JSON.stringify(\n options\n )}, turnServerInfo=${JSON.stringify(\n turnServerInfo\n )}, forceTurnDiscovery=${forceTurnDiscovery}`\n );\n\n if (options.allowMediaInLobby !== true && this.meetingState !== FULL_STATE.ACTIVE) {\n throw new MeetingNotActiveError();\n }\n\n if (MeetingUtil.isUserInLeftState(this.locusInfo)) {\n throw new UserNotJoinedError();\n }\n\n const {\n localStreams,\n audioEnabled = true,\n videoEnabled = true,\n shareAudioEnabled = true,\n shareVideoEnabled = true,\n remoteMediaManagerConfig,\n bundlePolicy,\n } = options;\n\n this.allowMediaInLobby = options?.allowMediaInLobby;\n\n // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia\n // @ts-ignore - isUserUnadmitted coming from SelfUtil\n if (this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby) {\n throw new UserInLobbyError();\n }\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.capabilities',\n payload: {\n mediaCapabilities: {\n rx: {\n audio: false,\n share: false,\n share_audio: false,\n video: false,\n whiteboard: false,\n },\n tx: {\n audio: false,\n share: false,\n share_audio: false,\n video: false,\n whiteboard: false,\n },\n },\n },\n options: {meetingId: this.id},\n });\n\n // when audioEnabled/videoEnabled is true, we set sendAudio/sendVideo to true even before any streams are published\n // to avoid doing an extra SDP exchange when they are published for the first time\n this.mediaProperties.setMediaDirection({\n sendAudio: audioEnabled,\n sendVideo: videoEnabled,\n sendShare: false,\n receiveAudio: audioEnabled,\n receiveVideo: videoEnabled,\n receiveShare: shareAudioEnabled || shareVideoEnabled,\n });\n\n this.audio = createMuteState(AUDIO, this, audioEnabled);\n this.video = createMuteState(VIDEO, this, videoEnabled);\n\n try {\n await this.setUpLocalStreamReferences(localStreams);\n\n this.setMercuryListener();\n\n this.createStatsAnalyzer();\n\n await this.establishMediaConnection(\n remoteMediaManagerConfig,\n bundlePolicy,\n forceTurnDiscovery,\n turnServerInfo\n );\n\n if (audioEnabled || videoEnabled) {\n await Meeting.handleDeviceLogging();\n } else {\n LoggerProxy.logger.info(`${LOG_HEADER} device logging not required`);\n }\n\n if (this.mediaProperties.hasLocalShareStream()) {\n await this.enqueueScreenShareFloorRequest();\n }\n\n const {connectionType, selectedCandidatePairChanges, numTransports} =\n await this.mediaProperties.getCurrentConnectionInfo();\n // @ts-ignore\n const reachabilityStats = await this.webex.meetings.reachability.getReachabilityMetrics();\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n connectionType,\n selectedCandidatePairChanges,\n numTransports,\n isMultistream: this.isMultistream,\n retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,\n isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry,\n ...reachabilityStats,\n iceCandidatesCount: this.iceCandidatesCount,\n });\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media-engine.ready',\n options: {\n meetingId: this.id,\n },\n });\n LoggerProxy.logger.info(\n `${LOG_HEADER} successfully established media connection, type=${connectionType}`\n );\n\n // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:\n this.remoteMediaManager?.logAllReceiveSlots();\n } catch (error) {\n LoggerProxy.logger.error(`${LOG_HEADER} failed to establish media connection: `, error);\n\n // @ts-ignore\n const reachabilityMetrics = await this.webex.meetings.reachability.getReachabilityMetrics();\n\n const {selectedCandidatePairChanges, numTransports} =\n await this.mediaProperties.getCurrentConnectionInfo();\n\n const iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADD_MEDIA_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n code: error.code,\n selectedCandidatePairChanges,\n numTransports,\n turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,\n turnServerUsed: this.turnServerUsed,\n retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,\n isMultistream: this.isMultistream,\n isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry,\n signalingState:\n this.mediaProperties.webrtcMediaConnection?.multistreamConnection?.pc?.pc\n ?.signalingState ||\n this.mediaProperties.webrtcMediaConnection?.mediaConnection?.pc?.signalingState ||\n 'unknown',\n connectionState:\n this.mediaProperties.webrtcMediaConnection?.multistreamConnection?.pc?.pc\n ?.connectionState ||\n this.mediaProperties.webrtcMediaConnection?.mediaConnection?.pc?.connectionState ||\n 'unknown',\n iceConnectionState:\n this.mediaProperties.webrtcMediaConnection?.multistreamConnection?.pc?.pc\n ?.iceConnectionState ||\n this.mediaProperties.webrtcMediaConnection?.mediaConnection?.pc?.iceConnectionState ||\n 'unknown',\n ...reachabilityMetrics,\n ...iceCandidateErrors,\n iceCandidatesCount: this.iceCandidatesCount,\n });\n\n await this.cleanUpOnAddMediaFailure();\n\n // Upload logs on error while adding media\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'addMedia',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n\n if (error instanceof Errors.SdpError) {\n this.leave({reason: MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED});\n }\n\n throw error;\n } finally {\n this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;\n }\n }\n\n /**\n * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)\n * @returns {Boolean}\n */\n canUpdateMedia() {\n // in theory we shouldn't need this as RoapMediaConnection handles multiple updates, glare, etc,\n // but there are some server issues, like https://jira-eng-gpk2.cisco.com/jira/browse/WEBEX-248394\n // so for now it's better to keep queuing any media updates at SDK meeting level\n return !this.isRoapInProgress;\n }\n\n /**\n * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report\n * send a webrtc telemetry dump to the configured server using the internal media core check metrics configured callback\n * @param {String} callFrom - the function calling this function, optional.\n * @returns {Promise}\n */\n private forceSendStatsReport = async ({callFrom}: {callFrom?: string}) => {\n const LOG_HEADER = `Meeting:index#forceSendStatsReport --> called from ${callFrom} : `;\n try {\n await this.mediaProperties?.webrtcMediaConnection?.forceRtcMetricsSend();\n LoggerProxy.logger.info(\n `${LOG_HEADER} successfully uploaded available webrtc telemetry statistics`\n );\n } catch (e) {\n LoggerProxy.logger.error(`${LOG_HEADER} failed to upload webrtc telemetry statistics: `, e);\n }\n };\n\n /**\n * Enqueues a media update operation.\n * @param {String} mediaUpdateType one of MEDIA_UPDATE_TYPE values\n * @param {Object} options\n * @returns {Promise}\n * @private\n * @memberof Meeting\n */\n private enqueueMediaUpdate(mediaUpdateType: string, options: any = {}): Promise {\n const canUpdateMediaNow = this.canUpdateMedia();\n\n return new Promise((resolve, reject) => {\n const queueItem = {\n pendingPromiseResolve: resolve,\n pendingPromiseReject: reject,\n mediaUpdateType,\n options,\n };\n\n LoggerProxy.logger.log(\n `Meeting:index#enqueueMediaUpdate --> enqueuing media update type=${mediaUpdateType}`\n );\n this.queuedMediaUpdates.push(queueItem);\n\n if (canUpdateMediaNow) {\n this.processNextQueuedMediaUpdate();\n }\n });\n }\n\n /**\n * emits event when the negotation is completed\n * @returns {void}\n * @private\n * @memberof Meeting\n */\n mediaNegotiatedEvent = () => {\n // @ts-ignore - config coming from registerPlugin\n if (this.config.experimental.enableMediaNegotiatedEvent) {\n LoggerProxy.logger.info('Meeting:mediaNegotiatedEvent --> Media server negotiated');\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'mediaNegotiatedEvent',\n },\n EVENT_TRIGGERS.MEDIA_NEGOTIATED\n );\n }\n };\n\n /**\n * Checks if there are any queued media updates and runs the first one from\n * the queue if we are in a state that allows doing that.\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n processNextQueuedMediaUpdate = () => {\n if (this.canUpdateMedia() && this.queuedMediaUpdates.length > 0) {\n const {pendingPromiseResolve, pendingPromiseReject, mediaUpdateType, options} =\n this.queuedMediaUpdates.shift();\n\n LoggerProxy.logger.log(\n `Meeting:index#processNextQueuedMediaUpdate --> performing delayed media update type=${mediaUpdateType}`\n );\n let mediaUpdate = Promise.resolve();\n\n switch (mediaUpdateType) {\n case MEDIA_UPDATE_TYPE.TRANSCODED_MEDIA_CONNECTION:\n mediaUpdate = this.updateTranscodedMediaConnection();\n break;\n case MEDIA_UPDATE_TYPE.SHARE_FLOOR_REQUEST:\n mediaUpdate = this.requestScreenShareFloor();\n break;\n case MEDIA_UPDATE_TYPE.UPDATE_MEDIA:\n mediaUpdate = this.updateMedia(options);\n break;\n default:\n LoggerProxy.logger.error(\n `Peer-connection-manager:index#processNextQueuedMediaUpdate --> unsupported media update type ${mediaUpdateType} found in the queue`\n );\n break;\n }\n\n mediaUpdate\n .then(pendingPromiseResolve, pendingPromiseReject)\n .then(() => this.processNextQueuedMediaUpdate());\n }\n };\n\n /**\n * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.\n * This does not affect the published tracks, so for example if a microphone track is published and\n * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,\n * but the track's \"published\" state is not changed and when updateMedia({audioEnabled: true}) is called,\n * the sending of the audio from the same track will resume.\n *\n * @param {Object} options\n * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting\n * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting\n * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public async updateMedia(options: {\n audioEnabled?: boolean;\n videoEnabled?: boolean;\n shareAudioEnabled?: boolean;\n shareVideoEnabled?: boolean;\n }) {\n this.checkMediaConnection();\n\n const {audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled} = options;\n\n LoggerProxy.logger.log(\n `Meeting:index#updateMedia --> called with options=${JSON.stringify(options)}`\n );\n\n if (!this.canUpdateMedia()) {\n return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options);\n }\n\n if (this.isMultistream) {\n if (shareAudioEnabled !== undefined || shareVideoEnabled !== undefined) {\n throw new Error(\n 'toggling shareAudioEnabled or shareVideoEnabled in a multistream meeting is not supported, to control receiving screen share call meeting.remoteMediaManager.setLayout() with appropriate layout'\n );\n }\n } else if (shareAudioEnabled !== undefined) {\n throw new Error(\n 'toggling shareAudioEnabled in a transcoded meeting is not supported as of now'\n );\n }\n\n if (audioEnabled !== undefined) {\n this.mediaProperties.mediaDirection.sendAudio = audioEnabled;\n this.mediaProperties.mediaDirection.receiveAudio = audioEnabled;\n this.audio?.enable(this, audioEnabled);\n if (this.isMultistream) {\n this.sendSlotManager.setActive(MediaType.AudioMain, audioEnabled);\n }\n }\n\n if (videoEnabled !== undefined) {\n this.mediaProperties.mediaDirection.sendVideo = videoEnabled;\n this.mediaProperties.mediaDirection.receiveVideo = videoEnabled;\n this.video?.enable(this, videoEnabled);\n if (this.isMultistream) {\n this.sendSlotManager.setActive(MediaType.VideoMain, videoEnabled);\n }\n }\n\n if (shareAudioEnabled !== undefined || shareVideoEnabled !== undefined) {\n this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);\n }\n\n if (!this.isMultistream) {\n await this.updateTranscodedMediaConnection();\n }\n\n return undefined;\n }\n\n /**\n * Acknowledge the meeting, outgoing or incoming\n * @param {String} type\n * @returns {Promise} resolve {message, ringing, response}\n * @public\n * @memberof Meeting\n */\n public acknowledge(type: string) {\n if (!type) {\n return Promise.reject(new ParameterError('Type must be set to acknowledge the meeting.'));\n }\n if (type === _INCOMING_) {\n return this.meetingRequest\n .acknowledgeMeeting({\n locusUrl: this.locusUrl,\n deviceUrl: this.deviceUrl,\n correlationId: this.correlationId,\n })\n .then((response) => Promise.resolve(response))\n .then((response) => {\n this.meetingFiniteStateMachine.ring(type);\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.alert.displayed',\n options: {meetingId: this.id},\n });\n\n return Promise.resolve({\n response,\n });\n });\n }\n\n // TODO: outside of 1:1 incoming, and all outgoing calls\n return Promise.resolve({\n message: 'noop',\n });\n }\n\n /**\n * Decline this meeting\n * @param {String} reason\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n public decline(reason: string) {\n return MeetingUtil.declineMeeting(this, reason)\n .then((decline) => {\n this.meetingFiniteStateMachine.decline();\n\n return Promise.resolve(decline);\n })\n .catch((error) => {\n this.meetingFiniteStateMachine.fail(error);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Returns a promise that will resolve to fetch options for leaving a meeting.\n *\n * This is to support quickly submitting a leave request when the browser/tab is closing.\n * Calling meeting.leave will not work because there are some async steps that will\n * not complete before the browser is closed. Instead, we pre-gather all the\n * information/options needed for the request(s), and then simply and quickly\n * fire the fetch(es) when pagehide is triggered.\n *\n * We must use fetch instead of request because fetch has a keepalive option that\n * allows the request it to outlive the page.\n *\n * Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will\n * properly adjust them before submitting.\n *\n * @public\n * @param {Object} options leave options\n * @param {String} options.resourceId the device with which to leave from, empty if just the computer\n * @param {any} options.reason the reason for leaving\n * @returns {Promise} resolves to options to be used with fetch\n */\n public buildLeaveFetchRequestOptions(options: {resourceId?: string; reason?: any} = {} as any) {\n const requestOptions = MeetingUtil.buildLeaveFetchRequestOptions(this, options);\n\n // @ts-ignore\n return this.webex.prepareFetchOptions(requestOptions);\n }\n\n /**\n * Leave the current meeting\n * @param {Object} options - leave options\n * @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer\n * @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.\n * Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796\n * @param {String} [options.reason] - only used for logging\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public leave(\n options: {\n resourceId?: string;\n clientEventLeaveReason?: ClientEventLeaveReason;\n reason?: any;\n } = {} as any\n ) {\n const leaveReason = options.reason || MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;\n\n /// @ts-ignore\n this.webex.internal.newMetrics.submitInternalEvent({name: 'internal.reset.join.latencies'});\n\n const submitLeaveMetric = (payload = {}) =>\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.leave',\n payload: {\n trigger: 'user-interaction',\n canProceed: false,\n leaveReason: options.clientEventLeaveReason,\n ...payload,\n },\n options: {meetingId: this.id},\n });\n LoggerProxy.logger.log('Meeting:index#leave --> Leaving a meeting');\n\n return MeetingUtil.leaveMeeting(this, options)\n .then((leave) => {\n // CA team recommends submitting this *after* locus /leave\n submitLeaveMetric();\n\n this.meetingFiniteStateMachine.leave();\n this.clearMeetingData();\n\n // upload logs on leave irrespective of meeting delete\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'leave',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n\n // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here\n if (this.wirelessShare || this.guest) {\n // If screen sharing clean the meeting object\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'leave',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: options.reason,\n meetingId: this.id,\n }\n );\n }\n LoggerProxy.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);\n\n return leave;\n })\n .catch((error) => {\n // CA team recommends submitting this *after* locus /leave\n submitLeaveMetric({\n errors: [\n {\n fatal: false,\n errorDescription: error.message,\n category: 'signaling',\n errorCode: 1000,\n name: 'client.leave',\n shownToUser: false,\n },\n ],\n });\n\n this.meetingFiniteStateMachine.fail(error);\n LoggerProxy.logger.error('Meeting:index#leave --> Failed to leave ', error);\n // upload logs on leave irrespective of meeting delete\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'leave',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_LEAVE_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n code: error.code,\n });\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Start sharing whiteboard given channelUrl\n * @param {string} channelUrl whiteboard url\n * @param {String} resourceToken token created by authorize media injector\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public startWhiteboardShare(channelUrl: string, resourceToken: string) {\n const whiteboard = this.locusInfo.mediaShares.find((element) => element.name === 'whiteboard');\n\n if (!channelUrl) {\n return Promise.reject(new ParameterError('Cannot share without channelUrl.'));\n }\n\n if (whiteboard) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.initiated',\n payload: {\n mediaType: 'whiteboard',\n },\n options: {\n meetingId: this.id,\n },\n });\n\n const body: any = {\n disposition: FLOOR_ACTION.GRANTED,\n personUrl: this.locusInfo.self.url,\n deviceUrl: this.deviceUrl,\n uri: whiteboard.url,\n resourceUrl: channelUrl,\n };\n\n if (resourceToken) {\n body.resourceToken = resourceToken;\n }\n\n return this.meetingRequest\n .changeMeetingFloor(body)\n .then(() => {\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n\n return Promise.resolve();\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_START_WHITEBOARD_SHARE_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n board: {channelUrl},\n });\n\n return Promise.reject(error);\n });\n }\n\n return Promise.reject(new ParameterError('Cannot share without whiteboard.'));\n }\n\n /**\n * Stop sharing whiteboard given channelUrl\n * @param {string} channelUrl whiteboard url\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public stopWhiteboardShare(channelUrl: string) {\n const whiteboard = this.locusInfo.mediaShares.find((element) => element.name === 'whiteboard');\n\n if (whiteboard) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.stopped',\n payload: {\n mediaType: 'whiteboard',\n },\n options: {\n meetingId: this.id,\n },\n });\n\n return this.meetingRequest\n .changeMeetingFloor({\n disposition: FLOOR_ACTION.RELEASED,\n personUrl: this.locusInfo.self.url,\n deviceUrl: this.deviceUrl,\n uri: whiteboard.url,\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n board: {channelUrl},\n });\n\n return Promise.reject(error);\n })\n .finally(() => {});\n }\n\n return Promise.reject(new ParameterError('Cannot stop share without whiteboard.'));\n }\n\n /**\n * Sends a request to Locus to obtain the screen share floor\n * @returns {Promise} see #meetingRequest.changeMeetingFloor\n * @private\n * @memberof Meeting\n */\n private requestScreenShareFloor() {\n if (\n !this.mediaProperties.hasLocalShareStream() ||\n !this.mediaProperties.mediaDirection.sendShare\n ) {\n LoggerProxy.logger.log(\n `Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share stream anymore (shareStream=${\n this.mediaProperties.shareVideoStream ? 'yes' : 'no'\n }, sendShare=${this.mediaProperties.mediaDirection.sendShare})`\n );\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n\n return Promise.resolve({});\n }\n if (this.state === MEETING_STATE.STATES.JOINED) {\n this.screenShareFloorState = ScreenShareFloorStatus.PENDING;\n const content = this.locusInfo.mediaShares.find((element) => element.name === CONTENT);\n\n if (content && this.shareStatus !== SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.floor-grant.request',\n payload: {\n mediaType: 'share',\n shareInstanceId: this.localShareInstanceId,\n },\n options: {\n meetingId: this.id,\n },\n });\n\n return this.meetingRequest\n .changeMeetingFloor({\n disposition: FLOOR_ACTION.GRANTED,\n personUrl: this.locusInfo.self.url,\n deviceUrl: this.deviceUrl,\n uri: content.url,\n resourceUrl: this.resourceUrl,\n shareInstanceId: this.localShareInstanceId,\n })\n .then(() => {\n this.screenShareFloorState = ScreenShareFloorStatus.GRANTED;\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_SHARE_SUCCESS, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n });\n\n return Promise.resolve();\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:index#share --> Error ', error);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_SHARE_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.floor-granted.local',\n payload: {\n mediaType: 'share',\n errors: MeetingUtil.getChangeMeetingFloorErrorPayload(error.message),\n shareInstanceId: this.localShareInstanceId,\n },\n options: {\n meetingId: this.id,\n },\n });\n\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n\n return Promise.reject(error);\n });\n }\n if (!content) {\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n\n return Promise.reject(new ParameterError('Cannot share without content.'));\n }\n\n return Promise.resolve();\n }\n this.floorGrantPending = true;\n\n return Promise.resolve({});\n }\n\n /**\n * Requests screen share floor if such request is pending.\n * It should be called whenever meeting state changes to JOINED\n *\n * @returns {void}\n */\n private requestScreenShareFloorIfPending() {\n if (this.floorGrantPending && this.state === MEETING_STATE.STATES.JOINED) {\n this.requestScreenShareFloor().then(() => {\n this.floorGrantPending = false;\n });\n }\n }\n\n /**\n * Sends a request to Locus to release the screen share floor.\n * @returns {Promise} see #meetingRequest.changeMeetingFloor\n * @private\n * @memberof Meeting\n */\n private releaseScreenShareFloor() {\n const content = this.locusInfo.mediaShares.find((element) => element.name === CONTENT);\n\n if (this.screenShareFloorState === ScreenShareFloorStatus.RELEASED) {\n return Promise.resolve();\n }\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n if (content) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.stopped',\n payload: {\n mediaType: 'share',\n shareInstanceId: this.localShareInstanceId,\n },\n options: {meetingId: this.id},\n });\n\n if (content.floor?.beneficiary.id !== this.selfId) {\n // remote participant started sharing and caused our sharing to stop, we don't want to send any floor action request in that case\n return Promise.resolve();\n }\n\n return this.meetingRequest\n .changeMeetingFloor({\n disposition: FLOOR_ACTION.RELEASED,\n personUrl: this.locusInfo.self.url,\n deviceUrl: this.deviceUrl,\n uri: content.url,\n resourceUrl: this.resourceUrl,\n shareInstanceId: this.localShareInstanceId,\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.STOP_FLOOR_REQUEST_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n return Promise.reject(error);\n });\n }\n\n // according to Locus there is no content, so we don't need to release the floor (it's probably already been released)\n return Promise.resolve();\n }\n\n /**\n * Intiate a recording of this meeting\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public startRecording() {\n return this.recordingController.startRecording();\n }\n\n /**\n * set the mute on entry flag for participants if you're the host\n * @returns {Promise}\n * @param {boolean} enabled\n * @public\n * @memberof Meeting\n */\n public setMuteOnEntry(enabled: boolean) {\n return this.controlsOptionsManager.setMuteOnEntry(enabled);\n }\n\n /**\n * set the disallow unmute flag for participants if you're the host\n * @returns {Promise}\n * @param {boolean} enabled\n * @public\n * @memberof Meeting\n */\n public setDisallowUnmute(enabled: boolean) {\n return this.controlsOptionsManager.setDisallowUnmute(enabled);\n }\n\n /**\n * set the mute all flag for participants if you're the host\n * @returns {Promise}\n * @param {boolean} mutedEnabled\n * @param {boolean} disallowUnmuteEnabled\n * @param {boolean} muteOnEntryEnabled\n * @public\n * @memberof Meeting\n */\n public setMuteAll(\n mutedEnabled: boolean,\n disallowUnmuteEnabled: boolean,\n muteOnEntryEnabled: boolean\n ) {\n return this.controlsOptionsManager.setMuteAll(\n mutedEnabled,\n disallowUnmuteEnabled,\n muteOnEntryEnabled\n );\n }\n\n /**\n * End the recording of this meeting\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public stopRecording() {\n return this.recordingController.stopRecording();\n }\n\n /**\n * Pauses the recording of this meeting\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public pauseRecording() {\n return this.recordingController.pauseRecording();\n }\n\n /**\n * Resumes the recording of this meeting\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public resumeRecording() {\n return this.recordingController.resumeRecording();\n }\n\n /**\n * Locks the current meeting if possible\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public lockMeeting() {\n return MeetingUtil.lockMeeting(this.inMeetingActions, this.meetingRequest, this.locusUrl);\n }\n\n /**\n * Unlocks the current meeting if possible\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public unlockMeeting() {\n return MeetingUtil.unlockMeeting(this.inMeetingActions, this.meetingRequest, this.locusUrl);\n }\n\n /**\n * Logs an error message and returns a rejected promise with same message\n * @param {String} message\n * @returns {Promise}\n * @private\n * @memberof Meeting\n */\n private rejectWithErrorLog(message: string) {\n LoggerProxy.logger.error(message);\n\n return Promise.reject(new Error(message));\n }\n\n /**\n * Sends DTMF tones to the current meeting\n * @param {String} tones a string of one or more DTMF tones to send\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public sendDTMF(tones: string) {\n if (this.locusInfo && this.locusInfo.self) {\n if (this.locusInfo.self.enableDTMF) {\n return this.meetingRequest.sendDTMF({\n locusUrl: this.locusInfo.self.url,\n deviceUrl: this.deviceUrl,\n tones,\n });\n }\n\n return this.rejectWithErrorLog(\n 'Meeting:index#sendDTMF --> cannot send DTMF, meeting does not have DTMF enabled'\n );\n }\n\n return this.rejectWithErrorLog(\n 'Meeting:index#sendDTMF --> cannot send DTMF, meeting does not have a connection to the \"locus\" call control service. Have you joined?'\n );\n }\n\n /**\n * Sends request to change layout type for the current meeting for the specific participant/device only\n * @param {String} [layoutType] a layout type that should be available in meeting constants {@link #layout_types}\n * @param {Object} renderInfo preferred dimensions for the remote main and content streams (server can ignore it)\n * @param {Object} renderInfo.main preferred dimensions for the remote main video stream\n * @param {Number} renderInfo.main.width preferred width of main video stream\n * @param {Number} renderInfo.main.height preferred height of main video stream\n * @param {Object} renderInfo.content preferred dimensions for the remote content share stream\n * @param {Number} renderInfo.content.width preferred width of content share stream\n * @param {Number} renderInfo.content.height preferred height of content share stream\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public changeVideoLayout(\n layoutType?: string,\n renderInfo: {\n main: {\n width: number;\n height: number;\n };\n content: {\n width: number;\n height: number;\n };\n } = {} as any\n ) {\n const {main, content} = renderInfo;\n const {mediaDirection, remoteShareStream, remoteVideoStream} = this.mediaProperties;\n\n const layoutInfo = cloneDeep(this.lastVideoLayoutInfo);\n\n // TODO: We need a real time value for Audio, Video and Share send indicator\n if (mediaDirection.receiveVideo !== true || !remoteVideoStream) {\n return this.rejectWithErrorLog(\n 'Meeting:index#changeVideoLayout --> cannot change video layout, you are not recieving any video/share stream'\n );\n }\n\n if (layoutType) {\n if (!LAYOUT_TYPES.includes(layoutType)) {\n return this.rejectWithErrorLog(\n 'Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType received.'\n );\n }\n\n layoutInfo.layoutType = layoutType;\n }\n\n if (main) {\n const mainWidth = Math.round(main.width);\n const mainHeight = Math.round(main.height);\n\n // Stop any \"twitching\" caused by very slight size changes\n if (\n !this.lastVideoLayoutInfo.main ||\n Math.abs(this.lastVideoLayoutInfo.main.height - mainHeight) > 2 ||\n Math.abs(this.lastVideoLayoutInfo.main.width - mainWidth) > 2\n ) {\n layoutInfo.main = {width: mainWidth, height: mainHeight};\n }\n }\n\n if (content) {\n if (this.mediaProperties.mediaDirection.receiveShare && remoteShareStream) {\n const contentWidth = Math.round(content.width);\n const contentHeight = Math.round(content.height);\n\n // Stop any \"twitching\" caused by very slight size changes\n if (\n !this.lastVideoLayoutInfo.content ||\n Math.abs(this.lastVideoLayoutInfo.content.height - contentHeight) > 2 ||\n Math.abs(this.lastVideoLayoutInfo.content.width - contentWidth) > 2\n ) {\n layoutInfo.content = {width: contentWidth, height: contentHeight};\n }\n } else {\n return this.rejectWithErrorLog(\n 'Meeting:index#changeVideoLayout --> unable to send renderInfo for content, you are not receiving remote share'\n );\n }\n }\n\n if (isEqual(layoutInfo, this.lastVideoLayoutInfo)) {\n // nothing changed, no need to send any request\n return Promise.resolve();\n }\n this.lastVideoLayoutInfo = cloneDeep(layoutInfo);\n\n this.locusInfo.once(LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, (envelope) => {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'changeVideoLayout',\n },\n EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE,\n {\n layout: envelope.layout,\n }\n );\n });\n\n return this.meetingRequest\n .changeVideoLayoutDebounced({\n locusUrl: this.locusInfo.self.url,\n deviceUrl: this.deviceUrl,\n layoutType,\n main: layoutInfo.main,\n content: layoutInfo.content,\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:index#changeVideoLayout --> Error ', error);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Sets the quality level of the remote incoming media\n * @param {String} level {LOW|MEDIUM|HIGH}\n * @returns {Promise}\n */\n setRemoteQualityLevel(level: string) {\n LoggerProxy.logger.log(`Meeting:index#setRemoteQualityLevel --> Setting quality to ${level}`);\n\n if (!QUALITY_LEVELS[level]) {\n return this.rejectWithErrorLog(\n `Meeting:index#setRemoteQualityLevel --> ${level} not defined`\n );\n }\n\n if (\n !this.mediaProperties.mediaDirection.receiveAudio &&\n !this.mediaProperties.mediaDirection.receiveVideo\n ) {\n return this.rejectWithErrorLog(\n 'Meeting:index#setRemoteQualityLevel --> unable to change remote quality, receiveVideo and receiveAudio is disabled'\n );\n }\n\n // If level is already the same, don't do anything\n if (level === this.mediaProperties.remoteQualityLevel) {\n LoggerProxy.logger.warn(\n `Meeting:index#setRemoteQualityLevel --> Quality already set to ${level}`\n );\n\n return Promise.resolve();\n }\n\n // Set the quality level in properties\n this.mediaProperties.setRemoteQualityLevel(level);\n\n return this.updateTranscodedMediaConnection();\n }\n\n /**\n * Functionality for when a share audio is ended.\n * @private\n * @memberof Meeting\n * @returns {undefined}\n */\n private handleShareAudioStreamEnded = async () => {\n // current share audio stream has ended, but there might be an active\n // share video stream. we only leave from wireless share if share has\n // completely ended, which means no share audio or video streams active\n if (this.wirelessShare && !this.mediaProperties.shareVideoStream) {\n this.leave({reason: MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS});\n } else {\n try {\n await this.unpublishStreams([this.mediaProperties.shareAudioStream]);\n } catch (error) {\n LoggerProxy.logger.log(\n 'Meeting:index#handleShareAudioStreamEnded --> Error stopping share: ',\n error\n );\n }\n }\n };\n\n /**\n * Functionality for when a share video is muted or unmuted.\n * @private\n * @memberof Meeting\n * @param {boolean} muted\n * @returns {undefined}\n */\n private handleShareVideoStreamMuteStateChange = (muted: boolean) => {\n LoggerProxy.logger.log(\n `Meeting:index#handleShareVideoStreamMuteStateChange --> Share video stream mute state changed to muted ${muted}`\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE, {\n correlationId: this.correlationId,\n muted,\n encoderImplementation: this.statsAnalyzer?.shareVideoEncoderImplementation,\n });\n };\n\n /**\n * Functionality for when a share video is ended.\n * @private\n * @memberof Meeting\n * @returns {undefined}\n */\n private handleShareVideoStreamEnded = async () => {\n // current share video stream has ended, but there might be an active\n // share audio stream. we only leave from wireless share if share has\n // completely ended, which means no share audio or video streams active\n if (this.wirelessShare && !this.mediaProperties.shareAudioStream) {\n this.leave({reason: MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS});\n } else {\n try {\n await this.unpublishStreams([this.mediaProperties.shareVideoStream]);\n } catch (error) {\n LoggerProxy.logger.log(\n 'Meeting:index#handleShareVideoStreamEnded --> Error stopping share: ',\n error\n );\n }\n }\n this.triggerStoppedSharing();\n };\n\n /**\n * Emits meeting:stoppedSharingLocal\n * @private\n * @returns {undefined}\n * @memberof Meeting\n */\n private triggerStoppedSharing = () => {\n if (!this.mediaProperties.hasLocalShareStream()) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'handleShareStreamEnded',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason: SHARE_STOPPED_REASON.TRACK_ENDED,\n }\n );\n }\n };\n\n /**\n * Emits the 'network:quality' event\n * 1 indicates an acceptable uplink network.\n * 0 indicates an unacceptable uplink network based on a predefined threshold\n * @returns {undefined}\n * @param {Object} res - payload of emitNetworkQuality\n * @property {string} mediaType {video|audio}\n * @property {number} networkQualityScore - {1|0}\n * @private\n * @memberof Meeting\n */\n private sendNetworkQualityEvent(res: any) {\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'addMedia',\n },\n EVENT_TRIGGERS.NETWORK_QUALITY,\n {\n networkQualityScore: res.networkQualityScore,\n mediaType: res.mediaType,\n }\n );\n }\n\n /**\n * Handle logging the media\n * @param {Object} mediaProperties\n * @private\n * @returns {undefined}\n */\n private handleMediaLogging(mediaProperties: {\n audioStream?: LocalMicrophoneStream;\n videoStream?: LocalCameraStream;\n }) {\n MeetingUtil.handleVideoLogging(mediaProperties.videoStream);\n MeetingUtil.handleAudioLogging(mediaProperties.audioStream);\n }\n\n /**\n *\n * @returns {string} one of 'panelist', 'attendee', 'host', 'cohost', returns the user type of the current user\n */\n getCurUserType(): RawClientEvent['userType'] | null {\n const {roles} = this;\n if (roles) {\n if (roles.includes(SELF_ROLES.MODERATOR)) {\n return 'host';\n }\n if (roles.includes(SELF_ROLES.COHOST)) {\n return 'cohost';\n }\n if (roles.includes(SELF_ROLES.PANELIST)) {\n return 'panelist';\n }\n if (roles.includes(SELF_ROLES.ATTENDEE)) {\n return 'attendee';\n }\n }\n\n return null;\n }\n\n /**\n * End the current meeting for all\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public endMeetingForAll() {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.leave',\n payload: {trigger: 'user-interaction', canProceed: false},\n options: {meetingId: this.id},\n });\n\n LoggerProxy.logger.log('Meeting:index#endMeetingForAll --> End meeting for All');\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_END_ALL_INITIATED, {\n correlation_id: this.correlationId,\n locus_id: this.locusId,\n });\n\n return MeetingUtil.endMeetingForAll(this)\n .then((end) => {\n this.meetingFiniteStateMachine.end();\n\n this.clearMeetingData();\n // upload logs on leave irrespective of meeting delete\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'endMeetingForAll',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n\n return end;\n })\n .catch((error) => {\n this.meetingFiniteStateMachine.fail(error);\n LoggerProxy.logger.error(\n 'Meeting:index#endMeetingForAll --> Failed to end meeting ',\n error\n );\n // upload logs on leave irrespective of meeting delete\n Trigger.trigger(\n this,\n {\n file: 'meeting/index',\n function: 'endMeetingForAll',\n },\n EVENTS.REQUEST_UPLOAD_LOGS,\n this\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_END_ALL_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n code: error.code,\n });\n\n return Promise.reject(error);\n });\n }\n\n /**\n * clear the meeting data\n * @returns {undefined}\n * @public\n * @memberof Meeting\n */\n clearMeetingData = () => {\n this.audio = null;\n this.video = null;\n this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.queuedMediaUpdates = [];\n\n if (this.transcription) {\n this.stopTranscription();\n this.transcription = undefined;\n }\n };\n\n /**\n * starts keepAlives being sent\n * @returns {void}\n * @private\n * @memberof Meeting\n */\n startKeepAlive = () => {\n if (this.keepAliveTimerId) {\n LoggerProxy.logger.warn(\n 'Meeting:index#startKeepAlive --> keepAlive not started: keepAliveTimerId already exists'\n );\n\n return;\n }\n if (!this.joinedWith?.keepAliveUrl) {\n LoggerProxy.logger.warn(\n 'Meeting:index#startKeepAlive --> keepAlive not started: no keepAliveUrl'\n );\n\n return;\n }\n if (!this.joinedWith?.keepAliveSecs) {\n LoggerProxy.logger.warn(\n 'Meeting:index#startKeepAlive --> keepAlive not started: no keepAliveSecs'\n );\n\n return;\n }\n if (this.joinedWith.keepAliveSecs <= 1) {\n LoggerProxy.logger.warn(\n 'Meeting:index#startKeepAlive --> keepAlive not started: keepAliveSecs <= 1'\n );\n\n return;\n }\n const {keepAliveUrl} = this.joinedWith;\n const keepAliveInterval = (this.joinedWith.keepAliveSecs - 1) * 750; // taken from UCF\n\n this.keepAliveTimerId = setInterval(() => {\n this.meetingRequest.keepAlive({keepAliveUrl}).catch((error) => {\n LoggerProxy.logger.warn(\n `Meeting:index#startKeepAlive --> Stopping sending keepAlives to ${keepAliveUrl} after error ${error}`\n );\n this.stopKeepAlive();\n });\n }, keepAliveInterval);\n };\n\n /**\n * stops keepAlives being sent\n * @returns {void}\n * @private\n * @memberof Meeting\n */\n stopKeepAlive = () => {\n if (!this.keepAliveTimerId) {\n return;\n }\n clearInterval(this.keepAliveTimerId);\n this.keepAliveTimerId = null;\n };\n\n /**\n * Send a reaction inside the meeting.\n *\n * @param {ReactionServerType} reactionType - type of reaction to be sent. Example: \"thumbs_up\"\n * @param {SkinToneType} skinToneType - skin tone for the reaction. Example: \"medium_dark\"\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public sendReaction(reactionType: ReactionServerType, skinToneType?: SkinToneType) {\n const reactionChannelUrl = this.locusInfo?.controls?.reactions?.reactionChannelUrl as string;\n const participantId = this.members.selfId;\n\n const reactionData = Reactions[reactionType];\n\n if (!reactionData) {\n return Promise.reject(new Error(`${reactionType} is not a valid reaction.`));\n }\n const skinToneData = SkinTones[skinToneType] || SkinTones.normal;\n const reaction: Reaction = {\n ...reactionData,\n tone: skinToneData,\n };\n\n if (reactionChannelUrl) {\n return this.meetingRequest.sendReaction({reactionChannelUrl, reaction, participantId});\n }\n\n return Promise.reject(new Error('Error sending reaction, service url not found.'));\n }\n\n /**\n * Method to enable or disable reactions inside the meeting.\n *\n * @param {boolean} enable - enable or disable reactions\n * @returns {Promise}\n * @public\n * @memberof Meeting\n */\n public toggleReactions(enable: boolean) {\n const isEnabled = this.locusInfo?.controls?.reactions?.enabled;\n\n if ((isEnabled && enable) || (!isEnabled && !enable)) {\n return Promise.resolve(`Reactions are already ${isEnabled ? 'enabled' : 'disabled'}.`);\n }\n\n return this.meetingRequest.toggleReactions({\n enable,\n locusUrl: this.locusUrl,\n requestingParticipantId: this.members.selfId,\n });\n }\n\n /**\n * Throws if we don't have a media connection created\n *\n * @returns {void}\n */\n private checkMediaConnection() {\n if (this.mediaProperties?.webrtcMediaConnection) {\n return;\n }\n throw new NoMediaEstablishedYetError();\n }\n\n /**\n * Method to enable or disable the 'Music mode' effect on audio stream\n *\n * @param {boolean} shouldEnableMusicMode\n * @returns {Promise}\n */\n async enableMusicMode(shouldEnableMusicMode: boolean) {\n this.checkMediaConnection();\n\n if (!this.isMultistream) {\n throw new Error('enableMusicMode() only supported with multistream');\n }\n\n if (shouldEnableMusicMode) {\n await this.sendSlotManager.setCodecParameters(MediaType.AudioMain, {\n maxaveragebitrate: '64000',\n maxplaybackrate: '48000',\n });\n } else {\n await this.sendSlotManager.deleteCodecParameters(MediaType.AudioMain, [\n 'maxaveragebitrate',\n 'maxplaybackrate',\n ]);\n }\n }\n\n /** Updates the tracks being sent on the transcoded media connection\n *\n * @returns {Promise}\n */\n private updateTranscodedMediaConnection(): Promise {\n const LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';\n\n LoggerProxy.logger.info(`${LOG_HEADER} starting`);\n\n if (!this.canUpdateMedia()) {\n return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.TRANSCODED_MEDIA_CONNECTION);\n }\n\n return this.mediaProperties.webrtcMediaConnection\n .update({\n // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now\n localTracks: {\n audio: this.mediaProperties.audioStream?.outputStream?.getTracks()[0] || null,\n video: this.mediaProperties.videoStream?.outputStream?.getTracks()[0] || null,\n screenShareVideo:\n this.mediaProperties.shareVideoStream?.outputStream?.getTracks()[0] || null,\n screenShareAudio:\n this.mediaProperties.shareAudioStream?.outputStream?.getTracks()[0] || null,\n },\n direction: {\n audio: Media.getDirection(\n true,\n this.mediaProperties.mediaDirection.receiveAudio,\n this.mediaProperties.mediaDirection.sendAudio\n ),\n video: Media.getDirection(\n true,\n this.mediaProperties.mediaDirection.receiveVideo,\n this.mediaProperties.mediaDirection.sendVideo\n ),\n screenShareVideo: Media.getDirection(\n false,\n this.mediaProperties.mediaDirection.receiveShare,\n this.mediaProperties.mediaDirection.sendShare\n ),\n },\n remoteQualityLevel: this.mediaProperties.remoteQualityLevel,\n })\n .then(() => {\n LoggerProxy.logger.info(`${LOG_HEADER} done`);\n })\n .catch((error) => {\n LoggerProxy.logger.error(`${LOG_HEADER} Error: `, error);\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPDATE_MEDIA_FAILURE, {\n correlation_id: this.correlationId,\n locus_id: this.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw error;\n });\n }\n\n /**\n * set sending named media group which the audio should send to\n * @param {MediaType} mediaType of the stream\n * @param {number} languageCode of the stream\n * @returns {void}\n */\n public setSendNamedMediaGroup(mediaType: MediaType, languageCode = 0): void {\n if (mediaType !== MediaType.AudioMain) {\n throw new Error(`cannot set send named media group which media type is ${mediaType}`);\n }\n\n const value = languageCode || this.simultaneousInterpretation.getTargetLanguageCode();\n let groups = [];\n\n if (value) {\n groups = [\n {\n type: NAMED_MEDIA_GROUP_TYPE_AUDIO,\n value,\n },\n ];\n }\n if (this.isMultistream && this.mediaProperties.webrtcMediaConnection) {\n this.sendSlotManager.setNamedMediaGroups(mediaType, groups);\n }\n }\n\n /**\n * Publishes a stream.\n *\n * @param {MediaType} mediaType of the stream\n * @param {LocalStream} stream to publish\n * @returns {Promise}\n */\n private async publishStream(mediaType: MediaType, stream?: LocalStream) {\n if (!stream) {\n return;\n }\n\n if (this.mediaProperties.webrtcMediaConnection) {\n if (this.isMultistream && this.mediaProperties.webrtcMediaConnection) {\n await this.sendSlotManager.publishStream(mediaType, stream);\n }\n\n this.emitPublishStateChangeEvent({\n isPublished: true,\n mediaType,\n stream,\n functionName: 'publishStream',\n });\n }\n }\n\n /**\n * Un-publishes a stream.\n *\n * @param {MediaType} mediaType of the stream\n * @param {LocalStream} stream to unpublish\n * @returns {Promise}\n */\n private async unpublishStream(mediaType: MediaType, stream?: LocalStream) {\n if (!stream) {\n return;\n }\n\n if (this.isMultistream && this.mediaProperties.webrtcMediaConnection) {\n await this.sendSlotManager.unpublishStream(mediaType);\n }\n\n this.emitPublishStateChangeEvent({\n isPublished: false,\n mediaType,\n stream,\n functionName: 'unpublishStream',\n });\n }\n\n /**\n * Publishes specified local streams in the meeting\n *\n * @param {Object} streams\n * @returns {Promise}\n */\n async publishStreams(streams: LocalStreams): Promise {\n this.checkMediaConnection();\n if (\n !streams.microphone &&\n !streams.camera &&\n !streams.screenShare?.audio &&\n !streams.screenShare?.video\n ) {\n // nothing to do\n return;\n }\n\n if (\n streams?.microphone?.readyState === 'ended' ||\n streams?.camera?.readyState === 'ended' ||\n streams?.screenShare?.audio?.readyState === 'ended' ||\n streams?.screenShare?.video?.readyState === 'ended'\n ) {\n throw new Error(\n `Attempted to publish stream with ended readyState, correlationId=${this.correlationId}`\n );\n }\n\n let floorRequestNeeded = false;\n\n // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting\n if (this.isMultistream && streams.screenShare?.audio) {\n await this.setLocalShareAudioStream(streams.screenShare.audio);\n\n floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;\n }\n\n if (streams.screenShare?.video) {\n await this.setLocalShareVideoStream(streams.screenShare?.video);\n\n floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;\n }\n\n if (streams.microphone) {\n await this.setLocalAudioStream(streams.microphone);\n }\n\n if (streams.camera) {\n await this.setLocalVideoStream(streams.camera);\n }\n\n if (!this.isMultistream) {\n await this.updateTranscodedMediaConnection();\n }\n\n if (floorRequestNeeded) {\n this.localShareInstanceId = uuid.v4();\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.share.initiated',\n payload: {\n mediaType: 'share',\n shareInstanceId: this.localShareInstanceId,\n },\n options: {meetingId: this.id},\n });\n\n this.statsAnalyzer.updateMediaStatus({\n expected: {\n sendShare: true,\n },\n });\n // we're sending the http request to Locus to request the screen share floor\n // only after the SDP update, because that's how it's always been done for transcoded meetings\n // and also if sharing from the start, we need confluence to have been created\n await this.enqueueScreenShareFloorRequest();\n }\n }\n\n /**\n * Un-publishes specified local streams in the meeting\n *\n * @param {Array} streams\n * @returns {Promise}\n */\n async unpublishStreams(streams: LocalStream[]): Promise {\n this.checkMediaConnection();\n\n const promises = [];\n\n for (const stream of streams.filter((t) => !!t)) {\n if (stream === this.mediaProperties.shareAudioStream) {\n promises.push(this.setLocalShareAudioStream(undefined));\n }\n\n if (stream === this.mediaProperties.shareVideoStream) {\n promises.push(this.setLocalShareVideoStream(undefined));\n }\n\n if (stream === this.mediaProperties.audioStream) {\n promises.push(this.setLocalAudioStream(undefined));\n }\n\n if (stream === this.mediaProperties.videoStream) {\n promises.push(this.setLocalVideoStream(undefined));\n }\n }\n\n if (!this.isMultistream) {\n promises.push(this.updateTranscodedMediaConnection());\n }\n\n await Promise.all(promises);\n\n // we're allowing for the SDK to support just audio share as well\n // so a share could be active with only video, only audio, or both\n // we're only releasing the floor if both streams have ended\n if (!this.mediaProperties.hasLocalShareStream()) {\n try {\n this.releaseScreenShareFloor(); // we ignore the returned promise here on purpose\n\n this.statsAnalyzer.updateMediaStatus({\n expected: {\n sendShare: false,\n },\n });\n } catch (e) {\n // nothing to do here, error is logged already inside releaseScreenShareFloor()\n }\n }\n }\n\n /**\n * Gets permission token expiry information including timeLeft, expiryTime, currentTime\n * (from the time the function has been fired)\n *\n * @returns {object} permissionTokenExpiryInfo\n * @returns {number} permissionTokenExpiryInfo.timeLeft The time left for token to expire\n * @returns {number} permissionTokenExpiryInfo.expiryTime The expiry time of permission token from the server\n * @returns {number} permissionTokenExpiryInfo.currentTime The current time of the local machine\n */\n public getPermissionTokenExpiryInfo() {\n if (!this.permissionTokenPayload) {\n return undefined;\n }\n\n const permissionTokenExpiryFromServer = Number(this.permissionTokenPayload.exp);\n const permissionTokenIssuedTimeFromServer = Number(this.permissionTokenPayload.iat);\n\n const shiftInTime = this.permissionTokenReceivedLocalTime - permissionTokenIssuedTimeFromServer;\n\n // using new Date instead of Date.now() to allow for accurate unit testing\n // https://github.com/sinonjs/fake-timers/issues/321\n const currentTime = new Date().getTime();\n\n // adjusted time is calculated in case your machine time is wrong\n const adjustedCurrentTime = currentTime - shiftInTime;\n\n const timeLeft = (permissionTokenExpiryFromServer - adjustedCurrentTime) / 1000;\n\n return {timeLeft, expiryTime: permissionTokenExpiryFromServer, currentTime};\n }\n\n /**\n * Check if there is enough time left till the permission token expires\n * If not - refresh the permission token\n *\n * @param {number} threshold - time in seconds\n * @param {string} reason - reason for refreshing the permission token\n * @returns {Promise}\n */\n public checkAndRefreshPermissionToken(threshold: number, reason: string): Promise {\n const timeLeft = this.getPermissionTokenExpiryInfo()?.timeLeft;\n\n if (timeLeft !== undefined && timeLeft <= threshold) {\n return this.refreshPermissionToken(reason);\n }\n\n return Promise.resolve();\n }\n}\n","import {\n HTTP_VERBS,\n VALID_PIN,\n VALID_PMR_ADDRESS,\n VALID_PMR_LINK,\n CMR_MEETINGS,\n CLAIM,\n HECATE,\n WEBEX_DOT_COM,\n} from '../constants';\n\nconst PersonalMeetingRoomUtil: any = {};\n\nPersonalMeetingRoomUtil.getClaimPmrLink = (pmrLink) => {\n let validator = VALID_PMR_ADDRESS.test(pmrLink);\n\n if (validator) {\n return pmrLink;\n }\n validator = pmrLink.match(VALID_PMR_LINK);\n if (validator) {\n // userId + '@' + site + '.webex.com'\n return `${validator[4]}@${validator[2]}.${WEBEX_DOT_COM}`;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimPmrPin = (hostPin) => {\n if (VALID_PIN.test(hostPin)) {\n return hostPin;\n }\n\n return null;\n};\n\nPersonalMeetingRoomUtil.getClaimedRequestParams = (link, pin, options) => ({\n method: HTTP_VERBS.POST,\n api: HECATE,\n resource: `/${CMR_MEETINGS}/${CLAIM}`,\n body: {\n userId: options.userId,\n passcode: pin,\n preferred: options.preferred,\n meetingAddress: link,\n },\n});\n\nexport default PersonalMeetingRoomUtil;\n","// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomUtil from './util';\n\n/**\n * @class MeetingInfoRequest\n */\nexport default class PersonalMeetingRoomRequest extends StatelessWebexPlugin {\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} options with format of {userId, passcode, meetingAddress, preferred}\n * @returns {Promise} returns a promise that resolves/rejects the result of the request\n * @memberof PersonalMeetingRoomRequest\n */\n claimPmr(options: any) {\n if (\n !options ||\n !options.userId ||\n !options.passcode ||\n !options.meetingAddress ||\n !options.preferred\n ) {\n throw new ParameterError(\n 'Claiming a PMR should be done with userId, passcode, preferred, and meetingAddress in options.'\n );\n }\n const validPin = PersonalMeetingRoomUtil.getClaimPmrPin(options.passcode);\n\n if (!validPin) {\n return Promise.reject(new ParameterError('The host pin provided was of an invalid format'));\n }\n const validLink = PersonalMeetingRoomUtil.getClaimPmrLink(options.meetingAddress);\n\n if (!validLink) {\n return Promise.reject(new ParameterError('The PMR link provided was of an invalid format'));\n }\n const request = PersonalMeetingRoomUtil.getClaimedRequestParams(validLink, validPin, options);\n\n // @ts-ignore\n return this.request(request);\n }\n}\n","// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {MEETINGS, DESTINATION_TYPE} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nimport PersonalMeetingRoomRequest from './request';\n\n/**\n * @class PersonalMeetingRoom\n */\nexport default class PersonalMeetingRoom extends StatelessWebexPlugin {\n link: any;\n meetingInfo: any;\n name: any;\n personalMeetingRoomRequest: any;\n pmr: any;\n sipUri: any;\n userId: any;\n meetingLink: any;\n number: any;\n\n namespace = MEETINGS;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * The pmr server object\n * @instance\n * @type {Object}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.pmr = null;\n /**\n * The pmr sip Uri\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.sipUri = null;\n /**\n * The pmr link\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.link = null;\n /**\n * The pmr server object\n * @instance\n * @type {Object}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.userId = null;\n /**\n * The pmr name\n * @instance\n * @type {String}\n * @public\n * @memberof PersonalMeetingRoom\n */\n this.name = null;\n /**\n * The meeting info request server interface\n * @instance\n * @type {MeetingInfo}\n * @private\n * @memberof PersonalMeetingRoom\n */\n this.meetingInfo = attrs.meetingInfo;\n /**\n * The pmr server request interface\n * @instance\n * @type {Object}\n * @private\n * @memberof PersonalMeetingRoom\n */\n // @ts-ignore\n this.personalMeetingRoomRequest = new PersonalMeetingRoomRequest({}, options);\n }\n\n /**\n * claims a pmr and updates the cached PMR values\n * @param {String} link\n * @param {String} pin\n * @param {Boolean} [preferred] defaults to true to set this claimed PMR as the preferred\n * @returns {Promise}\n * @public\n * @memberof PersonalMeetingRoom\n */\n public claim(link: string, pin: string, preferred = true) {\n const options = {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n passcode: pin,\n meetingAddress: link,\n preferred,\n };\n\n return this.personalMeetingRoomRequest.claimPmr(options).then((pmr) => {\n if (pmr && pmr.body) {\n this.set(pmr.body);\n } else {\n return Promise.reject(new ParameterError('No PMR body provided. PMR values not updated.'));\n }\n\n return pmr.body;\n });\n }\n\n /**\n * @param {Object} body the response body from meeting info request\n * @returns {undefined}\n * @private\n * @memberof PersonalMeetingRoom\n */\n private set(body: any) {\n this.pmr = body;\n this.sipUri = body.sipMeetingUri;\n this.meetingLink = body.webExMeetingLink || body.meetingLink;\n this.userId = body.owner;\n this.name = body.meetingName;\n this.number = body.meetingNumber;\n }\n\n /**\n * TODO: implement TTL for syncing and caching so to not request again and again\n * @param {Object} options\n * @returns {Promise}\n * @public\n * @memberof PersonalMeetingRoom\n */\n public get() {\n const options = {\n type: DESTINATION_TYPE.PERSONAL_ROOM,\n };\n\n return this.meetingInfo.fetchMeetingInfo(options).then((pmr) => {\n if (pmr && pmr.body && pmr.body.isPmr) {\n this.set(pmr.body);\n } else {\n return Promise.reject(new TypeError('The PMR requested is NOT a PMR. PMR values not set.'));\n }\n\n return pmr.body;\n });\n }\n}\n","import LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';\n\nexport interface ClusterNode {\n isVideoMesh: boolean;\n udp: Array;\n tcp: Array;\n xtls: Array;\n}\n\nexport type ClusterList = {\n [key: string]: ClusterNode;\n};\n\n/**\n * @class ReachabilityRequest\n */\nclass ReachabilityRequest {\n webex: any;\n\n /**\n * Creates an instance of ReachabilityRequest.\n * @param {object} webex\n * @memberof ReachabilityRequest\n */\n constructor(webex: object) {\n this.webex = webex;\n }\n\n /**\n * Gets the cluster information\n *\n * @param {IP_VERSION} ipVersion information about current ip network we're on\n * @returns {Promise}\n */\n getClusters = (ipVersion?: IP_VERSION): Promise<{clusters: ClusterList; joinCookie: any}> =>\n this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(\n () =>\n this.webex.request({\n method: HTTP_VERBS.GET,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.CLUSTERS,\n qs: {\n JCSupport: 1,\n ipver: ipVersion,\n },\n }),\n 'internal.get.cluster.time'\n )\n .then((res) => {\n const {clusters, joinCookie} = res.body;\n\n Object.keys(clusters).forEach((key) => {\n clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);\n });\n\n LoggerProxy.logger.log(\n `Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(\n clusters\n )}`\n );\n\n return {\n clusters,\n joinCookie,\n };\n });\n\n /**\n * gets remote SDP For Clusters\n * @param {Object} localSDPList localSDPs for the cluster\n * @returns {Object}\n */\n remoteSDPForClusters = (localSDPList: object) =>\n this.webex\n .request({\n method: HTTP_VERBS.POST,\n shouldRefreshAccessToken: false,\n api: API.CALLIOPEDISCOVERY,\n resource: RESOURCE.REACHABILITY,\n body: {offers: localSDPList},\n })\n .then((res) => {\n LoggerProxy.logger.log(\n 'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'\n );\n\n return res.body;\n });\n}\n\nexport default ReachabilityRequest;\n","/* eslint-disable import/prefer-default-export */\n/**\n * Converts a stun url to a turn url\n *\n * @param {string} stunUrl url of a stun server\n * @param {'tcp'|'udp'} protocol what protocol to use for the turn server\n * @returns {string} url of a turn server\n */\nexport function convertStunUrlToTurn(stunUrl: string, protocol: 'udp' | 'tcp') {\n // stunUrl looks like this: \"stun:external-media91.public.wjfkm-a-10.prod.infra.webex.com:5004\"\n // and we need it to be like this: \"turn:external-media91.public.wjfkm-a-10.prod.infra.webex.com:5004?transport=tcp\"\n const url = new URL(stunUrl);\n\n if (url.protocol !== 'stun:') {\n throw new Error(`Not a STUN URL: ${stunUrl}`);\n }\n\n url.protocol = 'turn:';\n if (protocol === 'tcp') {\n url.searchParams.append('transport', 'tcp');\n }\n\n return url.toString();\n}\n\n/**\n * Converts a stun url to a turns url\n *\n * @param {string} stunUrl url of a stun server\n * @returns {string} url of a turns server\n */\nexport function convertStunUrlToTurnTls(stunUrl: string) {\n // stunUrl looks like this: \"stun:external-media1.public.wjfkm-a-15.prod.infra.webex.com:443\"\n // and we need it to be like this: \"turns:external-media1.public.wjfkm-a-15.prod.infra.webex.com:443?transport=tcp\"\n const url = new URL(stunUrl);\n\n if (url.protocol !== 'stun:') {\n throw new Error(`Not a STUN URL: ${stunUrl}`);\n }\n\n url.protocol = 'turns:';\n url.searchParams.append('transport', 'tcp');\n\n return url.toString();\n}\n","import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\nimport EventsScope from '../common/events/events-scope';\n\nimport {CONNECTION_STATE, Enum, ICE_GATHERING_STATE} from '../constants';\n\n// result for a specific transport protocol (like udp or tcp)\nexport type TransportResult = {\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds?: number; // amount of time it took to get the first ICE candidate\n clientMediaIPs?: string[];\n};\n\n// reachability result for a specific media cluster\nexport type ClusterReachabilityResult = {\n udp: TransportResult;\n tcp: TransportResult;\n xtls: TransportResult;\n};\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n} as const;\n\nexport type Events = Enum;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * It emits events from Events enum\n */\nexport class ClusterReachability extends EventsScope {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Aborts the cluster reachability checks by closing the peer connection\n *\n * @returns {void}\n */\n public abort() {\n const {CLOSED} = CONNECTION_STATE;\n\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp' | 'xtls', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n let ipAdded = false;\n\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n ipAdded = true;\n }\n } else {\n result.clientMediaIPs = [publicIP];\n ipAdded = true;\n }\n\n if (ipAdded)\n this.emit(\n {\n file: 'clusterReachability',\n function: 'addPublicIP',\n },\n Events.clientMediaIpsUpdated,\n {\n protocol,\n clientMediaIPs: result.clientMediaIPs,\n }\n );\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp', 'xtls'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Saves the latency in the result for the given protocol and marks it as reachable,\n * emits the \"resultReady\" event if this is the first result for that protocol,\n * emits the \"clientMediaIpsUpdated\" event if we already had a result and only found\n * a new client IP\n *\n * @param {string} protocol\n * @param {number} latency\n * @param {string|null} [publicIp]\n * @returns {void}\n */\n private saveResult(protocol: 'udp' | 'tcp' | 'xtls', latency: number, publicIp?: string | null) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#saveResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n if (publicIp) {\n result.clientMediaIPs = [publicIp];\n }\n\n this.emit(\n {\n file: 'clusterReachability',\n function: 'saveResult',\n },\n Events.resultReady,\n {\n protocol,\n ...result,\n }\n );\n } else {\n this.addPublicIP(protocol, publicIp);\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n const latencyInMilliseconds = this.getElapsedTime();\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.saveResult('udp', latencyInMilliseconds, e.candidate.address);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.saveResult(protocol, latencyInMilliseconds);\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await this.gatherIceCandidates();\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n return this.defer.promise;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n ClusterReachabilityResult,\n Events,\n ResultEventData,\n TransportResult,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport type ReachabilityMetrics = {\n reachability_public_udp_success: number;\n reachability_public_udp_failed: number;\n reachability_public_tcp_success: number;\n reachability_public_tcp_failed: number;\n reachability_public_xtls_success: number;\n reachability_public_xtls_failed: number;\n reachability_vmn_udp_success: number;\n reachability_vmn_udp_failed: number;\n reachability_vmn_tcp_success: number;\n reachability_vmn_tcp_failed: number;\n reachability_vmn_xtls_success: number;\n reachability_vmn_xtls_failed: number;\n};\n\n/**\n * This is the type that matches what backend expects us to send to them. It is a bit weird, because\n * it uses strings instead of booleans and numbers, but that's what they require.\n */\nexport type TransportResultForBackend = {\n reachable?: 'true' | 'false';\n latencyInMilliseconds?: string;\n clientMediaIPs?: string[];\n untested?: 'true';\n};\n\nexport type ReachabilityResultForBackend = {\n udp: TransportResultForBackend;\n tcp: TransportResultForBackend;\n xtls: TransportResultForBackend;\n};\n\n// this is the type that is required by the backend when we send them reachability results\nexport type ReachabilityResultsForBackend = Record;\n\n// this is the type used by Reachability class internally and stored in local storage\nexport type ReachabilityResults = Record<\n string,\n ClusterReachabilityResult & {\n isVideoMesh?: boolean;\n }\n>;\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType;\n publicCloudTimer?: ReturnType;\n overallTimer?: ReturnType;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n this.clusterReachability = {};\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @returns {Promise} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(): Promise {\n // Fetch clusters and measure latency\n try {\n const {clusters, joinCookie} = await this.reachabilityRequest.getClusters(\n MeetingUtil.getIpVersion(this.webex)\n );\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#attachReachabilityData --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @returns {void}\n */\n private resolveReachabilityPromise() {\n if (this.vmnTimer) {\n clearTimeout(this.vmnTimer);\n }\n if (this.publicCloudTimer) {\n clearTimeout(this.publicCloudTimer);\n }\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @returns {void}\n */\n protected async sendMetric() {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n if (!clusterList || !Object.keys(clusterList).length) {\n return;\n }\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n this.startTimers();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length;\n this.expectedResultsCount.public.xtls += cluster.xtls.length;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n clearTimeout(this.overallTimer);\n this.overallTimer = undefined;\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n}\n","// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, API, RESOURCE} from '../constants';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n /**\n * get all the active meetings for the user\n * @returns {Array} return locus array\n */\n getActiveMeetings() {\n // @ts-ignore\n return this.request({\n api: API.LOCUS,\n resource: RESOURCE.LOCI,\n })\n .then((res) => this.determineRedirections(res.body))\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`\n );\n throw new Error(error);\n });\n }\n\n /**\n * fetch geoHit for the user\n * @returns {Promise} geoHintInfo\n */\n fetchGeoHint() {\n // @ts-ignore\n return this.webex.internal.services.fetchClientRegionInfo();\n }\n\n /**\n * get user meeting preference information\n * @returns {Promise} getMeetingPreferences\n */\n getMeetingPreferences() {\n // @ts-ignore\n return this.webex.internal.services.getMeetingPreferences();\n }\n\n // locus federation, determines and populate locus if the responseBody has remote URLs to fetch locus details\n\n /**\n * Fetches indivdual locus rather then getting all at once\n * @param {object} responseBody determine the locus and fetch them if a remoteUrl is given\n * @returns {Promise} returns locusObject array\n */\n determineRedirections(responseBody: any) {\n if (responseBody.remoteLocusClusterUrls && responseBody.remoteLocusClusterUrls.length) {\n return Promise.all(\n responseBody.remoteLocusClusterUrls.map((url) =>\n // @ts-ignore\n this.request({\n method: HTTP_VERBS.GET,\n url,\n runWhitelistedDomains: true, // allows auth token for whitelisted domain\n })\n .then((res) => {\n responseBody.loci = responseBody.loci.concat(res.body.loci);\n responseBody.locusUrls = responseBody.locusUrls.concat(res.body.locusUrls);\n\n return Promise.resolve(responseBody);\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`\n );\n throw new Error(error);\n })\n )\n ).then(() => Promise.resolve(responseBody));\n }\n\n return Promise.resolve(responseBody);\n }\n}\n","import {find} from 'lodash';\n\nimport Collection from '../common/collection';\nimport {MEETING_KEY} from './meetings.types';\n/**\n * @export\n * @class MeetingCollection\n */\nexport default class MeetingCollection extends Collection {\n /**\n * @constructor\n * @public\n * @memberof MeetingCollection\n */\n constructor() {\n super('meetings');\n }\n\n set(meeting) {\n // @ts-ignore\n this.meetings[meeting.id] = meeting;\n\n // @ts-ignore\n return this.meetings[meeting.id];\n }\n\n /**\n * get a specific meeting searching for key\n * @param {MEETING_KEY} key\n * @param {Any} value\n * @returns {Meeting} if found, else returns null\n * @public\n * @memberof MeetingCollection\n */\n public getByKey(key: MEETING_KEY, value: any) {\n if (key && value) {\n // @ts-ignore\n return find(this.meetings, (meeting) => meeting[key] === value);\n }\n\n return null;\n }\n\n /**\n * get a specific meeting searching for key\n * @param {String} breakoutUrl\n * @returns {Meeting} if found, else returns null\n * @public\n * @memberof MeetingCollection\n */\n public getActiveBreakoutLocus(breakoutUrl: string) {\n if (breakoutUrl) {\n // @ts-ignore\n return find(\n // @ts-ignore\n this.meetings,\n (meeting) => meeting.breakouts?.url === breakoutUrl && meeting.breakouts?.isActiveBreakout\n );\n }\n\n return null;\n }\n\n /**\n * Gets the meeting that has a webrtc media connection\n * NOTE: this function assumes there is no more than 1 such meeting\n *\n * @returns {Meeting} first meeting found, else undefined\n * @public\n * @memberof MeetingCollection\n */\n public getActiveWebrtcMeeting() {\n // @ts-ignore\n return find(this.meetings, (meeting) => meeting.mediaProperties.webrtcMediaConnection);\n }\n}\n","import {ERROR_DICTIONARY} from '../../constants';\n\n/**\n * Extended Error object for general parameter errors\n */\nexport default class NoMeetingInfoError extends Error {\n code: any;\n error: any;\n sdkMessage: any;\n\n /**\n * @constructor\n * @param {String} [message]\n * @param {Object} [error]\n */\n constructor(message: string = ERROR_DICTIONARY.NO_MEETING_INFO.MESSAGE, error: any = null) {\n super(message);\n this.name = ERROR_DICTIONARY.NO_MEETING_INFO.NAME;\n this.sdkMessage = ERROR_DICTIONARY.NO_MEETING_INFO.MESSAGE;\n this.error = error;\n this.stack = error ? error.stack : new Error().stack;\n this.code = ERROR_DICTIONARY.NO_MEETING_INFO.CODE;\n }\n}\n","/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\nimport {union} from 'lodash';\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-metrics';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport * as mediaHelpersModule from '@webex/media-helpers';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport LoggerConfig from '../common/logs/logger-config';\nimport StaticConfig from '../common/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport LoggerRequest from '../common/logs/request';\nimport Trigger from '../common/events/trigger-proxy';\nimport Media from '../media';\nimport MeetingUtil from '../meeting/util';\nimport {\n MEETINGS,\n EVENTS,\n EVENT_TRIGGERS,\n READY,\n LOCUSEVENT,\n MAX_RANDOM_DELAY_FOR_MEETING_INFO,\n ROAP,\n ONLINE,\n OFFLINE,\n _MEETING_,\n _JOIN_,\n _INCOMING_,\n LOCUS,\n _LEFT_,\n _ID_,\n MEETING_REMOVED_REASON,\n _JOINED_,\n _MOVED_,\n _ON_HOLD_LOBBY_,\n _WAIT_,\n DESTINATION_TYPE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport MeetingInfo from '../meeting-info';\nimport MeetingInfoV2 from '../meeting-info/meeting-info-v2';\nimport Meeting, {CallStateForMetrics} from '../meeting';\nimport PersonalMeetingRoom from '../personal-meeting-room';\nimport Reachability from '../reachability';\nimport Request from './request';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport MeetingCollection from './collection';\nimport {MEETING_KEY, INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';\nimport MeetingsUtil from './util';\nimport PermissionError from '../common/errors/permission';\nimport {SpaceIDDeprecatedError} from '../common/errors/webex-errors';\nimport NoMeetingInfoError from '../common/errors/no-meeting-info';\n\nlet mediaLogger;\n\nclass MediaLogger {\n info(...args) {\n LoggerProxy.logger.info(...args);\n }\n\n log(...args) {\n LoggerProxy.logger.log(...args);\n }\n\n error(...args) {\n LoggerProxy.logger.error(...args);\n }\n\n warn(...args) {\n LoggerProxy.logger.warn(...args);\n }\n\n trace(...args) {\n LoggerProxy.logger.trace(...args);\n }\n\n debug(...args) {\n LoggerProxy.logger.debug(...args);\n }\n}\n/**\n * Meetings Ready Event\n * Emitted when the meetings instance on webex is ready\n * @event meetings:ready\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Network Disconnected Event\n * Emitted when the meetings instance is disconnected from\n * the internal mercury server\n * @event network:disconnected\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Registered Event\n * Emitted when the meetings instance has been registered and listening\n * @event meetings:registered\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meeting Removed Event\n * Emitted when a meeting was removed from the cache of meetings\n * @event meeting:removed\n * @instance\n * @type {Object}\n * @property {String} meetingId the removed meeting\n * @property {Object} response the server response\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Meeting Added Event\n * Emitted when a meeting was added to the cache of meetings\n * @event meeting:added\n * @instance\n * @type {Object}\n * @property {String} meetingId the added meeting\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Maintain a cache of meetings and sync with services.\n * @class\n */\nexport default class Meetings extends WebexPlugin {\n loggerRequest: any;\n media: any;\n meetingCollection: any;\n personalMeetingRoom: any;\n preferredWebexSite: any;\n reachability: Reachability;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n mediaHelpers: any;\n breakoutLocusForHandleLater: any;\n namespace = MEETINGS;\n\n /**\n * Initializes the Meetings Plugin\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor(...args) {\n super(...args);\n\n /**\n * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app\n * to be able to call media helper functions.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.mediaHelpers = mediaHelpersModule;\n\n /**\n * The Meetings request to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.request = new Request({}, {parent: this.webex});\n /**\n * Log upload request helper\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.loggerRequest = new LoggerRequest({webex: this.webex});\n this.meetingCollection = new MeetingCollection();\n /**\n * The PersonalMeetingRoom object to interact with server\n * @instance\n * @type {Object}\n * @public\n * @memberof Meetings\n */\n this.personalMeetingRoom = null;\n\n /**\n * The Reachability object to interact with server\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\n\n /**\n * If the meetings plugin has been registered and listening via {@link Meetings#register}\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Meetings\n */\n this.registered = false;\n\n /**\n * This values indicates the preferred webex site the user will start there meeting, getsits value from {@link Meetings#register}\n * @instance\n * @type {String}\n * @private\n * @memberof Meetings\n */\n this.preferredWebexSite = '';\n\n /**\n * The public interface for the internal Media util files. These are helpful to expose outside the context\n * of a meeting so that a user can access media without creating a meeting instance.\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.media = {\n getUserMedia: Media.getUserMedia,\n };\n\n this.onReady();\n }\n\n /**\n * check whether you need to handle this main session's locus data or not\n * @param {Object} meeting current meeting data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleMainLocus(meeting: any, newLocus: any) {\n const breakoutUrl = newLocus.controls?.breakout?.url;\n const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);\n\n const isSelfJoined = newLocus?.self?.state === _JOINED_;\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n // @ts-ignore\n const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);\n const isResourceMovedOnThisDevice =\n deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;\n\n const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(\n meeting,\n newLocus,\n // @ts-ignore\n this.webex.internal.device.url\n );\n const isBreakoutLocusJoinThisDevice =\n breakoutLocus?.joinedWith?.correlationId &&\n breakoutLocus.joinedWith.correlationId === meeting?.correlationId;\n\n if (isSelfJoined && isNewLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'\n );\n if (breakoutLocus?.joinedWith && deviceFromNewLocus) {\n const breakoutReplaceAt =\n breakoutLocus.joinedWith.replaces?.length > 0\n ? breakoutLocus.joinedWith.replaces[0].replaceAt\n : '';\n const newLocusReplaceAt =\n deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';\n if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`\n );\n\n return false;\n }\n }\n\n return true;\n }\n if (isBreakoutLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`\n );\n\n return false;\n }\n if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'\n );\n\n return false;\n }\n if (isSelfJoined && isResourceMovedOnThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'\n );\n\n return false;\n }\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'\n );\n\n return true;\n }\n\n /**\n * check whether you need to handle this locus data or not\n * @param {Object} meeting old locus data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleLocusDTO(meeting: any, newLocus: any) {\n if (newLocus) {\n const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n const isSelfMovedToLobby =\n newLocus?.self?.devices[0]?.intent?.reason === _ON_HOLD_LOBBY_ &&\n newLocus?.self?.devices[0]?.intent?.type === _WAIT_;\n if (!meeting) {\n if (isNewLocusAsBreakout) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`\n );\n\n return newLocus.self?.state === _JOINED_;\n }\n\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n if (!isNewLocusAsBreakout) {\n return isSelfMovedToLobby || this.isNeedHandleMainLocus(meeting, newLocus);\n }\n\n return !isSelfMoved;\n }\n\n return true;\n }\n\n /**\n * get corresponding meeting object by locus data\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @returns {Object}\n * @private\n * @memberof Meetings\n */\n getCorrespondingMeetingByLocus(data) {\n // getting meeting by correlationId. This will happen for the new event\n // Either the locus\n // TODO : Add check for the callBack Address\n return (\n this.meetingCollection.getByKey(MEETING_KEY.LOCUS_URL, data.locusUrl) ||\n // @ts-ignore\n this.meetingCollection.getByKey(\n MEETING_KEY.CORRELATION_ID,\n // @ts-ignore\n MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)\n ) ||\n this.meetingCollection.getByKey(\n MEETING_KEY.SIP_URI,\n data.locus.self &&\n data.locus.self.callbackInfo &&\n data.locus.self.callbackInfo.callbackAddress\n ) ||\n (data.locus.info?.isUnifiedSpaceMeeting\n ? undefined\n : this.meetingCollection.getByKey(\n MEETING_KEY.CONVERSATION_URL,\n data.locus.conversationUrl\n )) ||\n this.meetingCollection.getByKey(MEETING_KEY.MEETINGNUMBER, data.locus?.info?.webExMeetingId)\n );\n }\n\n /**\n * handle locus events and takes meeting actions with them as they come in\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {String} data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {\n let meeting = this.getCorrespondingMeetingByLocus(data);\n\n // Special case when locus has got replaced, This only happend once if a replace locus exists\n // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call\n\n if (!meeting && data.locus?.replaces?.length > 0) {\n // Always the last element in the replace is the active one\n meeting = this.meetingCollection.getByKey(\n MEETING_KEY.LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\n\n if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {\n meeting.locusInfo.updateMainSessionLocusCache(data.locus);\n }\n if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {\n LoggerProxy.logger.log(\n `Meetings:index#handleLocusEvent --> doesn't need to process locus event`\n );\n\n return;\n }\n if (!meeting) {\n // TODO: create meeting when we get a meeting object\n // const checkForEnded = (locus) => {\n // TODO: you already ended the meeting but you got an event later\n // Mainly for 1:1 Callsor meeting\n // Happens mainly after refresh\n\n // 1:1 Meeting\n // 1) You ended a call before but you got a mercury event\n // Make sure end the call and cleanup the meeting only if the mercury\n // event says so\n // 2) Maintain lastSync time in the meetings object which helps to compare\n // If the meeting came befor or after the sync . ANy meeting start time before the sync time is invalid\n\n // For space Meeting\n // Check the locus object and see who has joined\n\n // };\n // rather then locus object change to locus url\n\n if (\n data.locus &&\n data.locus.fullState &&\n data.locus.fullState.state === LOCUS.STATE.INACTIVE\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n // When its wireless share or guest and user leaves the meeting we dont have to keep the meeting object\n // Any future events will be neglected\n\n if (\n data.locus &&\n data.locus.self &&\n data.locus.self.state === _LEFT_ &&\n data.locus.self.removed === true\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n this.create(data.locus, DESTINATION_TYPE.LOCUS_ID, useRandomDelayForInfo)\n .then((newMeeting) => {\n meeting = newMeeting;\n\n // It's a new meeting so initialize the locus data\n meeting.locusInfo.initialSetup(data.locus);\n this.checkHandleBreakoutLocus(data.locus);\n })\n .catch((e) => {\n LoggerProxy.logger.error(e);\n })\n .finally(() => {\n // There will be cases where locus event comes in gets created and deleted because its a 1:1 and meeting gets deleted\n // because the other user left so before sending 'added' event make sure it exists in the collection\n\n if (this.getMeetingByType(_ID_, meeting.id)) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-started',\n payload: {\n trigger: 'mercury-event',\n },\n options: {\n meetingId: meeting.id,\n },\n });\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'handleLocusEvent',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meeting.type === _MEETING_ ? _JOIN_ : _INCOMING_,\n }\n );\n } else {\n // Meeting got added but was not found in the collection. It might have got destroyed\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Created and destroyed meeting object before sending an event'\n );\n }\n });\n } else {\n meeting.locusInfo.parse(meeting, data);\n }\n }\n\n /**\n * handles locus events through mercury that are not roap\n * @param {Object} envelope\n * @param {Object} envelope.data\n * @param {String} envelope.data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusMercury(envelope: {data: any}) {\n const {data} = envelope;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n if (eventType && eventType !== LOCUSEVENT.MESSAGE_ROAP) {\n this.handleLocusEvent(data, true);\n }\n }\n\n /**\n * handles mecury offline event\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleMercuryOffline() {\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'handleMercuryOffline',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED\n );\n }\n\n /**\n * registers for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private listenForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.on(LOCUSEVENT.LOCUS_MERCURY, (envelope) => {\n this.handleLocusMercury(envelope);\n });\n // @ts-ignore\n this.webex.internal.mercury.on(ROAP.ROAP_MERCURY, (envelope) => {\n MeetingsUtil.handleRoapMercury(envelope, this.meetingCollection);\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(ONLINE, () => {\n this.syncMeetings({keepOnlyLocusMeetings: false});\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(OFFLINE, () => {\n this.handleMercuryOffline();\n });\n }\n\n /**\n * stops listening for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private stopListeningForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.off(LOCUSEVENT.LOCUS_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ROAP.ROAP_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ONLINE);\n }\n\n /**\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private onReady() {\n // @ts-ignore\n this.webex.once(READY, () => {\n // @ts-ignore\n StaticConfig.set(this.config);\n // @ts-ignore\n LoggerConfig.set(this.config.logging);\n // @ts-ignore\n LoggerProxy.set(this.webex.logger);\n\n mediaLogger = new MediaLogger();\n setLogger(mediaLogger);\n\n /**\n * The MeetingInfo object to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.meetingInfo = this.config.experimental.enableUnifiedMeetings\n ? // @ts-ignore\n new MeetingInfoV2(this.webex)\n : // @ts-ignore\n new MeetingInfo(this.webex);\n // @ts-ignore\n this.personalMeetingRoom = new PersonalMeetingRoom(\n {meetingInfo: this.meetingInfo},\n // @ts-ignore\n {parent: this.webex}\n );\n\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'onReady',\n },\n EVENT_TRIGGERS.MEETINGS_READY\n );\n\n MeetingsUtil.checkH264Support({disableNotifications: true});\n // @ts-ignore\n Metrics.initialSetup(this.webex);\n });\n }\n\n /**\n * API to toggle unified meetings\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleUnifiedMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableUnifiedMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableUnifiedMeetings = changeState;\n // @ts-ignore\n this.meetingInfo = changeState ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);\n }\n }\n\n /**\n * API to toggle starting adhoc meeting\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleAdhocMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableAdhocMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableAdhocMeetings = changeState;\n }\n }\n\n /**\n * API to toggle TCP reachability, needs to be called before webex.meetings.register()\n * @param {Boolean} newValue\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTcpReachability(newValue: boolean) {\n if (typeof newValue !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config.experimental.enableTcpReachability !== newValue) {\n // @ts-ignore\n this.config.experimental.enableTcpReachability = newValue;\n }\n }\n\n /**\n * API to toggle TLS reachability, needs to be called before webex.meetings.register()\n * @param {Boolean} newValue\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTlsReachability(newValue: boolean) {\n if (typeof newValue !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config.experimental.enableTlsReachability !== newValue) {\n // @ts-ignore\n this.config.experimental.enableTlsReachability = newValue;\n }\n }\n\n /**\n * Explicitly sets up the meetings plugin by registering\n * the device, connecting to mercury, and listening for locus events.\n *\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n public register() {\n // @ts-ignore\n if (!this.webex.canAuthorize) {\n LoggerProxy.logger.error(\n 'Meetings:index#register --> ERROR, Unable to register, SDK cannot authorize'\n );\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n LoggerProxy.logger.info(\n 'Meetings:index#register --> INFO, Meetings plugin already registered'\n );\n\n return Promise.resolve();\n }\n\n return Promise.all([\n this.fetchUserPreferredWebexSite(),\n this.getGeoHint(),\n this.startReachability().catch((error) => {\n LoggerProxy.logger.error(`Meetings:index#register --> GDM error, ${error.message}`);\n }),\n // @ts-ignore\n this.webex.internal.device\n .register()\n // @ts-ignore\n .then(() =>\n LoggerProxy.logger.info(\n // @ts-ignore\n `Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`\n )\n )\n // @ts-ignore\n .then(() => this.webex.internal.mercury.connect()),\n MeetingsUtil.checkH264Support.call(this),\n ])\n .then(() => {\n this.listenForEvents();\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'register',\n },\n EVENT_TRIGGERS.MEETINGS_REGISTERED\n );\n this.registered = true;\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_SUCCESS);\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#register --> ERROR, Unable to register, ${error.message}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_FAILED, {\n reason: error.message,\n stack: error.stack,\n });\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Explicitly tears down the meetings plugin by deregistering\n * the device, disconnecting from mercury, and stops listening to locus events\n *\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n unregister() {\n if (!this.registered) {\n LoggerProxy.logger.info(\n 'Meetings:index#unregister --> INFO, Meetings plugin already unregistered'\n );\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return (\n // @ts-ignore\n this.webex.internal.mercury\n .disconnect()\n // @ts-ignore\n .then(() => this.webex.internal.device.unregister())\n .then(() => {\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'unregister',\n },\n EVENT_TRIGGERS.MEETINGS_UNREGISTERED\n );\n this.registered = false;\n })\n );\n }\n\n /**\n * Creates a noise reduction effect\n *\n * @param {INoiseReductionEffect} options optional custom effect options\n * @returns {Promise} noise reduction effect.\n * @public\n * @memberof Meetings\n */\n createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});\n };\n\n /**\n * Creates a virtual background effect\n *\n * @param {IVirtualBackgroundEffect} options optional custom effect options\n * @returns {Promise} virtual background effect.\n * @public\n * @memberof Meetings\n */\n createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});\n };\n\n /**\n * Uploads logs to the webex services for tracking\n * @param {Object} [options={}]\n * @param {String} [options.callStart] Call Start Time\n * @param {String} [options.feedbackId] ID used for tracking\n * @param {String} [options.locusId]\n * @param {String} [options.correlationId]\n * @param {String} [options.meetingId] webex meeting ID\n * @param {String} [options.userId] userId\n * @param {String} [options.orgId] org id\n * @returns {String} feedback ID logs were submitted under\n */\n uploadLogs(\n options: {\n autoupload?: boolean;\n callStart?: string;\n feedbackId?: string;\n locussessionid?: string;\n locusId?: string;\n correlationId?: string;\n meetingId?: string;\n userId?: string;\n orgId?: string;\n } = {}\n ) {\n LoggerProxy.logger.info('Meetings:index#uploadLogs --> uploading logs');\n\n return this.loggerRequest\n .uploadLogs(options)\n .then((uploadResult) => {\n LoggerProxy.logger.info(\n 'Meetings:index#uploadLogs --> Upload logs for meeting completed.',\n uploadResult\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_SUCCESS,\n {\n meetingId: options.meetingId,\n details: uploadResult,\n }\n );\n\n return uploadResult;\n })\n .catch((uploadError) => {\n LoggerProxy.logger.error(\n 'Meetings:index#uploadLogs --> Unable to upload logs for meeting',\n uploadError\n );\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_FAILURE,\n {\n meetingId: options.meetingId,\n reason: uploadError,\n }\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {\n ...options,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * gets the reachability instance for Meetings\n * @returns {Reachability}\n * @public\n * @memberof Meetings\n */\n getReachability() {\n return this.reachability;\n }\n\n /**\n * initializes and starts gathering reachability for Meetings\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability() {\n return this.getReachability().gatherReachability();\n }\n\n /**\n * Get geoHint for info for meetings\n * @returns {Promise}\n * @private\n * @memberof Meetings\n */\n getGeoHint() {\n return this.request.fetchGeoHint().then((res) => {\n this.geoHintInfo = res;\n });\n }\n\n /**\n * Fetch user preferred webex site information\n * This also has other infomation about the user\n * @returns {Promise}\n * @private\n * @memberof Meetings\n */\n fetchUserPreferredWebexSite() {\n return this.request.getMeetingPreferences().then((res) => {\n if (res) {\n const preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);\n this.preferredWebexSite = preferredWebexSite;\n // @ts-ignore\n this.webex.internal.services._getCatalog().addAllowedDomains([preferredWebexSite]);\n }\n\n // fall back to getting the preferred site from the user information\n if (!this.preferredWebexSite) {\n // @ts-ignore\n return this.webex.internal.user\n .get()\n .then((user) => {\n const preferredWebexSite =\n user?.userPreferences?.userPreferencesItems?.preferredWebExSite;\n if (preferredWebexSite) {\n this.preferredWebexSite = preferredWebexSite;\n // @ts-ignore\n this.webex.internal.services._getCatalog().addAllowedDomains([preferredWebexSite]);\n } else {\n throw new Error('site not found');\n }\n })\n .catch(() => {\n LoggerProxy.logger.error(\n 'Failed to fetch preferred site from user - no site will be set'\n );\n });\n }\n\n return Promise.resolve();\n });\n }\n\n /**\n * gets the personal meeting room instance, for saved PMR values for this user\n * @returns {PersonalMeetingRoom}\n * @public\n * @memberof Meetings\n */\n\n getPersonalMeetingRoom() {\n return this.personalMeetingRoom;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} reason\n * @param {String} type\n * @returns {Undefined}\n * @private\n * @memberof Meetings\n */\n private destroy(meeting: Meeting, reason: object) {\n MeetingUtil.cleanUp(meeting);\n this.meetingCollection.delete(meeting.id);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'destroy',\n },\n EVENT_TRIGGERS.MEETING_REMOVED,\n {\n meetingId: meeting.id,\n reason,\n }\n );\n }\n\n /**\n * Create a meeting or return an existing meeting.\n *\n * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided\n *\n * @param {string} destination - sipURL, phonenumber, or locus object}\n * @param {DESTINATION_TYPE} [type] - the optional specified type, such as locusId\n * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info\n * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {string} correlationId - the optional specified correlationId (callStateForMetrics.correlationId can be provided instead)\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics\n * @param {Object} [meetingInfo] - Pre-fetched complete meeting info\n * @param {String} [meetingLookupUrl] - meeting info prefetch url\n * @returns {Promise} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(\n destination: string,\n type: DESTINATION_TYPE = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n correlationId: string = undefined,\n failOnMissingMeetingInfo = false,\n callStateForMetrics: CallStateForMetrics = undefined,\n meetingInfo = undefined,\n meetingLookupUrl = undefined\n ) {\n // Validate meeting information based on the provided destination and\n // type. This must be performed prior to determining if the meeting is\n // found in the collection, as we mutate the destination for hydra person\n // id values.\n\n if (correlationId) {\n callStateForMetrics = {...(callStateForMetrics || {}), correlationId};\n }\n\n return (\n this.meetingInfo\n .fetchInfoOptions(destination, type)\n // Catch a failure to fetch info options.\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`\n );\n if (error instanceof SpaceIDDeprecatedError) {\n throw new SpaceIDDeprecatedError();\n }\n })\n .then((options: any = {}) => {\n // Normalize the destination.\n const targetDest = options.destination || destination;\n\n // check for the conversation URL then sip Url\n let meeting = null;\n\n if (\n type === DESTINATION_TYPE.CONVERSATION_URL ||\n options.type === DESTINATION_TYPE.CONVERSATION_URL\n ) {\n const foundMeeting = this.meetingCollection.getByKey(\n MEETING_KEY.CONVERSATION_URL,\n targetDest\n );\n\n if (foundMeeting) {\n const foundMeetingIsNotCalendarMeeting = !foundMeeting.locusInfo.scheduledMeeting;\n\n // If the found meeting is not a calendar meeting, return that meeting.\n // This allows for the creation of instant-meetings when calendar meetings are present.\n if (foundMeetingIsNotCalendarMeeting) {\n meeting = foundMeeting;\n }\n }\n }\n\n // Attempt to collect the meeting if it exists.\n if (!meeting) {\n meeting = this.meetingCollection.getByKey(MEETING_KEY.SIP_URI, targetDest);\n }\n\n // Validate if a meeting was found.\n if (!meeting) {\n // Create a meeting based on the normalized destination and type.\n return this.createMeeting(\n targetDest,\n type,\n useRandomDelayForInfo,\n infoExtraParams,\n callStateForMetrics,\n failOnMissingMeetingInfo,\n meetingInfo,\n meetingLookupUrl\n ).then((createdMeeting: any) => {\n // If the meeting was successfully created.\n if (createdMeeting && createdMeeting.on) {\n // Create a destruction event for the meeting.\n createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: createdMeeting.locusInfo?.fullState?.lastActive,\n locussessionid: createdMeeting.locusInfo?.fullState?.sessionId,\n correlationId: createdMeeting.correlationId,\n feedbackId: createdMeeting.correlationId,\n locusId: createdMeeting.locusId,\n meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,\n autoupload: true,\n }).then(() => this.destroy(createdMeeting, payload.reason));\n } else {\n this.destroy(createdMeeting, payload.reason);\n }\n });\n\n createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: meetingInstance?.locusInfo?.fullState?.lastActive,\n locussessionid: meetingInstance?.locusInfo?.fullState?.sessionId,\n correlationId: meetingInstance.correlationId,\n feedbackId: meetingInstance.correlationId,\n locusId: meetingInstance.locusId,\n meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,\n autoupload: true,\n });\n }\n });\n } else {\n LoggerProxy.logger.error(\n `Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`\n );\n }\n\n // Return the newly created meeting.\n return Promise.resolve(createdMeeting);\n });\n }\n meeting.setCallStateForMetrics(callStateForMetrics);\n\n // Return the existing meeting.\n return Promise.resolve(meeting);\n })\n );\n }\n\n /**\n * Create meeting\n *\n * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided\n *\n * @param {String} destination see create()\n * @param {DESTINATION_TYPE} type see create()\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @param {Object} [meetingInfo] - Pre-fetched complete meeting info\n * @param {String} [meetingLookupUrl] - meeting info prefetch url\n * @returns {Promise} a new meeting instance complete with meeting info and destination\n * @private\n * @memberof Meetings\n */\n private async createMeeting(\n destination: any,\n type: DESTINATION_TYPE = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n callStateForMetrics: CallStateForMetrics = undefined,\n failOnMissingMeetingInfo = false,\n meetingInfo = undefined,\n meetingLookupUrl = undefined\n ) {\n const meeting = new Meeting(\n {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n // @ts-ignore\n deviceUrl: this.webex.internal.device.url,\n // @ts-ignore\n orgId: this.webex.internal.device.orgId,\n locus: type === DESTINATION_TYPE.LOCUS_ID ? destination : null, // pass the locus object if present\n meetingInfoProvider: this.meetingInfo,\n destination,\n destinationType: type,\n callStateForMetrics,\n },\n {\n // @ts-ignore\n parent: this.webex,\n }\n );\n\n this.meetingCollection.set(meeting);\n\n try {\n // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,\n // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo\n // between 5 and 2 min (random between 3 minutes) before the meeting starts\n // to avoid a spike in traffic to the wbxappi service\n let waitingTime = 0;\n\n if (destination.meeting) {\n const {startTime} = destination.meeting;\n const startTimeDate = new Date(startTime);\n const startTimeDatestamp = startTimeDate.getTime();\n const timeToStart = startTimeDatestamp - Date.now();\n const maxWaitingTime = Math.max(\n Math.min(timeToStart, MAX_RANDOM_DELAY_FOR_MEETING_INFO),\n 0\n );\n\n waitingTime = Math.round(Math.random() * maxWaitingTime);\n }\n const isMeetingActive = !!destination.fullState?.active;\n // @ts-ignore\n const {enableUnifiedMeetings} = this.config.experimental;\n const meetingInfoOptions = {\n extraParams: infoExtraParams,\n sendCAevents: !!callStateForMetrics?.correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n };\n\n if (meetingInfo) {\n meeting.injectMeetingInfo(meetingInfo, meetingInfoOptions, meetingLookupUrl);\n } else if (type !== DESTINATION_TYPE.ONE_ON_ONE_CALL) {\n // ignore fetchMeetingInfo for 1:1 meetings\n if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {\n meeting.fetchMeetingInfoTimeoutId = setTimeout(\n () => meeting.fetchMeetingInfo(meetingInfoOptions),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo(meetingInfoOptions);\n }\n }\n } catch (err) {\n if (\n !(err instanceof CaptchaError) &&\n !(err instanceof PasswordError) &&\n !(err instanceof PermissionError)\n ) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`\n );\n if (failOnMissingMeetingInfo) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.`\n );\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.MISSING_MEETING_INFO);\n throw new NoMeetingInfoError();\n }\n // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share\n LoggerProxy.logger.info(\n 'Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share'\n );\n }\n LoggerProxy.logger.debug(\n `Meetings:index#createMeeting --> Debug ${err} fetching /meetingInfo for creation.`\n );\n } finally {\n // For type LOCUS_ID we need to parse the locus object to get the information\n // about the caller and callee\n // Meeting Added event will be created in `handleLocusEvent`\n if (type !== DESTINATION_TYPE.LOCUS_ID) {\n if (!meeting.sipUri) {\n meeting.setSipUri(destination);\n }\n\n // TODO: check if we have to move this to parser\n const meetingAddedType = MeetingsUtil.getMeetingAddedType(type);\n\n // We typically shouldn't need to trigger both and event and return a promise.\n // Is this a special case? We want to make the public API usage as simple as possible.\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'createMeeting',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meetingAddedType,\n }\n );\n }\n }\n\n return meeting;\n\n // Create the meeting calling the necessary service endpoints.\n\n // Internally, there are many more destinations:\n //\n // - locusID\n // - meetingURL\n // - globalMeetingID, e.g, *00*meetingID\n // - meetingID\n // - meetingURL\n // - PSTN\n // - phone number\n //\n // Our job is to determine the appropriate one\n // and its corresponding service so that developers\n // need only sipURL to get a meeting\n // and its ID, but have the option to use createWithType()\n // and specify those types to get meetingInfo\n }\n\n /**\n * get a specifc meeting given it's type matched to the value, i.e., locus url\n * @param {String} type\n * @param {Object} value\n * @returns {Meeting}\n * @public\n * @memberof Meetings\n */\n public getMeetingByType(type: string, value: object) {\n return this.meetingCollection.getByKey(type, value);\n }\n\n /**\n * Get all meetings.\n * @returns {Object} All currently active meetings.\n * @public\n * @memberof Meetings\n */\n public getAllMeetings() {\n return this.meetingCollection.getAll();\n }\n\n /**\n * Syncs all the meetings from server. Does nothing and returns immediately if unverified guest.\n * @param {boolean} keepOnlyLocusMeetings - whether the sync should keep only locus meetings or any other meeting in meetingCollection\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n public syncMeetings({keepOnlyLocusMeetings = true} = {}): Promise {\n // @ts-ignore\n if (this.webex.credentials.isUnverifiedGuest) {\n LoggerProxy.logger.info(\n 'Meetings:index#syncMeetings --> skipping meeting sync as unverified guest'\n );\n\n return Promise.resolve();\n }\n\n return this.request\n .getActiveMeetings()\n .then((locusArray) => {\n const activeLocusUrl = [];\n\n if (locusArray?.loci && locusArray.loci.length > 0) {\n const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);\n lociToUpdate.forEach((locus) => {\n activeLocusUrl.push(locus.url);\n this.handleLocusEvent({\n locus,\n locusUrl: locus.url,\n });\n });\n }\n const meetingsCollection = this.meetingCollection.getAll();\n\n if (Object.keys(meetingsCollection).length > 0) {\n // Sometimes the mercury events are lost after mercury reconnect\n // Remove any Locus meetings that are not returned by Locus\n // (they had a locusUrl previously but are no longer active) in the sync\n for (const meeting of Object.values(meetingsCollection)) {\n // @ts-ignore\n const {locusUrl} = meeting;\n if ((keepOnlyLocusMeetings || locusUrl) && !activeLocusUrl.includes(locusUrl)) {\n // destroy function also uploads logs\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);\n }\n }\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#syncMeetings --> failed to sync meetings, ${error}`\n );\n throw new Error(error);\n });\n }\n\n /**\n * sort out locus array for initial creating\n * @param {Array} loci original locus array\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n sortLocusArrayToUpdate(loci: any[]) {\n const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));\n const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));\n this.breakoutLocusForHandleLater = [];\n const lociToUpdate = [...mainLoci];\n breakoutLoci.forEach((breakoutLocus) => {\n const associateMainLocus = mainLoci.find(\n (mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url\n );\n const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({\n locus: breakoutLocus,\n locusUrl: breakoutLocus.url,\n });\n\n if (associateMainLocus && !existCorrespondingMeeting) {\n // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,\n // after meeting create with main locus, then handle the associate breakout locus.\n // if only handle breakout locus, will miss some date\n this.breakoutLocusForHandleLater.push(breakoutLocus);\n } else {\n lociToUpdate.push(breakoutLocus);\n }\n });\n\n return lociToUpdate;\n }\n\n /**\n * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus\n * @param {Object} newCreatedLocus the locus which just create meeting object of it\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n checkHandleBreakoutLocus(newCreatedLocus) {\n if (\n !newCreatedLocus ||\n !this.breakoutLocusForHandleLater ||\n !this.breakoutLocusForHandleLater.length\n ) {\n return;\n }\n if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {\n return;\n }\n const existIndex = this.breakoutLocusForHandleLater.findIndex(\n (breakoutLocus) =>\n breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url\n );\n\n if (existIndex < 0) {\n return;\n }\n\n const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];\n this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});\n this.breakoutLocusForHandleLater.splice(existIndex, 1);\n }\n\n /**\n * Get the logger instance for plugin-meetings\n * @returns {Logger}\n */\n getLogger() {\n return LoggerProxy.get();\n }\n\n /**\n * Returns the first meeting it finds that has the webrtc media connection created.\n * Useful for debugging in the console.\n *\n * @private\n * @returns {Meeting} Meeting object that has a webrtc media connection, else undefined\n */\n getActiveWebrtcMeeting() {\n return this.meetingCollection.getActiveWebrtcMeeting();\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst rateLimitExpiryTime = new WeakMap();\n/**\n * @class\n */\nexport default class LocusRetryStatusInterceptor extends Interceptor {\n /**\n * @returns {LocusRetryStatusInterceptor}\n */\n static create() {\n // @ts-ignore\n return new LocusRetryStatusInterceptor({webex: this});\n }\n\n /**\n * Handle response errors\n * @param {Object} options\n * @param {WebexHttpError} reason\n * @returns {Promise}\n */\n onResponseError(options, reason) {\n if ((reason.statusCode === 503 || reason.statusCode === 429) && options.uri.includes('locus')) {\n const hasRetriedLocusRequest = rateLimitExpiryTime.get(this);\n const retryAfterTime = options.headers['retry-after'] || 2000;\n\n if (hasRetriedLocusRequest) {\n rateLimitExpiryTime.set(this, false);\n\n return Promise.reject(options);\n }\n rateLimitExpiryTime.set(this, true);\n\n return this.handleRetryRequestLocusServiceError(options, retryAfterTime);\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * Handle retries for locus service unavailable errors\n * @param {Object} options associated with the request\n * @param {number} retryAfterTime retry after time in milliseconds\n * @returns {Promise}\n */\n handleRetryRequestLocusServiceError(options, retryAfterTime) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n clearTimeout(timeout);\n\n // @ts-ignore\n this.webex\n .request({\n method: options.method,\n uri: options.uri,\n body: options.body,\n })\n .then(resolve)\n .catch(reject);\n }, retryAfterTime);\n });\n }\n}\n","/* eslint-env browser */\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Meetings from './meetings';\nimport config from './config';\nimport {LocusRetryStatusInterceptor} from './interceptors';\nimport CaptchaError from './common/errors/captcha-error';\nimport IntentToJoinError from './common/errors/intent-to-join';\nimport PasswordError from './common/errors/password-error';\nimport PermissionError from './common/errors/permission';\nimport {\n ReclaimHostEmptyWrongKeyError,\n ReclaimHostIsHostAlreadyError,\n ReclaimHostNotAllowedError,\n ReclaimHostNotSupportedError,\n} from './common/errors/reclaim-host-role-errors';\nimport Meeting from './meeting';\nimport MeetingInfoUtil from './meeting-info/utilv2';\nimport JoinMeetingError from './common/errors/join-meeting';\n\nregisterPlugin('meetings', Meetings, {\n config,\n interceptors: {\n LocusRetryStatusInterceptor: LocusRetryStatusInterceptor.create,\n },\n});\n\nexport {\n getDevices,\n LocalStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalStreamEventNames,\n StreamEventNames,\n RemoteStreamEventNames,\n type ServerMuteReason,\n LocalMicrophoneStreamEventNames,\n LocalCameraStreamEventNames,\n LocalMicrophoneStream,\n LocalCameraStream,\n createMicrophoneStream,\n createCameraStream,\n createDisplayStream,\n createDisplayStreamWithAudio,\n FacingMode,\n DisplaySurface,\n PresetCameraConstraints,\n type VideoContentHint,\n} from '@webex/media-helpers';\n\nexport default Meetings;\n\nexport * as CONSTANTS from './constants';\nexport * as REACTIONS from './reactions/reactions';\nexport * as sdkAnnotationTypes from './annotation/annotation.types';\nexport * as MeetingInfoV2 from './meeting-info/meeting-info-v2';\nexport {type Reaction} from './reactions/reactions.type';\n\nexport {\n CaptchaError,\n IntentToJoinError,\n JoinMeetingError,\n PasswordError,\n PermissionError,\n ReclaimHostIsHostAlreadyError,\n ReclaimHostNotAllowedError,\n ReclaimHostNotSupportedError,\n ReclaimHostEmptyWrongKeyError,\n Meeting,\n MeetingInfoUtil,\n};\n\nexport {RemoteMedia} from './multistream/remoteMedia';\n\nexport {default as TriggerProxy} from './common/events/trigger-proxy';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n SDK_EVENT,\n createEventEnvelope,\n ensureMyIdIsAvailable,\n buildHydraMembershipId,\n buildHydraMessageId,\n buildHydraOrgId,\n buildHydraPersonId,\n buildHydraRoomId,\n getHydraClusterString,\n getHydraRoomType,\n deconstructHydraId,\n} from '@webex/common';\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport {cloneDeep} from 'lodash';\n\nconst debug = require('debug')('memberships');\n\n/**\n * @typedef {Object} MembershipObject\n * @property {string} id - Unique identifier for the membership\n * @property {string} roomId - The room ID\n * @property {string} personId - The person ID\n * @property {email} personEmail - The email address of the person / room member\n * @property {boolean} isModerator - Indicates whether the specified person should be a room moderator\n * @property {boolean} isMonitor - Indicates whether the specified member is a room monitor\n * @property {isoDate} created - The date and time that this membership was created\n */\n\n/**\n * Memberships represent a person's relationship to a room. Use this API to list\n * members of any room that you're in or create memberships to invite someone\n * to a room. Memberships can also be updated to make someone a moderator\n * or deleted to remove them from the room.\n * @class\n * @name Memberships\n */\nconst Memberships = WebexPlugin.extend({\n /**\n * Register to listen for incoming membership events\n * This is an alternate approach to registering for membership webhooks.\n * The events passed to any registered handlers will be similar to the webhook JSON,\n * but will omit webhook specific fields such as name, secret, url, etc.\n * To utilize the `listen()` method, the authorization token used\n * will need to have `spark:all` and `spark:kms` scopes enabled.\n * Note that by configuring your application to enable or disable `spark:all`\n * via its configuration page will also enable or disable `spark:kms`.\n * See the Sample App\n * for more details.\n * @instance\n * @memberof Memberships\n * @returns {Promise}\n * @example\n * webex.memberships.listen()\n * .then(() => {\n * console.log('listening to membership events');\n * webex.memberships.on('created', (event) => {\n * console.log(`Got a membership:created event:\\n${event}`);\n * }\n * webex.memberships.on('updated', (event) => {\n * console.log(`Got a membership:updated event:\\n${event}`);\n * }\n * webex.memberships.on('seen', (event) => {\n * // This represents a \"read receipt\" and will include a\n * // lastSeenId for the message this member has just \"read\",\n * // There is currently no equivalent webhook for this event.\n * console.log(`Got a membership:seen event:\\n${event}`);\n * }\n * webex.memberships.on('deleted', (event) => => {\n * console.log(`Got a membership:created event:\\n${event}`);\n * }\n * })\n * .catch((e) => console.error(`Unable to register for membership events: ${e}`));\n * // App logic goes here...\n * // Later when it is time to clean up\n * webex.memberships.stopListening();\n * webex.memberships.off('created');\n * webex.memberships.off('updated');\n * webex.memberships.off('seen');\n * webex.memberships.off('deleted');\n\n */\n listen() {\n // Create a common envelope that we will wrap all events in\n return createEventEnvelope(this.webex, SDK_EVENT.EXTERNAL.RESOURCE.MEMBERSHIPS).then(\n (envelope) => {\n this.eventEnvelope = envelope;\n\n // Register to listen to events\n return this.webex.internal.mercury.connect().then(() => {\n this.listenTo(this.webex.internal.mercury, SDK_EVENT.INTERNAL.WEBEX_ACTIVITY, (event) =>\n this.onWebexApiEvent(event)\n );\n });\n }\n );\n },\n\n /**\n * Adds a person to a room. The person can be added by ID (`personId`) or by\n * Email Address (`personEmail`). The person can be optionally added to the room\n * as a moderator.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject} membership\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Create Membership Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert(membership.id);\n * assert(membership.roomId);\n * assert(membership.personId);\n * assert(membership.personEmail);\n * assert('isModerator' in membership);\n * assert('isMonitor' in membership);\n * assert(membership.created);\n * return 'success';\n * });\n * // => success\n */\n create(membership) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'memberships',\n body: membership,\n }).then((res) => res.body);\n },\n\n /**\n * Returns a single membership.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise}\n * @example\n * var membership;\n * webex.rooms.create({title: 'Get Membership Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.memberships.get(m.id);\n * })\n * .then(function(m) {\n * var assert = require('assert');\n * assert.deepEqual(m, membership);\n * return 'success';\n * });\n * // => success\n */\n get(membership) {\n const id = membership.id || membership;\n\n return this.request({\n service: 'hydra',\n resource: `memberships/${id}`,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * Returns a list of memberships. In most cases the results will only contain\n * rooms that the authenticated user is a member of. You can filter the results\n * by room to list people in a room or by person to find rooms that a\n * specific person is a member of.\n * @instance\n * @memberof Memberships\n * @param {Object} options\n * @param {string} options.personId\n * @param {string} options.personEmail\n * @param {string} options.roomId\n * @param {number} options.max\n * @returns {Promise>}\n * @example\n * var room;\n * webex.rooms.create({title: 'List Membership Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function() {\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 2);\n * for (var i = 0; i < memberships.length; i+= 1) {\n * assert.equal(memberships.items[i].roomId, room.id);\n * }\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'memberships',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Returns a list of memberships with details about the lastSeenId for each\n * user, allowing a client to indicate \"read status\" in a space GUI\n *\n * This differs from the memberships.list() function in the following ways:\n * -- it accepts only a room or object with a valid roomId\n * -- no other options, eg: max, are considered\n * -- results are not paginated\n * -- memberships in the return do not include the\n * \"created\", \"isRoomHidden\", fields\n * -- memberships in the return do include the new\n * \"lastSeenId\", and \"lastSeenDate\" fields\n * these will not exist if the member has never \"seen\" the space\n *\n * In general this function should be used only when the\n * client needs to access read status info.\n *\n * This function may be deprecated when this info is provided in the membership\n * objects returned in the list function.\n *\n *\n * @instance\n * @memberof Memberships\n * @param {Object} options\n * @param {string} options.roomId\n * @returns {Promise}\n */\n listWithReadStatus(options) {\n const deconstructedId = deconstructHydraId(options.roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster,\n };\n\n return ensureMyIdIsAvailable(this.webex).then(() =>\n this.webex.internal.services.waitForCatalog('postauth').then(() =>\n this.webex.internal.conversation\n .get(conversation, {\n participantAckFilter: 'all', // show lastAck info for each participant\n activitiesLimit: 0, // don't send the whole history of activity\n })\n .then((resp) => {\n try {\n // We keep track of the last read message by each user\n const roomUUID = resp.id;\n const roomId = buildHydraRoomId(roomUUID, conversation.cluster);\n const participants = resp.participants.items;\n const lastReadInfo = {items: []};\n const roomType = getHydraRoomType(resp.tags);\n const myId = this.webex.internal.me.id;\n const isRoomHidden = resp.tags.includes(SDK_EVENT.INTERNAL.ACTIVITY_TAG.HIDDEN);\n\n for (let i = 0; i < participants.length; i += 1) {\n const participant = participants[i];\n const participantInfo = {\n id: buildHydraMembershipId(participant.entryUUID, roomUUID, conversation.cluster),\n roomId,\n personId: buildHydraPersonId(participant.entryUUID),\n personEmail: participant.entryEmailAddress || participant.entryEmail,\n personDisplayName: participant.displayName,\n personOrgId: buildHydraOrgId(participant.orgId, conversation.cluster),\n isMonitor: false, // deprecated, but included for completeness\n roomType,\n // created is not available in the conversations payload\n };\n\n if (isRoomHidden && participantInfo.personId === myId) {\n participantInfo.isRoomHidden = isRoomHidden;\n }\n\n if ('roomProperties' in participant) {\n if ('lastSeenActivityDate' in participant.roomProperties) {\n participantInfo.lastSeenId = buildHydraMessageId(\n participant.roomProperties.lastSeenActivityUUID,\n conversation.cluster\n );\n participantInfo.lastSeenDate = participant.roomProperties.lastSeenActivityDate;\n }\n if ('isModerator' in participant.roomProperties) {\n participantInfo.isModerator = participant.roomProperties.isModerator;\n }\n }\n\n lastReadInfo.items.push(participantInfo);\n }\n\n return Promise.resolve(lastReadInfo);\n } catch (e) {\n return Promise.reject(e);\n }\n })\n )\n );\n },\n\n /**\n * Deletes a single membership.\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise}\n * @example\n * var membership, room;\n * webex.rooms.create({title: 'Remove Membership Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 2);\n * return webex.memberships.remove(membership);\n * })\n * .then(function() {\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * var assert = require('assert');\n * assert.equal(memberships.length, 1);\n * return 'success';\n * });\n * // => success\n */\n remove(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `memberships/${id}`,\n }).then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Used to update a single membership's properties\n * @instance\n * @memberof Memberships\n * @param {MembershipObject|uuid} membership\n * @returns {Promise}\n * @example\n * // Change membership to make user a moderator\n * var membership, room;\n * webex.rooms.create({title: 'Memberships Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.list({roomId: room.id});\n * })\n * .then(function(memberships) {\n * membership = memberships.items[0];\n * var assert = require('assert');\n * assert.equal(membership.isModerator, false);\n * membership.isModerator = true;\n * return webex.memberships.update(membership);\n * })\n * .then(function() {\n * return webex.memberships.get(membership.id);\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert.equal(membership.isModerator, true);\n * return 'success';\n * });\n * // => success\n * @example\n * // Hide a one on one space\n * var assert = require('assert');\n * var membership, myId;\n * webex.people.get('me')\n * .then(function(person) {\n * myId = personId;\n * return webex.messages.create({\n * toPersonEmail: 'otherUser@acme.com',\n * text: 'This message will create a 1-1 space'\n * });\n * })\n * then(function(message) {\n * return webex.memberships.list({\n * roomId: message.roomId,\n * personId: myId\n * });\n * })\n * .then((memberships) => {\n * membership = memberships.items[0];\n * assert.equal(membership.isRoomHidden, false);\n * membership.isRoomHidden = true;\n * // This will generate a memberships:updated event\n * // that will only be seen by this user\n * return webex.memberships.update(membership);\n * })\n * .then(function(membership) {\n * assert.equal(membership.isRoomHidden, true);\n * return 'success';\n * });\n * // => success\n */\n update(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `memberships/${id}`,\n body: membership,\n }).then((res) => res.body);\n },\n\n /**\n * Updates the lastSeenId attribute of a membership.\n * Call this method to send a \"read receipt\" for a given message.\n * This will update the lastSeenId for the user's membership in\n * space where the message is.\n * @instance\n * @memberof Memberships\n * @param {string} message\n * @returns {Promise}\n */\n updateLastSeen(message) {\n const activity = {\n id: deconstructHydraId(message.id).id,\n };\n const deconstructedId = deconstructHydraId(message.roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster,\n };\n\n return this.webex.internal.services.waitForCatalog('postauth').then(() =>\n this.webex.internal.conversation.acknowledge(conversation, activity).then((ack) => ({\n lastSeenId: buildHydraMessageId(ack.object.id, conversation.cluster),\n id: buildHydraMembershipId(ack.actor.entryUUID, ack.target.id, conversation.cluster),\n personId: buildHydraPersonId(ack.actor.entryUUID, conversation.cluster),\n personEmail: ack.actor.emailAddress || ack.actor.entryEmail,\n personDisplayName: ack.actor.displayName,\n personOrgId: buildHydraOrgId(ack.actor.orgId, conversation.cluster),\n roomId: buildHydraRoomId(ack.target.id, conversation.cluster),\n roomType: getHydraRoomType(ack.target.tags),\n isRoomHidden: false, // any activity unhides a space.\n isMonitor: false, // deprecated, returned for back compat\n created: ack.published,\n }))\n );\n },\n\n /**\n * This function is called when an internal membership events fires,\n * if the user registered for these events with the public listen() method.\n * External users of the SDK should not call this function\n * @private\n * @memberof Memberships\n * @param {Object} event\n * @returns {void}\n */\n onWebexApiEvent(event) {\n const {activity} = event.data;\n\n /* eslint-disable no-case-declarations */\n switch (activity.verb) {\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.CREATE:\n const membershipCreatedEventDataArray = activity.object.participants.items.map(\n (participant) => {\n const output = cloneDeep(activity);\n\n output.target = cloneDeep(activity.object);\n output.object = cloneDeep(participant);\n\n return this.getMembershipEvent(output, SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED);\n }\n );\n\n membershipCreatedEventDataArray.forEach((data) => {\n if (data) {\n debug(`membership \"created\" payload: ${JSON.stringify(data)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, data);\n }\n });\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD:\n const membershipCreatedEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED\n );\n\n if (membershipCreatedEventData) {\n debug(`membership \"created\" payload: \\\n ${JSON.stringify(membershipCreatedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, membershipCreatedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.LEAVE:\n const membershipDeletedEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED\n );\n\n if (membershipDeletedEventData) {\n debug(`membership \"deleted\" payload: \\\n ${JSON.stringify(membershipDeletedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED, membershipDeletedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ADD_MODERATOR:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.REMOVE_MODERATOR:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE:\n const membershipUpdatedEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED\n );\n\n if (membershipUpdatedEventData) {\n debug(`membership \"updated\" payload: \\\n ${JSON.stringify(membershipUpdatedEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED, membershipUpdatedEventData);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE:\n const membershipSeenEventData = this.getMembershipEvent(\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN\n );\n\n if (membershipSeenEventData) {\n debug(`membership \"updated\" payload: \\\n ${JSON.stringify(membershipSeenEventData)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.SEEN, membershipSeenEventData);\n }\n break;\n\n default:\n break;\n }\n },\n\n /**\n * Constructs the data object for an event on the memberships resource,\n * adhering to Hydra's Webhook data structure memberships.\n * External users of the SDK should not call this function\n * @private\n * @memberof Memberships\n * @param {Object} activity from mercury\n * @param {Object} event type of \"webhook\" event\n * @returns {Object} constructed event\n */\n getMembershipEvent(activity, event) {\n try {\n const sdkEvent = cloneDeep(this.eventEnvelope);\n const cluster =\n activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE\n ? getHydraClusterString(this.webex, activity.target.url)\n : getHydraClusterString(this.webex, activity.url);\n let member;\n let space;\n\n sdkEvent.event = event;\n sdkEvent.data.created = activity.published;\n sdkEvent.actorId = buildHydraPersonId(activity.actor.entryUUID, cluster);\n if (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {\n sdkEvent.data.roomId = buildHydraRoomId(activity.target.id, cluster);\n sdkEvent.data.roomType = getHydraRoomType(activity.target.tags);\n sdkEvent.data.isRoomHidden = false; // any activity unhides a space.\n } else {\n sdkEvent.data.roomId = buildHydraRoomId(activity.object.id, cluster);\n sdkEvent.data.roomType = SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT;\n // currently hidden attribute is only set on 1-1\n sdkEvent.data.isRoomHidden = true;\n }\n if (activity.verb !== SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {\n if (activity.object.roomProperties && activity.object.roomProperties.isModerator) {\n sdkEvent.data.isModerator = true;\n } else {\n sdkEvent.data.isModerator = false;\n }\n }\n // This is deprecated but still sent in the webhooks\n // We won't send it for our new SDK events\n // sdkEvent.data.isMonitor = false;\n\n if (activity.verb === SDK_EVENT.INTERNAL.ACTIVITY_VERB.ACKNOWLEDGE) {\n // For a read receipt the person is the \"actor\" or the one who did the reading\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;\n // The space with the read message is the \"target\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;\n // And the \"object\" is the message that was last seen\n sdkEvent.data.lastSeenId = buildHydraMessageId(activity.object.id, cluster);\n } else if (activity.verb === SDK_EVENT.INTERNAL.ACTIVITY_VERB.HIDE) {\n // For a hide activity the person is also the \"actor\"\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.ACTOR;\n // But the space is now the \"object\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;\n } else {\n // For most memberships events the person is the 'object\"\n member = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.OBJECT;\n // and the space is the \"target\"\n space = SDK_EVENT.INTERNAL.ACTIVITY_FIELD.TARGET;\n }\n\n sdkEvent.data.id = buildHydraMembershipId(\n activity[member].entryUUID,\n activity[space].id,\n cluster\n );\n sdkEvent.data.personId = buildHydraPersonId(activity[member].entryUUID, cluster);\n sdkEvent.data.personEmail = activity[member].emailAddress || activity[member].entryEmail;\n sdkEvent.data.personDisplayName = activity[member].displayName;\n sdkEvent.data.personOrgId = buildHydraOrgId(activity[member].orgId, cluster);\n\n return sdkEvent;\n } catch (e) {\n this.webex.logger.error(`Unable to generate SDK event from mercury \\\n'socket activity for memberships:${event} event: ${e.message}`);\n\n return null;\n }\n },\n});\n\nexport default Memberships;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-mercury';\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Memberships from './memberships';\n\nregisterPlugin('memberships', Memberships);\n\nexport default Memberships;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n SDK_EVENT,\n buildHydraMessageId,\n buildHydraPersonId,\n buildHydraRoomId,\n createEventEnvelope,\n getHydraClusterString,\n} from '@webex/common';\nimport {Page, WebexPlugin} from '@webex/webex-core';\nimport {cloneDeep, isArray} from 'lodash';\n\nconst verbToType = {\n [SDK_EVENT.INTERNAL.ACTIVITY_VERB.SHARE]: SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED,\n [SDK_EVENT.INTERNAL.ACTIVITY_VERB.POST]: SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED,\n [SDK_EVENT.INTERNAL.ACTIVITY_VERB.DELETE]: SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED,\n};\n\nconst getRoomType = (roomTags) =>\n roomTags.includes(SDK_EVENT.INTERNAL.ACTIVITY_TAG.ONE_ON_ONE)\n ? SDK_EVENT.EXTERNAL.SPACE_TYPE.DIRECT\n : SDK_EVENT.EXTERNAL.SPACE_TYPE.GROUP;\n\n/**\n * @typedef {Object} MessageObject\n * @property {string} id - (server generated) Unique identifier for the message\n * @property {string} personId - The ID for the author of the message\n * @property {email} personEmail - The email for the author of the message\n * @property {string} roomId - The ID for the room of the message\n * @property {string} text - The message posted to the room in plain text\n * @property {string} markdown - The message posted to the room in markdown\n * @property {Array} files - The source URL(s) for the message attachment(s).\n * See the {@link https://developer.webex.com/docs/api/basics#message-attachments|Message Attachments}\n * Guide for a list of supported media types.\n * @property {isoDate} created - (server generated) The date and time that the message was created\n */\n\n/**\n * Messages are how people communicate in rooms. Each message timestamped and\n * represented in Webex as a distinct block of content. Messages can contain\n * plain text and a single file attachment. See the\n * {@link https://developer.webex.com/docs/api/basics#message-attachments|Message Attachments} Guide\n * for a list of supported media types.\n * @class\n */\nconst Messages = WebexPlugin.extend({\n /**\n * Initializer used to generate Messages\n * as a plugin wrapped around the provided arguments.\n * @private\n * @see WebexPlugin.initialize\n * @param {...any} args\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Register to listen for incoming messages events\n * This is an alternate approach to registering for messages webhooks.\n * The events passed to any registered handlers will be similar to the webhook JSON,\n * but will omit webhook specific fields such as name, secret, url, etc.\n * The messages.listen() event objects can also include additional fields not\n * available in the webhook's JSON payload: `text`, `markdown`, and `files`.\n * These fields are available when their details are included in the web socket's\n * `activity` object. Retrieving other fields, such as the `html` field,\n * will require a manual request to get the corresponding message object.\n * To utilize the `listen()` method, the authorization token used\n * will need to have `spark:all` and `spark:kms` scopes enabled.\n * Note that by configuring your application to enable or disable `spark:all`\n * via its configuration page will also enable or disable `spark:kms`.\n * See the Sample App\n * for more details.\n * @instance\n * @memberof Messages\n * @returns {Promise}\n * @example\n * webex.messages.listen()\n * .then(() => {\n * console.log('listening to message events');\n * webex.messages.on('created', (event) => console.log(`Got a message:created event:\\n${event}`));\n * webex.messages.on('deleted', (event) => console.log(`Got a message:deleted event:\\n${event}`));\n * })\n * .catch((e) => console.error(`Unable to register for message events: ${e}`));\n * // Some app logic...\n * // When it is time to cleanup\n * webex.messages.stopListening();\n * webex.messages.off('created');\n * webex.messages.off('deleted');\n */\n listen() {\n // Create a common envelope that we will wrap all events in\n return createEventEnvelope(this.webex, SDK_EVENT.EXTERNAL.RESOURCE.MESSAGES).then(\n (envelope) => {\n this.eventEnvelope = envelope;\n\n // Register to listen to events\n return this.webex.internal.mercury.connect().then(() => {\n this.listenTo(this.webex.internal.mercury, SDK_EVENT.INTERNAL.WEBEX_ACTIVITY, (event) =>\n this.onWebexApiEvent(event)\n );\n });\n }\n );\n },\n\n /**\n * Post a new message and/or media content into a room.\n * @instance\n * @memberof Messages\n * @param {MessageObject} message\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Create Message Example'})\n * .then(function(room) {\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id\n * });\n * })\n * .then(function(message) {\n * var assert = require('assert');\n * assert(message.id);\n * assert(message.personId);\n * assert(message.personEmail);\n * assert(message.roomId);\n * assert(message.created);\n * return 'success';\n * });\n * // => success\n */\n create(message) {\n let key = 'body';\n\n if (message.file) {\n this.logger.warn(\n 'Supplying a single `file` property is deprecated; please supply a `files` array'\n );\n message.files = [message.file];\n Reflect.deleteProperty(message, 'file');\n }\n\n if (\n isArray(message.files) &&\n message.files.reduce((type, file) => type || typeof file !== 'string', false)\n ) {\n key = 'formData';\n }\n\n const options = {\n method: 'POST',\n service: 'hydra',\n resource: 'messages',\n [key]: message,\n };\n\n return this.request(options).then((res) => res.body);\n },\n /**\n * Put an updated message and/or media content into a room instead of existing message.\n * @instance\n * @memberof Messages\n * @param {MessageObject} message\n * @param {MessageObject} altMessage\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Create Message Example'})\n * .then(function(room) {\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * message = m;\n * return webex.messages.update(message,{markdown:`**What up**`});\n * })\n * .then(function(m) {\n * message = m;\n * return webex.messages.update(message.id,{roomId:message.roomId,text:'Howdy!'});\n * })\n * .then(function(message) {\n * var assert = require('assert');\n * assert(message.id);\n * assert(message.personId);\n * assert(message.personEmail);\n * assert(message.roomId);\n * assert(message.created);\n * return 'success';\n * });\n * // => success\n */\n update(message, altMessage) {\n const id = message.id || message;\n let key = 'body';\n\n if (message.file) {\n this.logger.warn(\n 'Supplying a single `file` property is deprecated; please supply a `files` array'\n );\n message.files = [message.file];\n Reflect.deleteProperty(message, 'file');\n }\n\n if (\n message.files &&\n isArray(message.files) &&\n message.files.reduce((type, file) => type || typeof file !== 'string', false)\n ) {\n key = 'formData';\n }\n\n if (!altMessage.roomId && !message.roomId) {\n this.logger.error(\n 'Error: RoomID is mandatory for message update call in one of the parameter, message or altMessage'\n );\n } else {\n /* if altMessage doesnt contain RoomId use roomId from message object. \n I dont understand why RESTAPI call has RoomId Mandatory in body something webex Developers to clarity. \n In my opinion messageId provided in REST URL call should be enough to get roomID at serverside\n */\n altMessage.roomId = altMessage.roomId ? altMessage.roomId : message.roomId;\n\n const options = {\n method: 'PUT',\n service: 'hydra',\n resource: 'messages/'.concat(id),\n [key]: altMessage,\n };\n\n return this.request(options).then((res) => res.body);\n }\n\n return null;\n },\n\n /**\n * Returns a single message.\n * @instance\n * @memberof Messages\n * @param {RoomObject|string} message\n * @returns {Promise}\n * @example\n * var message;\n * webex.rooms.create({title: 'Get Message Example'})\n * .then(function(room) {\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * message = m;\n * return webex.messages.get(message.id);\n * })\n * .then(function(message2) {\n * var assert = require('assert');\n * assert.deepEqual(message2, message);\n * return 'success';\n * });\n * // => success\n */\n get(message) {\n const id = message.id || message;\n\n return this.request({\n service: 'hydra',\n resource: `messages/${id}`,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * Returns a list of messages. In most cases the results will only contain\n * messages posted in rooms that the authenticated user is a member of.\n * @instance\n * @memberof Messages\n * @param {Object} options\n * @param {string} options.roomId\n * @param {number} options.max\n * @returns {Promise>}\n * @example\n * var message1, message2, room;\n * webex.rooms.create({title: 'List Messages Example'})\n * .then(function(r) {\n * room = r;\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * message1 = m;\n * return webex.messages.create({\n * text: 'How are you?',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * message2 = m;\n * return webex.messages.list({roomId: room.id});\n * })\n * .then(function(messages) {\n * var assert = require('assert');\n * assert.equal(messages.length, 2);\n * assert.equal(messages.items[0].id, message2.id);\n * assert.equal(messages.items[1].id, message1.id);\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'messages',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Deletes a single message. Deleting a message will notify all members of the\n * room that the authenticated user deleted the message. Generally, users can\n * only delete their own messages except for the case of Moderated Rooms and\n * Org Administrators.\n * @instance\n * @memberof Messages\n * @param {MessageObject|uuid} message\n * @returns {Promise}}\n * @example\n * var message1, room;\n * webex.rooms.create({title: 'Messages Example'})\n * .then(function(r) {\n * room = r;\n * return webex.messages.create({\n * text: 'Howdy!',\n * roomId: room.id\n * });\n * })\n * .then(function(m) {\n * message1 = m;\n * return webex.messages.create({\n * text: 'How are you?',\n * roomId: room.id\n * });\n * })\n * .then(function() {\n * return webex.messages.remove(message1);\n * })\n * .then(function() {\n * return webex.messages.list({roomId: room.id});\n * })\n * .then(function(messages) {\n * var assert = require('assert');\n * assert.equal(messages.items.length, 1);\n * assert(messages.items[0].id !== message1.id);\n * return 'success';\n * });\n * // => success\n */\n remove(message) {\n const id = message.id || message;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `messages/${id}`,\n }).then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Curry the 'trigger' method\n * @private\n * @memberof Messages\n * @param {string} type the type of event to fire\n * @returns {function} takes event and triggers it\n */\n fire(type) {\n return (event) => this.trigger(type, event);\n },\n\n /**\n * This function is called when an internal membership events fires,\n * if the user registered for these events with the listen() function.\n * External users of the SDK should not call this function\n * @private\n * @memberof Messages\n * @param {Object} event\n * @param {Object} event.data contains the data of the event\n * @param {Object} event.data.activity the activity that triggered the event\n * @returns {void}\n */\n onWebexApiEvent({data: {activity}}) {\n const type = verbToType[activity.verb];\n\n if (!type) {\n return;\n }\n\n this.getMessageEvent(activity, type).then(this.fire(type));\n },\n\n /**\n * Constructs the data object for an event on the messages resource,\n * adhering to Hydra's Webhook data structure messages.\n * External users of the SDK should not call this function\n * @private\n * @memberof Messages\n * @param {Object} activity from mercury\n * @param {String} type the type of event\n * @returns {Object} constructed event\n */\n getMessageEvent(activity, type) {\n const {\n id,\n actor: {entryUUID: actorId, emailAddress},\n object: {id: objectId},\n target: {id: roomId, url: roomUrl, tags: roomTags},\n } = activity;\n\n const cluster = getHydraClusterString(this.webex, roomUrl);\n const combinedEvent = cloneDeep(this.eventEnvelope);\n\n combinedEvent.event = type;\n if (type === SDK_EVENT.EXTERNAL.EVENT_TYPE.DELETED) {\n // Cannot fetch since the message is deleted\n // Convert the Mercury event to a Hydra event\n const personId = buildHydraPersonId(actorId, cluster);\n\n return Promise.resolve({\n ...combinedEvent,\n actorId: personId,\n data: {\n id: buildHydraMessageId(objectId, cluster),\n personEmail: emailAddress || actorId,\n personId,\n roomId: buildHydraRoomId(roomId, cluster),\n roomType: getRoomType(roomTags),\n },\n });\n }\n\n return this.get(buildHydraMessageId(id, cluster)).then((data) => ({\n ...combinedEvent,\n actorId: data.personId,\n data,\n }));\n },\n});\n\nexport default Messages;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-conversation'; // decrypt mercury activities\nimport '@webex/internal-plugin-mercury';\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Messages from './messages';\n\nregisterPlugin('messages', Messages);\n\nexport default Messages;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n * @ignore\n */\nconst PersonUUIDRequestBatcher = Batcher.extend({\n namespace: 'People',\n\n /**\n * @instance\n * @memberof PersonUUIDRequestBatcher\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n const promises = res.body.items.map((personResponse) =>\n this.handleItemSuccess(personResponse.id, personResponse)\n );\n\n if (res.body.notFoundIds) {\n promises.concat(res.body.notFoundIds.map((id) => this.handleItemFailure(id)));\n }\n\n return Promise.all(promises);\n },\n\n handleItemFailure(id) {\n return this.getDeferredForResponse(id).then((defer) => {\n defer.reject(id);\n });\n },\n\n /**\n * @instance\n * @memberof PersonUUIDRequestBatcher\n * @param {string} email\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemSuccess(email, response) {\n return this.getDeferredForResponse(email).then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @instance\n * @memberof PersonUUIDRequestBatcher\n * @param {string} uuidOrHydraId\n * @returns {Promise}\n */\n fingerprintRequest(uuidOrHydraId) {\n const hydraId = this.webex.people.inferPersonIdFromUuid(uuidOrHydraId);\n\n return Promise.resolve(hydraId);\n },\n\n /**\n * @instance\n * @memberof PersonUUIDRequestBatcher\n * @param {string} hydraId\n * @returns {Promise}\n */\n fingerprintResponse(hydraId) {\n return Promise.resolve(hydraId);\n },\n\n prepareRequest(ids) {\n return Promise.resolve(ids.join());\n },\n\n /**\n * @instance\n * @memberof PersonUUIDRequestBatcher\n * @param {Object} ids\n * @returns {Promise}\n */\n submitHttpRequest(ids) {\n return this.webex.request({\n service: 'hydra',\n resource: `people/?id=${ids}&showAllTypes=${this.config.showAllTypes}`,\n });\n },\n});\n\nexport default PersonUUIDRequestBatcher;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport {base64, oneFlight} from '@webex/common';\n\nimport PeopleBatcher from './people-batcher';\n\n/**\n * @typedef {Object} PersonObject\n * @property {string} id - (server generated) Unique identifier for the person\n * @property {Array} emails - Email addresses of the person\n * @property {string} displayName - Display name of the person\n * @property {isoDate} created - (server generated) The date and time that the person was created\n */\n\n/**\n * @class\n */\nconst People = WebexPlugin.extend({\n namespace: 'People',\n\n children: {\n batcher: PeopleBatcher,\n },\n /**\n * Returns a single person by ID\n * @instance\n * @memberof People\n * @param {PersonObject|uuid|string} person\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Get Person Example'})\n * .then(function(room) {\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(membership) {\n * return webex.people.get(membership.personId);\n * })\n * .then(function(alice) {\n * var assert = require('assert');\n * assert(alice.id);\n * assert(Array.isArray(alice.emails));\n * assert.equal(alice.emails.filter(function(email) {\n * return email === 'alice@example.com';\n * }).length, 1);\n * assert(alice.displayName);\n * assert(alice.created);\n * return 'success';\n * });\n * // => success\n */\n get(person) {\n if (!person) {\n return Promise.reject(new Error('A person with an id is required'));\n }\n if (person === 'me') {\n return this._getMe();\n }\n const id = person.personId || person.id || person;\n\n return this.batcher.request(id);\n },\n\n /**\n * Returns a list of people\n * @instance\n * @memberof People\n * @param {Object | uuid[]} options or array of uuids\n * @param {email} options.email - Returns people with an email that contains this string\n * @param {string} options.displayName - Returns people with a name that contains this string\n * @param {bool} showAllTypes optional flag that requires Hydra to send every type field,\n * even if the type is not \"person\" (e.g.: SX10, webhook_integration, etc.)\n * @returns {Promise>}\n * @example\n * var room;\n * webex.rooms.create({title: 'List People Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function() {\n * return webex.memberships.create({\n * personEmail: 'bob@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function() {\n * return webex.people.list({email: 'alice@example.com'});\n * })\n * .then(function(people) {\n * var assert = require('assert');\n * assert.equal(people.length, 1);\n * var person = people.items[0];\n * assert(person.id);\n * assert(Array.isArray(person.emails));\n * assert(person.displayName);\n * assert(person.created);\n * return 'success';\n * });\n * // => success\n * @example Example usage of array method\n * var room;\n * var aliceId;\n * var bobId;\n * webex.rooms.create({title: 'List People Array Example'})\n * .then(function(r) {\n * room = r;\n * return webex.memberships.create({\n * personEmail: 'alice@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(membership) {\n * aliceId = membership.personId;\n * })\n * .then(function() {\n * return webex.memberships.create({\n * personEmail: 'bob@example.com',\n * roomId: room.id\n * });\n * })\n * .then(function(membership) {\n * bobId = membership.personId;\n * })\n * .then(function() {\n * return webex.people.list([aliceId, bobId]);\n * })\n * .then(function(people) {\n * var assert = require('assert');\n * assert.equal(people.length, 2);\n * var person = people.items[0];\n * assert(person.id);\n * assert(Array.isArray(person.emails));\n * assert(person.displayName);\n * assert(person.created);\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n if (Array.isArray(options)) {\n const peopleIds = options;\n\n return Promise.all(peopleIds.map((personId) => this.batcher.request(personId)));\n }\n\n return this.request({\n service: 'hydra',\n resource: 'people',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Converts a uuid to a hydra id without a network dip.\n * @param {string} id\n * @private\n * @returns {string}\n */\n inferPersonIdFromUuid(id) {\n // base64.validate seems to return true for uuids, so we need a different\n // check\n try {\n if (base64.decode(id).includes('ciscospark://')) {\n return id;\n }\n } catch (err) {\n // ignore\n }\n\n return base64.encode(`ciscospark://us/PEOPLE/${id}`);\n },\n\n /**\n * Fetches the current user from the /people/me endpoint\n * @instance\n * @memberof People\n * @private\n * @returns {Promise}\n */\n @oneFlight\n _getMe() {\n return this.webex\n .request({\n service: 'hydra',\n resource: 'people/me',\n })\n .then((res) => res.body);\n },\n});\n\nexport default People;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport People from './people';\nimport config from './config';\n\nregisterPlugin('people', People, {\n config,\n});\n\nexport {default} from './people';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n people: {\n batcherWait: 100,\n batcherMaxCalls: 10,\n batcherMaxWait: 1500,\n /**\n * optional flag that requires Hydra to send every type field,\n * even if the type is not \"person\" (e.g.: SX10, webhook_integration, etc.)\n * @private\n */\n showAllTypes: false,\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport {cloneDeep} from 'lodash';\nimport {\n SDK_EVENT,\n createEventEnvelope,\n buildHydraPersonId,\n buildHydraRoomId,\n getHydraClusterString,\n getHydraRoomType,\n deconstructHydraId,\n} from '@webex/common';\n\nconst debug = require('debug')('rooms');\n\n/**\n * @typedef {Object} RoomObject\n * @property {string} id - (server generated) Unique identifier for the room\n * @property {string} title - The display name for the room. All room members\n * will see the title so make it something good\n * @property {string} teamId - (optional) The ID of the team to which the room\n * belongs\n * @property {isoDate} created - (server generated) The date and time that the\n * room was created\n */\n\n/**\n * Rooms are virtual meeting places for getting stuff done. This resource\n * represents the room itself. Check out the {@link Memberships} API to learn\n * how to add and remove people from rooms and the {@link Messages} API for\n * posting and managing content.\n * @class\n * @name Rooms\n */\nconst Rooms = WebexPlugin.extend({\n /**\n * Register to listen for incoming rooms events\n * This is an alternate approach to registering for rooms webhooks.\n * The events passed to any registered handlers will be similar to the webhook JSON,\n * but will omit webhook specific fields such as name, secret, url, etc.\n * To utilize the `listen()` method, the authorization token used\n * will need to have `spark:all` and `spark:kms` scopes enabled.\n * Note that by configuring your application to enable or disable `spark:all`\n * via its configuration page will also enable or disable `spark:kms`.\n * See the Sample App\n * for more details.\n * @instance\n * @memberof Rooms\n * @returns {Promise}\n * @example\n * webex.rooms.listen()\n * .then(() => {\n * console.log('listening to room events');\n * webex.rooms.on('created', (event) => console.log(`Got a room:created event:\\n${event}`);\n * webex.rooms.on('updated', (event) => console.log(`Got a room:updated event:\\n${event}`);\n * })\n * .catch((e) => console.error(`Unable to register for room events: ${e}`));\n * // Some app logic...\n * // WHen it is time to cleanup\n * webex.rooms.stopListening();\n * webex.rooms.off('created');\n * webex.rooms.off('updated');\n */\n listen() {\n return createEventEnvelope(this.webex, SDK_EVENT.EXTERNAL.RESOURCE.ROOMS).then((envelope) => {\n this.eventEnvelope = envelope;\n\n return this.webex.internal.mercury.connect().then(() => {\n this.listenTo(this.webex.internal.mercury, SDK_EVENT.INTERNAL.WEBEX_ACTIVITY, (event) =>\n this.onWebexApiEvent(event)\n );\n });\n });\n },\n\n /**\n * Creates a new room. The authenticated user is automatically added as a\n * member of the room. See the {@link Memberships} API to learn how to add\n * more people to the room.\n * @instance\n * @memberof Rooms\n * @param {RoomObject} room\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Create Room Example'})\n * .then(function(room) {\n * var assert = require('assert')\n * assert(typeof room.created === 'string');\n * assert(typeof room.id === 'string');\n * assert(room.title === 'Create Room Example');\n * console.log(room.title);\n * return 'success';\n * });\n * // => success\n */\n create(room) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'rooms',\n body: room,\n }).then((res) => res.body);\n },\n\n /**\n * Returns a single room.\n * @instance\n * @memberof Rooms\n * @param {RoomObject|string} room\n * @param {Object} options\n * @returns {Promise}\n * @example\n * var room;\n * webex.rooms.create({title: 'Get Room Example'})\n * .then(function(r) {\n * room = r\n * return webex.rooms.get(room.id)\n * })\n * .then(function(r) {\n * var assert = require('assert');\n * assert.deepEqual(r, room);\n * return 'success';\n * });\n * // => success\n */\n get(room, options) {\n const id = room.id || room;\n\n return this.request({\n service: 'hydra',\n resource: `rooms/${id}`,\n qs: options,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * Returns a list of rooms. In most cases the results will only contain rooms\n * that the authenticated user is a member of.\n * @instance\n * @memberof Rooms\n * @param {Object} options\n * @param {Object} options.max Limit the maximum number of rooms in the\n * response.\n * @returns {Promise>}\n * @example\n * var createdRooms;\n * Promise.all([\n * webex.rooms.create({title: 'List Rooms Example 1'}),\n * webex.rooms.create({title: 'List Rooms Example 2'}),\n * webex.rooms.create({title: 'List Rooms Example 3'})\n * ])\n * .then(function(r) {\n * createdRooms = r;\n * return webex.rooms.list({max: 3})\n * .then(function(rooms) {\n * var assert = require('assert');\n * assert(rooms.length === 3);\n * for (var i = 0; i < rooms.items.length; i+= 1) {\n * assert(createdRooms.filter(function(room) {\n * return room.id === rooms.items[i].id;\n * }).length === 1);\n * }\n * return 'success';\n * });\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'rooms/',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Returns a list of rooms with details about the data of the last\n * activity in the room, and the date of the users last presences in\n * the room. The list is sorted with this with most recent activity first\n *\n * For rooms where lastActivityDate > lastSeenDate the space\n * can be considered to be \"unread\"\n *\n * This differs from the rooms.list() function in the following ways:\n * -- when called with no parameters it returns an array of all\n * spaces, up to 1000, that the user is a member of\n * -- pagination is not supported. ALL rooms are returned which\n * can result in a large payload\n * -- For users with hundreds of spaces, this API can take some time to\n * to return, for this reason it supports an optional maxRecent parameter.\n * If set this will return only the specified number of spaces with activity\n * in the last two weeks. Recommended value is 30. Max supported is 100.\n * -- only \"id\", \"type\", \"lastActivityDate\", and \"lastSeenDate\" are\n * guaranteed to be available for each room in the list\n * -- \"title\" is usually returned, but not guaranteed\n *\n * In general this function should be used only when the client needs to\n * access read status info, for example on startup.\n * After startup, clients should track message and membership:seen events\n * to maintain read status client side.\n *\n * Since this API can take some time to return up to 1000 spaces, it is\n * recommended that custom clients call this first with the maxRecent parameter\n * set to 30, so that they can display some of the more recents spaces. Calling\n * this API a second time with no parameters will return all the spaces.\n *\n * Not all spaces may be returned, for example when users in more than 1000\n * spaces, or when a new spaces is added after this function is called,\n * but before it returns. Custom clients should be prepared to gracefully\n * handle cases where an event occurs in a space not returned by this call,\n * by querying rooms.getWithReadStatus() with the id of the room in question\n *\n * This function may be deprecated when this info is provided in the membership\n * objects returned in the list function.\n * @instance\n * @param {int} maxRecent\n * @memberof Rooms\n * @returns {Promise}\n */\n async listWithReadStatus(maxRecent = 0) {\n const now = new Date();\n const options = {\n activitiesLimit: 0,\n computeTitleIfEmpty: true,\n conversationsLimit: 1000,\n isActive: true,\n };\n\n if (maxRecent > 0) {\n options.conversationsLimit = maxRecent;\n options.sinceDate = now.setDate(now.getDate() - 14);\n } else if (maxRecent < 0 || maxRecent > 100) {\n return Promise.reject(\n new Error(\n 'rooms.listWithReadStatus: ' +\n 'optional maxRecent parameter must be an integer between 1 and 100'\n )\n );\n }\n\n return this.webex.internal.services\n .waitForCatalog('postauth')\n .then(() => this.webex.internal.conversation.list(options))\n .then((conversations) => buildRoomInfoList(this.webex, conversations));\n },\n\n /**\n * Returns a single room object with details about the data of the last\n * activity in the room, and the date of the users last presence in\n * the room.\n *\n * For rooms where lastActivityDate > lastSeenDate the room\n * can be considered to be \"unread\"\n *\n * This differs from the rooms.get() function in the following ways:\n * -- it takes a single roomId parameter to fetch\n * -- no other options are considered\n * -- only \"id\", \"type\", \"lastActivityDate\", and \"lastSeenDate\" are\n * guaranteed to be available in the return object\n * -- \"title\" is usually returned, but not guaranteed\n *\n * In general clients should use the listWithReadStatus() method on startup\n * to get the initial roomStatus and then update their client side copy by\n * responding to message, membership and room events.\n\n * This function allows a custom client to be \"nimble\" if it is responding\n * to an event with a roomId that was not in the original fetch. The\n * anticipated behavior is that getWithReadStats is called \"just in time\",\n * with the resulting room object being added to the list of cached room\n * objects on the client side.\n *\n * This function may be deprecated when this info is provided in the room\n * object returned in the get function.\n * @instance\n * @memberof Rooms\n * @param {string} roomId\n * @returns {Promise}\n */\n getWithReadStatus(roomId) {\n const deconstructedId = deconstructHydraId(roomId);\n const conversation = {\n id: deconstructedId.id,\n cluster: deconstructedId.cluster,\n };\n\n return this.webex.internal.services.waitForCatalog('postauth').then(() =>\n this.webex.internal.conversation\n .get(conversation, {\n computeTitleIfEmpty: true,\n activitiesLimit: 0, // don't send the whole history of activity\n })\n .then((convo) => buildRoomInfo(this.webex, convo))\n );\n },\n\n /**\n * Deletes a single room.\n * @instance\n * @memberof Rooms\n * @param {RoomObject|string} room\n * @returns {Promise}\n * @example\n * var room;\n * webex.rooms.create({title: 'Remove Room Example'})\n * .then(function(r) {\n * room = r;\n * return webex.rooms.remove(room.id);\n * })\n * .then(function() {\n * return webex.rooms.get(room.id);\n * })\n * .then(function() {\n * var assert = require('assert');\n * assert(false, 'the previous get should have failed');\n * })\n * .catch(function(reason) {\n * var assert = require('assert');\n * assert.equal(reason.statusCode, 404);\n * return 'success'\n * });\n * // => success\n */\n remove(room) {\n const id = room.id || room;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `rooms/${id}`,\n }).then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Used to update a single room's properties.\n * @instance\n * @memberof Rooms\n * @param {RoomObject} room\n * @returns {Promise}\n * @example\n * var room;\n * webex.rooms.update({title: 'Update Room Example'})\n * .then(function(r) {\n * room = r;\n * room.title = 'Update Room Example (Updated Title)';\n * return webex.rooms.update(room);\n * })\n * .then(function() {\n * return webex.rooms.get(room.id);\n * })\n * .then(function(room) {\n * var assert = require('assert');\n * assert.equal(room.title, 'Update Room Example (Updated Title)');\n * return 'success';\n * });\n * // => success\n */\n update(room) {\n const {id} = room;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `rooms/${id}`,\n body: room,\n }).then((res) => res.body);\n },\n\n /**\n * This function is called when an internal membership events fires,\n * if the user registered for these events with the listen() function.\n * External users of the SDK should not call this function\n * @private\n * @memberof Rooms\n * @param {Object} event\n * @returns {void}\n */\n onWebexApiEvent(event) {\n const {activity} = event.data;\n\n /* eslint-disable no-case-declarations */\n switch (activity.verb) {\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.CREATE:\n const roomCreatedEvent = this.getRoomEvent(\n this.webex,\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED\n );\n\n if (roomCreatedEvent) {\n debug(`room \"created\" payload: \\\n ${JSON.stringify(roomCreatedEvent)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED, roomCreatedEvent);\n }\n break;\n\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.UPDATE:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.LOCK:\n case SDK_EVENT.INTERNAL.ACTIVITY_VERB.UNLOCK:\n debug(`generating a rooms:updated based on ${activity.verb} activity`);\n const roomUpdatedEvent = this.getRoomEvent(\n this.webex,\n activity,\n SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED\n );\n\n if (roomUpdatedEvent) {\n debug(`room \"updated\" payload: \\\n ${JSON.stringify(roomUpdatedEvent)}`);\n this.trigger(SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED, roomUpdatedEvent);\n }\n break;\n\n default:\n break;\n }\n },\n\n /**\n * Constructs the data object for an event on the rooms resource,\n * adhering to Hydra's Webhook data structure.\n * External users of the SDK should not call this function\n * @private\n * @memberof Rooms\n * @param {Object} webex sdk instance\n * @param {Object} activity from mercury\n * @param {Object} event type of \"webhook\" event\n * @returns {Object} constructed event\n */\n getRoomEvent(webex, activity, event) {\n try {\n const sdkEvent = cloneDeep(this.eventEnvelope);\n const cluster = getHydraClusterString(webex, activity.url);\n let {tags} = activity.object;\n\n sdkEvent.event = event;\n sdkEvent.data.created = activity.published;\n sdkEvent.actorId = buildHydraPersonId(activity.actor.entryUUID, cluster);\n if (activity.object.id) {\n sdkEvent.data.id = buildHydraRoomId(activity.object.id, cluster);\n } else {\n sdkEvent.data.id = buildHydraRoomId(activity.target.id, cluster);\n }\n\n if (event === SDK_EVENT.EXTERNAL.EVENT_TYPE.CREATED) {\n sdkEvent.data.creatorId = buildHydraPersonId(activity.actor.entryUUID, cluster);\n sdkEvent.data.lastActivity = activity.published;\n } else if (event === SDK_EVENT.EXTERNAL.EVENT_TYPE.UPDATED) {\n if (activity.verb === 'update') {\n // For some reason the tags are not in the object for an update activity\n tags = activity.target.tags;\n }\n if (activity.object.creatorUUID) {\n // This seems to be set in lock/unlock activities but not updated...\n debug(`Found a creatorId: ${activity.object.creatorUUID} in a ${activity.verb} event`);\n sdkEvent.data.creatorId = buildHydraPersonId(activity.object.creatorUUID, cluster);\n }\n // Webhook engine team sets this based on lastReadableActivityDate\n // in the activity.target object. See: hydra/HydraRoom.java#L51\n // This elements seems to be missing from the activity that the SDK is getting\n // sdkEvent.data.lastActivity = activity.target.lastReadableActivityDate;\n } else {\n throw new Error('unexpected event type');\n }\n sdkEvent.data.type = getHydraRoomType(tags);\n sdkEvent.data.isLocked = tags.includes(SDK_EVENT.INTERNAL.ACTIVITY_TAG.LOCKED);\n\n return sdkEvent;\n } catch (e) {\n this.webex.logger.error(\n `Unable to generate SDK event from mercury socket activity for rooms:${event} event: ${e.message}`\n );\n\n return null;\n }\n },\n});\n\nexport default Rooms;\n\n/**\n * Helper method to build a roomInfo object from a conversation object\n * @param {Object} webex sdk object\n * @param {Conversation~ConversationObject} conversation\n * @returns {Promise}\n */\nasync function buildRoomInfo(webex, conversation) {\n try {\n const type = getHydraRoomType(conversation.tags);\n const cluster = getHydraClusterString(webex, conversation.url);\n const title = conversation.displayName ? conversation.displayName : conversation.computedTitle;\n const lastActivityDate = conversation.lastReadableActivityDate\n ? conversation.lastReadableActivityDate\n : conversation.lastRelevantActivityDate;\n\n const roomInfo = {\n id: buildHydraRoomId(conversation.id, cluster),\n type,\n ...(title && {title: conversation.displayName}),\n ...(lastActivityDate && {lastActivityDate}),\n lastSeenActivityDate: conversation.lastSeenActivityDate\n ? conversation.lastSeenActivityDate\n : // If user has never been seen set the date to \"a long time ago\"\n new Date(0).toISOString(),\n };\n\n return Promise.resolve(roomInfo);\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\n/**\n * Helper method to build a list of roomInfo object from conversation list\n * @param {Object} webex sdk object\n * @param {Conversation~ConversationObjectList} conversations\n * @returns {Promise}\n */\nasync function buildRoomInfoList(webex, conversations) {\n // Convert each Conversation into a roomInfo object\n const roomReadInfo = {items: []};\n const roomInfoPromises = [];\n\n for (const conversation of conversations) {\n roomInfoPromises.push(buildRoomInfo(webex, conversation));\n }\n\n return Promise.all(roomInfoPromises).then((roomInfoList) => {\n roomReadInfo.items = roomInfoList;\n roomReadInfo.items.sort((a, b) => (a.lastActivityDate < b.lastActivityDate ? 1 : -1));\n\n return roomReadInfo;\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-mercury';\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Rooms from './rooms';\n\nregisterPlugin('rooms', Rooms);\n\nexport default Rooms;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\n\n/**\n * @typedef {Object} TeamMembershipObject\n * @property {string} id - (server generated) Unique identifier for the team membership\n * @property {string} teamId - The team ID\n * @property {string} personId - The person ID\n * @property {string} personEmail - The email address of the person\n * @property {boolean} isModerator - Set to `true` to make the person a team\n * moderator\n * @property {string} created - (server generated) The date and time that the team membership was created\n */\n\n/**\n * Team Memberships represent a person's relationship to a team. Use this API to\n * list members of any team that you're in or create memberships to invite\n * someone to a team. Team memberships can also be updated to make someone a\n * moderator or deleted to remove them from the team.\n *\n * Just like in the Webex app, you must be a member of the team in order to list\n * its memberships or invite people.\n * @class\n */\nconst TeamMemberships = WebexPlugin.extend({\n /**\n * Add someone to a team by Person ID or email address; optionally making them\n * a moderator.\n * @instance\n * @memberof TeamMemberships\n * @param {TeamMembershipObject} membership\n * @returns {Promise}\n * @example\n * webex.teams.create({name: 'Create Team Membership Example'})\n * .then(function(team) {\n * return webex.teamMemberships.create({\n * personEmail: 'alice@example.com',\n * teamId: team.id\n * });\n * })\n * .then(function(membership) {\n * var assert = require('assert');\n * assert(membership.id);\n * assert(membership.teamId);\n * assert(membership.personId);\n * assert(membership.personEmail);\n * assert('isModerator' in membership);\n * assert(membership.created);\n * return 'success';\n * });\n * // => success\n */\n create(membership) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'team/memberships',\n body: membership,\n }).then((res) => res.body);\n },\n\n /**\n * Get details for a membership by ID.\n * @instance\n * @memberof TeamMemberships\n * @param {TeamMembershipObject|string} membership\n * @returns {Promise}\n * @example\n * var membership;\n * webex.teams.create({name: 'Get Team Memberships Example'})\n * .then(function(team) {\n * return webex.teamMemberships.create({\n * personEmail: 'alice@example.com',\n * teamId: team.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.teamMemberships.get(m.id);\n * })\n * .then(function(m) {\n * var assert = require('assert');\n * assert.deepEqual(m, membership);\n * return 'success';\n * });\n * // => success\n */\n get(membership) {\n const id = membership.id || membership;\n\n return this.request({\n service: 'hydra',\n resource: `team/memberships/${id}`,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * Lists all team memberships. By default, lists memberships for teams to\n * which the authenticated user belongs.\n * @instance\n * @memberof TeamMemberships\n * @param {Object} options\n * @param {string} options.max\n * @returns {[type]}\n * @example\n * var team;\n * webex.teams.create({name: 'List Team Memberships Example'})\n * .then(function(t) {\n * team = t;\n * return webex.teamMemberships.create({\n * personEmail: 'alice@example.com',\n * teamId: team.id\n * });\n * })\n * .then(function() {\n * return webex.teamMemberships.list({teamId: team.id});\n * })\n * .then(function(teamMemberships) {\n * var assert = require('assert');\n * assert.equal(teamMemberships.length, 2);\n * for (var i = 0; i < teamMemberships.length; i+= 1) {\n * assert.equal(teamMemberships.items[i].teamId, team.id);\n * }\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'team/memberships',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Deletes a membership by ID.\n * @instance\n * @memberof TeamMemberships\n * @param {TeamMembershipObject|string} membership\n * @returns {Promise}\n * @example\n * var membership, team;\n * webex.teams.create({name: 'Remove Team Memberships Example'})\n * .then(function(t) {\n * team = t;\n * return webex.teamMemberships.create({\n * personEmail: 'alice@example.com',\n * teamId: team.id\n * });\n * })\n * .then(function(m) {\n * membership = m;\n * return webex.teamMemberships.list({teamId: team.id});\n * })\n * .then(function(teamMemberships) {\n * var assert = require('assert');\n * assert.equal(teamMemberships.length, 2);\n * return webex.teamMemberships.remove(membership);\n * })\n * .then(function() {\n * return webex.teamMemberships.list({teamId: team.id});\n * })\n * .then(function(teamMemberships) {\n * var assert = require('assert');\n * assert.equal(teamMemberships.length, 1);\n * return 'success';\n * });\n * // => success\n */\n remove(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `team/memberships/${id}`,\n }).then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Updates properties for a membership.\n * @instance\n * @memberof TeamMemberships\n * @param {TeamMembershipObject} membership\n * @returns {Promise}\n */\n update(membership) {\n const id = membership.id || membership;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `team/memberships/${id}`,\n body: membership,\n }).then((res) => res.body);\n },\n});\n\nexport default TeamMemberships;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport TeamMemberships from './team-memberships';\n\nregisterPlugin('teamMemberships', TeamMemberships);\n\nexport default TeamMemberships;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\n\n/**\n * @typedef {Object} TeamObject\n * @property {string} id - (server generated) Unique identifier for the team\n * @property {string} name - The name of the team\n * @property {isoDate} created - (server generated) The date and time that the\n * team was created\n */\n\n/**\n * @class\n */\nconst Teams = WebexPlugin.extend({\n /**\n * Create a new team.\n * @instance\n * @param {TeamObject} team\n * @returns {Promise}\n * @memberof Teams\n * @example\n * webex.teams.create({name: 'Create Team Example'})\n * .then(function(team) {\n * var assert = require('assert');\n * assert(team.id);\n * assert(team.name);\n * assert(team.created);\n * return 'success';\n * });\n * // => success\n */\n create(team) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'teams',\n body: team,\n }).then((res) => res.body);\n },\n\n /**\n * Returns a single team\n * @instance\n * @param {TeamObject|string} team\n * @param {Object} options\n * @returns {Promise}\n * @memberof Teams\n * @example\n * var team;\n * webex.teams.create({name: 'Get Team Example'})\n * .then(function(r) {\n * team = r;\n * return webex.teams.get(team.id);\n * })\n * .then(function(team2) {\n * var assert = require('assert');\n * assert.equal(team2.id, team.id);\n * return 'success';\n * });\n * // => success\n */\n get(team, options) {\n const id = team.id || team;\n\n return this.request({\n service: 'hydra',\n resource: `teams/${id}`,\n qs: options,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * List teams.\n * @instance\n * @param {object} options\n * @param {object} options.max Limit the maximum number of teams in the\n * response.\n * @returns {Promise>}\n * @memberof Teams\n * @example\n * var createdRooms;\n * Promise.all([\n * webex.teams.create({name: 'List Teams Example 1'}),\n * webex.teams.create({name: 'List Teams Example 2'}),\n * webex.teams.create({name: 'List Teams Example 3'})\n * ])\n * .then(function(r) {\n * createdRooms = r;\n * return webex.teams.list({max: 3});\n * })\n * .then(function(teams) {\n * var assert = require('assert');\n * assert(teams.length === 3);\n * for (var i = 0; i < teams.items.length; i+= 1) {\n * assert(createdRooms.filter(function(room) {\n * return room.id === teams.items[i].id;\n * }).length === 1);\n * }\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'teams/',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Update a team.\n * @instance\n * @param {TeamObject} team\n * @returns {Promise}\n * @memberof Teams\n * @example\n * var teams;\n * webex.teams.create({name: 'Update Team Example'})\n * .then(function(r) {\n * teams = r;\n * teams.name = 'Teams Example (Updated Title)';\n * return webex.teams.update(teams);\n * })\n * .then(function() {\n * return webex.teams.get(teams.id);\n * })\n * .then(function(teams) {\n * var assert = require('assert');\n * assert.equal(teams.name, 'Teams Example (Updated Title)');\n * return 'success';\n * });\n * // => success\n\n */\n update(team) {\n const {id} = team;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `teams/${id}`,\n body: team,\n }).then((res) => res.body);\n },\n});\n\nexport default Teams;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Teams from './teams';\n\nregisterPlugin('teams', Teams);\n\nexport default Teams;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\n\n/**\n * @typedef {Object} WebhookObject\n * @property {string} id - (server generated) Unique identifier for the webhook\n * @property {string} resource - The resource type for the webhook\n * @property {string} event - The event type for the webhook\n * @property {string} filter - The filter that defines the webhook scope\n * @property {string} targetUrl - The URL that receives POST requests for each event\n * @property {string} name - A user-friendly name for this webhook\n * @property {string} created - (server generated) The date and time that the webhook was created\n */\n\n/**\n * Webhooks allow your app to be notified via HTTP when a specific event\n * occurs on Webex. For example, your app can register a webhook to be\n * notified when a new message is posted into a specific room.\n * @class\n */\nconst Webhooks = WebexPlugin.extend({\n /**\n * Posts a webhook.\n * @instance\n * @memberof Webhooks\n * @param {WebhookObject} webhook\n * @returns {Promise}\n * @example\n * webex.rooms.create({title: 'Create Webhook Example'})\n * .then(function(room) {\n * return webex.webhooks.create({\n * resource: 'messages',\n * event: 'created',\n * filter: 'roomId=' + room.id,\n * targetUrl: 'https://example.com/webhook',\n * name: 'Test Webhook'\n * });\n * })\n * .then(function(webhook) {\n * var assert = require('assert');\n * assert(webhook.id);\n * assert(webhook.resource);\n * assert(webhook.event);\n * assert(webhook.filter);\n * assert(webhook.targetUrl);\n * assert(webhook.name);\n * return 'success';\n * });\n * // => success\n */\n create(webhook) {\n return this.request({\n method: 'POST',\n service: 'hydra',\n resource: 'webhooks',\n body: webhook,\n }).then((res) => res.body);\n },\n\n /**\n * Shows details for a webhook.\n * @instance\n * @memberof Webhooks\n * @param {Webhook|string} webhook\n * @returns {Promise}\n * @example\n * var webhook;\n * webex.rooms.create({title: 'Get Webhook Example'})\n * .then(function(room) {\n * return webex.webhooks.create({\n * resource: 'messages',\n * event: 'created',\n * filter: 'roomId=' + room.id,\n * targetUrl: 'https://example.com/webhook',\n * name: 'Test Webhook'\n * });\n * })\n * .then(function(w) {\n * webhook = w;\n * return webex.webhooks.get(webhook.id);\n * })\n * .then(function(webhook2) {\n * var assert = require('assert');\n * assert.deepEqual(webhook2, webhook);\n * return 'success';\n * });\n * // => success\n */\n get(webhook) {\n const id = webhook.id || webhook;\n\n return this.request({\n service: 'hydra',\n resource: `webhooks/${id}`,\n }).then((res) => res.body.items || res.body);\n },\n\n /**\n * Lists all webhooks.\n * @instance\n * @memberof Webhooks\n * @param {Object} options\n * @param {integer} options.max Limit the maximum number of webhooks in the response.\n * @returns {Promise>}\n * @example\n * var room, webhook;\n * webex.rooms.create({title: 'List Webhooks Example'})\n * .then(function(r) {\n * room = r;\n * return webex.webhooks.create({\n * resource: 'messages',\n * event: 'created',\n * filter: 'roomId=' + room.id,\n * targetUrl: 'https://example.com/webhook',\n * name: 'Test Webhook'\n * });\n * })\n * .then(function(w) {\n * webhook = w;\n * return webex.webhooks.list();\n * })\n * .then(function(webhooks) {\n * var assert = require('assert');\n * assert.equal(webhooks.items.filter(function(w) {\n * return w.id === webhook.id;\n * }).length, 1);\n * return 'success';\n * });\n * // => success\n */\n list(options) {\n return this.request({\n service: 'hydra',\n resource: 'webhooks/',\n qs: options,\n }).then((res) => new Page(res, this.webex));\n },\n\n /**\n * Delete a webhook.\n * @instance\n * @memberof Webhooks\n * @param {Webhook|string} webhook\n * @returns {Promise}\n * @example\n * var room, webhook;\n * webex.rooms.create({title: 'Remove Webhook Example'})\n * .then(function(r) {\n * room = r;\n * return webex.webhooks.create({\n * resource: 'messages',\n * event: 'created',\n * filter: 'roomId=' + room.id,\n * targetUrl: 'https://example.com/webhook',\n * name: 'Test Webhook'\n * });\n * })\n * .then(function(w) {\n * webhook = w;\n * return webex.webhooks.remove(webhook);\n * })\n * .then(function() {\n * return webex.webhooks.list();\n * })\n * .then(function(webhooks) {\n * var assert = require('assert');\n * assert.equal(webhooks.items.filter(function(w) {\n * return w.id === webhook.id;\n * }).length, 0);\n * return 'success';\n * });\n * // => success\n */\n remove(webhook) {\n const id = webhook.id || webhook;\n\n return this.request({\n method: 'DELETE',\n service: 'hydra',\n resource: `webhooks/${id}`,\n }).then((res) => {\n // Firefox has some issues with 204s and/or DELETE. This should move to\n // http-core\n if (res.statusCode === 204) {\n return undefined;\n }\n\n return res.body;\n });\n },\n\n /**\n * Update a webhook.\n * @instance\n * @memberof Webhooks\n * @param {Webhook} webhook\n * @returns {Promise}\n * @example\n * var webhook;\n * webex.rooms.create({title: 'Webhook Example'})\n * .then(function(room) {\n * return webex.webhooks.create({\n * resource: 'messages',\n * event: 'created',\n * filter: 'roomId=' + room.id,\n * targetUrl: 'https://example.com/webhook',\n * name: 'Test Webhook'\n * });\n * })\n * .then(function(w) {\n * webhook = w;\n * webhook.targetUrl = 'https://example.com/webhook/newtarget';\n * return webex.webhooks.update(webhook);\n * })\n * .then(function() {\n * return webex.webhooks.get(webhook);\n * })\n * .then(function(webhook) {\n * var assert = require('assert');\n * assert.equal(webhook.targetUrl, 'https://example.com/webhook/newtarget');\n * return 'success';\n * });\n * // => success\n */\n update(webhook) {\n const {id} = webhook;\n\n return this.request({\n method: 'PUT',\n service: 'hydra',\n resource: `webhooks/${id}`,\n body: webhook,\n }).then((res) => res.body);\n },\n});\n\nexport default Webhooks;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '@webex/webex-core';\n\nimport Webhooks from './webhooks';\n\nregisterPlugin('webhooks', Webhooks);\n\nexport default Webhooks;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * General storage layer error\n */\nexport class StorageError extends Exception {}\n\n/**\n * StorageError thrown when the storage layer does not contain the request key\n */\nexport class NotFoundError extends StorageError {}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-invalid-this: [0] */\n\nimport {curry, debounce, identity, result, wrap} from 'lodash';\nimport {make} from '@webex/common';\n\nimport {NotFoundError} from './errors';\n\n/**\n * Stores the result of fn before returning it\n * @param {string} key\n * @private\n * @returns {Promise} resolves with the result of fn\n */\nexport function persist(...args) {\n if (args.length === 3) {\n return persist('@')(...args);\n }\n\n const [key, decider] = args;\n\n return function persistDecorator(target, prop, descriptor) {\n if (prop !== 'initialize') {\n // Once we have class-based alternative to AmpersandState, it should be\n // detected here.\n throw new TypeError(\n '@persist can only currently be applied to AmpersandState objects or their derivatives and must be applied to the initialize method'\n );\n }\n\n descriptor.value = wrap(descriptor.value, function persistExecutor(fn, ...initializeArgs) {\n const ret = Reflect.apply(fn, this, initializeArgs);\n const changeEvent = key === '@' ? 'change' : `change:${key}`;\n\n // Some scenarios will lead to lots of change events on a single tick; we\n // really only care about writing once things have stopped changing. with\n // a debounce of zero, we're effectively coalescing all the changes\n // triggered by a single call to set() and commiting them on the next tick\n // eslint-disable-next-line no-invalid-this\n this.on(\n changeEvent,\n debounce(() => {\n const shouldPersist = !decider || Reflect.apply(decider, this, ...initializeArgs);\n\n if (!shouldPersist) {\n return Promise.resolve();\n }\n if (key === '@') {\n // eslint-disable-next-line no-invalid-this\n return this.boundedStorage.put(key, this);\n }\n\n // eslint-disable-next-line no-invalid-this\n return this.boundedStorage.put(key, this[key]);\n }, 0)\n );\n\n return ret;\n });\n\n prepareInitialize(target, prop);\n };\n}\n\nconst M = Map;\nconst S = Set;\nconst BlockingKeyMap = make(M, M, S);\nconst blockingKeys = new BlockingKeyMap();\n\n/**\n * Prevents fn from executing until key has been (attempted to be) loaded\n * @param {string} key\n * @param {Function} fn\n * @private\n * @returns {Promise} result of fn\n */\nexport function waitForValue(key) {\n if (!key) {\n throw new Error('`key` is required');\n }\n\n return function waitForValueDecorator(target, prop, descriptor) {\n blockingKeys.add(target, prop, key);\n descriptor.value = wrap(descriptor.value, function waitForValueExecutor(fn, ...args) {\n const keys = blockingKeys.get(target, prop);\n\n return Promise.all([...keys].map((k) => this.boundedStorage.waitFor(k))).then(() =>\n Reflect.apply(fn, this, args)\n );\n });\n\n // This *should* make decorators compatible with AmpersandState class\n // definitions\n if (typeof target === 'object' && !target.prototype) {\n target[prop] = descriptor.value;\n }\n\n prepareInitialize(target, prop);\n\n return descriptor;\n };\n}\n\nconst inited = new Set();\n\n/**\n * finds a means of identitying the `target` param passed to\n * `prepareInitialize()`. When possible, avoids duplicate `init()` calls if\n * namespaces collide\n *\n * @param {Object|Constructor} target\n * @private\n * @returns {String|Constructor}\n */\nfunction identifyTarget(target) {\n if (target.namespace) {\n return target.namespace;\n }\n\n return target;\n}\n\nconst stack = new Set();\n\n/**\n * @param {Function} target\n * @param {string} prop\n * @private\n * @returns {undefined}\n */\nfunction prepareInitialize(target, prop) {\n const id = identifyTarget(target);\n\n if (!inited.has(id)) {\n inited.add(id);\n if (target.initialize) {\n target.initialize = wrap(target.initialize, function applyInit(fn, ...args) {\n const ret = Reflect.apply(fn, this, args);\n\n Reflect.apply(init, this, args);\n\n return ret;\n });\n\n return;\n }\n\n target.initialize = init;\n }\n\n /**\n * @private\n * @returns {undefined}\n */\n function init() {\n const self = this;\n const namespace = this.getNamespace();\n\n this.webex.initialize = wrap(\n this.webex.initialize || identity,\n function applyInit(fn, ...args) {\n // Call webex's initalize method first\n // Reminder: in order for MockWebex to accept initial storage data, the\n // wrapped initialize() must be invoked before attempting to load data.\n // Reminder: context here is `webex`, not `self`.\n stack.add(namespace);\n Reflect.apply(fn, this, args);\n\n // Then prepare a function for setting values retrieved from storage\n const set = curry((key, value) => {\n this.logger.debug(`storage:(${namespace}): got \\`${key}\\` for first time`);\n if (key === '@') {\n self.parent.set({\n [namespace.toLowerCase()]: value,\n });\n } else if (result(self[key], 'isState')) {\n self[key].set(value);\n } else {\n self.set(key, value);\n }\n this.logger.debug(`storage:(${namespace}): set \\`${key}\\` for first time`);\n });\n\n // And prepare an error handler for when those keys can't be found\n const handle = curry((key, reason) => {\n if (\n reason instanceof NotFoundError ||\n (process.env.NODE_ENV !== 'production' &&\n reason.toString().includes('MockNotFoundError'))\n ) {\n this.logger.debug(`storage(${namespace}): no data for \\`${key}\\`, continuing`);\n\n return Promise.resolve();\n }\n this.logger.error(`storage(${namespace}): failed to init \\`${key}\\``, reason);\n\n return Promise.reject(reason);\n });\n\n // Iterate over the list of keys marked as blocking via `@waitForValue`\n const keys = blockingKeys.get(target, prop);\n const promises = [];\n\n keys.forEach((key) => {\n promises.push(this.boundedStorage.get(namespace, key).then(set(key)).catch(handle(key)));\n });\n\n Promise.all(promises).then(() => {\n stack.delete(namespace);\n if (stack.size === 0) {\n this.loaded = true;\n }\n });\n }\n );\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport Events from 'ampersand-events';\nimport {oneFlight} from '@webex/common';\n\nconst bindings = new WeakMap();\n\n/**\n * Makes a WebexStore for the specified type bound to the specified webex instance\n * @param {string} type\n * @param {ProxyWebex} webex\n * @private\n * @returns {WebexStore}\n */\nexport default function makeWebexStore(type, webex) {\n /**\n * Lazy Key-Value Store Interface\n */\n class WebexStore {\n /**\n * @param {Object} attrs\n * @param {Object} options\n * @returns {Store}\n */\n constructor() {\n webex.logger.debug(`webex-store: constructing ${type}Storage`);\n bindings.set(this, new Map());\n }\n\n /**\n * Provides easy access to the storage adapter identified in config.\n * @returns {Object}\n */\n get adapter() {\n return webex.config.storage[`${type}Adapter`];\n }\n\n /**\n * @returns {WeakMap}\n */\n get bindings() {\n return bindings.get(this);\n }\n\n /**\n * Clears the store\n * @returns {Promise}\n */\n clear() {\n const promises = [];\n\n this.bindings.forEach((binding) => {\n promises.push(binding.clear());\n });\n\n return Promise.all(promises);\n }\n\n /**\n * Deletes the specified key from the store\n * @param {string} namespace\n * @param {string} key\n * @returns {[type]}\n */\n del(namespace, key) {\n webex.logger.debug(`webex-store: removing ${namespace}:${key}`);\n\n return this._getBinding(namespace).then((binding) => binding.del(key));\n }\n\n /**\n * Retrieves the value specified by key from the store. Rejects with\n * NotFoundError if no value can be found\n * @param {string} namespace\n * @param {string} key\n * @returns {Promise}\n */\n get(namespace, key) {\n webex.logger.debug(`webex-store: retrieving ${namespace}:${key}`);\n\n return this._getBinding(namespace).then((binding) => binding.get(key));\n }\n\n /**\n * Writes a value to the store. Deletes the specified key from the store\n * if passed `undefined`\n * @param {string} namespace\n * @param {string} key\n * @param {any} value\n * @returns {Promise} Resolves with value (to simplify write-through caching)\n */\n put(namespace, key, value) {\n if (typeof value === 'undefined') {\n return this.del(namespace, key);\n }\n webex.logger.debug(`webex-store: setting ${namespace}:${key}`);\n\n return this._getBinding(namespace)\n .then((binding) => binding.put(key, value.serialize ? value.serialize() : value))\n .then(() => value);\n }\n\n @oneFlight({keyFactory: (namespace) => namespace})\n /**\n * Creates an interface bound to the specified namespace\n * @param {string} namespace\n * @private\n * @returns {Promise}\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n _getBinding(namespace) {\n return new Promise((resolve) => {\n webex.logger.debug(`storage: getting binding for \\`${namespace}\\``);\n const binding = this.bindings.get(namespace);\n\n if (binding) {\n webex.logger.debug(`storage: found binding for \\`${namespace}\\``);\n\n return resolve(binding);\n }\n\n return resolve(\n this.adapter.bind(namespace, {logger: webex.logger}).then((_binding) => {\n webex.logger.debug(`storage: made binding for \\`${namespace}\\``);\n this.bindings.set(namespace, _binding);\n\n return _binding;\n })\n );\n });\n }\n }\n\n Object.assign(WebexStore.prototype, Events);\n\n return new WebexStore();\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Defer, oneFlight} from '@webex/common';\nimport {isArray, isObject, result} from 'lodash';\n\nimport {NotFoundError} from './errors';\n\nconst defers = new WeakMap();\n\n/**\n * Walks an object before writing it to the store and omits empty arrays\n * @private\n * @param {Object} value\n * @returns {Object}\n */\nfunction serialize(value) {\n if (!isObject(value)) {\n return value;\n }\n\n const serialized = value.serialize ? value.serialize() : value;\n\n Object.keys(serialized).forEach((key) => {\n const val = serialized[key];\n\n if (isArray(val)) {\n if (val.length === 0) {\n serialized[key] = undefined;\n } else {\n serialized[key] = val.map(serialize);\n }\n } else if (isObject(val)) {\n Object.keys(val).forEach((k) => {\n val[k] = serialize(val[k]);\n });\n }\n });\n\n const empty = Object.keys(serialized).reduce((acc, key) => acc && !serialized[key], true);\n\n if (empty) {\n return undefined;\n }\n\n return serialized;\n}\n\n/**\n * [makeWebexPluginStorage description]\n * @param {[type]} type\n * @param {[type]} context\n * @private\n * @returns {[type]}\n */\nexport default function makeWebexPluginStorage(type, context) {\n /**\n * Interface between WebexPlugin and Webex#boundeStorage or\n * Webex#unboundedStorage\n */\n class WebexPluginStorage {\n /**\n * @param {Object} attrs\n * @param {Object} options\n * @returns {WebexPluginStorage}\n */\n constructor() {\n defers.set(this, new Map());\n }\n\n /**\n * Clears an entire namespace\n * @returns {Promise}\n */\n clear() {\n return context.webex[`${type}Storage`].del(context.getNamespace());\n }\n\n /**\n * Deletes the specified key from the store\n * @param {string} key\n * @returns {[type]}\n */\n del(...args) {\n return context.webex[`${type}Storage`].del(context.getNamespace(), ...args);\n }\n\n /**\n * Retrieves the value specified by key from the store. Rejects with\n * NotFoundError if no value can be found\n * @param {string} key\n * @returns {Promise}\n */\n get(key) {\n let defer = defers.get(this).get(key);\n\n if (!defer) {\n defer = new Defer();\n defers.get(this).set(key, defer);\n }\n\n return context.webex[`${type}Storage`].get(context.getNamespace(), key).then((res) => {\n defer.resolve();\n\n return res;\n });\n }\n\n /**\n * Writes a value to the store\n * @param {string} key\n * @param {any} value\n * @returns {Promise}\n */\n put(key, value) {\n return context.webex[`${type}Storage`].put(context.getNamespace(), key, serialize(value));\n }\n\n /**\n * Returns a Promise that won't resolve until the value specified by key has\n * been attempted to be loaded from the store. This allows us to lazily\n * prevent certain method from executing until the specified keys have been\n * retrieved from the store.\n * @param {string} key\n * @returns {Promise}\n */\n waitFor(key) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): waiting to init key \\`${key}\\``\n );\n const defer = defers.get(this).get(key);\n\n if (defer) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): already inited \\`${key}\\``\n );\n\n return defer.promise;\n }\n\n context.logger.debug(`plugin-storage(${context.getNamespace()}): initing \\`${key}\\``);\n\n return this.initValue(key);\n }\n\n @oneFlight({keyFactory: (key) => `initValue-${key}`})\n /**\n * Attempts to load the specified key from the store and set it on the parent\n * object.\n * @param {string} key\n * @returns {Promise} Resolves (but not with the retrieved value) when\n * the value retrieval complete\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n initValue(key) {\n const defer = new Defer();\n\n defers.get(this).set(key, defer);\n\n // Intentionally bypasses this.get so we don't resolve the promise until\n // after the parent value is set.\n context.webex[`${type}Storage`]\n .get(context.getNamespace(), key)\n .then((value) => {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): got \\`${key}\\` for first time`\n );\n if (key === '@') {\n context.parent.set(value);\n } else if (result(context[key], 'isState')) {\n context[key].set(value);\n } else {\n context.set(key, value);\n }\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): set \\`${key}\\` for first time`\n );\n defer.resolve();\n context.logger.debug(`plugin-storage(${context.getNamespace()}): inited \\`${key}\\``);\n })\n .catch((reason) => {\n // The next conditional is a bit of an unfortunate solution to deal\n // with circular dependencies in unit tests. It should not effect\n // integration tests or production code.\n if (\n reason instanceof NotFoundError ||\n (process.env.NODE_ENV !== 'production' &&\n reason.toString().includes('MockNotFoundError'))\n ) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): no data for \\`${key}\\`, continuing`\n );\n\n return defer.resolve();\n }\n context.logger.warn(\n `plugin-storage(${context.getNamespace()}): failed to init \\`${key}\\``,\n reason\n );\n\n return defer.reject(reason);\n });\n\n return defer.promise;\n }\n }\n\n return new WebexPluginStorage();\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {NotFoundError} from './errors';\n\n/**\n * Binds a namespace\n * @param {string} namespace\n * @param {Object} options\n * @param {Object} options.data\n * @private\n * @returns {Promise}\n */\nfunction _bind(namespace, options = {}) {\n options = options || {};\n if (!namespace) {\n return Promise.reject(new Error('`namespace` is required'));\n }\n\n if (!options.logger) {\n return Promise.reject(new Error('`options.logger` is required'));\n }\n\n const {logger} = options;\n\n const map = new Map([['@', {}]]);\n\n if (options.data) {\n Object.keys(options.data).forEach((key) => {\n map.set(key, options.data[key]);\n });\n }\n\n logger.debug('memory-store-adapter: returning binding');\n\n return Promise.resolve({\n clear() {\n logger.debug('memory-store-adapter: clearing the binding');\n\n return Promise.resolve(map.clear());\n },\n del(key) {\n logger.debug(`memory-store-adapter: deleting \\`${key}\\``);\n\n return Promise.resolve(map.delete(key));\n },\n get(key) {\n logger.debug(`memory-store-adapter: reading \\`${key}\\``);\n const res = map.get(key);\n\n if (typeof res === 'undefined') {\n return Promise.reject(new NotFoundError());\n }\n\n return Promise.resolve(res);\n },\n put(key, value) {\n logger.debug(`memory-store-adapter: writing \\`${key}\\``);\n\n return Promise.resolve(map.set(key, value));\n },\n });\n}\n\nexport default {\n bind: _bind,\n preload(data) {\n return {\n bind(namespace, options = {}) {\n if (data[namespace]) {\n options.data = data[namespace];\n }\n\n return _bind(namespace, options);\n },\n };\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\nimport AmpState from 'ampersand-state';\nimport {cloneDeep, isObject, omit} from 'lodash';\n\nimport {makeWebexPluginStore} from './storage';\n\n/**\n * @class\n */\nconst WebexPlugin = AmpState.extend({\n derived: {\n boundedStorage: {\n deps: [],\n fn() {\n return makeWebexPluginStore('bounded', this);\n },\n },\n unboundedStorage: {\n deps: [],\n fn() {\n return makeWebexPluginStore('unbounded', this);\n },\n },\n config: {\n // figure out why caching config breaks the refresh integration test\n // but not the refresh automation test.\n cache: false,\n deps: ['webex', 'webex.config'],\n fn() {\n if (this.webex && this.webex.config) {\n const namespace = this.getNamespace();\n\n if (namespace) {\n return this.webex.config[namespace.toLowerCase()];\n }\n\n return this.webex.config;\n }\n\n return {};\n },\n },\n\n logger: {\n deps: ['webex', 'webex.logger'],\n fn() {\n return this.webex.logger || console;\n },\n },\n\n webex: {\n deps: ['parent'],\n fn() {\n if (!this.parent && !this.collection) {\n throw new Error(\n 'Cannot determine `this.webex` without `this.parent` or `this.collection`. Please initialize `this` via `children` or `collection` or set `this.parent` manually'\n );\n }\n\n /* eslint consistent-this: [0] */\n let parent = this;\n\n while (parent.parent || parent.collection) {\n parent = parent.parent || parent.collection;\n }\n\n return parent;\n },\n },\n },\n\n session: {\n parent: {\n type: 'any',\n },\n /**\n * Indicates this plugin is ready to be used. Defaults to true but can be\n * overridden by plugins as appropriate. Used by {@link WebexCore#read}\n * @instance\n * @memberof WebexPlugin\n * @type {boolean}\n */\n ready: {\n default: true,\n type: 'boolean',\n },\n },\n\n /**\n * Overrides AmpersandState#clear to make sure we never unset `parent` and\n * recursively visits children/collections.\n * @instance\n * @memberof WebexPlugin\n * @param {Object} options\n * @returns {WebexPlugin}\n */\n clear(options) {\n Object.keys(this.attributes).forEach((key) => {\n if (key !== 'parent') {\n this.unset(key, options);\n }\n });\n\n Object.keys(this._children).forEach((key) => {\n this[key].clear();\n });\n\n Object.keys(this._collections).forEach((key) => {\n this[key].reset();\n });\n\n return this;\n },\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(AmpState.prototype.initialize, this, args);\n\n // HACK to deal with the fact that AmpersandState#dataTypes#set is a pure\n // function.\n this._dataTypes = cloneDeep(this._dataTypes);\n Object.keys(this._dataTypes).forEach((key) => {\n if (this._dataTypes[key].set) {\n this._dataTypes[key].set = this._dataTypes[key].set.bind(this);\n }\n });\n // END HACK\n\n // Propagate change:[attribute] events from children\n this.on('change', (model, options) => {\n if (this.parent) {\n this.parent.trigger(\n `change:${this.getNamespace().toLowerCase()}`,\n this.parent,\n this,\n options\n );\n }\n });\n },\n\n /**\n * @instance\n * @memberof WebexPlugin\n * @param {number} depth\n * @private\n * @returns {Object}\n */\n inspect(depth) {\n return util.inspect(\n omit(\n this.serialize({\n props: true,\n session: true,\n derived: true,\n }),\n 'boundedStorage',\n 'unboundedStorage',\n 'config',\n 'logger',\n 'webex',\n 'parent'\n ),\n {depth}\n );\n },\n\n request(...args) {\n return this.webex.request(...args);\n },\n\n upload(...args) {\n return this.webex.upload(...args);\n },\n\n when(eventName, ...rest) {\n if (rest && rest.length > 0) {\n throw new Error('#when() does not accept a callback, you must attach to its promise');\n }\n\n return new Promise((resolve) => {\n this.once(eventName, (...args) => resolve(args));\n });\n },\n\n /**\n * Helper function for dealing with both forms of {@link AmpersandState#set()}\n * @param {string} key\n * @param {mixed} value\n * @param {Object} options\n * @private\n * @returns {Array}\n */\n _filterSetParameters(key, value, options) {\n let attrs;\n\n if (isObject(key) || key === null) {\n attrs = key;\n options = value;\n } else {\n attrs = {};\n attrs[key] = value;\n }\n\n options = options || {};\n\n return [attrs, options];\n },\n});\n\nexport default WebexPlugin;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class AuthInterceptor extends Interceptor {\n /**\n * @returns {AuthInterceptor}\n */\n static create() {\n return new AuthInterceptor({webex: this});\n }\n\n /**\n * @see {@link Interceptor#onRequest}\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n\n // If Authorizations is already set, don't overwrite it\n if ('authorization' in options.headers || 'auth' in options) {\n // If Authorization is set to null, false, or undefined, delete it to\n // prevent a CORS preflight.\n if (!options.headers.authorization) {\n Reflect.deleteProperty(options.headers, 'authorization');\n }\n\n return Promise.resolve(options);\n }\n\n return this.requiresCredentials(options).then((requires) => {\n if (!requires) {\n return options;\n }\n\n return this.webex.credentials.getUserToken().then((token) => {\n options.headers.authorization = token.toString();\n\n return options;\n });\n });\n }\n\n /**\n * Determines if the provided options object needs an authorization header.\n *\n * @param {Object} options\n * @returns {Promise}\n */\n requiresCredentials(options) {\n // Validate that authorization is necessary.\n if (options.addAuthHeader === false) {\n return Promise.resolve(false);\n }\n\n // Validate that the services plugin has been loaded before proceeding.\n if (!this.webex.internal.services) {\n return Promise.resolve(false);\n }\n\n // Destructure webex instance to isolate services plugin.\n const {services} = this.webex.internal;\n\n // Store the current service details if available and destructure details.\n const details = services.getServiceFromUrl(options.uri || '');\n const {name} = details || {};\n const {resource, uri} = options;\n const service = options.service || options.api;\n\n // Unique validation for the u2c service.\n if ((service && service === 'u2c') || (name && name === 'u2c')) {\n if ((resource && resource.includes('limited')) || (uri && uri.includes('limited'))) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n }\n\n // Validate that the allowed domains can be utilized.\n if (\n services.validateDomains &&\n services.hasAllowedDomains() &&\n uri &&\n services.isAllowedDomainUrl(uri)\n ) {\n return Promise.resolve(true);\n }\n\n // Perform an additional validation in case the service does not exist yet.\n return services\n .waitForService({name: service, url: uri})\n .then((detectedUrl) => {\n // Validate that the url exists in the catalog.\n if (services.getServiceFromUrl(detectedUrl)) {\n return true;\n }\n\n // Return false to indicate authentication is not required.\n return false;\n })\n .catch((error) => {\n this.webex.logger.warn(\n 'auth-interceptor: failed to validate service exists in catalog',\n error\n );\n\n return false;\n });\n }\n\n /**\n * @see {@link Interceptor#onResponseError}\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n return this.shouldAttemptReauth(reason, options).then((shouldAttemptReauth) => {\n if (shouldAttemptReauth) {\n this.webex.logger.info('auth: received 401, attempting to reauthenticate');\n\n if (reason.options.headers) {\n Reflect.deleteProperty(reason.options.headers, 'authorization');\n }\n\n if (this.webex.credentials.canRefresh) {\n return this.webex.credentials.refresh().then(() => this.replay(options));\n }\n }\n\n return Promise.reject(reason);\n });\n }\n\n /**\n * Replays the request\n * @param {Object} options\n * @returns {Object}\n */\n replay(options) {\n if (options.replayCount) {\n options.replayCount += 1;\n } else {\n options.replayCount = 1;\n }\n\n if (options.replayCount > this.webex.config.maxAuthenticationReplays) {\n this.webex.logger.error(\n `auth: failed after ${this.webex.config.maxAuthenticationReplays} replay attempts`\n );\n\n return Promise.reject(\n new Error(`Failed after ${this.webex.config.maxAuthenticationReplays} replay attempts`)\n );\n }\n\n this.webex.logger.info(`auth: replaying request ${options.replayCount} time`);\n\n return this.webex.request(options);\n }\n\n /**\n * Indicates whether or not the current request should refresh its access\n * token in event of a 401\n * @param {Error} reason\n * @param {Object} options\n * @returns {Promise}\n */\n shouldAttemptReauth(reason, options) {\n if (options && options.shouldRefreshAccessToken === false) {\n return Promise.resolve(false);\n }\n\n if (reason.statusCode === 401) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class NetworkTimingInterceptor extends Interceptor {\n /**\n * @param {Object} options\n * @returns {NetworkTimingInterceptor}\n */\n static create(options) {\n return new NetworkTimingInterceptor(this, options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.$timings = options.$timings || {};\n options.$timings.networkStart = Date.now();\n\n return options;\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n options.$timings.networkEnd = Date.now();\n\n return response;\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n options.$timings.networkEnd = Date.now();\n\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class PayloadTransformerInterceptor extends Interceptor {\n /**\n * @param {Object} options\n * @returns {PayloadTransformerInterceptor}\n */\n static create() {\n return new PayloadTransformerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options.noTransform) {\n return options;\n }\n\n return this.webex.transform('outbound', options);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n if (options.disableTransform) {\n return response;\n }\n\n return this.webex.transform('inbound', response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n return this.webex.transform('inbound', reason).then((r) => Promise.reject(r || reason));\n }\n}\n","/* eslint-disable prefer-destructuring */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {clone} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\nconst requestHeaderName = 'cisco-no-http-redirect';\nconst responseHeaderName = 'cisco-location';\nconst LOCUS_REDIRECT_ERROR = 2000002;\n\n/**\n * @class\n */\nexport default class RedirectInterceptor extends Interceptor {\n /**\n * @returns {RedirectInterceptor}\n */\n static create() {\n return new RedirectInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options && options.uri && typeof options.uri === 'string') {\n if (\n options.uri.includes('https://idbroker') ||\n options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl)\n ) {\n return options;\n }\n }\n\n // If cisco-no-http-redirect is already set, don't overwrite it\n if (requestHeaderName in options.headers) {\n // If cisco-no-http-redirect is set to null, false, or undefined, delete\n // it to prevent a CORS preflight.\n if (!options.headers[requestHeaderName]) {\n Reflect.deleteProperty(options.headers, requestHeaderName);\n }\n\n return options;\n }\n options.headers[requestHeaderName] = true;\n options.$redirectCount = options.$redirectCount || 0;\n\n return options;\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n /* eslint-disable no-else-return */\n if (response.headers && response.headers[responseHeaderName]) {\n options = clone(options);\n options.uri = response.headers[responseHeaderName];\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n } else if (\n response.headers &&\n response.body &&\n response.body.errorCode === LOCUS_REDIRECT_ERROR &&\n response.body.location\n ) {\n options = clone(options);\n\n this.webex.logger.warn('redirect: url redirects needed from', options.uri);\n if (response.options && response.options.qs) {\n // for POST requests\n const newUrl = response.body.location.split('?');\n\n options.uri = newUrl[0]; // params are already present in the qs\n } else {\n // for GET requests\n options.uri = response.body.location;\n }\n\n this.webex.logger.warn('redirect: url redirects needed to', options.uri);\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxLocusRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n }\n /* eslint-enable no-else-return */\n\n return response;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestEventInterceptor extends Interceptor {\n /**\n * @returns {RequestEventInterceptor}\n */\n static create() {\n return new RequestEventInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:start', options);\n } catch (error) {\n logger.warn('event handler for request:start failed ', error);\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onRequestError(options, reason) {\n // We need to do the normal onRequest logging, but then log how the request\n // failed since the response logger won't be called.\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:end', options, reason);\n this.webex.trigger('request:failure', options, reason);\n } catch (error) {\n logger.warn('event handler for request:end failed ', error);\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:success', response.options, response);\n } catch (error) {\n logger.warn('event handler for request:success failed ', error);\n }\n\n return Promise.resolve(response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:end', options, reason);\n this.webex.trigger('request:failure', options, reason);\n } catch (error) {\n logger.warn('event handler for request:failure failed ', error);\n }\n\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\nimport {get, has, isArray, isString, omit} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestLoggerInterceptor extends Interceptor {\n /**\n * @returns {RequestLoggerInterceptor}\n */\n static create() {\n return new RequestLoggerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const logger = get(this, 'webex.logger', console);\n\n logger.info('/**********************************************************************\\\\ ');\n logger.info('Request:', options.method || 'GET', options.uri);\n logger.info('WEBEX_TRACKINGID: ', get(options, 'headers.trackingid'));\n /* istanbul ignore next */\n if (has(options, 'headers.x-trans-id')) {\n logger.info('X-Trans-ID: ', get(options, 'headers.x-trans-id'));\n }\n const now = new Date();\n\n if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {\n logger.info('timestamp (start): ', now.getTime(), now.toISOString());\n try {\n // Determine if body is a buffer without relying on Buffer to avoid\n // node/browser conflicts.\n if (\n options.body &&\n options.body.length &&\n !isArray(options.body) &&\n !isString(options.body)\n ) {\n logger.info('Request Options:', util.inspect(omit(options, 'body'), {depth: null}));\n } else {\n logger.info('Request Options:', util.inspect(options, {depth: null}));\n }\n } catch (e) {\n logger.warn('Could not stringify request options:', e);\n }\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onRequestError(options, reason) {\n // We need to do the normal onRequest logging, but then log how the request\n // failed since the response logger won't be called.\n this.onRequest(options);\n const logger = get(this, 'webex.logger', console);\n\n logger.error('Request Failed: ', reason.stack);\n logger.info('\\\\**********************************************************************/');\n\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestTimingInterceptor extends Interceptor {\n /**\n * @param {Object} options\n * @returns {RequestTimingInterceptor}\n */\n static create(options) {\n return new RequestTimingInterceptor(this, options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.$timings = options.$timings || {};\n options.$timings.requestStart = Date.now();\n\n return options;\n }\n\n /**\n * @see Interceptor#onRequestError\n * @param {Object} options\n * @returns {Object}\n */\n onRequestError(options) {\n options.$timings.requestEnd = options.$timings.requestFail = Date.now();\n\n return Promise.reject(options);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n options.$timings.requestEnd = Date.now();\n\n return Promise.resolve(response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n options.$timings.requestEnd = options.$timings.requestFail = Date.now();\n\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\nimport {get, omit} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\nimport {isBuffer} from '@webex/common';\n\n/**\n * @class\n */\nexport default class ResponseLoggerInterceptor extends Interceptor {\n /**\n * @returns {ResponseLoggerInterceptor}\n */\n static create() {\n return new ResponseLoggerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n const now = new Date();\n\n this.printResponseHeader(options, response);\n\n const logger = get(this, 'webex.logger', console);\n\n if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {\n logger.info('timestamp (end): ', now.getTime(), now.toISOString());\n if (typeof response.body === 'string' || isBuffer(response.body)) {\n logger.info('Response: ', 'Not printed, it`s probably a file');\n } else if (typeof response.body === 'object') {\n try {\n logger.info('Response: ', util.inspect(omit(response.body, 'features'), {depth: null}));\n } catch (err) {\n logger.info('Response: ', '[Not Serializable]', err);\n }\n }\n }\n logger.info('\\\\**********************************************************************/');\n\n return response;\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Object} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n const now = new Date();\n\n this.printResponseHeader(options, reason);\n\n const logger = get(this, 'webex.logger', console);\n\n if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {\n logger.info('timestamp (end): ', now.getTime(), now.toISOString());\n try {\n logger.error('Response: ', util.inspect(reason.body, {depth: null}));\n } catch (err) {\n logger.error('Response: ', reason.body);\n }\n }\n logger.info('\\\\**********************************************************************/');\n\n return Promise.reject(reason);\n }\n\n /**\n * Prints the basic header\n * @param {Object} options\n * @param {HttpResponse|WebexHttpError} response\n * @returns {undefined}\n */\n printResponseHeader(options, response) {\n const logger = get(this, 'webex.logger', console);\n\n logger.info('Status Code:', response.statusCode);\n logger.info(\n 'WEBEX_TRACKINGID:',\n get(options, 'headers.trackingid') || get(response, 'headers.trackingid')\n );\n logger.info('Network duration:', options.$timings.networkEnd - options.$timings.networkStart);\n logger.info(\n 'Processing duration:',\n options.$timings.requestEnd - options.$timings.requestStart\n );\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {HttpError} from '@webex/http-core';\n\n/**\n * Webex-specific http error class\n */\nexport default class WebexHttpError extends HttpError {\n /**\n * Very similar to {@link HttpError#parse()}, but additionally adds some\n * useful headers to the message string\n * @param {HttpResponse} res\n * @returns {string}\n */\n parse(res) {\n let message = Reflect.apply(HttpError.prototype.parse, this, [res]);\n\n Reflect.defineProperty(this, 'options', {\n enumerable: false,\n value: res.options,\n });\n\n if (this.options.url) {\n message += `\\n${this.options.method} ${this.options.url}`;\n } else if (this.options.uri) {\n message += `\\n${this.options.method} ${this.options.uri}`;\n } else {\n message += `\\n${this.options.method} ${this.options.service.toUpperCase()}/${\n this.options.resource\n }`;\n }\n message += `\\nWEBEX_TRACKING_ID: ${this.options.headers.trackingid}`;\n if (this.options.headers && this.options.headers['x-trans-id']) {\n message += `\\nX-Trans-Id: ${this.options.headers['x-trans-id']}`;\n }\n if (this.headers['retry-after']) {\n Reflect.defineProperty(this, 'retryAfter', {\n enumerable: true,\n value: this.headers['retry-after'],\n writeable: false,\n });\n\n message += `\\nRETRY-AFTER: ${this.retryAfter}`;\n }\n message += '\\n';\n\n return message;\n }\n}\n\nHttpError.makeSubTypes(WebexHttpError);\n\n/**\n * TooManyRequests\n */\nclass TooManyRequests extends HttpError.BadRequest {}\n\nHttpError[429] = TooManyRequests;\nHttpError.TooManyRequests = TooManyRequests;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\nimport {Interceptor} from '@webex/http-core';\nimport {get} from 'lodash';\n\nconst strings = new WeakMap();\n\n/**\n * Sets a 'user-agent' header on all requests if one is not present.\n * Defaults to '@webex/http-core' though a custom user-agent can be set\n * using the appName and appVersion configuration. e.g.\n *\n * webex = WebexSdk.init({\n * credentials: {\n * supertoken: superToken\n * },\n * config: {\n * credentials: {\n * client_id,\n * client_secret\n * },\n * appName: 'custom-user-agent',\n * appVersion: '1.0',\n * }\n * });\n */\nexport default class UserAgentInterceptor extends Interceptor {\n /**\n * @param {Object} [options={}]\n * @param {WebexCore} [options.webex]\n * @private\n * @returns {UserAgentInterceptor}\n */\n constructor(options = {}) {\n const appName = get(options, 'webex.config.appName');\n const appVersion = get(options, 'webex.config.appVersion') || '0.0';\n\n super(options);\n if (appName) {\n strings.set(this, `${appName}/${appVersion}`);\n } else {\n strings.set(this, '@webex/http-core'); // Using the traditional default from http-core\n }\n }\n\n /**\n * @returns {UserAgentInterceptor}\n */\n static create() {\n return new UserAgentInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n // Do not set a custom user-agent for browsers\n if (inBrowser) {\n return options;\n }\n\n options.headers = options.headers || {};\n\n if ('user-agent' in options.headers && options.headers['spark-user-agent']) {\n return options;\n }\n\n options.headers['user-agent'] = strings.get(this);\n\n return options;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst sequenceNumbers = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexTrackingIdInterceptor extends Interceptor {\n /**\n * Sequence number; increments on access\n * @type {Number}\n */\n get sequence() {\n let sq = sequenceNumbers.get(this) || 0;\n\n sq += 1;\n sequenceNumbers.set(this, sq);\n\n return sq;\n }\n\n /**\n * @returns {WebexTrackingIdInterceptor}\n */\n static create() {\n return new WebexTrackingIdInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n // If trackingid is already set, don't overwrite it\n if ('trackingid' in options.headers) {\n // If trackingid is set to null, false, or undefined, delete it to\n // prevent a CORS preflight.\n if (!options.headers.trackingid) {\n Reflect.deleteProperty(options.headers, 'trackingid');\n }\n\n return options;\n }\n\n if (this.requiresTrackingId(options)) {\n options.headers.trackingid = `${this.webex.sessionId}_${this.sequence}`;\n }\n\n if (options.headers.trackingid && options.replayCount) {\n const tid = options.headers.trackingid.split('+');\n\n tid[1] = options.replayCount;\n options.headers.trackingid = tid.join('+');\n }\n\n return options;\n }\n\n /**\n * Determines whether or not include a tracking id\n * @param {Object} options\n * @returns {boolean}\n */\n requiresTrackingId(options) {\n return !options.headers.trackingid;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\nimport {Interceptor} from '@webex/http-core';\nimport {get} from 'lodash';\n\nconst strings = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexUserAgentInterceptor extends Interceptor {\n /**\n * @param {Object} [options={}]\n * @param {WebexCore} [options.webex]\n * @private\n * @returns {WebexUserAgentInterceptor}\n */\n constructor(options = {}) {\n const libName = get(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';\n const libVersion = get(options, 'webex.version', 'development');\n\n super(options);\n strings.set(this, `${libName}/${libVersion} (${inBrowser ? 'web' : 'node'})`);\n }\n\n /**\n * @returns {WebexUserAgentInterceptor}\n */\n static create() {\n return new WebexUserAgentInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n const {appName, appVersion, appPlatform} = this.webex?.config ?? {};\n let sparkUserAgent = `${strings.get(this)}`;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n if (options.uri && options.uri.includes('https://idbroker')) {\n return options;\n }\n\n if (\n options.uri &&\n (options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl))\n ) {\n return options;\n }\n\n if ('spark-user-agent' in options.headers) {\n if (!options.headers['spark-user-agent']) {\n Reflect.deleteProperty(options.headers, 'spark-user-agent');\n }\n\n return options;\n }\n\n options.headers['spark-user-agent'] = sparkUserAgent;\n\n return options;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n// contains the system time in milliseconds at which the retry after associated with a 429 expires\n// mapped by the API name, e.g.: idbroker.webex.com/doStuff would be mapped as 'doStuff'\nconst rateLimitExpiryTime = new WeakMap();\n\n// extracts the common identity API being called\nconst idBrokerRegex = /.*(idbroker|identity)(bts)?.ciscospark.com\\/([^/]+)/;\n\n/**\n * @class\n */\nexport default class RateLimitInterceptor extends Interceptor {\n /**\n * @returns {RateLimitInterceptor}\n */\n static create() {\n return new RateLimitInterceptor({webex: this});\n }\n\n /**\n * constructor\n * @param {mixed} args\n * @returns {Exception}\n */\n constructor(...args) {\n super(...args);\n rateLimitExpiryTime.set(this, new Map());\n }\n\n /**\n * @see {@link Interceptor#onRequest}\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (this.isRateLimited(options.uri)) {\n return Promise.reject(new Error(`API rate limited ${options.uri}`));\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see {@link Interceptor#onResponseError}\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n if (\n reason.statusCode === 429 &&\n (options.uri.includes('idbroker') || options.uri.includes('identity'))\n ) {\n // set the retry after in the map, setting to milliseconds\n this.setRateLimitExpiry(options.uri, this.extractRetryAfterTime(options));\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * @param {object} options associated with the request\n * @returns {number} retry after time in milliseconds\n */\n extractRetryAfterTime(options) {\n // 1S * 1K === 1MS\n const milliMultiplier = 1000;\n const retryAfter = options.headers['retry-after'] || null;\n\n // set 60 retry if no usable time defined\n if (retryAfter === null || retryAfter <= 0) {\n return 60 * milliMultiplier;\n }\n // set max to 3600 S (1 hour) if greater than 1 hour\n if (retryAfter > 3600) {\n return 3600 * milliMultiplier;\n }\n\n return retryAfter * milliMultiplier;\n }\n\n /**\n * Set the system time at which the rate limiting\n * will expire in the rateLimitExpiryTime map.\n * Assumes retryAfter is in milliseconds\n * @param {string} uri API issuing the rate limiting\n * @param {number} retryAfter milliseconds until rate limiting expires\n * @returns {bool} true is value was successfully set\n */\n setRateLimitExpiry(uri, retryAfter) {\n const apiName = this.getApiName(uri);\n\n if (!apiName) {\n return false;\n }\n\n const currTimeMilli = new Date().getTime();\n const expiry = currTimeMilli + retryAfter;\n const dict = rateLimitExpiryTime.get(this);\n\n return dict.set(apiName, expiry);\n }\n\n /**\n * returns true if the API is currently rate limited\n * @param {string} uri\n * @returns {Boolean} indicates whether or not the API is rate currently rate limited\n */\n getRateLimitStatus(uri) {\n const apiName = this.getApiName(uri);\n\n if (!apiName) {\n return false;\n }\n\n const currTimeMilli = new Date().getTime();\n const dict = rateLimitExpiryTime.get(this);\n const expiryTime = dict.get(apiName);\n\n // if no rate limit expiry has been registered in the map, return false.\n if (expiryTime === undefined) {\n return false;\n }\n\n // return true, indicating rate limiting, if the system time is less than the expiry time\n return currTimeMilli < dict.get(apiName);\n }\n\n /**\n * split the URI and returns the API name of idBroker\n * @param {string} uri\n * @returns {string}\n */\n getApiName(uri) {\n if (!uri) {\n return null;\n }\n\n const results = uri.match(idBrokerRegex);\n\n if (!results) {\n return null;\n }\n\n // group 0 = full match of URL, group 1 = identity or idbroker base\n // group 2 = api name\n return results[2];\n }\n\n /**\n * check URI against list of currently rate limited\n * URIs, and determines if retry-after\n * @param {String} uri pattern to check\n * @returns {bool}\n */\n isRateLimited(uri) {\n // determine if the URI is associated with a common identity API\n if (uri && (uri.includes('idbroker') || uri.includes('identity'))) {\n return this.getRateLimitStatus(uri);\n }\n\n return false;\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class EmbargoInterceptor extends Interceptor {\n /**\n * @returns {EmbargoInterceptor}\n */\n static create() {\n /* eslint no-invalid-this: [0] */\n return new EmbargoInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Promise}\n */\n onResponseError(options, reason) {\n if (reason.statusCode === 451) {\n const {device} = this.webex.internal;\n const loggerMessage = [\n 'Received `HTTP 451 Unavailable For Legal Reasons`, ',\n 'discarding credentials and device registration',\n ].join('');\n\n if (device) {\n this.webex.internal.device.clear();\n }\n\n this.webex.credentials.clear();\n this.webex.logger.info(loggerMessage);\n }\n\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * Allows the user of the SDK to set default options that apply every http request made by the SDK\n * For example a default timeout could be set for all requests like this :\n *\n * webex = WebexSdk.init({\n * credentials: {\n * supertoken: superToken\n * },\n * config: {\n * credentials: {\n * client_id,\n * client_secret\n * },\n * defaultRequestOptions: {\n * timeout: 15000\n * }\n * }\n * });\n */\nexport default class DefaultOptionsInterceptor extends Interceptor {\n /**\n * @returns {DefaultOptionsInterceptor}\n */\n static create() {\n return new DefaultOptionsInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const {defaultRequestOptions: defaultOptions} = this.webex.config;\n\n if (!defaultOptions) {\n return options;\n }\n\n Object.keys(defaultOptions).forEach((key) => {\n // don't override any existing option properties\n if (!Object.keys(options).includes(key)) {\n options[key] = defaultOptions[key];\n }\n });\n\n return options;\n }\n}\n","import AmpState from 'ampersand-state';\n\n// The credentials config which includes the CI server info and derived\n// URL properties from them for the various CI services. The URL's\n// will be updated when the CI changes.\nconst CredentialsConfig = AmpState.extend({\n // we need to allow extra props for dynamic props like jwtRefreshCallback\n extraProperties: 'allow',\n\n props: {\n /**\n * The idbroker base host name\n * @returns {object}\n */\n idbroker: [\n 'object',\n false,\n () => ({\n url: process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com',\n }),\n ],\n\n /**\n * The identity base host name\n * @returns {object}\n */\n identity: [\n 'object',\n false,\n () => ({\n url: process.env.IDENTITY_BASE_URL || 'https://identity.webex.com',\n }),\n ],\n\n /**\n * This is the authorization url displayed on the\n * {@link developer portal|https://developer.webex.com}\n * @type {string}\n */\n authorizationString: [\n 'string',\n false,\n process.env.WEBEX_AUTHORIZATION_STRING || process.env.AUTHORIZATION_STRING,\n ],\n\n /**\n * Authorization URL which prompts for user's password. Inferred from\n * {@link config.credentials.authorizationString}. This config value will\n * be automatically set if `authorizationString` config value is specified.\n *\n * @type {string}\n */\n authorizeUrl: [\n 'string',\n false,\n process.env.WEBEX_AUTHORIZE_URL ||\n `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/oauth2/v1/authorize`,\n ],\n\n /**\n * {@see https://tools.ietf.org/html/rfc6749#section-4.1.4}\n * @type {string}\n */\n client_id: [\n 'string',\n false,\n process.env.WEBEX_CLIENT_ID || process.env.COMMON_IDENTITY_CLIENT_ID || process.env.CLIENT_ID,\n ],\n\n /**\n * {@see https://tools.ietf.org/html/rfc6749#section-4.1.4}\n * @type {string}\n */\n client_secret: [\n 'string',\n false,\n process.env.WEBEX_CLIENT_SECRET ||\n process.env.COMMON_IDENTITY_CLIENT_SECRET ||\n process.env.CLIENT_SECRET,\n ],\n\n /**\n * {@see https://tools.ietf.org/html/rfc6749#section-4.1.4}\n * @type {string}\n */\n redirect_uri: [\n 'string',\n false,\n process.env.WEBEX_REDIRECT_URI ||\n process.env.COMMON_IDENTITY_REDIRECT_URI ||\n process.env.REDIRECT_URI,\n ],\n\n /**\n * {@see https://tools.ietf.org/html/rfc6749#section-4.1.4}\n * @type {string}\n */\n scope: [\n 'string',\n false,\n process.env.WEBEX_SCOPE ||\n process.env.WEBEX_SCOPES ||\n process.env.COMMON_IDENTITY_SCOPE ||\n process.env.SCOPE,\n ],\n\n /**\n * Controls the UI of the CI login page.\n * @private\n * @type {string}\n */\n cisService: ['string', false, 'webex'],\n },\n\n derived: {\n /**\n * User activation URL\n * {@link config.credentials.activationUrl}\n * @type {string}\n */\n activationUrl: {\n deps: ['idbroker.url'],\n fn() {\n return `${\n this.idbroker.url || 'https://idbroker.webex.com'\n }/idb/token/v1/actions/UserActivation/invoke`;\n },\n cache: false,\n },\n\n /**\n * Generate OTP URL\n * {@link config.credentials.generateOtpUrl}\n * @type {string}\n */\n generateOtpUrl: {\n deps: ['idbroker.url'],\n fn() {\n return `${\n this.idbroker.url || 'https://idbroker.webex.com'\n }/idb/token/v1/actions/UserOTP/Generate/invoke`;\n },\n cache: false,\n },\n\n /**\n * Validate OTP URL\n * {@link config.credentials.validateOtpUrl}\n * @type {string}\n */\n validateOtpUrl: {\n deps: ['idbroker.url'],\n fn() {\n return `${\n this.idbroker.url || 'https://idbroker.webex.com'\n }/idb/token/v1/actions/UserOTP/Validate/invoke`;\n },\n cache: false,\n },\n\n // TODO does hydra also have an access_token endpoint?\n /**\n * Token URL used for token refresh and auth code exchange\n * @type {string}\n */\n tokenUrl: {\n deps: ['idbroker.url'],\n fn() {\n return process.env.TOKEN_URL || `${this.idbroker.url}/idb/oauth2/v1/access_token`;\n },\n cache: false,\n },\n\n /**\n * URL to revoke token\n * @type {string}\n */\n revokeUrl: {\n deps: ['idbroker.url'],\n fn() {\n return process.env.REVOKE_URL || `${this.idbroker.url}/idb/oauth2/v1/revoke`;\n },\n cache: false,\n },\n\n /**\n * URL to load when the app logs out\n * @type {string}\n */\n logoutUrl: {\n deps: ['idbroker.url'],\n fn() {\n return `${this.idbroker.url}/idb/oauth2/v1/logout`;\n },\n cache: false,\n },\n\n /**\n * Set password URL\n * @type {string}\n */\n setPasswordUrl: {\n deps: ['identity.url'],\n fn() {\n return `${this.identity.url || 'https://identity.webex.com'}/identity/scim/v1/Users`;\n },\n cache: false,\n },\n },\n});\n\nexport default CredentialsConfig;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {MemoryStoreAdapter} from './lib/storage';\nimport CredentialsConfig from './credentials-config';\n\nexport default {\n maxAppLevelRedirects: 10,\n maxLocusRedirects: 5,\n maxAuthenticationReplays: 1,\n maxReconnectAttempts: 1,\n onBeforeLogout: [],\n trackingIdPrefix: 'webex-js-sdk',\n trackingIdSuffix: '',\n AlternateLogger: undefined,\n credentials: new CredentialsConfig(),\n fedramp: process.env.ENABLE_FEDRAMP || false,\n services: {\n /**\n * A list of services that are available prior to catalog collection.\n *\n * @type {Object}\n */\n discovery: {\n /**\n * The hydra discovery url.\n *\n * @type {string}\n */\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n\n /**\n * The u2c discovery url\n *\n * @type {string}\n */\n u2c: process.env.U2C_SERVICE_URL || 'https://u2c.wbx2.com/u2c/api/v1',\n },\n\n /**\n * When true, considers all urls in `allowedDomains` as safe for auth tokens\n *\n * @type {boolean}\n */\n validateDomains: true,\n\n /**\n * services that don't need auth validation\n */\n\n servicesNotNeedValidation: ['webex-appapi-service'],\n\n /**\n * Contains a list of allowed domain host addresses.\n *\n * @type {Array}\n */\n allowedDomains: [],\n },\n device: {\n preDiscoveryServices: {\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n hydraServiceUrl: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n },\n validateDomains: true,\n },\n metrics: {\n type: ['behavioral', 'operational'],\n },\n payloadTransformer: {\n predicates: [],\n transforms: [],\n },\n storage: {\n boundedAdapter: MemoryStoreAdapter,\n unboundedAdapter: MemoryStoreAdapter,\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get, has, isArray, isFunction, merge, union} from 'lodash';\n\n/**\n * Mixes a plugin system into an AmpState object (specifically, into WebexCore)\n * @param {AmpState} State\n * @param {Object} config\n * @param {Object} interceptors\n * @returns {AmpState}\n */\nexport default function mixinWebexCorePlugins(State, config, interceptors) {\n // eslint-disable-next-line complexity\n State.registerPlugin = function registerPlugin(name, constructor, options = {}) {\n if (State.prototype._children[name] && !options.replace) {\n return;\n }\n\n State.prototype._children[name] = constructor;\n\n if (options.proxies) {\n options.proxies.forEach((key) => {\n createDerivedProperty(State.prototype, key, {\n deps: [`${name}.${key}`],\n fn() {\n return this[name][key];\n },\n });\n });\n }\n\n if (options.interceptors) {\n Object.keys(options.interceptors).forEach((key) => {\n interceptors[key] = options.interceptors[key];\n });\n }\n\n if (options.config) {\n merge(config, options.config);\n }\n\n if (has(options, 'payloadTransformer.predicates')) {\n config.payloadTransformer.predicates = config.payloadTransformer.predicates.concat(\n get(options, 'payloadTransformer.predicates')\n );\n }\n\n if (has(options, 'payloadTransformer.transforms')) {\n config.payloadTransformer.transforms = config.payloadTransformer.transforms.concat(\n get(options, 'payloadTransformer.transforms')\n );\n }\n\n if (options.onBeforeLogout) {\n config.onBeforeLogout = config.onBeforeLogout || [];\n const onBeforeLogout = isArray(options.onBeforeLogout)\n ? options.onBeforeLogout\n : [options.onBeforeLogout];\n\n onBeforeLogout.forEach((fn) =>\n config.onBeforeLogout.push({\n plugin: name,\n fn,\n })\n );\n }\n\n // Only mess with the plugin's derived properties if it's an amp-state plugin\n if (constructor.prototype._definition && constructor.prototype._definition.ready) {\n const {fn, depList} = State.prototype._derived.ready;\n const def = {\n deps: depList.concat(`${name}.ready`),\n fn,\n };\n\n createDerivedProperty(State.prototype, 'ready', def);\n }\n };\n\n return State;\n}\n\n/**\n * Extracted from ampersand-state\n * @param {Object} modelProto\n * @param {string} name\n * @param {Object} definition\n * @private\n * @returns {undefined}\n */\nfunction createDerivedProperty(modelProto, name, definition) {\n const def = (modelProto._derived[name] = {\n fn: isFunction(definition) ? definition : definition.fn,\n cache: definition.cache !== false,\n depList: definition.deps || [],\n });\n\n // add to our shared dependency list\n def.depList.forEach((dep) => {\n modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);\n });\n\n // defined a top-level getter for derived names\n Reflect.defineProperty(modelProto, name, {\n get() {\n return this._getDerivedProperty(name);\n },\n set() {\n throw new TypeError(`\\`${name}\\` is a derived property, it can't be set directly.`);\n },\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\nimport AmpState from 'ampersand-state';\n\n/**\n * WebexInternalCore is an extra layer of nesting to make it blatantly clear that\n * private plugins are, in fact, private.\n * @class\n */\nconst WebexInternalCore = AmpState.extend({\n derived: {\n ready: {\n deps: [],\n fn() {\n return Object.keys(this._children).reduce(\n (ready, name) => ready && this[name] && this[name].ready !== false,\n true\n );\n },\n },\n },\n\n /**\n * @instance\n * @memberof WebexPlugin\n * @param {number} depth\n * @private\n * @returns {Object}\n */\n inspect(depth) {\n return util.inspect(\n this.serialize({\n props: true,\n session: true,\n derived: true,\n }),\n {depth}\n );\n },\n});\n\nexport default WebexInternalCore;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\nimport util from 'util';\n\nimport {proxyEvents, retry, transferEvents} from '@webex/common';\nimport {\n HttpStatusInterceptor,\n defaults as requestDefaults,\n protoprepareFetchOptions as prepareFetchOptions,\n setTimingsAndFetch as _setTimingsAndFetch,\n} from '@webex/http-core';\nimport {defaultsDeep, get, isFunction, isString, last, merge, omit, set, unset} from 'lodash';\nimport AmpState from 'ampersand-state';\nimport uuid from 'uuid';\n\nimport AuthInterceptor from './interceptors/auth';\nimport NetworkTimingInterceptor from './interceptors/network-timing';\nimport PayloadTransformerInterceptor from './interceptors/payload-transformer';\nimport RedirectInterceptor from './interceptors/redirect';\nimport RequestEventInterceptor from './interceptors/request-event';\nimport RequestLoggerInterceptor from './interceptors/request-logger';\nimport RequestTimingInterceptor from './interceptors/request-timing';\nimport ResponseLoggerInterceptor from './interceptors/response-logger';\nimport WebexHttpError from './lib/webex-http-error';\nimport UserAgentInterceptor from './interceptors/user-agent';\nimport WebexTrackingIdInterceptor from './interceptors/webex-tracking-id';\nimport WebexUserAgentInterceptor from './interceptors/webex-user-agent';\nimport RateLimitInterceptor from './interceptors/rate-limit';\nimport EmbargoInterceptor from './interceptors/embargo';\nimport DefaultOptionsInterceptor from './interceptors/default-options';\nimport config from './config';\nimport {makeWebexStore} from './lib/storage';\nimport mixinWebexCorePlugins from './lib/webex-core-plugin-mixin';\nimport mixinWebexInternalCorePlugins from './lib/webex-internal-core-plugin-mixin';\nimport WebexInternalCore from './webex-internal-core';\n\n// TODO replace the Interceptor.create with Reflect.construct (\n// Interceptor.create exists because new was really hard to call on an array of\n// constructors)\nconst interceptors = {\n WebexTrackingIdInterceptor: WebexTrackingIdInterceptor.create,\n RequestEventInterceptor: RequestEventInterceptor.create,\n RateLimitInterceptor: RateLimitInterceptor.create,\n /* eslint-disable no-extra-parens */\n RequestLoggerInterceptor:\n process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING\n ? RequestLoggerInterceptor.create\n : undefined,\n ResponseLoggerInterceptor:\n process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING\n ? ResponseLoggerInterceptor.create\n : undefined,\n /* eslint-enable no-extra-parens */\n RequestTimingInterceptor: RequestTimingInterceptor.create,\n ServiceInterceptor: undefined,\n UserAgentInterceptor: UserAgentInterceptor.create,\n WebexUserAgentInterceptor: WebexUserAgentInterceptor.create,\n AuthInterceptor: AuthInterceptor.create,\n KmsDryErrorInterceptor: undefined,\n PayloadTransformerInterceptor: PayloadTransformerInterceptor.create,\n ConversationInterceptor: undefined,\n RedirectInterceptor: RedirectInterceptor.create,\n HttpStatusInterceptor() {\n return HttpStatusInterceptor.create({\n error: WebexHttpError,\n });\n },\n NetworkTimingInterceptor: NetworkTimingInterceptor.create,\n EmbargoInterceptor: EmbargoInterceptor.create,\n DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,\n};\n\nconst preInterceptors = [\n 'ResponseLoggerInterceptor',\n 'RequestTimingInterceptor',\n 'RequestEventInterceptor',\n 'WebexTrackingIdInterceptor',\n 'RateLimitInterceptor',\n];\n\nconst postInterceptors = [\n 'HttpStatusInterceptor',\n 'NetworkTimingInterceptor',\n 'EmbargoInterceptor',\n 'RequestLoggerInterceptor',\n 'RateLimitInterceptor',\n];\n\nconst MAX_FILE_SIZE_IN_MB = 2048;\n\n/**\n * @class\n */\nconst WebexCore = AmpState.extend({\n version: PACKAGE_VERSION,\n\n children: {\n internal: WebexInternalCore,\n },\n\n constructor(attrs = {}, options) {\n if (typeof attrs === 'string') {\n attrs = {\n credentials: {\n supertoken: {\n // eslint-disable-next-line camelcase\n access_token: attrs,\n },\n },\n };\n } else {\n // Reminder: order is important here\n [\n 'credentials.authorization',\n 'authorization',\n 'credentials.supertoken.supertoken',\n 'supertoken',\n 'access_token',\n 'credentials.authorization.supertoken',\n ].forEach((path) => {\n const val = get(attrs, path);\n\n if (val) {\n unset(attrs, path);\n set(attrs, 'credentials.supertoken', val);\n }\n });\n\n ['credentials', 'credentials.authorization'].forEach((path) => {\n const val = get(attrs, path);\n\n if (typeof val === 'string') {\n unset(attrs, path);\n set(attrs, 'credentials.supertoken', val);\n }\n });\n\n if (typeof get(attrs, 'credentials.access_token') === 'string') {\n // Send access_token to get validated and corrected and then set it\n set(\n attrs,\n 'credentials.access_token',\n this.bearerValidator(get(attrs, 'credentials.access_token').trim())\n );\n\n set(attrs, 'credentials.supertoken', attrs.credentials);\n }\n }\n\n return Reflect.apply(AmpState, this, [attrs, options]);\n },\n\n derived: {\n boundedStorage: {\n deps: [],\n fn() {\n return makeWebexStore('bounded', this);\n },\n },\n unboundedStorage: {\n deps: [],\n fn() {\n return makeWebexStore('unbounded', this);\n },\n },\n ready: {\n deps: ['loaded', 'internal.ready'],\n fn() {\n return (\n this.loaded &&\n Object.keys(this._children).reduce(\n (ready, name) => ready && this[name] && this[name].ready !== false,\n true\n )\n );\n },\n },\n },\n\n session: {\n config: {\n type: 'object',\n },\n /**\n * When true, indicates that the initial load from the storage layer is\n * complete\n * @instance\n * @memberof WebexCore\n * @type {boolean}\n */\n loaded: {\n default: false,\n type: 'boolean',\n },\n request: {\n setOnce: true,\n // It's supposed to be a function, but that's not a type defined in\n // Ampersand\n type: 'any',\n },\n sessionId: {\n setOnce: true,\n type: 'string',\n },\n },\n\n /**\n * @instance\n * @memberof WebexCore\n * @param {[type]} args\n * @returns {[type]}\n */\n refresh(...args) {\n return this.credentials.refresh(...args);\n },\n\n /**\n * Applies the directionally appropriate transforms to the specified object\n * @param {string} direction\n * @param {Object} object\n * @returns {Promise}\n */\n transform(direction, object) {\n const predicates = this.config.payloadTransformer.predicates.filter(\n (p) => !p.direction || p.direction === direction\n );\n const ctx = {\n webex: this,\n };\n\n return Promise.all(\n predicates.map((p) =>\n p.test(ctx, object).then((shouldTransform) => {\n if (!shouldTransform) {\n return undefined;\n }\n\n return (\n p\n .extract(object)\n // eslint-disable-next-line max-nested-callbacks\n .then((target) => ({\n name: p.name,\n target,\n }))\n );\n })\n )\n )\n .then((data) =>\n data\n .filter((d) => Boolean(d))\n // eslint-disable-next-line max-nested-callbacks\n .reduce(\n (promise, {name, target, alias}) =>\n promise.then(() => {\n if (alias) {\n return this.applyNamedTransform(direction, alias, target);\n }\n\n return this.applyNamedTransform(direction, name, target);\n }),\n Promise.resolve()\n )\n )\n .then(() => object);\n },\n\n /**\n * Applies the directionally appropriate transform to the specified parameters\n * @param {string} direction\n * @param {Object} ctx\n * @param {string} name\n * @returns {Promise}\n */\n applyNamedTransform(direction, ctx, name, ...rest) {\n if (isString(ctx)) {\n rest.unshift(name);\n name = ctx;\n ctx = {\n webex: this,\n transform: (...args) => this.applyNamedTransform(direction, ctx, ...args),\n };\n }\n\n const transforms = ctx.webex.config.payloadTransformer.transforms.filter(\n (tx) => tx.name === name && (!tx.direction || tx.direction === direction)\n );\n\n // too many implicit returns on the same line is difficult to interpret\n // eslint-disable-next-line arrow-body-style\n return transforms\n .reduce(\n (promise, tx) =>\n promise.then(() => {\n if (tx.alias) {\n return ctx.transform(tx.alias, ...rest);\n }\n\n return Promise.resolve(tx.fn(ctx, ...rest));\n }),\n Promise.resolve()\n )\n .then(() => last(rest));\n },\n\n /**\n * @private\n * @returns {Window}\n */\n getWindow() {\n // eslint-disable-next-line\n return window;\n },\n\n /**\n * Initializer\n *\n * @emits WebexCore#loaded\n * @emits WebexCore#ready\n * @instance\n * @memberof WebexCore\n * @param {Object} attrs\n * @returns {WebexCore}\n */\n initialize(attrs = {}) {\n this.config = merge({}, config, attrs.config);\n\n // There's some unfortunateness with the way {@link AmpersandState#children}\n // get initialized. We'll fire the change:config event so that\n // {@link WebexPlugin#initialize()} can use\n // `this.listenToOnce(parent, 'change:config', () => {});` to act on config\n // during initialization\n this.trigger('change:config');\n\n const onLoaded = () => {\n if (this.loaded) {\n /**\n * Fires when all data has been loaded from the storage layer\n * @event loaded\n * @instance\n * @memberof WebexCore\n */\n this.trigger('loaded');\n\n this.stopListening(this, 'change:loaded', onLoaded);\n }\n };\n\n // This needs to run on nextTick or we'll never be able to wire up listeners\n process.nextTick(() => {\n this.listenToAndRun(this, 'change:loaded', onLoaded);\n });\n\n const onReady = () => {\n if (this.ready) {\n /**\n * Fires when all plugins have fully initialized\n * @event ready\n * @instance\n * @memberof WebexCore\n */\n this.trigger('ready');\n\n this.stopListening(this, 'change:ready', onReady);\n }\n };\n\n // This needs to run on nextTick or we'll never be able to wire up listeners\n process.nextTick(() => {\n this.listenToAndRun(this, 'change:ready', onReady);\n });\n\n // Make nested events propagate in a consistent manner\n Object.keys(this.constructor.prototype._children).forEach((key) => {\n this.listenTo(this[key], 'change', (...args) => {\n args.unshift(`change:${key}`);\n this.trigger(...args);\n });\n });\n\n const addInterceptor = (ints, key) => {\n const interceptor = interceptors[key];\n\n if (!isFunction(interceptor)) {\n return ints;\n }\n\n ints.push(Reflect.apply(interceptor, this, []));\n\n return ints;\n };\n\n let ints = [];\n\n ints = preInterceptors.reduce(addInterceptor, ints);\n ints = Object.keys(interceptors)\n .filter((key) => !(preInterceptors.includes(key) || postInterceptors.includes(key)))\n .reduce(addInterceptor, ints);\n ints = postInterceptors.reduce(addInterceptor, ints);\n\n this.request = requestDefaults({\n json: true,\n interceptors: ints,\n });\n\n this.prepareFetchOptions = prepareFetchOptions({\n json: true,\n interceptors: ints,\n });\n\n this.setTimingsAndFetch = _setTimingsAndFetch;\n\n let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(\n this,\n 'config.trackingIdBase',\n uuid.v4()\n )}`;\n\n if (get(this, 'config.trackingIdSuffix')) {\n sessionId += `_${get(this, 'config.trackingIdSuffix')}`;\n }\n\n this.sessionId = sessionId;\n },\n\n /**\n * setConfig\n *\n * Allows updating config\n *\n * @instance\n * @memberof WebexCore\n * @param {Object} newConfig\n * @returns {null}\n */\n setConfig(newConfig = {}) {\n this.config = merge({}, this.config, newConfig);\n },\n\n /**\n *\n * Check if access token is correctly formated and correct if it's not\n * Warn user if token string has errors in it\n * @param {string} token\n * @returns {string}\n */\n bearerValidator(token) {\n if (token.includes('Bearer') && token.split(' ').length - 1 === 0) {\n console.warn(\n `Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\\n\\n${token\n .replace('Bearer', 'Bearer ')\n .replace(/\\s+/g, ' ')}`\n );\n console.info(\n \"Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine\"\n );\n\n return token.replace('Bearer', 'Bearer ').replace(/\\s+/g, ' ');\n }\n // Allow elseIf return\n // eslint-disable-next-line no-else-return\n else if (token.split(' ').length - 1 > 1) {\n console.warn(\n `Your access token has ${\n token.split(' ').length - 2\n } too many spaces, please use this format:\\n\\n${token.replace(/\\s+/g, ' ')}`\n );\n console.info(\n \"Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine\"\n );\n\n return token.replace(/\\s+/g, ' ');\n }\n\n return token.replace(/\\s+/g, ' '); // Clean it anyway (just in case)\n },\n\n /**\n * @instance\n * @memberof WebexPlugin\n * @param {number} depth\n * @private\n * @returns {Object}\n */\n inspect(depth) {\n return util.inspect(\n omit(\n this.serialize({\n props: true,\n session: true,\n derived: true,\n }),\n 'boundedStorage',\n 'unboundedStorage',\n 'request',\n 'config'\n ),\n {depth}\n );\n },\n\n /**\n * Invokes all `onBeforeLogout` handlers in the scope of their plugin, clears\n * all stores, and revokes the access token\n * Note: If you're using the sdk in a server environment, you may be more\n * interested in {@link `webex.internal.mercury.disconnect()`| Mercury#disconnect()}\n * and {@link `webex.internal.device.unregister()`|Device#unregister()}\n * or {@link `webex.phone.unregister()`|Phone#unregister}\n * @instance\n * @memberof WebexCore\n * @param {Object} options Passed as the first argument to all\n * `onBeforeLogout` handlers\n * @returns {Promise}\n */\n logout(options, ...rest) {\n // prefer the refresh token, but for clients that don't have one, fallback\n // to the access token\n const token =\n this.credentials.supertoken &&\n (this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);\n\n options = Object.assign({token}, options);\n\n // onBeforeLogout should be executed in the opposite order in which handlers\n // were registered. In that way, wdm unregister() will be above mercury\n // disconnect(), but disconnect() will execute first.\n // eslint-disable-next-line arrow-body-style\n return this.config.onBeforeLogout\n .reverse()\n .reduce(\n (promise, {plugin, fn}) =>\n promise.then(() => {\n return (\n Promise.resolve(\n Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest])\n )\n // eslint-disable-next-line max-nested-callbacks\n .catch((err) => {\n this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);\n })\n );\n }),\n Promise.resolve()\n )\n .then(() => Promise.all([this.boundedStorage.clear(), this.unboundedStorage.clear()]))\n .then(() => this.credentials.invalidate(...rest))\n .then(\n () =>\n this.authorization &&\n this.authorization.logout &&\n this.authorization.logout(options, ...rest)\n )\n .then(() => this.trigger('client:logout'));\n },\n\n /**\n * General purpose wrapper to submit metrics via the metrics plugin (if the\n * metrics plugin is installed)\n * @instance\n * @memberof WebexCore\n * @returns {Promise}\n */\n measure(...args) {\n if (this.metrics) {\n return this.metrics.sendUnstructured(...args);\n }\n\n return Promise.resolve();\n },\n\n async upload(options) {\n if (!options.file) {\n return Promise.reject(new Error('`options.file` is required'));\n }\n\n options.phases = options.phases || {};\n options.phases.initialize = options.phases.initialize || {};\n options.phases.upload = options.phases.upload || {};\n options.phases.finalize = options.phases.finalize || {};\n\n defaultsDeep(\n options.phases.initialize,\n {\n method: 'POST',\n body: {\n uploadProtocol: 'content-length',\n },\n },\n omit(options, 'file', 'phases')\n );\n\n defaultsDeep(options.phases.upload, {\n method: 'PUT',\n json: false,\n withCredentials: false,\n body: options.file,\n headers: {\n 'x-trans-id': uuid.v4(),\n authorization: undefined,\n },\n });\n\n defaultsDeep(\n options.phases.finalize,\n {\n method: 'POST',\n },\n omit(options, 'file', 'phases')\n );\n\n const shunt = new EventEmitter();\n\n const promise = this._uploadPhaseInitialize(options)\n .then(() => {\n const p = this._uploadPhaseUpload(options);\n\n transferEvents('progress', p, shunt);\n\n return p;\n })\n .then((...args) => this._uploadPhaseFinalize(options, ...args))\n .then((res) => ({...res.body, ...res.headers}));\n\n proxyEvents(shunt, promise);\n\n return promise;\n },\n\n _uploadPhaseInitialize: function _uploadPhaseInitialize(options) {\n this.logger.debug('client: initiating upload session');\n\n return this.request(options.phases.initialize)\n .then((...args) => {\n const fileUploadSizeLimitInBytes =\n (args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;\n const currentFileSizeInBytes = options.file.byteLength;\n\n if (fileUploadSizeLimitInBytes && fileUploadSizeLimitInBytes < currentFileSizeInBytes) {\n return this._uploadAbortSession(currentFileSizeInBytes, ...args);\n }\n\n return this._uploadApplySession(options, ...args);\n })\n .then((res) => {\n this.logger.debug('client: initiated upload session');\n\n return res;\n });\n },\n\n _uploadAbortSession(currentFileSizeInBytes, response) {\n this.logger.debug('client: deleting uploaded file');\n\n return this.request({\n method: 'DELETE',\n url: response.body.url,\n headers: response.options.headers,\n }).then(() => {\n this.logger.debug('client: deleting uploaded file complete');\n\n const abortErrorDetails = {\n currentFileSizeInBytes,\n fileUploadSizeLimitInMB: response.body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB,\n message: 'file-upload-size-limit-enabled',\n };\n\n return Promise.reject(new Error(`${JSON.stringify(abortErrorDetails)}`));\n });\n },\n\n _uploadApplySession(options, res) {\n const session = res.body;\n\n ['upload', 'finalize'].reduce((opts, key) => {\n opts[key] = Object.keys(opts[key]).reduce((phaseOptions, phaseKey) => {\n if (phaseKey.startsWith('$')) {\n phaseOptions[phaseKey.substr(1)] = phaseOptions[phaseKey](session);\n Reflect.deleteProperty(phaseOptions, phaseKey);\n }\n\n return phaseOptions;\n }, opts[key]);\n\n return opts;\n }, options.phases);\n },\n\n @retry\n _uploadPhaseUpload(options) {\n this.logger.debug('client: uploading file');\n\n const promise = this.request(options.phases.upload).then((res) => {\n this.logger.debug('client: uploaded file');\n\n return res;\n });\n\n proxyEvents(options.phases.upload.upload, promise);\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV === 'test') {\n promise.on('progress', (event) => {\n this.logger.info('upload progress', event.loaded, event.total);\n });\n }\n\n return promise;\n },\n\n _uploadPhaseFinalize: function _uploadPhaseFinalize(options) {\n this.logger.debug('client: finalizing upload session');\n\n return this.request(options.phases.finalize).then((res) => {\n this.logger.debug('client: finalized upload session');\n\n return res;\n });\n },\n});\n\nWebexCore.version = PACKAGE_VERSION;\n\nmixinWebexInternalCorePlugins(WebexInternalCore, config, interceptors);\nmixinWebexCorePlugins(WebexCore, config, interceptors);\n\nexport default WebexCore;\n\n/**\n * @method registerPlugin\n * @param {string} name\n * @param {function} constructor\n * @param {Object} options\n * @param {Array} options.proxies\n * @param {Object} options.interceptors\n * @returns {null}\n */\nexport function registerPlugin(name, constructor, options = {}) {\n WebexCore.registerPlugin(name, constructor, options);\n}\n\n/**\n * Registers plugins used by internal products that do not talk to public APIs.\n * @method registerInternalPlugin\n * @param {string} name\n * @param {function} constructor\n * @param {Object} options\n * @param {Object} options.interceptors\n * @private\n * @returns {null}\n */\nexport function registerInternalPlugin(name, constructor, options) {\n WebexInternalCore.registerPlugin(name, constructor, options);\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get, has, isArray, isFunction, merge, union} from 'lodash';\n\n/**\n * Mixes a plugin system into an AmpState object (specifically, into WebexCore)\n * @param {AmpState} State\n * @param {Object} config\n * @param {Object} interceptors\n * @returns {AmpState}\n */\nexport default function mixinWebexInternalCorePlugins(State, config, interceptors) {\n // eslint-disable-next-line complexity\n State.registerPlugin = function registerPlugin(name, constructor, options = {}) {\n if (State.prototype._children[name] && !options.replace) {\n return;\n }\n\n State.prototype._children[name] = constructor;\n\n if (options.proxies) {\n throw new Error('Proxies are not currently supported for private plugins');\n }\n\n if (options.interceptors) {\n Object.keys(options.interceptors).forEach((key) => {\n interceptors[key] = options.interceptors[key];\n });\n }\n\n if (options.config) {\n merge(config, options.config);\n }\n\n if (has(options, 'payloadTransformer.predicates')) {\n config.payloadTransformer.predicates = config.payloadTransformer.predicates.concat(\n get(options, 'payloadTransformer.predicates')\n );\n }\n\n if (has(options, 'payloadTransformer.transforms')) {\n config.payloadTransformer.transforms = config.payloadTransformer.transforms.concat(\n get(options, 'payloadTransformer.transforms')\n );\n }\n\n if (options.onBeforeLogout) {\n config.onBeforeLogout = config.onBeforeLogout || [];\n const onBeforeLogout = isArray(options.onBeforeLogout)\n ? options.onBeforeLogout\n : [options.onBeforeLogout];\n\n onBeforeLogout.forEach((fn) =>\n config.onBeforeLogout.push({\n plugin: name,\n fn,\n })\n );\n }\n\n // Only mess with the plugin's derived properties if it's an amp-state plugin\n if (constructor.prototype._definition && constructor.prototype._definition.ready) {\n const {fn, depList} = State.prototype._derived.ready;\n const def = {\n deps: depList.concat(`${name}.ready`),\n fn,\n };\n\n createDerivedProperty(State.prototype, 'ready', def);\n }\n };\n\n return State;\n}\n\n/**\n * Extracted from ampersand-state\n * @param {Object} modelProto\n * @param {string} name\n * @param {Object} definition\n * @private\n * @returns {undefined}\n */\nfunction createDerivedProperty(modelProto, name, definition) {\n const def = (modelProto._derived[name] = {\n fn: isFunction(definition) ? definition : definition.fn,\n cache: definition.cache !== false,\n depList: definition.deps || [],\n });\n\n // add to our shared dependency list\n def.depList.forEach((dep) => {\n modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);\n });\n\n // defined a top-level getter for derived names\n Reflect.defineProperty(modelProto, name, {\n get() {\n return this._getDerivedProperty(name);\n },\n set() {\n throw new TypeError(`\\`${name}\\` is a derived property, it can't be set directly.`);\n },\n });\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport WebexPlugin from '../lib/webex-plugin';\nimport {registerPlugin} from '../webex-core';\n\nconst precedence = {\n error: ['log'],\n warn: ['error', 'log'],\n info: ['log'],\n debug: ['info', 'log'],\n trace: ['debug', 'info', 'log'],\n};\n\n/**\n * Assigns the specified console method to Logger; uses `precedence` to fallback\n * to other console methods if the current environment doesn't provide the\n * specified level.\n * @param {string} level\n * @returns {Function}\n */\nfunction wrapConsoleMethod(level) {\n /* eslint no-console: [0] */\n let impls = precedence[level];\n\n if (impls) {\n impls = impls.slice();\n while (!console[level]) {\n level = impls.pop();\n }\n }\n\n return function wrappedConsoleMethod(...args) {\n /* eslint no-invalid-this: [0] */\n /* istanbul ignore if */\n if (\n process.env.NODE_ENV === 'test' &&\n this.webex &&\n this.webex.internal.device &&\n this.webex.internal.device.url\n ) {\n args.unshift(this.webex.internal.device.url.slice(-3));\n }\n console[level](...args);\n };\n}\n\nconst Logger = WebexPlugin.extend({\n namespace: 'Logger',\n error: wrapConsoleMethod('error'),\n warn: wrapConsoleMethod('warn'),\n log: wrapConsoleMethod('log'),\n info: wrapConsoleMethod('info'),\n debug: wrapConsoleMethod('debug'),\n trace: wrapConsoleMethod('trace'),\n});\n\nregisterPlugin('logger', Logger);\n\nexport default Logger;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Error thrown during oauth flow\n */\nexport class OAuthError extends Exception {\n /**\n * @param {HttpResponse} res\n * @returns {string}\n */\n parse(res) {\n // This error may be returned in an HTTPResponse or as part of a querystring\n const body = res.body || res;\n\n Object.defineProperties(this, {\n error: {\n enumerable: true,\n value: body.error,\n },\n errorDescription: {\n enumerable: true,\n value: body.error_description,\n },\n errorUri: {\n enumerable: true,\n value: body.error_uri,\n },\n res: {\n enumerable: false,\n value: res,\n },\n });\n\n return this.errorDescription;\n }\n}\n/**\n * InvalidRequestError\n */\nclass InvalidRequestError extends OAuthError {}\n\n/**\n * InvalidClientError\n */\nclass InvalidClientError extends OAuthError {}\n\n/**\n * InvalidGrantError\n */\nclass InvalidGrantError extends OAuthError {}\n\n/**\n * UnauthorizedClientError\n */\nclass UnauthorizedClientError extends OAuthError {}\n\n/**\n * UnsupportGrantTypeError\n */\nclass UnsupportGrantTypeError extends OAuthError {}\n\n/**\n * InvalidScopeError\n */\nclass InvalidScopeError extends OAuthError {}\n\nconst errors = {\n OAuthError,\n InvalidRequestError,\n InvalidClientError,\n InvalidGrantError,\n UnauthorizedClientError,\n UnsupportGrantTypeError,\n InvalidScopeError,\n invalid_request: InvalidRequestError,\n invalid_client: InvalidClientError,\n invalid_grant: InvalidGrantError,\n unauthorized_client: UnauthorizedClientError,\n unsupported_grant_type: UnsupportGrantTypeError,\n invalid_scope: InvalidScopeError,\n select(errorString) {\n return errors[errorString] || OAuthError;\n },\n};\n\nexport default errors;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {difference} from 'lodash';\n\nconst SCOPE_SEPARATOR = ' ';\n\n/**\n * sorts a list of scopes\n * @param {string} scope\n * @returns {string}\n */\nexport function sortScope(scope) {\n if (!scope) {\n return '';\n }\n\n return scope.split(SCOPE_SEPARATOR).sort().join(SCOPE_SEPARATOR);\n}\n\n/**\n * sorts a list of scopes and filters the specified scope\n * @param {string|string[]} toFilter\n * @param {string} scope\n * @returns {string}\n */\nexport function filterScope(toFilter, scope) {\n if (!scope) {\n return '';\n }\n const toFilterArr = Array.isArray(toFilter) ? toFilter : [toFilter];\n\n return scope\n .split(SCOPE_SEPARATOR)\n .filter((item) => !toFilterArr.includes(item))\n .sort()\n .join(SCOPE_SEPARATOR);\n}\n\n/**\n * Returns a string containing all items in scopeA that are not in scopeB, or an empty string if there are none.\n *\n * @param {string} scopeA\n * @param {string} scopeB\n * @returns {string}\n */\nexport function diffScopes(scopeA, scopeB) {\n const a = scopeA?.split(SCOPE_SEPARATOR) ?? [];\n const b = scopeB?.split(SCOPE_SEPARATOR) ?? [];\n\n return difference(a, b).sort().join(SCOPE_SEPARATOR);\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {pick} from 'lodash';\nimport {inBrowser, oneFlight} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nimport WebexHttpError from '../webex-http-error';\nimport WebexPlugin from '../webex-plugin';\n\nimport {sortScope, diffScopes} from './scope';\nimport grantErrors, {OAuthError} from './grant-errors';\n\n/* eslint-disable camelcase */\n\n/**\n * Parse response from CI and converts to structured error when appropriate\n * @param {WebexHttpError} res\n * @private\n * @returns {GrantError}\n */\nfunction processGrantError(res) {\n if (res.statusCode !== 400) {\n return Promise.reject(res);\n }\n\n const ErrorConstructor = grantErrors.select(res.body.error);\n\n if (ErrorConstructor === OAuthError && res instanceof WebexHttpError) {\n return Promise.reject(res);\n }\n if (!ErrorConstructor) {\n return Promise.reject(res);\n }\n\n return Promise.reject(new ErrorConstructor(res._res || res));\n}\n\n/**\n * @class\n */\nconst Token = WebexPlugin.extend({\n derived: {\n /**\n * Indicates if this token can be used in an auth header. `true` iff\n * {@link Token#access_token} is defined and {@link Token#isExpired} is\n * false.\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n canAuthorize: {\n deps: ['access_token', 'isExpired'],\n fn() {\n return !!this.access_token && !this.isExpired;\n },\n },\n\n /**\n * Indicates that this token can be downscoped. `true` iff\n * {@link config.credentials.client_id} is defined and if\n * {@link Token#canAuthorize} is true\n *\n * Note: since {@link config} is not evented, we can't listen for changes to\n * {@link config.credentials.client_id}. As such,\n * {@link config.credentials.client_id} must always be set before\n * instantiating a {@link Token}\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n canDownscope: {\n deps: ['canAuthorize'],\n fn() {\n return this.canAuthorize && !!this.config.client_id;\n },\n },\n\n /**\n * Indicates if this token can be refreshed. `true` iff\n * {@link Token@refresh_token} is defined and\n * {@link config.credentials.refreshCallback()} is defined\n *\n * Note: since {@link config} is not evented, we can't listen for changes to\n * {@link config.credentials.refreshCallback()}. As such,\n * {@link config.credentials.refreshCallback()} must always be set before\n * instantiating a {@link Token}\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n canRefresh: {\n deps: ['refresh_token'],\n fn() {\n if (inBrowser) {\n return !!this.refresh_token && !!this.config.refreshCallback;\n }\n\n return !!this.refresh_token && !!this.config.client_secret;\n },\n },\n\n /**\n * Indicates if this `Token` is expired. `true` iff {@link Token#expires} is\n * defined and is less than {@link Date.now()}.\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n isExpired: {\n deps: ['expires', '_isExpired'],\n fn() {\n // in order to avoid setting `cache:false`, we'll use a private property\n // and a timer rather than comparing to `Date.now()`;\n return !!this.expires && this._isExpired;\n },\n },\n\n /**\n * Cache for toString()\n * @instance\n * @memberof Token\n * @private\n * @readonly\n * @type {string}\n */\n _string: {\n deps: ['access_token', 'token_type'],\n fn() {\n if (!this.access_token || !this.token_type) {\n return '';\n }\n\n return `${this.token_type} ${this.access_token}`;\n },\n },\n },\n\n namespace: 'Credentials',\n\n props: {\n /**\n * Used for indexing in the credentials userTokens collection\n * @instance\n * @memberof Token\n * @private\n * @type {string}\n */\n scope: 'string',\n /**\n * @instance\n * @memberof Token\n * @type {string}\n */\n access_token: 'string',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n expires: 'number',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n expires_in: 'number',\n /**\n * @instance\n * @memberof Token\n * @type {string}\n */\n refresh_token: 'string',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n refresh_token_expires: 'number',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n refresh_token_expires_in: 'number',\n /**\n * @default \"Bearer\"\n * @instance\n * @memberof Token\n * @type {string}\n */\n token_type: {\n default: 'Bearer',\n type: 'string',\n },\n },\n\n session: {\n /**\n * Used by {@link Token#isExpired} to avoid doing a Date comparison.\n * @instance\n * @memberof Token\n * @private\n * @type {boolean}\n */\n _isExpired: {\n default: false,\n type: 'boolean',\n },\n /**\n * Handle to the previous token that we'll revoke when we refresh this\n * token. The idea is to keep allow two valid tokens when a refresh occurs;\n * we don't want revoke a token that's in the middle of being used, so when\n * we do a token refresh, we won't revoke the token being refreshed, but\n * we'll revoke the previous one.\n * @instance\n * @memberof Token\n * @private\n * @type {Object}\n */\n previousToken: {\n type: 'state',\n },\n },\n\n @oneFlight({\n keyFactory(scope) {\n return scope;\n },\n })\n /**\n * Uses this token to request a new Token with a subset of this Token's scopes\n * @instance\n * @memberof Token\n * @param {string} scope\n * @returns {Promise}\n */\n downscope(scope) {\n this.logger.info(`token: downscoping token to ${scope}`);\n\n if (this.isExpired) {\n this.logger.info('token: request received to downscope expired access_token');\n\n return Promise.reject(new Error('cannot downscope expired access token'));\n }\n\n if (!this.canDownscope) {\n if (this.config.client_id) {\n this.logger.info('token: request received to downscope invalid access_token');\n } else {\n this.logger.trace('token: cannot downscope without client_id');\n }\n\n return Promise.reject(new Error('cannot downscope access token'));\n }\n\n if (diffScopes(scope, this.config.scope) !== '') {\n return Promise.reject(\n new Error(\n `new scope (${scope}) is not subset of the available scopes (${this.config.scope})`\n )\n );\n }\n\n // Since we're going to use scope as the index in our token collection, it's\n // important scopes are always deterministically specified.\n if (scope) {\n scope = sortScope(scope);\n }\n\n // Ideally, we could depend on the service to communicate this error, but\n // all we get is \"invalid scope\", which, to the lay person, implies\n // something wrong with *one* of the scopes, not the whole thing.\n if (scope === sortScope(this.config.scope)) {\n return Promise.reject(new Error('token: scope reduction requires a reduced scope'));\n }\n\n return this.webex\n .request({\n method: 'POST',\n uri: this.config.tokenUrl,\n addAuthHeader: false,\n form: {\n grant_type: 'urn:cisco:oauth:grant-type:scope-reduction',\n token: this.access_token,\n scope,\n client_id: this.config.client_id,\n self_contained_token: true,\n },\n })\n .then((res) => {\n this.logger.info(`token: downscoped token to ${scope}`);\n\n return new Token(Object.assign(res.body, {scope}), {parent: this.parent});\n });\n },\n\n /**\n * Initializer\n * @instance\n * @memberof Token\n * @param {Object} [attrs={}]\n * @param {Object} [options={}]\n * @see {@link WebexPlugin#initialize()}\n * @returns {Token}\n */\n initialize(attrs = {}, options = {}) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n if (typeof attrs === 'string') {\n this.access_token = attrs;\n }\n\n if (!this.access_token) {\n throw new Error('`access_token` is required');\n }\n\n // We don't want the derived property `isExpired` to need {cache:false}, so\n // we'll set up a timer the runs when this token should expire.\n if (this.expires) {\n if (this.expires < Date.now()) {\n this._isExpired = true;\n } else {\n safeSetTimeout(() => {\n this._isExpired = true;\n }, this.expires - Date.now());\n }\n }\n },\n\n @oneFlight\n /**\n * Refreshes this Token. Relies on\n * {@link config.credentials.refreshCallback()}\n * @instance\n * @memberof Token\n * @returns {Promise}\n */\n refresh() {\n if (!this.canRefresh) {\n throw new Error('Not enough information available to refresh this access token');\n }\n\n let promise;\n\n if (inBrowser) {\n if (!this.config.refreshCallback) {\n throw new Error('Cannot refresh access token without refreshCallback');\n }\n\n promise = Promise.resolve(this.config.refreshCallback(this.webex, this));\n }\n\n return (\n promise ||\n this.webex\n .request({\n method: 'POST',\n uri: this.config.tokenUrl,\n form: {\n grant_type: 'refresh_token',\n redirect_uri: this.config.redirect_uri,\n refresh_token: this.refresh_token,\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true,\n },\n shouldRefreshAccessToken: false,\n })\n .then((res) => res.body)\n )\n .then((obj) => {\n if (!obj) {\n throw new Error('token: refreshCallback() did not produce an object');\n }\n // If the authentication server did not send back a refresh token, copy\n // the current refresh token and related values to the response (note:\n // at time of implementation, CI never sends a new refresh token)\n if (!obj.refresh_token) {\n Object.assign(\n obj,\n pick(this, 'refresh_token', 'refresh_token_expires', 'refresh_token_expires_in')\n );\n }\n\n // If the new token is the same as the previous token, then we may have\n // found a bug in CI; log the details and reject the Promise\n if (this.access_token === obj.access_token) {\n this.logger.error('token: new token matches current token');\n // log the tokens if it is not production\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error('token: current token:', this.access_token);\n this.logger.error('token: new token:', obj.access_token);\n }\n\n return Promise.reject(new Error('new token matches current token'));\n }\n\n if (this.previousToken) {\n this.previousToken.revoke();\n this.unset('previousToken');\n }\n\n obj.previousToken = this;\n obj.scope = this.scope;\n\n return new Token(obj, {parent: this.parent});\n })\n .catch(processGrantError);\n },\n\n @oneFlight\n /**\n * Revokes this token and unsets its local properties\n * @instance\n * @memberof Token\n * @returns {Promise}\n */\n revoke() {\n if (this.isExpired) {\n this.logger.info('token: already expired, not making making revocation request');\n\n return Promise.resolve();\n }\n\n if (!this.canAuthorize) {\n this.logger.info('token: no longer valid, not making revocation request');\n\n return Promise.resolve();\n }\n\n // FIXME we need to use the user token revocation endpoint to revoke a token\n // without a client_secret, but it doesn't current support using a token to\n // revoke itself\n // Note: I'm not making a canRevoke property because there should be changes\n // coming to the user token revocation endpoint that allow us to do this\n // correctly.\n if (!this.config.client_secret) {\n this.logger.info('token: no client secret available, not making revocation request');\n\n return Promise.resolve();\n }\n\n this.logger.info('token: revoking access token');\n\n return this.webex\n .request({\n method: 'POST',\n uri: this.config.revokeUrl,\n form: {\n token: this.access_token,\n token_type_hint: 'access_token',\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true,\n },\n shouldRefreshAccessToken: false,\n })\n .then(() => {\n this.unset(['access_token', 'expires', 'expires_in', 'token_type']);\n this.logger.info('token: access token revoked');\n })\n .catch(processGrantError);\n },\n\n set(...args) {\n // eslint-disable-next-line prefer-const\n let [attrs, options] = this._filterSetParameters(...args);\n\n if (!attrs.token_type && attrs.access_token && attrs.access_token.includes(' ')) {\n const [token_type, access_token] = attrs.access_token.split(' ');\n\n attrs = {...attrs, access_token, token_type};\n }\n const now = Date.now();\n\n if (!attrs.expires && attrs.expires_in) {\n attrs.expires = now + attrs.expires_in * 1000;\n }\n\n if (!attrs.refresh_token_expires && attrs.refresh_token_expires_in) {\n attrs.refresh_token_expires = now + attrs.refresh_token_expires_in * 1000;\n }\n\n if (attrs.scope) {\n attrs.scope = sortScope(attrs.scope);\n }\n\n return Reflect.apply(WebexPlugin.prototype.set, this, [attrs, options]);\n },\n\n /**\n * Renders the token object as an HTTP Header Value\n * @instance\n * @memberof Token\n * @returns {string}\n * @see {@link Object#toString()}\n */\n toString() {\n if (!this._string) {\n throw new Error('cannot stringify Token');\n }\n\n return this._string;\n },\n\n /**\n * Uses a non-producation api to return information about this token. This\n * method is primarily for tests and will throw if NODE_ENV === production\n * @instance\n * @memberof Token\n * @private\n * @returns {Promise}\n */\n validate() {\n if (process.env.NODE_ENV === 'production') {\n throw new Error('Token#validate() must not be used in production');\n }\n\n return this.webex\n .request({\n method: 'POST',\n service: 'conversation',\n resource: 'users/validateAuthToken',\n body: {\n token: this.access_token,\n },\n })\n .catch((reason) => {\n if ('statusCode' in reason) {\n return Promise.reject(reason);\n }\n this.logger.info(\"REMINDER: If you're investigating a network error here, it's normal\");\n\n // If we got an error that isn't a WebexHttpError, assume the problem is\n // that we don't have the wdm plugin loaded and service/resource isn't\n // a valid means of identifying a request.\n const convApi =\n process.env.CONVERSATION_SERVICE ||\n process.env.CONVERSATION_SERVICE_URL ||\n 'https://conv-a.wbx2.com/conversation/api/v1';\n\n return this.webex.request({\n method: 'POST',\n uri: `${convApi}/users/validateAuthToken`,\n body: {\n token: this.access_token,\n },\n headers: {\n authorization: `Bearer ${this.access_token}`,\n },\n });\n })\n .then((res) => res.body);\n },\n});\n\nexport default Token;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport Token from './token';\n\nconst TokenCollection = AmpCollection.extend({\n mainIndex: 'scope',\n\n model: Token,\n\n namespace: 'Credentials',\n});\n\nexport default TokenCollection;\n","// Metric to do with WDM registration\nexport const METRICS = {\n JS_SDK_CREDENTIALS_DOWNSCOPE_FAILED: 'JS_SDK_CREDENTIALS_DOWNSCOPE_FAILED',\n JS_SDK_CREDENTIALS_TOKEN_REFRESH_SCOPE_MISMATCH:\n 'JS_SDK_CREDENTIALS_TOKEN_REFRESH_SCOPE_MISMATCH',\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '../../webex-core';\n\nimport Credentials from './credentials';\n\nregisterPlugin('credentials', Credentials, {\n proxies: ['canAuthorize', 'canRefresh'],\n});\n\nexport {default as Credentials} from './credentials';\nexport {filterScope, sortScope} from './scope';\nexport {default as Token} from './token';\nexport {default as grantErrors} from './grant-errors';\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\nimport url from 'url';\n\nimport jwt from 'jsonwebtoken';\nimport {base64, makeStateDataType, oneFlight, tap, whileInFlight} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {clone, cloneDeep, isObject, isEmpty} from 'lodash';\n\nimport WebexPlugin from '../webex-plugin';\nimport {persist, waitForValue} from '../storage/decorators';\n\nimport grantErrors, {OAuthError} from './grant-errors';\nimport {filterScope, diffScopes, sortScope} from './scope';\nimport Token from './token';\nimport TokenCollection from './token-collection';\nimport {METRICS} from '../constants';\n\n/**\n * @class\n */\nconst Credentials = WebexPlugin.extend({\n collections: {\n userTokens: TokenCollection,\n },\n\n dataTypes: {\n token: makeStateDataType(Token, 'token').dataType,\n },\n\n derived: {\n canAuthorize: {\n deps: ['supertoken', 'supertoken.canAuthorize', 'canRefresh'],\n fn() {\n return Boolean((this.supertoken && this.supertoken.canAuthorize) || this.canRefresh);\n },\n },\n canRefresh: {\n deps: ['supertoken', 'supertoken.canRefresh'],\n fn() {\n // If we're operating in JWT mode, we have to delegate to the consumer\n if (this.config.jwtRefreshCallback) {\n return true;\n }\n\n return Boolean(this.supertoken && this.supertoken.canRefresh);\n },\n },\n isUnverifiedGuest: {\n deps: ['supertoken'],\n /**\n * Returns true if the user is an unverified guest\n * @returns {boolean}\n */\n fn() {\n let isGuest = false;\n try {\n isGuest =\n JSON.parse(base64.decode(this.supertoken.access_token.split('.')[1])).user_type ===\n 'guest';\n } catch {\n /* the non-guest token is formatted differently so catch is expected */\n }\n\n return isGuest;\n },\n },\n },\n\n props: {\n supertoken: makeStateDataType(Token, 'token').prop,\n },\n\n namespace: 'Credentials',\n\n session: {\n isRefreshing: {\n default: false,\n type: 'boolean',\n },\n /**\n * Becomes `true` once the {@link loaded} event fires.\n * @see {@link WebexPlugin#ready}\n * @instance\n * @memberof Credentials\n * @type {boolean}\n */\n ready: {\n default: false,\n type: 'boolean',\n },\n refreshTimer: {\n default: undefined,\n type: 'any',\n },\n },\n\n /**\n * Generates an OAuth Login URL. Prefers the api.ciscospark.com proxy if the\n * instance is initialize with an authorizatUrl, but fallsback to idbroker\n * as the base otherwise.\n * @instance\n * @memberof Credentials\n * @param {Object} [options={}]\n * @returns {string}\n */\n buildLoginUrl(options = {clientType: 'public'}) {\n /* eslint-disable camelcase */\n if (options.state && !isObject(options.state)) {\n throw new Error('if specified, `options.state` must be an object');\n }\n\n options.client_id = this.config.client_id;\n options.redirect_uri = this.config.redirect_uri;\n options.scope = this.config.scope;\n\n options = cloneDeep(options);\n\n if (!options.response_type) {\n options.response_type = options.clientType === 'public' ? 'token' : 'code';\n }\n Reflect.deleteProperty(options, 'clientType');\n\n if (options.state) {\n if (!isEmpty(options.state)) {\n options.state = base64.toBase64Url(JSON.stringify(options.state));\n } else {\n delete options.state;\n }\n }\n\n return `${this.config.authorizeUrl}?${querystring.stringify(options)}`;\n /* eslint-enable camelcase */\n },\n\n /**\n * Get the determined OrgId.\n *\n * @throws {Error} - If the OrgId could not be determined.\n * @returns {string} - The OrgId.\n */\n getOrgId() {\n this.logger.info('credentials: attempting to retrieve the OrgId from token');\n\n try {\n // Attempt to extract a client-authenticated token's OrgId.\n this.logger.info('credentials: trying to extract OrgId from JWT');\n\n return this.extractOrgIdFromJWT(this.supertoken.access_token);\n } catch (e) {\n // Attempt to extract a user token's OrgId.\n this.logger.info('credentials: could not extract OrgId from JWT');\n this.logger.info('credentials: attempting to extract OrgId from user token');\n\n try {\n return this.extractOrgIdFromUserToken(this.supertoken?.access_token);\n } catch (f) {\n this.logger.info('credentials: could not extract OrgId from user token');\n throw f;\n }\n }\n },\n\n /**\n * Extract the OrgId [realm] from a provided JWT.\n *\n * @private\n * @param {string} token - The JWT to extract the OrgId from.\n * @throws {Error} - If the token does not pass JWT general/realm validation.\n * @returns {string} - The OrgId.\n */\n extractOrgIdFromJWT(token = '') {\n // Decoded the provided token.\n const decodedJWT = jwt.decode(token);\n\n // Validate that the provided token is a JWT.\n if (!decodedJWT) {\n throw new Error('unable to extract the OrgId from the provided JWT');\n }\n\n if (!decodedJWT.realm) {\n throw new Error('the provided JWT does not contain an OrgId');\n }\n\n // Return the OrgId [realm].\n return decodedJWT.realm;\n },\n\n /**\n * Extract the OrgId [realm] from a provided user token.\n *\n * @private\n * @param {string} token - The user token to extract the OrgId from.\n * @throws {Error} - Will throw an error if the provided token is invalid.\n * @returns {string} - The OrgId.\n */\n extractOrgIdFromUserToken(token = '') {\n // Split the provided token into subsections.\n const fields = token.split('_');\n\n // Validate that the provided token has the proper amount of sections.\n if (fields.length !== 3) {\n throw new Error('the provided token is not a valid format');\n }\n\n // Return the token section that contains the OrgId.\n return fields[2];\n },\n\n /**\n * Generates a Logout URL\n * @instance\n * @memberof Credentials\n * @param {Object} [options={}]\n * @returns {[type]}\n */\n buildLogoutUrl(options = {}) {\n return `${this.config.logoutUrl}?${querystring.stringify({\n cisService: this.config.service,\n goto: this.config.redirect_uri,\n ...options,\n })}`;\n },\n\n /**\n * Generates a number between 60% - 90% of expired value\n * @instance\n * @memberof Credentials\n * @param {number} expiration\n * @private\n * @returns {number}\n */\n calcRefreshTimeout(expiration) {\n return Math.floor(((Math.floor(Math.random() * 4) + 6) / 10) * expiration);\n },\n\n constructor(...args) {\n // HACK to deal with the fact that AmpersandState#dataTypes#set is a pure\n // function.\n this._dataTypes = cloneDeep(this._dataTypes);\n Object.keys(this._dataTypes).forEach((key) => {\n if (this._dataTypes[key].set) {\n this._dataTypes[key].set = this._dataTypes[key].set.bind(this);\n }\n });\n // END HACK\n Reflect.apply(WebexPlugin, this, args);\n },\n\n /**\n * Downscopes a token\n * @instance\n * @memberof Credentials\n * @param {string} scope\n * @private\n * @returns {Promise}\n */\n downscope(scope) {\n return this.supertoken.downscope(scope).catch((reason) => {\n const failReason = reason?.body ?? reason;\n this.logger.warn(`credentials: failed to downscope supertoken to \"${scope}\"`, failReason);\n this.logger.trace(`credentials: falling back to supertoken for ${scope}`);\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_CREDENTIALS_DOWNSCOPE_FAILED, {\n fields: {\n requestedScope: scope,\n failReason,\n },\n });\n\n return Promise.resolve(new Token({scope, ...this.supertoken.serialize()}), {\n parent: this,\n });\n });\n },\n\n /**\n * Requests a client credentials grant and returns the token. Given the\n * limited use for such tokens as this time, this method does not cache its\n * token.\n * @instance\n * @memberof Credentials\n * @param {Object} options\n * @returns {Promise}\n */\n getClientToken(options = {}) {\n this.logger.info('credentials: requesting client credentials grant');\n\n return this.webex\n .request({\n /* eslint-disable camelcase */\n method: 'POST',\n uri: options.uri || this.config.tokenUrl,\n form: {\n grant_type: 'client_credentials',\n scope: options.scope || 'webexsquare:admin',\n self_contained_token: true,\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true,\n },\n shouldRefreshAccessToken: false,\n /* eslint-enable camelcase */\n })\n .then((res) => new Token(res.body, {parent: this}))\n .catch((res) => {\n if (res.statusCode !== 400) {\n return Promise.reject(res);\n }\n\n const ErrorConstructor = grantErrors.select(res.body.error);\n\n return Promise.reject(new ErrorConstructor(res._res || res));\n });\n },\n\n @oneFlight({keyFactory: (scope) => scope})\n @waitForValue('@')\n /**\n * Resolves with a token with the specified scopes. If no scope is specified,\n * defaults to omit(webex.credentials.scope, 'spark:kms'). If no such token is\n * available, downscopes the supertoken to that scope.\n * @instance\n * @memberof Credentials\n * @param {string} scope\n * @returns {Promise}\n */\n getUserToken(scope) {\n return Promise.resolve(\n !this.isRefreshing ||\n new Promise((resolve) => {\n this.logger.info(\n 'credentials: token refresh inflight; delaying getUserToken until refresh completes'\n );\n this.once('change:isRefreshing', () => {\n this.logger.info('credentials: token refresh complete; reinvoking getUserToken');\n resolve();\n });\n })\n ).then(() => {\n if (!this.canAuthorize) {\n this.logger.info('credentials: cannot produce an access token from current state');\n\n return Promise.reject(new Error('Current state cannot produce an access token'));\n }\n\n if (!scope) {\n scope = filterScope('spark:kms', this.supertoken.scope);\n }\n\n scope = sortScope(scope);\n\n if (scope === sortScope(this.supertoken.scope)) {\n return Promise.resolve(this.supertoken);\n }\n\n const token = this.userTokens.get(scope);\n\n // we should also check for the token.access_token since token object does\n // not get cleared on unsetting while logging out.\n if (!token || !token.access_token) {\n return this.downscope(scope).then(tap((t) => this.userTokens.add(t)));\n }\n\n return Promise.resolve(token);\n });\n },\n\n @persist('@')\n /**\n * Initializer\n * @instance\n * @memberof Credentials\n * @param {Object} attrs\n * @param {Object} options\n * @private\n * @returns {Credentials}\n */\n initialize(attrs, options) {\n if (attrs) {\n if (typeof attrs === 'string') {\n this.supertoken = attrs;\n }\n\n if (attrs.access_token) {\n this.supertoken = attrs;\n }\n\n if (attrs.authorization) {\n if (attrs.authorization.supertoken) {\n this.supertoken = attrs.authorization.supertoken;\n } else {\n this.supertoken = attrs.authorization;\n }\n }\n\n // schedule refresh\n if (this.supertoken && this.supertoken.expires) {\n this.scheduleRefresh(this.supertoken.expires);\n }\n }\n\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n this.listenToOnce(this.parent, 'change:config', () => {\n if (this.config.authorizationString) {\n const parsed = url.parse(this.config.authorizationString, true);\n\n /* eslint-disable camelcase */\n this.config.client_id = parsed.query.client_id;\n this.config.redirect_uri = parsed.query.redirect_uri;\n this.config.scope = parsed.query.scope;\n this.config.authorizeUrl = parsed.href.substr(0, parsed.href.indexOf('?'));\n /* eslint-enable camelcase */\n }\n });\n\n this.webex.once('loaded', () => {\n this.ready = true;\n });\n },\n\n @oneFlight\n @waitForValue('@')\n /**\n * Clears all tokens from store them from the stores.\n *\n * This is no longer quite the right name for this method, but all of the\n * alternatives I'm coming up with are already taken.\n * @instance\n * @memberof Credentials\n * @returns {Promise}\n */\n invalidate() {\n this.logger.info('credentials: invalidating tokens');\n\n // clear refresh timer\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.unset('refreshTimer');\n }\n\n try {\n this.unset('supertoken');\n } catch (err) {\n this.logger.warn('credentials: failed to clear supertoken', err);\n }\n\n while (this.userTokens.models.length) {\n try {\n this.userTokens.remove(this.userTokens.models[0]);\n } catch (err) {\n this.logger.warn('credentials: failed to remove user token', err);\n }\n }\n\n this.logger.info('credentials: finished removing tokens');\n\n // Return a promise to give the storage layer a tick or two to clear\n // localStorage\n return Promise.resolve();\n },\n\n @oneFlight\n @whileInFlight('isRefreshing')\n @waitForValue('@')\n /**\n * Removes the supertoken and child tokens, then refreshes the supertoken;\n * subsequent calls to {@link Credentials#getUserToken()} will re-downscope\n * child tokens. Enqueus revocation of previous previousTokens. Yes, that's\n * the correct number of \"previous\"es.\n * @instance\n * @memberof Credentials\n * @returns {Promise}\n */\n refresh() {\n this.logger.info('credentials: refresh requested');\n\n const {supertoken} = this;\n const tokens = clone(this.userTokens.models);\n\n // This is kind of a leaky abstraction, since it relies on the authorization\n // plugin, but the only alternatives I see are\n // 1. put all JWT support in core\n // 2. have separate jwt and non-jwt auth plugins\n // while I like #2 from a code simplicity standpoint, the third-party DX\n // isn't great\n if (this.config.jwtRefreshCallback) {\n return (\n this.config\n .jwtRefreshCallback(this.webex)\n // eslint-disable-next-line no-shadow\n .then((jwt) => this.webex.authorization.requestAccessTokenFromJwt({jwt}))\n );\n }\n\n if (this.webex.internal.services) {\n this.webex.internal.services.updateCredentialsConfig();\n }\n\n return supertoken\n .refresh()\n .catch((error) => {\n if (error instanceof OAuthError) {\n // Error: super token refresh failed with 400 status code.\n // Hence emit an event to the client, an opportunity to logout.\n this.unset('supertoken');\n while (this.userTokens.models.length) {\n try {\n this.userTokens.remove(this.userTokens.models[0]);\n } catch (err) {\n this.logger.warn('credentials: failed to remove user token', err);\n }\n }\n this.webex.trigger('client:InvalidRequestError');\n }\n\n return Promise.reject(error);\n })\n .then((st) => {\n // clear refresh timer\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.unset('refreshTimer');\n }\n this.supertoken = st;\n\n const invalidScopes = diffScopes(this.config.scope, st.scope);\n\n if (invalidScopes !== '') {\n this.logger.warn(\n `credentials: \"${invalidScopes}\" scope(s) are invalid because not listed in the supertoken, they will be excluded from user token requests.`\n );\n this.webex.internal.metrics.submitClientMetrics(\n METRICS.JS_SDK_CREDENTIALS_TOKEN_REFRESH_SCOPE_MISMATCH,\n {fields: {invalidScopes}}\n );\n }\n\n return Promise.all(\n tokens.map((token) => {\n const tokenScope = filterScope(diffScopes(token.scope, st.scope), token.scope);\n\n return (\n this.downscope(tokenScope)\n // eslint-disable-next-line max-nested-callbacks\n .then((t) => {\n this.logger.info(`credentials: revoking token for ${token.scope}`);\n\n return token\n .revoke()\n .catch((err) => {\n this.logger.warn('credentials: failed to revoke user token', err);\n })\n .then(() => {\n this.userTokens.remove(token.scope);\n this.userTokens.add(t);\n });\n })\n );\n })\n );\n })\n .then(() => {\n this.scheduleRefresh(this.supertoken.expires);\n });\n },\n\n /**\n * Schedules a token refresh or refreshes the token if token has expired\n * @instance\n * @memberof Credentials\n * @param {number} expires\n * @private\n * @returns {undefined}\n */\n scheduleRefresh(expires) {\n const expiresIn = expires - Date.now();\n\n if (expiresIn > 0) {\n const timeoutLength = this.calcRefreshTimeout(expiresIn);\n\n this.refreshTimer = safeSetTimeout(() => this.refresh(), timeoutLength);\n } else {\n this.refresh();\n }\n },\n});\n\nexport default Credentials;\n","const NAMESPACE = 'services';\nconst SERVICE_CATALOGS = ['discovery', 'limited', 'signin', 'postauth', 'custom'];\n\nconst SERVICE_CATALOGS_ENUM_TYPES = {\n STRING: 'SERVICE_CATALOGS_ENUM_TYPES_STRING',\n NUMBER: 'SERVICE_CATALOGS_ENUM_TYPES_NUMBER',\n};\n\n// The default allowed domains that SDK can make requests to outside of service catalog\nconst COMMERCIAL_ALLOWED_DOMAINS = [\n 'wbx2.com',\n 'ciscospark.com',\n 'webex.com',\n 'webexapis.com',\n 'broadcloudpbx.com',\n 'broadcloud.eu',\n 'broadcloud.com.au',\n 'broadcloudpbx.net',\n];\n\nexport {SERVICE_CATALOGS_ENUM_TYPES, NAMESPACE, SERVICE_CATALOGS, COMMERCIAL_ALLOWED_DOMAINS};\n","// Metrics for service catalog\nexport default {\n JS_SDK_SERVICE_NOT_FOUND: 'JS_SDK_SERVICE_NOT_FOUND',\n};\n","import Url from 'url';\n\nimport AmpState from 'ampersand-state';\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst ServiceUrl = AmpState.extend({\n namespace: 'ServiceUrl',\n\n props: {\n defaultUrl: ['string', true, undefined],\n hosts: ['array', false, () => []],\n name: ['string', true, undefined],\n },\n\n /**\n * Generate a host url based on the host\n * uri provided.\n * @param {string} hostUri\n * @returns {string}\n */\n _generateHostUrl(hostUri) {\n const url = Url.parse(this.defaultUrl);\n\n // setting url.hostname will not apply during Url.format(), set host via\n // a string literal instead.\n url.host = `${hostUri}${url.port ? `:${url.port}` : ''}`;\n\n return Url.format(url);\n },\n\n /**\n * Generate a list of urls based on this\n * `ServiceUrl`'s known hosts.\n * @returns {string[]}\n */\n _getHostUrls() {\n return this.hosts.map((host) => ({\n url: this._generateHostUrl(host.host),\n priority: host.priority,\n }));\n },\n\n /**\n * Get the current host url with the highest priority. If a clusterId is not\n * provided, this will only return a URL with a filtered host that has the\n * `homeCluster` value set to `true`.\n *\n * @param {string} [clusterId] - The clusterId to filter for a priority host.\n * @returns {string} - The priority host url.\n */\n _getPriorityHostUrl(clusterId) {\n if (this.hosts.length === 0) {\n return this.defaultUrl;\n }\n\n let filteredHosts = clusterId\n ? this.hosts.filter((host) => host.id === clusterId)\n : this.hosts.filter((host) => host.homeCluster);\n\n const aliveHosts = filteredHosts.filter((host) => !host.failed);\n\n filteredHosts =\n aliveHosts.length === 0\n ? filteredHosts.map((host) => {\n /* eslint-disable-next-line no-param-reassign */\n host.failed = false;\n\n return host;\n })\n : aliveHosts;\n\n return this._generateHostUrl(\n filteredHosts.reduce(\n (previous, current) =>\n previous.priority > current.priority || !previous.homeCluster ? current : previous,\n {}\n ).host\n );\n },\n\n /**\n * Attempt to mark a host from this `ServiceUrl` as failed and return true\n * if the provided url has a host that could be successfully marked as failed.\n *\n * @param {string} url\n * @returns {boolean}\n */\n failHost(url) {\n if (url === this.defaultUrl) {\n return true;\n }\n\n const {hostname} = Url.parse(url);\n const foundHost = this.hosts.find((hostObj) => hostObj.host === hostname);\n\n if (foundHost) {\n foundHost.failed = true;\n }\n\n return foundHost !== undefined;\n },\n\n /**\n * Get the current `defaultUrl` or generate a url using the host with the\n * highest priority via host rendering.\n *\n * @param {boolean} [priorityHost] - Retrieve the priority host.\n * @param {string} [clusterId] - Cluster to match a host against.\n * @returns {string} - The full service url.\n */\n get(priorityHost, clusterId) {\n if (!priorityHost) {\n return this.defaultUrl;\n }\n\n return this._getPriorityHostUrl(clusterId);\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default ServiceUrl;\n","import Url from 'url';\n\nimport AmpState from 'ampersand-state';\n\nimport {union} from 'lodash';\nimport ServiceUrl from './service-url';\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst ServiceCatalog = AmpState.extend({\n namespace: 'ServiceCatalog',\n\n props: {\n serviceGroups: [\n 'object',\n true,\n () => ({\n discovery: [],\n override: [],\n preauth: [],\n postauth: [],\n signin: [],\n }),\n ],\n status: [\n 'object',\n true,\n () => ({\n discovery: {\n ready: false,\n collecting: false,\n },\n override: {\n ready: false,\n collecting: false,\n },\n preauth: {\n ready: false,\n collecting: false,\n },\n postauth: {\n ready: false,\n collecting: false,\n },\n signin: {\n ready: false,\n collecting: false,\n },\n }),\n ],\n isReady: ['boolean', false, false],\n allowedDomains: ['array', false, () => []],\n },\n\n /**\n * @private\n * Search the service url array to locate a `ServiceUrl`\n * class object based on its name.\n * @param {string} name\n * @param {string} [serviceGroup]\n * @returns {ServiceUrl}\n */\n _getUrl(name, serviceGroup) {\n const serviceUrls =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n\n return serviceUrls.find((serviceUrl) => serviceUrl.name === name);\n },\n\n /**\n * @private\n * Generate an array of `ServiceUrl`s that is organized from highest auth\n * level to lowest auth level.\n * @returns {Array} - array of `ServiceUrl`s\n */\n _listServiceUrls() {\n return [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n },\n\n /**\n * @private\n * Safely load one or more `ServiceUrl`s into this `Services` instance.\n * @param {string} serviceGroup\n * @param {Array} services\n * @returns {Services}\n */\n _loadServiceUrls(serviceGroup, services) {\n // declare namespaces outside of loop\n let existingService;\n\n services.forEach((service) => {\n existingService = this._getUrl(service.name, serviceGroup);\n\n if (!existingService) {\n this.serviceGroups[serviceGroup].push(service);\n }\n });\n\n return this;\n },\n\n /**\n * @private\n * Safely unload one or more `ServiceUrl`s into this `Services` instance\n * @param {string} serviceGroup\n * @param {Array} services\n * @returns {Services}\n */\n _unloadServiceUrls(serviceGroup, services) {\n // declare namespaces outside of loop\n let existingService;\n\n services.forEach((service) => {\n existingService = this._getUrl(service.name, serviceGroup);\n\n if (existingService) {\n this.serviceGroups[serviceGroup].splice(\n this.serviceGroups[serviceGroup].indexOf(existingService),\n 1\n );\n }\n });\n\n return this;\n },\n\n /**\n * Clear all collected catalog data and reset catalog status.\n *\n * @returns {void}\n */\n clean() {\n this.serviceGroups.preauth.length = 0;\n this.serviceGroups.signin.length = 0;\n this.serviceGroups.postauth.length = 0;\n this.status.preauth = {ready: false};\n this.status.signin = {ready: false};\n this.status.postauth = {ready: false};\n },\n\n /**\n * Search over all service groups to find a cluster id based\n * on a given url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {string} - ClusterId of a given url\n */\n findClusterId(url) {\n const incomingUrlObj = Url.parse(url);\n let serviceUrlObj;\n\n for (const key of Object.keys(this.serviceGroups)) {\n for (const service of this.serviceGroups[key]) {\n serviceUrlObj = Url.parse(service.defaultUrl);\n\n for (const host of service.hosts) {\n if (incomingUrlObj.hostname === host.host && host.id) {\n return host.id;\n }\n }\n\n if (serviceUrlObj.hostname === incomingUrlObj.hostname && service.hosts.length > 0) {\n // no exact match, so try to grab the first home cluster\n for (const host of service.hosts) {\n if (host.homeCluster) {\n return host.id;\n }\n }\n\n // no match found still, so return the first entry\n return service.hosts[0].id;\n }\n }\n }\n\n return undefined;\n },\n\n /**\n * Search over all service groups and return a service value from a provided\n * clusterId. Currently, this method will return either a service name, or a\n * service url depending on the `value` parameter. If the `value` parameter\n * is set to `name`, it will return a service name to be utilized within the\n * Services plugin methods.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {boolean} [params.priorityHost = true] - returns priority host url if true\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n findServiceFromClusterId({clusterId, priorityHost = true, serviceGroup} = {}) {\n const serviceUrls =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n\n const identifiedServiceUrl = serviceUrls.find((serviceUrl) =>\n serviceUrl.hosts.find((host) => host.id === clusterId)\n );\n\n if (identifiedServiceUrl) {\n return {\n name: identifiedServiceUrl.name,\n url: identifiedServiceUrl.get(priorityHost, clusterId),\n };\n }\n\n return undefined;\n },\n\n /**\n * Find a service based on the provided url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {serviceUrl} - ServiceUrl assocated with provided url\n */\n findServiceUrlFromUrl(url) {\n const serviceUrls = [\n ...this.serviceGroups.discovery,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.override,\n ];\n\n return serviceUrls.find((serviceUrl) => {\n // Check to see if the URL we are checking starts with the default URL\n if (url.startsWith(serviceUrl.defaultUrl)) {\n return true;\n }\n\n // If not, we check to see if the alternate URLs match\n // These are made by swapping the host of the default URL\n // with that of an alternate host\n for (const host of serviceUrl.hosts) {\n const alternateUrl = new URL(serviceUrl.defaultUrl);\n alternateUrl.host = host.host;\n\n if (url.startsWith(alternateUrl.toString())) {\n return true;\n }\n }\n\n return false;\n });\n },\n\n /**\n * Finds an allowed domain that matches a specific url.\n *\n * @param {string} url - The url to match the allowed domains against.\n * @returns {string} - The matching allowed domain.\n */\n findAllowedDomain(url) {\n const urlObj = Url.parse(url);\n\n if (!urlObj.host) {\n return undefined;\n }\n\n return this.allowedDomains.find((allowedDomain) => urlObj.host.includes(allowedDomain));\n },\n\n /**\n * Get a service url from the current services list by name.\n * @param {string} name\n * @param {boolean} priorityHost\n * @param {string} serviceGroup\n * @returns {string}\n */\n get(name, priorityHost, serviceGroup) {\n const serviceUrl = this._getUrl(name, serviceGroup);\n\n return serviceUrl ? serviceUrl.get(priorityHost) : undefined;\n },\n\n /**\n * Get the current allowed domains list.\n *\n * @returns {Array} - the current allowed domains list.\n */\n getAllowedDomains() {\n return [...this.allowedDomains];\n },\n\n /**\n * Creates an object where the keys are the service names\n * and the values are the service urls.\n * @param {boolean} priorityHost - use the highest priority if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record}\n */\n list(priorityHost, serviceGroup) {\n const output = {};\n\n const serviceUrls =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.discovery,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.override,\n ];\n\n if (serviceUrls) {\n serviceUrls.forEach((serviceUrl) => {\n output[serviceUrl.name] = serviceUrl.get(priorityHost);\n });\n }\n\n return output;\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const serviceUrl = this._getUrl(\n Object.keys(this.list()).find((key) => this._getUrl(key).failHost(url))\n );\n\n if (!serviceUrl) {\n return undefined;\n }\n\n return noPriorityHosts ? serviceUrl.get(false) : serviceUrl.get(true);\n },\n\n /**\n * Set the allowed domains for the catalog.\n *\n * @param {Array} allowedDomains - allowed domains to be assigned.\n * @returns {void}\n */\n setAllowedDomains(allowedDomains) {\n this.allowedDomains = [...allowedDomains];\n },\n\n /**\n *\n * @param {Array} newAllowedDomains - new allowed domains to add to existing set of allowed domains\n * @returns {void}\n */\n addAllowedDomains(newAllowedDomains) {\n this.allowedDomains = union(this.allowedDomains, newAllowedDomains);\n },\n\n /**\n * Update the current list of `ServiceUrl`s against a provided\n * service hostmap.\n * @emits ServiceCatalog#preauthorized\n * @emits ServiceCatalog#postauthorized\n * @param {string} serviceGroup\n * @param {object} serviceHostmap\n * @returns {Services}\n */\n updateServiceUrls(serviceGroup, serviceHostmap) {\n const currentServiceUrls = this.serviceGroups[serviceGroup];\n\n const unusedUrls = currentServiceUrls.filter((serviceUrl) =>\n serviceHostmap.every((item) => item.name !== serviceUrl.name)\n );\n\n this._unloadServiceUrls(serviceGroup, unusedUrls);\n\n serviceHostmap.forEach((serviceObj) => {\n const service = this._getUrl(serviceObj.name, serviceGroup);\n\n if (service) {\n service.defaultUrl = serviceObj.defaultUrl;\n service.hosts = serviceObj.hosts || [];\n } else {\n this._loadServiceUrls(serviceGroup, [\n new ServiceUrl({\n ...serviceObj,\n }),\n ]);\n }\n });\n\n this.status[serviceGroup].ready = true;\n this.trigger(serviceGroup);\n\n return this;\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject after a timeout of 60 seconds.\n * @param {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise}\n */\n waitForCatalog(serviceGroup, timeout) {\n return new Promise((resolve, reject) => {\n if (this.status[serviceGroup].ready) {\n resolve();\n }\n\n const validatedTimeout = typeof timeout === 'number' && timeout >= 0 ? timeout : 60;\n\n const timeoutTimer = setTimeout(\n () =>\n reject(\n new Error(\n `services: timeout occured while waiting for '${serviceGroup}' catalog to populate`\n )\n ),\n validatedTimeout * 1000\n );\n\n this.once(serviceGroup, () => {\n clearTimeout(timeoutTimer);\n resolve();\n });\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default ServiceCatalog;\n","import Url from 'url';\n\nimport {SERVICE_CATALOGS} from './constants';\n\n/**\n * The parameter transfer object for {@link ServiceHost#constructor}.\n *\n * @typedef {Object} ServiceHostConstructorPTO\n * @property {string} ServiceHostConstructorPTO.catalog - The host's catalog.\n * @property {string} ServiceHostConstructorPTO.defaultUri - The host's default.\n * @property {string} ServiceHostConstructorPTO.hostGroup - The host's group.\n * @property {string} ServiceHostConstructorPTO.id - The host's clusterId.\n * @property {number} ServiceHostConstructorPTO.priority - The host's priority.\n * @property {string} ServiceHostConstructorPTO.uri - The host's uri.\n */\n\n/**\n * The parameter transfer object for {@link ServiceHost#polyGenerate}.\n *\n * @typedef {Object} ServiceHostPolyGeneratePTO\n * @property {string} ServiceHostPolyGeneratePTO.catalog - The target catalog.\n * @property {string} ServiceHostPolyGeneratePTO.name - The service name.\n * @property {string} ServiceHostPolyGeneratePTO.url - The service url.\n */\n\n/**\n * @class\n * @classdesc - Manages a single service host and its associated data.\n */\nexport default class ServiceHost {\n /**\n * Generate a new {@link ServiceHost}.\n *\n * @public\n * @constructor\n * @memberof ServiceHost\n * @param {ServiceHostConstructorPTO} pto\n */\n constructor(pto) {\n // Validate the parameter transfer object.\n ServiceHost.validate(pto);\n\n // Map the parameter transfer object to the class object.\n /**\n * The catalog name that the {@link ServiceHost} is associated with.\n *\n * @instance\n * @type {string}\n * @public\n * @memberof ServiceHost\n */\n this.catalog = pto.catalog;\n\n /**\n * The default URI for the {@link ServiceHost}.\n *\n * @instance\n * @type {string}\n * @public\n * @memberof ServiceHost\n */\n this.default = pto.defaultUri;\n\n /**\n * The host group that the {@link ServiceHost} is associated with.\n *\n * @instance\n * @type {string}\n * @public\n * @memberof ServiceHost\n */\n this.hostGroup = pto.hostGroup;\n\n /**\n * The cluster ID of the {@link ServiceHost}.\n *\n * @instance\n * @type {string}\n * @public\n * @memberof ServiceHost\n */\n this.id = pto.id;\n\n /**\n * The priority value of the {@link ServiceHost}. The lower the number, the\n * higher the priority.\n *\n * @instance\n * @type {number}\n * @public\n * @memberof ServiceHost\n */\n this.priority = pto.priority;\n\n /**\n * The host uri of the {@link ServiceHost}.\n *\n * @instance\n * @type {string}\n * @public\n * @memberof ServiceHost\n */\n this.uri = pto.uri;\n\n // Generate flags.\n /**\n * If the {@link ServiceHost} is marked as failed.\n *\n * @instance\n * @type {boolean}\n * @protected\n * @memberof ServiceHost\n */\n this.failed = false;\n\n /**\n * If the {@link ServiceHost} is marked as replaced.\n *\n * @instance\n * @type {boolean}\n * @protected\n * @memberof ServiceHost\n */\n this.replaced = false;\n }\n\n /**\n * If the {@link ServiceHost} is in an active state.\n *\n * @public\n * @memberof ServiceHost\n * @type {boolean} - `true` if the service is active and usable.\n */\n get active() {\n // Validate that the `ServiceHost` was not marked as failed or replaced.\n return !this.failed && !this.replaced;\n }\n\n /**\n * If the host is local to the user's cluster.\n *\n * @public\n * @memberof ServiceHost\n * @type {boolean} - If the host is local.\n */\n get local() {\n return this.default.includes(this.hostGroup);\n }\n\n /**\n * The service value.\n *\n * @public\n * @memberof ServiceHost\n * @type {string} - The service value.\n */\n get service() {\n return this.id.split(':')[3];\n }\n\n /**\n * The formatted url for the host.\n *\n * @public\n * @memberof ServiceHost\n * @type {string} - The service url.\n */\n get url() {\n // Generate a url object from the default url.\n const urlObj = Url.parse(this.default);\n\n // Format the host of the generated url object.\n urlObj.host = `${this.uri}${urlObj.port ? `:${urlObj.port}` : ''}`;\n\n // Assign the formatted url to this.\n return Url.format(urlObj);\n }\n\n /**\n * Set one or more of the status properties of the class object.\n *\n * @public\n * @memberof ServiceHost\n * @param {Object} pto - The parameter transfer object.\n * @property {boolean} [pto.failed] - The failed status to set.\n * @property {boolean} [pto.replaced] - the replaced status to set.\n * @returns {this}\n */\n setStatus({failed, replaced}) {\n if (failed !== undefined) {\n this.failed = failed;\n }\n\n if (replaced !== undefined) {\n this.replaced = replaced;\n }\n\n return this;\n }\n\n /**\n * Generate a service host using only a catalog, name, and URL.\n *\n * @public\n * @static\n * @memberof ServiceHost\n * @param {ServiceHostPolyGeneratePTO} pto\n * @returns {ServiceHost} - The generated service host.\n */\n static polyGenerate({catalog, name, url}) {\n return new ServiceHost({\n catalog,\n defaultUri: url,\n hostGroup: Url.parse(url).host,\n id: name ? `poly-head:poly-group:poly-cluster:${name}` : undefined,\n priority: 1,\n uri: Url.parse(url).host,\n });\n }\n\n /**\n * Validate that a constructor parameter transfer object is valid.\n *\n * @public\n * @static\n * @memberof ServiceHost\n * @param {ServiceHostConstructorPTO} pto\n * @throws - If the parameter transfer object is not valid.\n * @returns {undefined}\n */\n static validate({catalog, defaultUri, hostGroup, id, priority, uri}) {\n // Generate error-throwing method.\n const throwError = (msg) => {\n throw new Error(`service-host: invalid constructor parameters, ${msg}`);\n };\n\n // Validate the catalog property.\n if (!SERVICE_CATALOGS.includes(catalog)) {\n throwError(\"'catalog' must be a string\");\n }\n\n // Validate the `defaultUri` property.\n if (typeof defaultUri !== 'string') {\n throwError(\"'defaultUri' must be a string\");\n }\n\n // Validate the `hostGroup` property.\n if (typeof hostGroup !== 'string') {\n throwError(\"'hostGroup' must be a string\");\n }\n\n // Validate the `id` property.\n if (typeof id !== 'string' || id.split(':').length !== 4) {\n throwError(\"'id' must be a string that contains 3 ':' characters\");\n }\n\n // Validate the `priority` property.\n if (typeof priority !== 'number') {\n throwError(\"'priority' must be a number\");\n }\n\n // Validate the `uri` property.\n if (typeof uri !== 'string') {\n throwError(\"'uri' must be a string\");\n }\n }\n}\n","import {SERVICE_CATALOGS, SERVICE_CATALOGS_ENUM_TYPES} from './constants';\nimport ServiceHost from './service-host';\n\n/**\n * The parameter transfer object for {@link ServiceRegistry#mapRemoteCatalog}.\n * This object is shaped to match the object returned from the **U2C** service.\n *\n * @typedef {Record} RSL\n * @typedef {Record>>} RHC\n *\n * @typedef {Object} MapRemoteCatalogPTO\n * @property {string} MapRemoteCatalogPTO.catalog - Service catalog name.\n * @property {RSL} MapRemoteCatalogPTO.serviceLinks - Service links.\n * @property {RHC} MapRemoteCatalogPTO.hostCatalog - Service host catalog.\n */\n\n/**\n * Service manipulation filter object for retrieving services within the\n * {@link ServiceRegistry} class.\n *\n * @typedef {Object} HostFilter\n * @property {boolean} [HostFilter.active] - Active state to filter.\n * @property {Array | string} [HostFilter.catalog] - Catalogs to filter.\n * @property {Array | string} [HostFilter.cluster] - Clusters to filter.\n * @property {boolean} [HostFilter.local] - Filter to the user's home cluster.\n * @property {boolean} [HostFilter.priority] - Filter for the highest priority.\n * @property {Array | string} [HostFilter.service] - Services to filter.\n * @property {Array | string} [HostFilter.url] - URL to filter.\n */\n\n/**\n * @class\n * @classdesc - Manages a collection of {@link ServiceHost} class objects.\n */\nexport default class ServiceRegistry {\n /**\n * Generate a new {@link ServiceHost}.\n *\n * @public\n * @constructor\n * @memberof ServiceHost\n */\n constructor() {\n /**\n * The collection of managed {@link ServiceHost}s.\n *\n * @instance\n * @type {Array}\n * @private\n * @memberof ServiceRegistry\n */\n this.hosts = [];\n }\n\n /**\n * An active, local, and priority mapped record of the current\n * {@link ServiceCatalog#hosts}.\n *\n * @public\n * @memberof ServiceCatalog\n * @type {Record}\n */\n get map() {\n // Get a list of active, local, and priority-mapped hosts.\n return this.find({\n active: true,\n local: true,\n priority: true,\n }).reduce((map, host) => {\n // Generate a new object to assign the existing map.\n const hostReference = {};\n\n // Assign the key:value pair for the service and url.\n hostReference[host.service] = host.url;\n\n // Assign the reference to the map and return.\n return {...map, ...hostReference};\n }, {});\n }\n\n /**\n * Removes a collection of {@link ServiceHost} class objects from the\n * {@link ServiceRegistry#hosts} array based on the provided\n * {@link HostFilter}.\n *\n * @public\n * @memberof ServiceRegistry\n * @param {HostFilter} filter - The inclusive filter for hosts to remove.\n * @returns {Array} - The removed {@link ServiceHost}s.\n */\n clear(filter) {\n // Collect a list of hosts to remove based on the provided filter.\n const removing = this.find(filter);\n\n // Remove the hosts from the array.\n this.hosts = this.hosts.filter((host) => !removing.includes(host));\n\n // Return the removed hosts.\n return removing;\n }\n\n /**\n * Mark a collection of {@link ServiceHost} class objects from the\n * {@link ServiceRegistry#hosts} array as failed based on the provided\n * {@link HostFilter}.\n *\n * @public\n * @memberof ServiceRegistry\n * @param {HostFilter} filter - The inclusive filter for hosts to mark failed.\n * @returns {Array} - The {@link ServiceHost}s marked failed.\n */\n failed(filter) {\n // Collect a list of hosts to mark as failed based on the provided filter.\n const failing = this.find(filter);\n\n // Mark the hosts from the array as failed.\n failing.forEach((host) => {\n host.setStatus({failed: true});\n });\n\n // Return the marked hosts.\n return failing;\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array against their active states.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {boolean} [active] - Filter for the host state.\n * @returns {Array} - The filtered host array.\n */\n filterActive(active) {\n // Filter the host array if the active requirement is true.\n return typeof active === 'boolean'\n ? this.hosts.filter((host) => host.active === active)\n : [...this.hosts];\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array against their assigned\n * catalog values.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {Array | string} [catalog] - Catalogs to filter.\n * @returns {Array} - The filtered host array.\n */\n filterCatalog(catalog = []) {\n // Generate a catalog names array based on the provided catalog param.\n const catalogs = (Array.isArray(catalog) ? catalog : [catalog]).map(\n (catalogId) =>\n ServiceRegistry.mapCatalogName({\n id: catalogId,\n type: SERVICE_CATALOGS_ENUM_TYPES.STRING,\n }) || catalogId\n );\n\n // Filter the host array against the catalog names array.\n return catalogs.length > 0\n ? this.hosts.filter((host) => catalogs.includes(host.catalog))\n : [...this.hosts];\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array against their assigned\n * cluster values.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {Array | string} [cluster] - Clusters to filter for.\n * @returns {Array} - The filtered host array.\n */\n filterCluster(cluster = []) {\n // Generate an array of clusters regardless of parameter type.\n const clusters = Array.isArray(cluster) ? cluster : [cluster];\n\n // Filter the host array against the provided clusters.\n return clusters.length > 0\n ? this.hosts.filter((host) => clusters.includes(host.id))\n : [...this.hosts];\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array against their location in\n * reference to the authenticated user.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {boolean} [local] - Filter for the host location.\n * @returns {Array} - The filtered host array.\n */\n filterLocal(local) {\n return typeof local === 'boolean'\n ? this.hosts.filter((host) => host.local === local)\n : [...this.hosts];\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array for the highest priority\n * hosts for each specific service.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {boolean} [priority] - Filter for the highest priority\n * @returns {Array} - The filtered host array.\n */\n filterPriority(priority) {\n return priority\n ? this.hosts.reduce((filteredHosts, currentHost) => {\n // Validate that the current host is not active.\n if (!currentHost.active) {\n return filteredHosts;\n }\n\n // Determine if the filtered hosts array contains a host from the same\n // host group.\n const foundHost = filteredHosts.find((host) => host.hostGroup === currentHost.hostGroup);\n\n // Validate if a host was found.\n if (!foundHost) {\n filteredHosts.push(currentHost);\n\n return filteredHosts;\n }\n\n // Map the found host's catalog to its priority value.\n const foundHostCatalogPriority = ServiceRegistry.mapCatalogName({\n id: foundHost.catalog,\n type: SERVICE_CATALOGS_ENUM_TYPES.NUMBER,\n });\n\n // Map the current host's catalog to its priority value.\n const currentHostCatalogPriority = ServiceRegistry.mapCatalogName({\n id: currentHost.catalog,\n type: SERVICE_CATALOGS_ENUM_TYPES.NUMBER,\n });\n\n // Validate if the found host has a lower priority than the current\n // host.\n if (\n foundHostCatalogPriority < currentHostCatalogPriority ||\n foundHost.priority < currentHost.priority\n ) {\n filteredHosts.splice(filteredHosts.indexOf(foundHost, 1));\n filteredHosts.push(currentHost);\n }\n\n return filteredHosts;\n }, [])\n : [...this.hosts];\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array for hosts with a specified\n * set of service names.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {Array | string} [service] - Services to filter.\n * @returns {Array} - The filtered host array.\n */\n filterService(service = []) {\n // Generate an array of services regardless of parameter type.\n const services = Array.isArray(service) ? service : [service];\n\n // Filter the host array against the provided services.\n return services.length > 0\n ? this.hosts.filter((host) => services.includes(host.service))\n : [...this.hosts];\n }\n\n /**\n * Filter the {@link ServiceRegistry#hosts} array for hosts with a specified\n * set of URLs.\n *\n * @private\n * @memberof ServiceRegistry\n * @param {Array | string} [url] - URL to filter.\n * @returns {Array} - The filter host array.\n */\n filterUrl(url = []) {\n // Generate an array of URLs regardless of the parameter type.\n const urls = Array.isArray(url) ? url : [url];\n\n // Filter the host array against the provided URLs.\n return urls.length > 0 ? this.hosts.filter((host) => urls.includes(host.url)) : [...this.hosts];\n }\n\n /**\n * Get an array of {@link ServiceHost}s based on a provided\n * {@link HostFilter} from the {@link ServiceRegistry#hosts} array.\n *\n * @public\n * @memberof ServiceRegistry\n * @param {HostFilter} [filter] - The inclusive filter for hosts to find.\n * @returns {Array} - The filtered hosts.\n */\n find({active, catalog, cluster, local, priority, service, url} = {}) {\n return this.hosts.filter(\n (host) =>\n this.filterActive(active).includes(host) &&\n this.filterCatalog(catalog).includes(host) &&\n this.filterCluster(cluster).includes(host) &&\n this.filterLocal(local).includes(host) &&\n this.filterPriority(priority).includes(host) &&\n this.filterService(service).includes(host) &&\n this.filterUrl(url).includes(host)\n );\n }\n\n /**\n * Load a formatted array of {@link ServiceHost} constructor parameter\n * transfer objects as instances of {@link ServiceHost} class objects to the\n * {@link ServiceRegistry#hosts} array.\n *\n * @public\n * @memberof ServiceRegistry\n * @param {Array} hosts\n * @returns {this}\n */\n load(hosts = []) {\n // Validate that the provided hosts are eligible to be loaded.\n const validHosts = hosts.filter(\n (host) =>\n !!ServiceRegistry.mapCatalogName({\n id: host.catalog,\n type: SERVICE_CATALOGS_ENUM_TYPES.STRING,\n })\n );\n\n // Load the eligible hosts.\n this.hosts.push(...validHosts.map((loadableHost) => new ServiceHost(loadableHost)));\n\n return this;\n }\n\n /**\n * Mark a collection of {@link ServiceHost} class objects from the\n * {@link ServiceRegistry#hosts} array as replaced based on the provided\n * {@link HostFilter}.\n *\n * @public\n * @memberof ServiceRegistry\n * @param {HostFilter} filter - The inclusive filter to mark replaced.\n * @returns {Array} - The {@link ServiceHost}s marked replaced.\n */\n replaced(filter) {\n // Collect a list of hosts to mark as replaced based on the provided filter.\n const replacing = this.find(filter);\n\n // Mark the hosts from the array as replaced.\n replacing.forEach((host) => {\n host.setStatus({replaced: true});\n });\n\n // Return the marked hosts.\n return replacing;\n }\n\n /**\n * Reset the failed status of a collection of {@link ServiceHost} class\n * objects from the {@link ServiceRegistry#hosts} array based on the provided\n * {@link HostFilter}.\n *\n * @public\n * @memberof ServiceRegistry\n * @param {HostFilter} filter - The inclusive filter of hosts to reset.\n * @returns {Array} - The {@link ServiceHost}s that reset.\n */\n reset(filter) {\n // Collect a list of hosts to mark as replaced based on the provided filter.\n const resetting = this.find(filter);\n\n // Mark the hosts from the array as replaced.\n resetting.forEach((host) => {\n host.setStatus({failed: false});\n });\n\n // Return the marked hosts.\n return resetting;\n }\n\n /**\n * Convert a {@link SERVICE_CATALOGS} identifier or value to its associated\n * idenfier or value.\n *\n * @public\n * @static\n * @memberof ServiceRegistry\n * @param {Object} pto - The parameter transfer object.\n * @property {string | number} pto.id - The identifier to convert in the enum.\n * @property {SERVICE_CATALOGS_ENUM_TYPES} pto.type - The desired output.\n * @returns {string|number} - The matching enum value or index.\n */\n static mapCatalogName({id, type}) {\n // Validate that the id is a number.\n if (typeof id === 'number') {\n // Validate that the desired type is a number.\n if (type === SERVICE_CATALOGS_ENUM_TYPES.NUMBER) {\n return SERVICE_CATALOGS[id] !== undefined ? id : undefined;\n }\n\n // Validate that the desired type is a string.\n if (type === SERVICE_CATALOGS_ENUM_TYPES.STRING) {\n return SERVICE_CATALOGS[id];\n }\n }\n\n // Validate that the id is a string.\n if (typeof id === 'string') {\n // Validate that the desired type is a string.\n if (type === SERVICE_CATALOGS_ENUM_TYPES.STRING) {\n return SERVICE_CATALOGS.includes(id) ? id : undefined;\n }\n\n // Validate that the desired type is a number.\n if (type === SERVICE_CATALOGS_ENUM_TYPES.NUMBER) {\n return SERVICE_CATALOGS.includes(id) ? SERVICE_CATALOGS.indexOf(id) : undefined;\n }\n }\n\n return undefined;\n }\n\n /**\n * Generate a formatted array based on the object received from the **U2C**\n * service for usage in the {@link ServiceRegistry#load} method.\n *\n * @public\n * @static\n * @memberof ServiceRegistry\n * @param {MapRemoteCatalogPTO} pto - The parameter transfer object.\n * @throws - If the target catalog does not exist.\n * @returns {Array}\n */\n static mapRemoteCatalog({catalog, hostCatalog, serviceLinks}) {\n // Collect the service catalog name if needed.\n const catalogIndex = ServiceRegistry.mapCatalogName({\n id: catalog,\n type: SERVICE_CATALOGS_ENUM_TYPES.STRING,\n });\n\n // Validate that the target catalog exists.\n if (!SERVICE_CATALOGS.includes(catalogIndex)) {\n throw new Error(`service-catalogs: '${catalog}' is not a valid catalog`);\n }\n\n // Map the remote catalog to a mountable host array.\n return Object.keys(hostCatalog).reduce((output, key) => {\n output.push(\n ...hostCatalog[key].map((host) => ({\n catalog: catalogIndex,\n defaultUri: serviceLinks[host.id.split(':')[3]],\n hostGroup: key,\n id: host.id,\n priority: host.priority,\n uri: host.host,\n }))\n );\n\n return output;\n }, []);\n }\n}\n","import {SERVICE_CATALOGS} from './constants';\n\n/**\n * The state of a specific catalog to be used by {@link ServiceState}.\n *\n * @typedef {Record} CatalogState\n * @property {boolean} CatalogState.collecting - If the catalog is collecting.\n * @property {boolean} CatalogState.ready - If the catalog is ready.\n */\n\n/**\n * @class\n * @classdesc - Manages the state of the service catalogs for a webex instance.\n */\nexport default class ServiceState {\n /**\n * Generate a new {@link ServiceState}.\n *\n * @public\n * @constructor\n * @memberof ServiceState\n */\n constructor() {\n // Iterate over the possible catalog names and generate their states.\n SERVICE_CATALOGS.forEach((catalog) => {\n this[catalog] = ServiceState.generateCatalogState();\n });\n }\n\n /**\n * Set a catalog to be collecting or not.\n *\n * @public\n * @memberof ServiceState\n * @param {string} catalog - Catalog to target.\n * @param {boolean} collecting - If the target is collecting or not.\n * @returns {undefined}\n */\n setCollecting(catalog, collecting) {\n // Validate that the catalog state exists.\n if (this[catalog]) {\n // Set the 'collecting' status of the catalog state.\n this[catalog].collecting = collecting;\n }\n }\n\n /**\n * Set a catalog to be ready or not.\n *\n * @public\n * @memberof ServiceState\n * @param {string} catalog - Catalog to target.\n * @param {boolean} ready - If the target is ready or not.\n * @returns {undefined}\n */\n setReady(catalog, ready) {\n // Validate that the catalog state exists.\n if (this[catalog]) {\n // Set the 'ready' status of the catalog state.\n this[catalog].ready = ready;\n }\n }\n\n /**\n * Generate a {@link CatalogState}.\n *\n * @public\n * @static\n * @memberof ServiceState\n * @returns {CatalogState} - The generated {@link CatalogState}.\n */\n static generateCatalogState() {\n return {\n collecting: false,\n ready: false,\n };\n }\n}\n","export default {\n hydra: 'https://api-usgov.webex.com/v1',\n u2c: 'https://u2c.gov.ciscospark.com/u2c/api/v1',\n};\n","import sha256 from 'crypto-js/sha256';\n\nimport {union, forEach} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from './metrics';\nimport ServiceCatalog from './service-catalog';\nimport ServiceRegistry from './service-registry';\nimport ServiceState from './service-state';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from './constants';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n /**\n * The {@link WeakMap} of {@link ServiceRegistry} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap}\n * @private\n * @memberof Services\n */\n registries: new WeakMap(),\n\n /**\n * The {@link WeakMap} of {@link ServiceState} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap}\n * @private\n * @memberof Services\n */\n states: new WeakMap(),\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _serviceUrls: null,\n\n _hostCatalog: null,\n\n /**\n * Get the registry associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceRegistry} - The associated {@link ServiceRegistry}.\n */\n getRegistry() {\n return this.registries.get(this.webex);\n },\n\n /**\n * Get the state associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceState} - The associated {@link ServiceState}.\n */\n getState() {\n return this.states.get(this.webex);\n },\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {ServiceCatalog}\n */\n _getCatalog() {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {boolean} [priorityHost]\n * @param {string} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name, priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.get(name, priorityHost, serviceGroup);\n },\n\n /**\n * Determine if the catalog contains a specific service\n *\n * @param {string} serviceName - The service name to validate.\n * @returns {boolean} - True if the service exists.\n */\n hasService(serviceName) {\n return !!this.get(serviceName);\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains() {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Generate a service catalog as an object from\n * the associated instance catalog.\n * @param {boolean} [priorityHost] - use highest priority host if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record}\n */\n list(priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.list(priorityHost, serviceGroup);\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const catalog = this._getCatalog();\n\n return catalog.markFailedUrl(url, noPriorityHosts);\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {Object} serviceUrls\n * @returns {void}\n */\n _updateServiceUrls(serviceUrls) {\n this._serviceUrls = {...this._serviceUrls, ...serviceUrls};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Object} hostCatalog\n * @returns {void}\n */\n _updateHostCatalog(hostCatalog) {\n this._hostCatalog = {...this._hostCatalog, ...hostCatalog};\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise}\n */\n updateServices({from, query, token, forceRefresh} = {}) {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n\n // confirm catalog update for group is not in progress.\n if (catalog.status[serviceGroup].collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap) => {\n catalog.updateServiceUrls(serviceGroup, serviceHostMap);\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker', true);\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n return this.request({\n uri: 'https://ds.ciscospark.com/v1/region',\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request to the **License** service.\n return this.request({\n service: 'license',\n resource: 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise}\n */\n collectPreauthCatalog(query, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise}\n */\n collectSigninCatalog({email, token, forceRefresh} = {}) {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig() {\n const {idbroker, identity} = this.list(true);\n\n if (idbroker && identity) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbroker.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbroker.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identity.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra timeout of 60 seconds.\n * @param {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise}\n */\n waitForCatalog(serviceGroup, timeout) {\n const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise} - Resolves to the priority host of a service.\n */\n waitForService({name, timeout = 5, url}) {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n return Promise.resolve(this._serviceUrls[name]);\n }\n\n const priorityUrl = this.get(name, true);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name, true);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * catalog endpoint.\n * @param {object} serviceHostmap\n * @returns {object}\n */\n _formatReceivedHostmap(serviceHostmap) {\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n const extractId = (entry) => entry.id.split(':')[3];\n\n const formattedHostmap = [];\n\n // for each of the services in the serviceLinks, find the matching host in the catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((serviceName) => {\n const serviceUrl = serviceHostmap.serviceLinks[serviceName];\n\n let host;\n try {\n host = new URL(serviceUrl).host;\n } catch (e) {\n return;\n }\n\n const matchingCatalogEntry = serviceHostmap.hostCatalog[host];\n\n const formattedHost = {\n name: serviceName,\n defaultUrl: serviceUrl,\n defaultHost: host,\n hosts: [],\n };\n\n formattedHostmap.push(formattedHost);\n\n // If the catalog does not have any hosts we will be unable to find the service ID\n // so can't search for other hosts\n if (!matchingCatalogEntry || !matchingCatalogEntry[0]) {\n return;\n }\n\n const serviceId = extractId(matchingCatalogEntry[0]);\n\n forEach(matchingCatalogEntry, (entry) => {\n // The ids for all hosts within a hostCatalog entry should be the same\n // but for safety, only add host entries that have the same id as the first one\n if (extractId(entry) === serviceId) {\n formattedHost.hosts.push({\n ...entry,\n homeCluster: true,\n });\n }\n });\n\n const otherHosts = [];\n\n // find the services in the host catalog that have the same id\n // and add them to the otherHosts\n forEach(serviceHostmap.hostCatalog, (entry) => {\n // exclude the matching catalog entry as we have already added that\n if (entry === matchingCatalogEntry) {\n return;\n }\n\n forEach(entry, (entryHost) => {\n // only add hosts that have the correct id\n if (extractId(entryHost) === serviceId) {\n otherHosts.push({\n ...entryHost,\n homeCluster: false,\n });\n }\n });\n });\n\n formattedHost.hosts.push(...otherHosts);\n });\n\n // update all the service urls in the host catalog\n\n this._updateServiceUrls(serviceHostmap.serviceLinks);\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string} - Cluster ID of url provided\n */\n getClusterId(url) {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {boolean} [params.priorityHost] - returns priority host url if true\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params) {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'} = {}) {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The priority url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = '') {\n const service = this._getCatalog().findServiceUrlFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n return {\n name: service.name,\n priorityUrl: service.get(true),\n defaultUrl: service.get(),\n };\n },\n\n /**\n * Verify that a provided url exists in the service\n * catalog.\n * @param {string} url\n * @returns {boolean} - true if exists, false otherwise\n */\n isServiceUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findServiceUrlFromUrl(url);\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '') {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise}\n */\n _fetchNewServiceHostmap({from, query, token, forceRefresh} = {}) {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...query, format: 'hostmap'};\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig() {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) => ({\n name: key,\n defaultUrl: services.discovery[key],\n }));\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceUrls('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) => ({\n name: key,\n defaultUrl: services.override[key],\n }));\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceUrls('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n *\n * @returns {Promise} - Errors if the token is unavailable.\n */\n initServiceCatalogs() {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n return this.updateServices().catch(() =>\n this.logger.warn('services: cannot retrieve postauth catalog')\n );\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize() {\n const catalog = new ServiceCatalog();\n const registry = new ServiceRegistry();\n const state = new ServiceState();\n\n this._catalogs.set(this.webex, catalog);\n this.registries.set(this.webex, registry);\n this.states.set(this.webex, state);\n\n // Listen for configuration changes once.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n });\n\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', () => {\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n this.initServiceCatalogs()\n .then(() => {\n catalog.isReady = true;\n })\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\nimport WebexHttpError from '../../webex-http-error';\n/**\n * Changes server url when it fails\n */\nexport default class ServerErrorInterceptor extends Interceptor {\n /**\n * @returns {HAMessagingInterceptor}\n */\n static create() {\n // eslint-disable-next-line no-invalid-this\n return new ServerErrorInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Object} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n if (\n (reason instanceof WebexHttpError.InternalServerError ||\n reason instanceof WebexHttpError.BadGateway ||\n reason instanceof WebexHttpError.ServiceUnavailable) &&\n options.uri\n ) {\n const feature = this.webex.internal.device.features.developer.get('web-high-availability');\n\n if (feature && feature.value) {\n this.webex.internal.metrics.submitClientMetrics('web-ha', {\n fields: {success: false},\n tags: {action: 'failed', error: reason.message, url: options.uri},\n });\n\n return Promise.resolve(this.webex.internal.services.markFailedUrl(options.uri)).then(() =>\n Promise.reject(reason)\n );\n }\n }\n\n return Promise.reject(reason);\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n/**\n * @class\n */\nexport default class ServiceInterceptor extends Interceptor {\n /**\n * @returns {ServiceInterceptor}\n */\n static create() {\n /* eslint no-invalid-this: [0] */\n return new ServiceInterceptor({webex: this});\n }\n\n /* eslint-disable no-param-reassign */\n /**\n * @see Interceptor#onRequest\n * @param {Object} options - The request PTO.\n * @returns {Object} - The mutated request PTO.\n */\n onRequest(options) {\n // Validate that the PTO includes a uri property.\n if (options.uri) {\n return options;\n }\n\n // Normalize and validate the PTO.\n this.normalizeOptions(options);\n this.validateOptions(options);\n\n // Destructure commonly referenced namespaces.\n const {services} = this.webex.internal;\n const {service, resource, waitForServiceTimeout} = options;\n\n // Attempt to collect the service url.\n return services\n .waitForService({name: service, timeout: waitForServiceTimeout})\n .then((serviceUrl) => {\n // Generate the combined service url and resource.\n options.uri = this.generateUri(serviceUrl, resource);\n\n return options;\n })\n .catch(() =>\n Promise.reject(new Error(`service-interceptor: '${service}' is not a known service`))\n );\n }\n\n /* eslint-disable class-methods-use-this */\n /**\n * Generate a usable request uri string from a service url and a resouce.\n *\n * @param {string} serviceUrl - The service url.\n * @param {string} [resource] - The resouce to be appended to the service url.\n * @returns {string} - The combined service url and resource.\n */\n generateUri(serviceUrl, resource = '') {\n const formattedService = serviceUrl.replace(trailingSlashes, '');\n const formattedResource = resource.replace(trailingSlashes, '');\n\n return `${formattedService}/${formattedResource}`;\n }\n\n /**\n * Normalizes request options relative to service identification.\n *\n * @param {Object} options - The request PTO.\n * @returns {Object} - The mutated request PTO.\n */\n normalizeOptions(options) {\n // Validate if the api property is used.\n if (options.api) {\n // Assign the service property the value of the api property if necessary.\n options.service = options.service || options.api;\n delete options.api;\n }\n }\n\n /**\n * Validates that the appropriate options for this interceptor are present.\n *\n * @param {Object} options - The request PTO.\n * @returns {Object} - The mutated request PTO.\n */\n validateOptions(options) {\n if (!options.resource) {\n throw new Error('a `resource` parameter is required');\n }\n\n if (!options.service) {\n throw new Error(\"a valid 'service' parameter is required\");\n }\n }\n /* eslint-enable class-methods-use-this, no-param-reassign */\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {registerInternalPlugin} from '../../webex-core';\n\nimport * as constants from './constants';\nimport Services from './services';\nimport ServerErrorInterceptor from './interceptors/server-error';\nimport ServiceInterceptor from './interceptors/service';\n\nregisterInternalPlugin('services', Services, {\n interceptors: {\n ServiceInterceptor: ServiceInterceptor.create,\n ServerErrorInterceptor: ServerErrorInterceptor.create,\n },\n});\n\nexport {constants};\nexport {default as ServiceInterceptor} from './interceptors/service';\nexport {default as ServerErrorInterceptor} from './interceptors/server-error';\nexport {default as Services} from './services';\nexport {default as ServiceCatalog} from './service-catalog';\nexport {default as ServiceRegistry} from './service-registry';\nexport {default as ServiceState} from './service-state';\nexport {default as ServiceHost} from './service-host';\nexport {default as ServiceUrl} from './service-url';\n","import {readonly} from 'core-decorators';\nimport AmpEvents from 'ampersand-events';\n\n// hold onto weak references to parent' Webexs to help avoid retain cycles\nconst webexs = new WeakMap();\n\n/**\n * Base plugin class. Doesn't depend on Ampersand State\n */\nexport default class StatelessWebexPlugin {\n /**\n * The config for this plugin's namespace. If no namespace has been set\n * returns all of webex's config.\n * @type {Object}\n */\n get config() {\n let namespace = this.getNamespace ? this.getNamespace() : this.namespace;\n\n if (namespace) {\n namespace = namespace.toLowerCase();\n\n return this.webex.config[namespace];\n }\n\n return this.webex.config;\n }\n\n /**\n * A reference to the webex logger.\n * @type {Logger}\n */\n get logger() {\n return this.webex.logger;\n }\n\n /**\n * A reference to the main sdk instance\n * @type {WebexCore}\n */\n get webex() {\n return webexs.get(this);\n }\n\n @readonly\n /**\n * Mostly here for compatibility with legacy WebexPlugins.\n * StatelessWebexPlugins will never have a state other than ready, however, if\n * we implement stateful WebexPlugins as es6 classes, they may have the option\n * to have ready be false\n * @private\n * @type {boolean}\n */\n ready = true;\n\n /**\n * Constructor. One of attrs.webex or options.parent is required\n * @param {Object} attrs\n * @param {WebexCore} [attrs.webex]\n * @param {Object} options\n * @param {WebexCore} [options.parent]\n */\n constructor(attrs = {}, options = {}) {\n let webex = attrs.webex || options.parent;\n\n if (!webex) {\n throw new Error(\n 'One of `attrs.webex` or `options.parent` must be supplied when initializing a StatelessWebexPlugin'\n );\n }\n\n while (webex.parent || webex.collection) {\n webex = webex.parent || webex.collection;\n }\n webexs.set(this, webex);\n }\n\n /**\n * Proxies to {@link WebexPlugin#webex}'s `request()` method.\n * @see WebexCore#request\n * @param {Array} args\n * @returns {Promise}\n */\n request(...args) {\n return this.webex.request(...args);\n }\n\n /**\n * Proxies to {@link WebexPlugin#webex}'s `upload()` method.\n * @see WebexCore#upload\n * @param {Array} args\n * @returns {Promise}\n */\n upload(...args) {\n return this.webex.upload(...args);\n }\n}\n\nObject.assign(StatelessWebexPlugin.prototype, AmpEvents);\n","import _Object$defineProperty from \"core-js/library/fn/object/define-property.js\";\nexport default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n _Object$defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {cappedDebounce, Defer, tap} from '@webex/common';\n\nimport WebexPlugin from './webex-plugin';\nimport WebexHttpError from './webex-http-error';\n\n/**\n * Base class for coalescing requests to batched APIs\n * @class Batcher\n */\nconst Batcher = WebexPlugin.extend({\n session: {\n deferreds: {\n type: 'object',\n default() {\n return new Map();\n },\n },\n queue: {\n type: 'array',\n default() {\n return [];\n },\n },\n },\n\n derived: {\n bounce: {\n fn() {\n return cappedDebounce((...args) => this.executeQueue(...args), this.config.batcherWait, {\n maxCalls: this.config.batcherMaxCalls,\n maxWait: this.config.batcherMaxWait,\n });\n },\n },\n },\n\n /**\n * Requests an item from a batched API\n * @param {Object} item\n * @returns {Promise}\n */\n request(item) {\n // So far, I can't find a way to avoid three layers of nesting here.\n /* eslint max-nested-callbacks: [0] */\n const defer = new Defer();\n\n this.fingerprintRequest(item)\n .then((idx) => {\n if (this.deferreds.has(idx)) {\n defer.resolve(this.deferreds.get(idx).promise);\n\n return;\n }\n this.deferreds.set(idx, defer);\n this.prepareItem(item)\n .then((req) => {\n defer.promise = defer.promise\n .then(tap(() => this.deferreds.delete(idx)))\n .catch((reason) => {\n this.deferreds.delete(idx);\n\n return Promise.reject(reason);\n });\n\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n\n return defer.promise;\n },\n\n /**\n * Adds an item to the queue.\n * Intended to be overridden\n * @param {mixed} req\n * @returns {Promise}\n */\n enqueue(req) {\n this.queue.push(req);\n\n return Promise.resolve();\n },\n\n /**\n * Transform the item before adding it to the queue\n * Intended to be overridden\n * @param {mixed} item\n * @returns {Promise}\n */\n prepareItem(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Detaches the current queue, does any appropriate transforms, and submits it\n * to the API.\n * @returns {Promise}\n */\n executeQueue() {\n const queue = this.queue.splice(0, this.config.batcherMaxCalls);\n\n return new Promise((resolve) => {\n resolve(\n this.prepareRequest(queue)\n .then((payload) =>\n this.submitHttpRequest(payload).then((res) => this.handleHttpSuccess(res))\n )\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(\n queue.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\n );\n })\n );\n }).catch((reason) => {\n this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);\n\n return Promise.reject(reason);\n });\n },\n\n /**\n * Performs any final transforms on the queue before submitting it to the API\n * Intended to be overridden\n * @param {Object|Array} queue\n * @returns {Promise}\n */\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n\n /**\n * Submits the prepared request body to the API.\n * This method *must* be overridden\n * @param {Object} payload\n * @returns {Promise}\n */\n // eslint-disable-next-line no-unused-vars\n submitHttpRequest(payload) {\n throw new Error('request() must be implemented');\n },\n\n /**\n * Actions taken when the http request returns a success\n * Intended to be overridden\n * @param {Promise} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n ((res.body && res.body.items) || res.body).map((item) => this.acceptItem(item))\n );\n },\n\n /**\n * Actions taken when the http request returns a failure. Typically, this\n * means failing the entire queue, but could be overridden in some\n * implementations to e.g. reenqueue.\n * Intended to be overridden\n * @param {WebexHttpError} reason\n * @returns {Promise}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError) {\n if (has(reason, 'options.body.map')) {\n return Promise.all(\n reason.options.body.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\n );\n }\n }\n this.logger.error('http error handler called without a WebexHttpError object', reason);\n\n return Promise.reject(reason);\n },\n\n /**\n * Determines if the item succeeded or failed and delegates accordingly\n * @param {Object} item\n * @returns {Promise}\n */\n acceptItem(item) {\n return this.didItemFail(item).then((didFail) => {\n if (didFail) {\n return this.handleItemFailure(item);\n }\n\n return this.handleItemSuccess(item);\n });\n },\n\n /**\n * Indicates if the specified response item implies a success or a failure\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise}\n */\n // eslint-disable-next-line no-unused-vars\n didItemFail(item) {\n return Promise.resolve(false);\n },\n\n /**\n * Finds the Defer for the specified item and rejects its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(item);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item);\n });\n },\n\n /**\n * Returns the Deferred for the specified request item\n * @param {Object} item\n * @returns {Promise}\n */\n getDeferredForRequest(item) {\n return this.fingerprintRequest(item).then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Returns the Deferred for the specified response item\n * @param {Object} item\n * @returns {Promise}\n */\n getDeferredForResponse(item) {\n return this.fingerprintResponse(item).then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Generates a unique identifier for the item in a request payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintRequest(item) {\n throw new Error('fingerprintRequest() must be implemented');\n },\n\n /**\n * Generates a unique identifier for the item in a response payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintResponse(item) {\n throw new Error('fingerprintResponse() must be implemented');\n },\n});\n\nexport default Batcher;\n","/* eslint-disable no-constructor-return */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nconst itemsMap = new WeakMap();\nconst linksMap = new WeakMap();\nconst webexsMap = new WeakMap();\n\n/**\n * @class Page\n */\nexport default class Page {\n /**\n * @type {Array}\n */\n get items() {\n return itemsMap.get(this);\n }\n\n /**\n * @type {number}\n */\n get length() {\n return this.items.length;\n }\n\n /**\n * @private\n * @type {Object}\n */\n get links() {\n return linksMap.get(this);\n }\n\n /**\n * @private\n * @type {ProxyWebex}\n */\n get webex() {\n return webexsMap.get(this);\n }\n\n /**\n * @constructs {Page}\n * @param {HttpResponse} res\n * @param {ProxyWebex} webex\n * @returns {Page}\n */\n constructor(res, webex) {\n itemsMap.set(this, res.body.items);\n linksMap.set(this, Page.parseLinkHeaders(res.headers.link));\n webexsMap.set(this, webex);\n\n return this;\n }\n\n /**\n * Separate a single link header string into an actionable object\n * @param {string} linkHeaders\n * @private\n * @returns {Object}\n */\n static parseLinkHeaders(linkHeaders) {\n if (!linkHeaders) {\n return {};\n }\n\n linkHeaders = Array.isArray(linkHeaders) ? linkHeaders : [linkHeaders];\n\n return linkHeaders.reduce((links, linkHeader) => {\n linkHeader = linkHeader.split(';');\n const link = linkHeader[0].replace('<', '').replace('>', '');\n const rel = linkHeader[1].split('=')[1].replace(/\"/g, '');\n\n links[rel] = link;\n\n return links;\n }, {});\n }\n\n /**\n * Get next page\n * @returns {Function}\n */\n next() {\n return this.getLink('next');\n }\n\n /**\n * Indicates if there's another page\n * @returns {Boolean}\n */\n hasNext() {\n return this.hasLink('next');\n }\n\n /**\n * Get previous page\n * @returns {Page}\n */\n previous() {\n return this.getLink('previous');\n }\n\n /**\n * Indicates if there is a previous Page\n * @returns {Boolean}\n */\n hasPrevious() {\n return this.hasLink('previous');\n }\n\n /**\n * Retrieves the `Page` at url specified by `link`\n * @param {string} link Specifies which link header to return\n * @private\n * @returns {Promise}\n */\n getLink(link) {\n return this.webex\n .request({\n uri: this.links[link],\n })\n .then((res) => new Page(res, this.webex));\n }\n\n /**\n * Indicates if the specified link is in the link header\n * @param {string} link\n * @private\n * @returns {Boolean}\n */\n hasLink(link) {\n return Boolean(this.links[link]);\n }\n\n /**\n * Iterator\n * @returns {Object}\n */\n [Symbol.iterator]() {\n let i = -1;\n\n return {\n next: () => {\n i += 1;\n if (i < this.length) {\n return {\n value: this.items[i],\n };\n }\n\n return {done: true};\n },\n };\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport {NotFoundError} from '@webex/webex-core';\n\nconst namespaces = new WeakMap();\nconst loggers = new WeakMap();\n\n/**\n * localStorage adapter for webex-core storage layer\n */\nexport default class StorageAdapterLocalStorage {\n /**\n * @constructs {StorageAdapterLocalStorage}\n * @param {string} basekey localStorage key underwhich all namespaces will be\n * stored\n */\n constructor(basekey) {\n /**\n * localStorage binding\n */\n this.Bound = class {\n /**\n * @constructs {Bound}\n * @param {string} namespace\n * @param {Object} options\n */\n constructor(namespace, options) {\n namespaces.set(this, namespace);\n loggers.set(this, options.logger);\n }\n\n /**\n * @private\n * @returns {rawData}\n */\n _getRawData() {\n const rawData = localStorage.getItem(basekey);\n\n return rawData ? JSON.parse(rawData) : {};\n }\n\n /**\n * @private\n * @returns {mixed}\n */\n _load() {\n const allData = this._getRawData();\n\n return allData[namespaces.get(this)] || {};\n }\n\n /**\n * @param {Object} data\n * @private\n * @returns {undefined}\n */\n _save(data) {\n const allData = this._getRawData();\n\n allData[namespaces.get(this)] = data;\n\n localStorage.setItem(basekey, JSON.stringify(allData));\n }\n\n /**\n * Clears the localStorage\n * @param {string} key\n * @returns {Promise}\n */\n clear() {\n loggers.get(this).info('local-storage-store-adapter: clearing localStorage');\n\n return Promise.resolve(localStorage.removeItem(basekey));\n }\n\n /**\n * Removes the specified key\n * @param {string} key\n * @returns {Promise}\n */\n del(key) {\n return new Promise((resolve) => {\n loggers.get(this).info(`local-storage-store-adapter: deleting \\`${key}\\``);\n const data = this._load();\n\n Reflect.deleteProperty(data, key);\n this._save(data);\n resolve();\n });\n }\n\n /**\n * Retrieves the data at the specified key\n * @param {string} key\n * @returns {Promise}\n */\n get(key) {\n return new Promise((resolve, reject) => {\n loggers.get(this).debug(`local-storage-store-adapter: reading \\`${key}\\``);\n const data = this._load();\n const value = data[key];\n\n if (typeof value !== 'undefined') {\n return resolve(value);\n }\n\n return reject(new NotFoundError(`No value found for ${key}`));\n });\n }\n\n /**\n * Stores the specified value at the specified key\n * @param {string} key\n * @param {mixed} value\n * @returns {Promise}\n */\n put(key, value) {\n return new Promise((resolve) => {\n loggers.get(this).debug(`local-storage-store-adapter: writing \\`${key}\\``);\n const data = this._load();\n\n data[key] = value;\n this._save(data);\n resolve();\n });\n }\n };\n }\n\n /**\n * Returns an adapter bound to the specified namespace\n * @param {string} namespace\n * @param {Object} options\n * @returns {Promise}\n */\n bind(namespace, options) {\n options = options || {};\n if (!namespace) {\n return Promise.reject(new Error('`namespace` is required'));\n }\n\n if (!options.logger) {\n return Promise.reject(new Error('`options.logger` is required'));\n }\n\n options.logger.debug('local-storage-store-adapter: returning binding');\n\n return Promise.resolve(new this.Bound(namespace, options));\n }\n}\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {MemoryStoreAdapter} from '@webex/webex-core';\nimport LocalStorageStoreAdapter from '@webex/storage-adapter-local-storage';\n\nexport default {\n boundedAdapter: new LocalStorageStoreAdapter('webex'),\n unboundedAdapter: MemoryStoreAdapter,\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport storageConfig from './config-storage';\n\nexport default {\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n hydraServiceUrl: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n credentials: {\n clientType: 'confidential',\n },\n device: {\n validateDomains: true,\n ephemeral: true,\n },\n storage: {\n boundedAdapter: storageConfig,\n unboundedAdapter: storageConfig,\n },\n};\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* istanbul ignore else */\nif (!global._babelPolyfill) {\n /* eslint global-require: [0] */\n require('@babel/polyfill');\n}\n\nmodule.exports = require('./webex');\n\n/**\n * The date and time, specified in ISO 8601 extended offset date/time\n * format (e.g. `2015-10-18T14:26:16+00:00`).\n *\n * @typedef {string} isoDate\n */\n\n/**\n * An email address, as a string.\n * @typedef {string} email\n */\n","/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Note: this file is written using commonjs instead of import/export to\n// simplify consumption by those less familiar with the current state of\n// JavaScript modularization\n\n/* eslint camelcase: [0] */\n\nrequire('@webex/plugin-authorization');\n// explicitly load wdm, since we're relying on preDiscoveryServices and the\n// url interceptor\nrequire('@webex/internal-plugin-calendar');\nrequire('@webex/internal-plugin-device');\nrequire('@webex/internal-plugin-presence');\nrequire('@webex/internal-plugin-support');\nrequire('@webex/internal-plugin-llm');\nrequire('@webex/plugin-attachment-actions');\nrequire('@webex/plugin-device-manager');\nrequire('@webex/plugin-logger');\nrequire('@webex/plugin-meetings');\nrequire('@webex/plugin-messages');\nrequire('@webex/plugin-memberships');\nrequire('@webex/plugin-people');\nrequire('@webex/plugin-rooms');\nrequire('@webex/plugin-teams');\nrequire('@webex/plugin-team-memberships');\nrequire('@webex/plugin-webhooks');\n\nconst merge = require('lodash/merge');\nconst WebexCore = require('@webex/webex-core').default;\n\nconst config = require('./config');\n\n// documentation.js puts hashes in relative urls, so need to specify full urls\n// here\n/**\n * See {@link https://webex.github.io/webex-js-sdk/example/browsers|Browser Guide} and\n * {@link https://webex.github.io/webex-js-sdk/example/servers|Server Guide}\n * @see {@link /example/browsers|Browser Guide}\n * @see {@link /example/servers|Server Guide}\n * @class Webex\n */\nconst Webex = WebexCore.extend({\n webex: true,\n version: PACKAGE_VERSION,\n});\n\n/**\n * Create a new {@link Webex} instance\n *\n * @example\n * Create a new Webex instance configured for your OAuth client\n * const webex = Webex.init({\n * config: {\n * credentials: {\n * authorizationString: ``\n * }\n * }\n * });\n *\n * @example\n * Create a new Webex instance configured for a Bot\n * const webex = Webex.init({\n * credentials: ``\n * });\n *\n *\n * @param {Object} attrs\n * @param {Object} attrs.config (optional)\n * @memberof Webex\n * @returns {Webex}\n */\nWebex.init = function init(attrs = {}) {\n attrs.config = merge(\n {\n sdkType: 'webex',\n },\n config,\n attrs.config\n ); // eslint-disable-line no-param-reassign\n\n return new Webex(attrs);\n};\n\nmodule.exports = Webex;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar Backoff = require('./lib/backoff');\nvar ExponentialBackoffStrategy = require('./lib/strategy/exponential');\nvar FibonacciBackoffStrategy = require('./lib/strategy/fibonacci');\nvar FunctionCall = require('./lib/function_call.js');\n\nmodule.exports.Backoff = Backoff;\nmodule.exports.FunctionCall = FunctionCall;\nmodule.exports.FibonacciStrategy = FibonacciBackoffStrategy;\nmodule.exports.ExponentialStrategy = ExponentialBackoffStrategy;\n\n// Constructs a Fibonacci backoff.\nmodule.exports.fibonacci = function(options) {\n return new Backoff(new FibonacciBackoffStrategy(options));\n};\n\n// Constructs an exponential backoff.\nmodule.exports.exponential = function(options) {\n return new Backoff(new ExponentialBackoffStrategy(options));\n};\n\n// Constructs a FunctionCall for the given function and arguments.\nmodule.exports.call = function(fn, vargs, callback) {\n var args = Array.prototype.slice.call(arguments);\n fn = args[0];\n vargs = args.slice(1, args.length - 1);\n callback = args[args.length - 1];\n return new FunctionCall(fn, vargs, callback);\n};\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar precond = require('precond');\nvar util = require('util');\n\n// A class to hold the state of a backoff operation. Accepts a backoff strategy\n// to generate the backoff delays.\nfunction Backoff(backoffStrategy) {\n events.EventEmitter.call(this);\n\n this.backoffStrategy_ = backoffStrategy;\n this.maxNumberOfRetry_ = -1;\n this.backoffNumber_ = 0;\n this.backoffDelay_ = 0;\n this.timeoutID_ = -1;\n\n this.handlers = {\n backoff: this.onBackoff_.bind(this)\n };\n}\nutil.inherits(Backoff, events.EventEmitter);\n\n// Sets a limit, greater than 0, on the maximum number of backoffs. A 'fail'\n// event will be emitted when the limit is reached.\nBackoff.prototype.failAfter = function(maxNumberOfRetry) {\n precond.checkArgument(maxNumberOfRetry > 0,\n 'Expected a maximum number of retry greater than 0 but got %s.',\n maxNumberOfRetry);\n\n this.maxNumberOfRetry_ = maxNumberOfRetry;\n};\n\n// Starts a backoff operation. Accepts an optional parameter to let the\n// listeners know why the backoff operation was started.\nBackoff.prototype.backoff = function(err) {\n precond.checkState(this.timeoutID_ === -1, 'Backoff in progress.');\n\n if (this.backoffNumber_ === this.maxNumberOfRetry_) {\n this.emit('fail', err);\n this.reset();\n } else {\n this.backoffDelay_ = this.backoffStrategy_.next();\n this.timeoutID_ = setTimeout(this.handlers.backoff, this.backoffDelay_);\n this.emit('backoff', this.backoffNumber_, this.backoffDelay_, err);\n }\n};\n\n// Handles the backoff timeout completion.\nBackoff.prototype.onBackoff_ = function() {\n this.timeoutID_ = -1;\n this.emit('ready', this.backoffNumber_, this.backoffDelay_);\n this.backoffNumber_++;\n};\n\n// Stops any backoff operation and resets the backoff delay to its inital value.\nBackoff.prototype.reset = function() {\n this.backoffNumber_ = 0;\n this.backoffStrategy_.reset();\n clearTimeout(this.timeoutID_);\n this.timeoutID_ = -1;\n};\n\nmodule.exports = Backoff;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar precond = require('precond');\nvar util = require('util');\n\nvar Backoff = require('./backoff');\nvar FibonacciBackoffStrategy = require('./strategy/fibonacci');\n\n// Wraps a function to be called in a backoff loop.\nfunction FunctionCall(fn, args, callback) {\n events.EventEmitter.call(this);\n\n precond.checkIsFunction(fn, 'Expected fn to be a function.');\n precond.checkIsArray(args, 'Expected args to be an array.');\n precond.checkIsFunction(callback, 'Expected callback to be a function.');\n\n this.function_ = fn;\n this.arguments_ = args;\n this.callback_ = callback;\n this.lastResult_ = [];\n this.numRetries_ = 0;\n\n this.backoff_ = null;\n this.strategy_ = null;\n this.failAfter_ = -1;\n this.retryPredicate_ = FunctionCall.DEFAULT_RETRY_PREDICATE_;\n\n this.state_ = FunctionCall.State_.PENDING;\n}\nutil.inherits(FunctionCall, events.EventEmitter);\n\n// States in which the call can be.\nFunctionCall.State_ = {\n // Call isn't started yet.\n PENDING: 0,\n // Call is in progress.\n RUNNING: 1,\n // Call completed successfully which means that either the wrapped function\n // returned successfully or the maximal number of backoffs was reached.\n COMPLETED: 2,\n // The call was aborted.\n ABORTED: 3\n};\n\n// The default retry predicate which considers any error as retriable.\nFunctionCall.DEFAULT_RETRY_PREDICATE_ = function(err) {\n return true;\n};\n\n// Checks whether the call is pending.\nFunctionCall.prototype.isPending = function() {\n return this.state_ == FunctionCall.State_.PENDING;\n};\n\n// Checks whether the call is in progress.\nFunctionCall.prototype.isRunning = function() {\n return this.state_ == FunctionCall.State_.RUNNING;\n};\n\n// Checks whether the call is completed.\nFunctionCall.prototype.isCompleted = function() {\n return this.state_ == FunctionCall.State_.COMPLETED;\n};\n\n// Checks whether the call is aborted.\nFunctionCall.prototype.isAborted = function() {\n return this.state_ == FunctionCall.State_.ABORTED;\n};\n\n// Sets the backoff strategy to use. Can only be called before the call is\n// started otherwise an exception will be thrown.\nFunctionCall.prototype.setStrategy = function(strategy) {\n precond.checkState(this.isPending(), 'FunctionCall in progress.');\n this.strategy_ = strategy;\n return this; // Return this for chaining.\n};\n\n// Sets the predicate which will be used to determine whether the errors\n// returned from the wrapped function should be retried or not, e.g. a\n// network error would be retriable while a type error would stop the\n// function call.\nFunctionCall.prototype.retryIf = function(retryPredicate) {\n precond.checkState(this.isPending(), 'FunctionCall in progress.');\n this.retryPredicate_ = retryPredicate;\n return this;\n};\n\n// Returns all intermediary results returned by the wrapped function since\n// the initial call.\nFunctionCall.prototype.getLastResult = function() {\n return this.lastResult_.concat();\n};\n\n// Returns the number of times the wrapped function call was retried.\nFunctionCall.prototype.getNumRetries = function() {\n return this.numRetries_;\n};\n\n// Sets the backoff limit.\nFunctionCall.prototype.failAfter = function(maxNumberOfRetry) {\n precond.checkState(this.isPending(), 'FunctionCall in progress.');\n this.failAfter_ = maxNumberOfRetry;\n return this; // Return this for chaining.\n};\n\n// Aborts the call.\nFunctionCall.prototype.abort = function() {\n if (this.isCompleted() || this.isAborted()) {\n return;\n }\n\n if (this.isRunning()) {\n this.backoff_.reset();\n }\n\n this.state_ = FunctionCall.State_.ABORTED;\n this.lastResult_ = [new Error('Backoff aborted.')];\n this.emit('abort');\n this.doCallback_();\n};\n\n// Initiates the call to the wrapped function. Accepts an optional factory\n// function used to create the backoff instance; used when testing.\nFunctionCall.prototype.start = function(backoffFactory) {\n precond.checkState(!this.isAborted(), 'FunctionCall is aborted.');\n precond.checkState(this.isPending(), 'FunctionCall already started.');\n\n var strategy = this.strategy_ || new FibonacciBackoffStrategy();\n\n this.backoff_ = backoffFactory ?\n backoffFactory(strategy) :\n new Backoff(strategy);\n\n this.backoff_.on('ready', this.doCall_.bind(this, true /* isRetry */));\n this.backoff_.on('fail', this.doCallback_.bind(this));\n this.backoff_.on('backoff', this.handleBackoff_.bind(this));\n\n if (this.failAfter_ > 0) {\n this.backoff_.failAfter(this.failAfter_);\n }\n\n this.state_ = FunctionCall.State_.RUNNING;\n this.doCall_(false /* isRetry */);\n};\n\n// Calls the wrapped function.\nFunctionCall.prototype.doCall_ = function(isRetry) {\n if (isRetry) {\n this.numRetries_++;\n }\n var eventArgs = ['call'].concat(this.arguments_);\n events.EventEmitter.prototype.emit.apply(this, eventArgs);\n var callback = this.handleFunctionCallback_.bind(this);\n this.function_.apply(null, this.arguments_.concat(callback));\n};\n\n// Calls the wrapped function's callback with the last result returned by the\n// wrapped function.\nFunctionCall.prototype.doCallback_ = function() {\n this.callback_.apply(null, this.lastResult_);\n};\n\n// Handles wrapped function's completion. This method acts as a replacement\n// for the original callback function.\nFunctionCall.prototype.handleFunctionCallback_ = function() {\n if (this.isAborted()) {\n return;\n }\n\n var args = Array.prototype.slice.call(arguments);\n this.lastResult_ = args; // Save last callback arguments.\n events.EventEmitter.prototype.emit.apply(this, ['callback'].concat(args));\n\n var err = args[0];\n if (err && this.retryPredicate_(err)) {\n this.backoff_.backoff(err);\n } else {\n this.state_ = FunctionCall.State_.COMPLETED;\n this.doCallback_();\n }\n};\n\n// Handles the backoff event by reemitting it.\nFunctionCall.prototype.handleBackoff_ = function(number, delay, err) {\n this.emit('backoff', number, delay, err);\n};\n\nmodule.exports = FunctionCall;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar util = require('util');\nvar precond = require('precond');\n\nvar BackoffStrategy = require('./strategy');\n\n// Exponential backoff strategy.\nfunction ExponentialBackoffStrategy(options) {\n BackoffStrategy.call(this, options);\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n this.factor_ = ExponentialBackoffStrategy.DEFAULT_FACTOR;\n\n if (options && options.factor !== undefined) {\n precond.checkArgument(options.factor > 1,\n 'Exponential factor should be greater than 1 but got %s.',\n options.factor);\n this.factor_ = options.factor;\n }\n}\nutil.inherits(ExponentialBackoffStrategy, BackoffStrategy);\n\n// Default multiplication factor used to compute the next backoff delay from\n// the current one. The value can be overridden by passing a custom factor as\n// part of the options.\nExponentialBackoffStrategy.DEFAULT_FACTOR = 2;\n\nExponentialBackoffStrategy.prototype.next_ = function() {\n this.backoffDelay_ = Math.min(this.nextBackoffDelay_, this.getMaxDelay());\n this.nextBackoffDelay_ = this.backoffDelay_ * this.factor_;\n return this.backoffDelay_;\n};\n\nExponentialBackoffStrategy.prototype.reset_ = function() {\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n};\n\nmodule.exports = ExponentialBackoffStrategy;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar util = require('util');\n\nvar BackoffStrategy = require('./strategy');\n\n// Fibonacci backoff strategy.\nfunction FibonacciBackoffStrategy(options) {\n BackoffStrategy.call(this, options);\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n}\nutil.inherits(FibonacciBackoffStrategy, BackoffStrategy);\n\nFibonacciBackoffStrategy.prototype.next_ = function() {\n var backoffDelay = Math.min(this.nextBackoffDelay_, this.getMaxDelay());\n this.nextBackoffDelay_ += this.backoffDelay_;\n this.backoffDelay_ = backoffDelay;\n return backoffDelay;\n};\n\nFibonacciBackoffStrategy.prototype.reset_ = function() {\n this.nextBackoffDelay_ = this.getInitialDelay();\n this.backoffDelay_ = 0;\n};\n\nmodule.exports = FibonacciBackoffStrategy;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar util = require('util');\n\nfunction isDef(value) {\n return value !== undefined && value !== null;\n}\n\n// Abstract class defining the skeleton for the backoff strategies. Accepts an\n// object holding the options for the backoff strategy:\n//\n// * `randomisationFactor`: The randomisation factor which must be between 0\n// and 1 where 1 equates to a randomization factor of 100% and 0 to no\n// randomization.\n// * `initialDelay`: The backoff initial delay in milliseconds.\n// * `maxDelay`: The backoff maximal delay in milliseconds.\nfunction BackoffStrategy(options) {\n options = options || {};\n\n if (isDef(options.initialDelay) && options.initialDelay < 1) {\n throw new Error('The initial timeout must be greater than 0.');\n } else if (isDef(options.maxDelay) && options.maxDelay < 1) {\n throw new Error('The maximal timeout must be greater than 0.');\n }\n\n this.initialDelay_ = options.initialDelay || 100;\n this.maxDelay_ = options.maxDelay || 10000;\n\n if (this.maxDelay_ <= this.initialDelay_) {\n throw new Error('The maximal backoff delay must be ' +\n 'greater than the initial backoff delay.');\n }\n\n if (isDef(options.randomisationFactor) &&\n (options.randomisationFactor < 0 || options.randomisationFactor > 1)) {\n throw new Error('The randomisation factor must be between 0 and 1.');\n }\n\n this.randomisationFactor_ = options.randomisationFactor || 0;\n}\n\n// Gets the maximal backoff delay.\nBackoffStrategy.prototype.getMaxDelay = function() {\n return this.maxDelay_;\n};\n\n// Gets the initial backoff delay.\nBackoffStrategy.prototype.getInitialDelay = function() {\n return this.initialDelay_;\n};\n\n// Template method that computes and returns the next backoff delay in\n// milliseconds.\nBackoffStrategy.prototype.next = function() {\n var backoffDelay = this.next_();\n var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_;\n var randomizedDelay = Math.round(backoffDelay * randomisationMultiple);\n return randomizedDelay;\n};\n\n// Computes and returns the next backoff delay. Intended to be overridden by\n// subclasses.\nBackoffStrategy.prototype.next_ = function() {\n throw new Error('BackoffStrategy.next_() unimplemented.');\n};\n\n// Template method that resets the backoff delay to its initial value.\nBackoffStrategy.prototype.reset = function() {\n this.reset_();\n};\n\n// Resets the backoff delay to its initial value. Intended to be overridden by\n// subclasses.\nBackoffStrategy.prototype.reset_ = function() {\n throw new Error('BackoffStrategy.reset_() unimplemented.');\n};\n\nmodule.exports = BackoffStrategy;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar pad_string_1 = require(\"./pad-string\");\nfunction encode(input, encoding) {\n if (encoding === void 0) { encoding = \"utf8\"; }\n if (Buffer.isBuffer(input)) {\n return fromBase64(input.toString(\"base64\"));\n }\n return fromBase64(Buffer.from(input, encoding).toString(\"base64\"));\n}\n;\nfunction decode(base64url, encoding) {\n if (encoding === void 0) { encoding = \"utf8\"; }\n return Buffer.from(toBase64(base64url), \"base64\").toString(encoding);\n}\nfunction toBase64(base64url) {\n base64url = base64url.toString();\n return pad_string_1.default(base64url)\n .replace(/\\-/g, \"+\")\n .replace(/_/g, \"/\");\n}\nfunction fromBase64(base64) {\n return base64\n .replace(/=/g, \"\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\");\n}\nfunction toBuffer(base64url) {\n return Buffer.from(toBase64(base64url), \"base64\");\n}\nvar base64url = encode;\nbase64url.encode = encode;\nbase64url.decode = decode;\nbase64url.toBase64 = toBase64;\nbase64url.fromBase64 = fromBase64;\nbase64url.toBuffer = toBuffer;\nexports.default = base64url;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction padString(input) {\n var segmentLength = 4;\n var stringLength = input.length;\n var diff = stringLength % segmentLength;\n if (!diff) {\n return input;\n }\n var position = stringLength;\n var padLength = segmentLength - diff;\n var paddedStringLength = stringLength + padLength;\n var buffer = Buffer.alloc(paddedStringLength);\n buffer.write(input);\n while (padLength--) {\n buffer.write(\"=\", position++);\n }\n return buffer.toString();\n}\nexports.default = padString;\n","module.exports = require('./dist/base64url').default;\nmodule.exports.default = module.exports;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]1?i-1:0),a=1;a0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})}));","(function () {\n \"use strict\";\n\n function btoa(str) {\n var buffer;\n\n if (str instanceof Buffer) {\n buffer = str;\n } else {\n buffer = Buffer.from(str.toString(), 'binary');\n }\n\n return buffer.toString('base64');\n }\n\n module.exports = btoa;\n}());\n","/*jshint node:true */\n'use strict';\nvar Buffer = require('buffer').Buffer; // browserify\nvar SlowBuffer = require('buffer').SlowBuffer;\n\nmodule.exports = bufferEq;\n\nfunction bufferEq(a, b) {\n\n // shortcutting on type is necessary for correctness\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n return false;\n }\n\n // buffer sizes should be well-known information, so despite this\n // shortcutting, it doesn't leak any information about the *contents* of the\n // buffers.\n if (a.length !== b.length) {\n return false;\n }\n\n var c = 0;\n for (var i = 0; i < a.length; i++) {\n /*jshint bitwise:false */\n c |= a[i] ^ b[i]; // XOR\n }\n return c === 0;\n}\n\nbufferEq.install = function() {\n Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) {\n return bufferEq(this, that);\n };\n};\n\nvar origBufEqual = Buffer.prototype.equal;\nvar origSlowBufEqual = SlowBuffer.prototype.equal;\nbufferEq.restore = function() {\n Buffer.prototype.equal = origBufEqual;\n SlowBuffer.prototype.equal = origSlowBufEqual;\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","import { decorate, createDefaultSetter } from './private/utils';\nvar defineProperty = Object.defineProperty;\n\n\nfunction handleDescriptor(target, key, descriptor) {\n var configurable = descriptor.configurable,\n enumerable = descriptor.enumerable,\n initializer = descriptor.initializer,\n value = descriptor.value;\n\n return {\n configurable: configurable,\n enumerable: enumerable,\n\n get: function get() {\n // This happens if someone accesses the\n // property directly on the prototype\n if (this === target) {\n return;\n }\n\n var ret = initializer ? initializer.call(this) : value;\n\n defineProperty(this, key, {\n configurable: configurable,\n enumerable: enumerable,\n writable: true,\n value: ret\n });\n\n return ret;\n },\n\n\n set: createDefaultSetter(key)\n };\n}\n\nexport default function lazyInitialize() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _desc, _value, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n\nfunction _initDefineProp(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nfunction _initializerWarningHelper(descriptor, context) {\n throw new Error('Decorating class property failed. Please ensure that transform-class-properties is enabled.');\n}\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nimport lazyInitialize from '../lazy-initialize';\n\nvar defineProperty = Object.defineProperty,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,\n getOwnPropertyNames = Object.getOwnPropertyNames,\n getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\n\nexport function isDescriptor(desc) {\n if (!desc || !desc.hasOwnProperty) {\n return false;\n }\n\n var keys = ['value', 'initializer', 'get', 'set'];\n\n for (var i = 0, l = keys.length; i < l; i++) {\n if (desc.hasOwnProperty(keys[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function decorate(handleDescriptor, entryArgs) {\n if (isDescriptor(entryArgs[entryArgs.length - 1])) {\n return handleDescriptor.apply(undefined, _toConsumableArray(entryArgs).concat([[]]));\n } else {\n return function () {\n return handleDescriptor.apply(undefined, _toConsumableArray(Array.prototype.slice.call(arguments)).concat([entryArgs]));\n };\n }\n}\n\nvar Meta = (_class = function Meta() {\n _classCallCheck(this, Meta);\n\n _initDefineProp(this, 'debounceTimeoutIds', _descriptor, this);\n\n _initDefineProp(this, 'throttleTimeoutIds', _descriptor2, this);\n\n _initDefineProp(this, 'throttlePreviousTimestamps', _descriptor3, this);\n\n _initDefineProp(this, 'throttleTrailingArgs', _descriptor4, this);\n\n _initDefineProp(this, 'profileLastRan', _descriptor5, this);\n}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, 'debounceTimeoutIds', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return {};\n }\n}), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, 'throttleTimeoutIds', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return {};\n }\n}), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, 'throttlePreviousTimestamps', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return {};\n }\n}), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, 'throttleTrailingArgs', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return null;\n }\n}), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, 'profileLastRan', [lazyInitialize], {\n enumerable: true,\n initializer: function initializer() {\n return null;\n }\n})), _class);\n\n\nvar META_KEY = typeof Symbol === 'function' ? Symbol('__core_decorators__') : '__core_decorators__';\n\nexport function metaFor(obj) {\n if (obj.hasOwnProperty(META_KEY) === false) {\n defineProperty(obj, META_KEY, {\n // Defaults: NOT enumerable, configurable, or writable\n value: new Meta()\n });\n }\n\n return obj[META_KEY];\n}\n\nexport var getOwnKeys = getOwnPropertySymbols ? function (object) {\n return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n} : getOwnPropertyNames;\n\nexport function getOwnPropertyDescriptors(obj) {\n var descs = {};\n\n getOwnKeys(obj).forEach(function (key) {\n return descs[key] = getOwnPropertyDescriptor(obj, key);\n });\n\n return descs;\n}\n\nexport function createDefaultSetter(key) {\n return function set(newValue) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n // IS enumerable when reassigned by the outside word\n enumerable: true,\n value: newValue\n });\n\n return newValue;\n };\n}\n\nexport function bind(fn, context) {\n if (fn.bind) {\n return fn.bind(context);\n } else {\n return function __autobind__() {\n return fn.apply(context, arguments);\n };\n }\n}\n\nexport var warn = function () {\n if ((typeof console === 'undefined' ? 'undefined' : _typeof(console)) !== 'object' || !console || typeof console.warn !== 'function') {\n return function () {};\n } else {\n return bind(console.warn, console);\n }\n}();\n\nvar seenDeprecations = {};\nexport function internalDeprecation(msg) {\n if (seenDeprecations[msg] !== true) {\n seenDeprecations[msg] = true;\n warn('DEPRECATION: ' + msg);\n }\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { decorate } from './private/utils';\n\nvar GENERIC_FUNCTION_ERROR = '{child} does not properly override {parent}';\nvar FUNCTION_REGEXP = /^function ([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?(\\([^\\)]*\\))[\\s\\S]+$/;\n\nvar SyntaxErrorReporter = function () {\n _createClass(SyntaxErrorReporter, [{\n key: '_getTopic',\n value: function _getTopic(descriptor) {\n if (descriptor === undefined) {\n return null;\n }\n\n if ('value' in descriptor) {\n return descriptor.value;\n }\n\n if ('get' in descriptor) {\n return descriptor.get;\n }\n\n if ('set' in descriptor) {\n return descriptor.set;\n }\n }\n }, {\n key: '_extractTopicSignature',\n value: function _extractTopicSignature(topic) {\n switch (typeof topic === 'undefined' ? 'undefined' : _typeof(topic)) {\n case 'function':\n return this._extractFunctionSignature(topic);\n default:\n return this.key;\n }\n }\n }, {\n key: '_extractFunctionSignature',\n value: function _extractFunctionSignature(fn) {\n var _this = this;\n\n return fn.toString().replace(FUNCTION_REGEXP, function (match) {\n var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _this.key;\n var params = arguments[2];\n return name + params;\n });\n }\n }, {\n key: 'key',\n get: function get() {\n return this.childDescriptor.key;\n }\n }, {\n key: 'parentNotation',\n get: function get() {\n return this.parentKlass.constructor.name + '#' + this.parentPropertySignature;\n }\n }, {\n key: 'childNotation',\n get: function get() {\n return this.childKlass.constructor.name + '#' + this.childPropertySignature;\n }\n }, {\n key: 'parentTopic',\n get: function get() {\n return this._getTopic(this.parentDescriptor);\n }\n }, {\n key: 'childTopic',\n get: function get() {\n return this._getTopic(this.childDescriptor);\n }\n }, {\n key: 'parentPropertySignature',\n get: function get() {\n return this._extractTopicSignature(this.parentTopic);\n }\n }, {\n key: 'childPropertySignature',\n get: function get() {\n return this._extractTopicSignature(this.childTopic);\n }\n }]);\n\n function SyntaxErrorReporter(parentKlass, childKlass, parentDescriptor, childDescriptor) {\n _classCallCheck(this, SyntaxErrorReporter);\n\n this.parentKlass = parentKlass;\n this.childKlass = childKlass;\n this.parentDescriptor = parentDescriptor;\n this.childDescriptor = childDescriptor;\n }\n\n _createClass(SyntaxErrorReporter, [{\n key: 'assert',\n value: function assert(condition) {\n var msg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (condition !== true) {\n this.error(GENERIC_FUNCTION_ERROR + msg);\n }\n }\n }, {\n key: 'error',\n value: function error(msg) {\n var _this2 = this;\n\n msg = msg\n // Replace lazily, because they actually might not\n // be available in all cases\n .replace('{parent}', function (m) {\n return _this2.parentNotation;\n }).replace('{child}', function (m) {\n return _this2.childNotation;\n });\n throw new SyntaxError(msg);\n }\n }]);\n\n return SyntaxErrorReporter;\n}();\n\nfunction getDescriptorType(descriptor) {\n if (descriptor.hasOwnProperty('value')) {\n return 'data';\n }\n\n if (descriptor.hasOwnProperty('get') || descriptor.hasOwnProperty('set')) {\n return 'accessor';\n }\n\n // If none of them exist, browsers treat it as\n // a data descriptor with a value of `undefined`\n return 'data';\n}\n\nfunction checkFunctionSignatures(parent, child, reporter) {\n reporter.assert(parent.length === child.length);\n}\n\nfunction checkDataDescriptors(parent, child, reporter) {\n var parentValueType = _typeof(parent.value);\n var childValueType = _typeof(child.value);\n\n if (parentValueType === 'undefined' && childValueType === 'undefined') {\n // class properties can be any expression, which isn't ran until the\n // the instance is created, so we can't reliably get type information\n // for them yet (per spec). Perhaps when Babel includes flow-type info\n // in runtime? Tried regex solutions, but super hacky and only feasible\n // on primitives, which is confusing for usage...\n reporter.error('descriptor values are both undefined. (class properties are are not currently supported)\\'');\n }\n\n if (parentValueType !== childValueType) {\n var isFunctionOverUndefined = childValueType === 'function' && parentValueType === undefined;\n // Even though we don't support class properties, this\n // will still handle more than just functions, just in case.\n // Shadowing an undefined value is an error if the inherited\n // value was undefined (usually a class property, not a method)\n if (isFunctionOverUndefined || parentValueType !== undefined) {\n reporter.error('value types do not match. {parent} is \"' + parentValueType + '\", {child} is \"' + childValueType + '\"');\n }\n }\n\n // Switch, in preparation for supporting more types\n switch (childValueType) {\n case 'function':\n checkFunctionSignatures(parent.value, child.value, reporter);\n break;\n\n default:\n reporter.error('Unexpected error. Please file a bug with: {parent} is \"' + parentValueType + '\", {child} is \"' + childValueType + '\"');\n break;\n }\n}\n\nfunction checkAccessorDescriptors(parent, child, reporter) {\n var parentHasGetter = typeof parent.get === 'function';\n var childHasGetter = typeof child.get === 'function';\n var parentHasSetter = typeof parent.set === 'function';\n var childHasSetter = typeof child.set === 'function';\n\n if (parentHasGetter || childHasGetter) {\n if (!parentHasGetter && parentHasSetter) {\n reporter.error('{parent} is setter but {child} is getter');\n }\n\n if (!childHasGetter && childHasSetter) {\n reporter.error('{parent} is getter but {child} is setter');\n }\n\n checkFunctionSignatures(parent.get, child.get, reporter);\n }\n\n if (parentHasSetter || childHasSetter) {\n if (!parentHasSetter && parentHasGetter) {\n reporter.error('{parent} is getter but {child} is setter');\n }\n\n if (!childHasSetter && childHasGetter) {\n reporter.error('{parent} is setter but {child} is getter');\n }\n\n checkFunctionSignatures(parent.set, child.set, reporter);\n }\n}\n\nfunction checkDescriptors(parent, child, reporter) {\n var parentType = getDescriptorType(parent);\n var childType = getDescriptorType(child);\n\n if (parentType !== childType) {\n reporter.error('descriptor types do not match. {parent} is \"' + parentType + '\", {child} is \"' + childType + '\"');\n }\n\n switch (childType) {\n case 'data':\n checkDataDescriptors(parent, child, reporter);\n break;\n\n case 'accessor':\n checkAccessorDescriptors(parent, child, reporter);\n break;\n }\n}\n\nvar suggestionTransforms = [function (key) {\n return key.toLowerCase();\n}, function (key) {\n return key.toUpperCase();\n}, function (key) {\n return key + 's';\n}, function (key) {\n return key.slice(0, -1);\n}, function (key) {\n return key.slice(1, key.length);\n}];\n\nfunction findPossibleAlternatives(superKlass, key) {\n for (var i = 0, l = suggestionTransforms.length; i < l; i++) {\n var fn = suggestionTransforms[i];\n var suggestion = fn(key);\n\n if (suggestion in superKlass) {\n return suggestion;\n }\n }\n\n return null;\n}\n\nfunction handleDescriptor(target, key, descriptor) {\n descriptor.key = key;\n var superKlass = Object.getPrototypeOf(target);\n var superDescriptor = Object.getOwnPropertyDescriptor(superKlass, key);\n var reporter = new SyntaxErrorReporter(superKlass, target, superDescriptor, descriptor);\n\n if (superDescriptor === undefined) {\n var suggestedKey = findPossibleAlternatives(superKlass, key);\n var suggestion = suggestedKey ? '\\n\\n Did you mean \"' + suggestedKey + '\"?' : '';\n reporter.error('No descriptor matching {child} was found on the prototype chain.' + suggestion);\n }\n\n checkDescriptors(superDescriptor, descriptor, reporter);\n\n return descriptor;\n}\n\nexport default function override() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate, warn } from './private/utils';\n\nvar DEFAULT_MSG = 'This function will be removed in future versions.';\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n msg = _ref2$ === undefined ? DEFAULT_MSG : _ref2$,\n _ref2$2 = _ref2[1],\n options = _ref2$2 === undefined ? {} : _ref2$2;\n\n if (typeof descriptor.value !== 'function') {\n throw new SyntaxError('Only functions can be marked as deprecated');\n }\n\n var methodSignature = target.constructor.name + '#' + key;\n\n if (options.url) {\n msg += '\\n\\n See ' + options.url + ' for more details.\\n\\n';\n }\n\n return _extends({}, descriptor, {\n value: function deprecationWrapper() {\n warn('DEPRECATION ' + methodSignature + ': ' + msg);\n return descriptor.value.apply(this, arguments);\n }\n });\n}\n\nexport default function deprecate() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { decorate } from './private/utils';\n\nfunction suppressedWarningNoop() {\n // Warnings are currently suppressed via @suppressWarnings\n}\n\nfunction applyWithoutWarnings(context, fn, args) {\n if ((typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object') {\n var nativeWarn = console.warn;\n console.warn = suppressedWarningNoop;\n var ret = fn.apply(context, args);\n console.warn = nativeWarn;\n return ret;\n } else {\n return fn.apply(context, args);\n }\n}\n\nfunction handleDescriptor(target, key, descriptor) {\n return _extends({}, descriptor, {\n value: function suppressWarningsWrapper() {\n return applyWithoutWarnings(this, descriptor.value, arguments);\n }\n });\n}\n\nexport default function suppressWarnings() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { decorate, internalDeprecation } from './private/utils';\n\nfunction toObject(cache, value) {\n if (value === Object(value)) {\n return value;\n }\n return cache[value] || (cache[value] = {});\n}\n\nfunction applyAndCache(context, fn, args, cache, signature) {\n var ret = fn.apply(context, args);\n cache[signature] = ret;\n return ret;\n}\n\nfunction metaForDescriptor(descriptor) {\n var fn = void 0,\n wrapKey = void 0;\n\n // This is ugly code, but way faster than other\n // ways I tried that *looked* pretty\n\n if (descriptor.value) {\n fn = descriptor.value;\n wrapKey = 'value';\n } else if (descriptor.get) {\n fn = descriptor.get;\n wrapKey = 'get';\n } else if (descriptor.set) {\n fn = descriptor.set;\n wrapKey = 'set';\n }\n\n return { fn: fn, wrapKey: wrapKey };\n}\n\nfunction handleDescriptor(target, key, descriptor) {\n var _metaForDescriptor = metaForDescriptor(descriptor),\n fn = _metaForDescriptor.fn,\n wrapKey = _metaForDescriptor.wrapKey;\n\n var argumentCache = new WeakMap();\n var signatureCache = Object.create(null);\n var primativeRefCache = Object.create(null);\n var argumentIdCounter = 0;\n\n return _extends({}, descriptor, _defineProperty({}, wrapKey, function memoizeWrapper() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var signature = '0';\n\n for (var i = 0, l = args.length; i < l; i++) {\n var arg = args[i];\n var argRef = toObject(primativeRefCache, arg);\n var argKey = argumentCache.get(argRef);\n\n if (argKey === undefined) {\n argKey = ++argumentIdCounter;\n argumentCache.set(argRef, argKey);\n }\n\n signature += argKey;\n }\n\n return signatureCache[signature] || applyAndCache(this, fn, arguments, signatureCache, signature);\n }));\n}\n\nexport default function memoize() {\n internalDeprecation('@memoize is deprecated and will be removed shortly. Use @memoize from lodash-decorators.\\n\\n https://www.npmjs.com/package/lodash-decorators');\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return decorate(handleDescriptor, args);\n}","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nimport { decorate, createDefaultSetter, getOwnPropertyDescriptors, getOwnKeys, bind } from './private/utils';\nvar defineProperty = Object.defineProperty,\n getPrototypeOf = Object.getPrototypeOf;\n\n\nvar mapStore = void 0;\n\nfunction getBoundSuper(obj, fn) {\n if (typeof WeakMap === 'undefined') {\n throw new Error('Using @autobind on ' + fn.name + '() requires WeakMap support due to its use of super.' + fn.name + '()\\n See https://github.com/jayphelps/core-decorators.js/issues/20');\n }\n\n if (!mapStore) {\n mapStore = new WeakMap();\n }\n\n if (mapStore.has(obj) === false) {\n mapStore.set(obj, new WeakMap());\n }\n\n var superStore = mapStore.get(obj);\n\n if (superStore.has(fn) === false) {\n superStore.set(fn, bind(fn, obj));\n }\n\n return superStore.get(fn);\n}\n\nfunction autobindClass(klass) {\n var descs = getOwnPropertyDescriptors(klass.prototype);\n var keys = getOwnKeys(descs);\n\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n var desc = descs[key];\n\n if (typeof desc.value !== 'function' || key === 'constructor') {\n continue;\n }\n\n defineProperty(klass.prototype, key, autobindMethod(klass.prototype, key, desc));\n }\n}\n\nfunction autobindMethod(target, key, _ref) {\n var fn = _ref.value,\n configurable = _ref.configurable,\n enumerable = _ref.enumerable;\n\n if (typeof fn !== 'function') {\n throw new SyntaxError('@autobind can only be used on functions, not: ' + fn);\n }\n\n var constructor = target.constructor;\n\n\n return {\n configurable: configurable,\n enumerable: enumerable,\n\n get: function get() {\n // Class.prototype.key lookup\n // Someone accesses the property directly on the prototype on which it is\n // actually defined on, i.e. Class.prototype.hasOwnProperty(key)\n if (this === target) {\n return fn;\n }\n\n // Class.prototype.key lookup\n // Someone accesses the property directly on a prototype but it was found\n // up the chain, not defined directly on it\n // i.e. Class.prototype.hasOwnProperty(key) == false && key in Class.prototype\n if (this.constructor !== constructor && getPrototypeOf(this).constructor === constructor) {\n return fn;\n }\n\n // Autobound method calling super.sameMethod() which is also autobound and so on.\n if (this.constructor !== constructor && key in this.constructor.prototype) {\n return getBoundSuper(this, fn);\n }\n\n var boundFn = bind(fn, this);\n\n defineProperty(this, key, {\n configurable: true,\n writable: true,\n // NOT enumerable when it's a bound method\n enumerable: false,\n value: boundFn\n });\n\n return boundFn;\n },\n\n set: createDefaultSetter(key)\n };\n}\n\nfunction handle(args) {\n if (args.length === 1) {\n return autobindClass.apply(undefined, _toConsumableArray(args));\n } else {\n return autobindMethod.apply(undefined, _toConsumableArray(args));\n }\n}\n\nexport default function autobind() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 0) {\n return function () {\n return handle(arguments);\n };\n } else {\n return handle(args);\n }\n}","import { decorate } from './private/utils';\n\nfunction handleDescriptor(target, key, descriptor) {\n descriptor.writable = false;\n return descriptor;\n}\n\nexport default function readonly() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate, metaFor, internalDeprecation } from './private/utils';\n\nvar DEFAULT_TIMEOUT = 300;\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n wait = _ref2$ === undefined ? DEFAULT_TIMEOUT : _ref2$,\n _ref2$2 = _ref2[1],\n immediate = _ref2$2 === undefined ? false : _ref2$2;\n\n var callback = descriptor.value;\n\n if (typeof callback !== 'function') {\n throw new SyntaxError('Only functions can be debounced');\n }\n\n return _extends({}, descriptor, {\n value: function value() {\n var _this = this;\n\n var _metaFor = metaFor(this),\n debounceTimeoutIds = _metaFor.debounceTimeoutIds;\n\n var timeout = debounceTimeoutIds[key];\n var callNow = immediate && !timeout;\n var args = arguments;\n\n clearTimeout(timeout);\n\n debounceTimeoutIds[key] = setTimeout(function () {\n delete debounceTimeoutIds[key];\n if (!immediate) {\n callback.apply(_this, args);\n }\n }, wait);\n\n if (callNow) {\n callback.apply(this, args);\n }\n }\n });\n}\n\nexport default function debounce() {\n internalDeprecation('@debounce is deprecated and will be removed shortly. Use @debounce from lodash-decorators.\\n\\n https://www.npmjs.com/package/lodash-decorators');\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate, metaFor, internalDeprecation } from './private/utils';\n\nvar DEFAULT_TIMEOUT = 300;\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n wait = _ref2$ === undefined ? DEFAULT_TIMEOUT : _ref2$,\n _ref2$2 = _ref2[1],\n options = _ref2$2 === undefined ? {} : _ref2$2;\n\n var callback = descriptor.value;\n\n if (typeof callback !== 'function') {\n throw new SyntaxError('Only functions can be throttled');\n }\n\n if (options.leading !== false) {\n options.leading = true;\n }\n\n if (options.trailing !== false) {\n options.trailing = true;\n }\n\n return _extends({}, descriptor, {\n value: function value() {\n var _this = this;\n\n var meta = metaFor(this);\n var throttleTimeoutIds = meta.throttleTimeoutIds,\n throttlePreviousTimestamps = meta.throttlePreviousTimestamps;\n\n var timeout = throttleTimeoutIds[key];\n // last execute timestamp\n var previous = throttlePreviousTimestamps[key] || 0;\n var now = Date.now();\n\n if (options.trailing) {\n meta.throttleTrailingArgs = arguments;\n }\n\n // if first be called and disable the execution on the leading edge\n // set last execute timestamp to now\n if (!previous && options.leading === false) {\n previous = now;\n }\n\n var remaining = wait - (now - previous);\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n delete throttleTimeoutIds[key];\n throttlePreviousTimestamps[key] = now;\n callback.apply(this, arguments);\n } else if (!timeout && options.trailing) {\n throttleTimeoutIds[key] = setTimeout(function () {\n throttlePreviousTimestamps[key] = options.leading === false ? 0 : Date.now();\n delete throttleTimeoutIds[key];\n callback.apply(_this, meta.throttleTrailingArgs);\n // don't leak memory!\n meta.throttleTrailingArgs = null;\n }, remaining);\n }\n }\n });\n}\n\nexport default function throttle() {\n internalDeprecation('@throttle is deprecated and will be removed shortly. Use @throttle from lodash-decorators.\\n\\n https://www.npmjs.com/package/lodash-decorators');\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nimport { decorate as _decorate, createDefaultSetter } from './private/utils';\nvar defineProperty = Object.defineProperty;\n\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _toArray(_ref),\n decorator = _ref2[0],\n args = _ref2.slice(1);\n\n var configurable = descriptor.configurable,\n enumerable = descriptor.enumerable,\n writable = descriptor.writable;\n\n var originalGet = descriptor.get;\n var originalSet = descriptor.set;\n var originalValue = descriptor.value;\n var isGetter = !!originalGet;\n\n return {\n configurable: configurable,\n enumerable: enumerable,\n get: function get() {\n var fn = isGetter ? originalGet.call(this) : originalValue;\n var value = decorator.call.apply(decorator, [this, fn].concat(_toConsumableArray(args)));\n\n if (isGetter) {\n return value;\n } else {\n var desc = {\n configurable: configurable,\n enumerable: enumerable\n };\n\n desc.value = value;\n desc.writable = writable;\n\n defineProperty(this, key, desc);\n\n return value;\n }\n },\n\n set: isGetter ? originalSet : createDefaultSetter()\n };\n}\n\nexport default function decorate() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _decorate(handleDescriptor, args);\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { getOwnPropertyDescriptors, getOwnKeys, internalDeprecation } from './private/utils';\n\nvar defineProperty = Object.defineProperty,\n getPrototypeOf = Object.getPrototypeOf;\n\n\nfunction buggySymbol(symbol) {\n return Object.prototype.toString.call(symbol) === '[object Symbol]' && (typeof symbol === 'undefined' ? 'undefined' : _typeof(symbol)) === 'object';\n}\n\nfunction hasProperty(prop, obj) {\n // We have to traverse manually prototypes' chain for polyfilled ES6 Symbols\n // like \"in\" operator does.\n // I.e.: Babel 5 Symbol polyfill stores every created symbol in Object.prototype.\n // That's why we cannot use construction like \"prop in obj\" to check, if needed\n // prop actually exists in given object/prototypes' chain.\n if (buggySymbol(prop)) {\n do {\n if (obj === Object.prototype) {\n // Polyfill assigns undefined as value for stored symbol key.\n // We can assume in this special case if there is nothing assigned it doesn't exist.\n return typeof obj[prop] !== 'undefined';\n }\n if (obj.hasOwnProperty(prop)) {\n return true;\n }\n } while (obj = getPrototypeOf(obj));\n return false;\n } else {\n return prop in obj;\n }\n}\n\nfunction handleClass(target, mixins) {\n if (!mixins.length) {\n throw new SyntaxError('@mixin() class ' + target.name + ' requires at least one mixin as an argument');\n }\n\n for (var i = 0, l = mixins.length; i < l; i++) {\n var descs = getOwnPropertyDescriptors(mixins[i]);\n var keys = getOwnKeys(descs);\n\n for (var j = 0, k = keys.length; j < k; j++) {\n var key = keys[j];\n\n if (!hasProperty(key, target.prototype)) {\n defineProperty(target.prototype, key, descs[key]);\n }\n }\n }\n}\n\nexport default function mixin() {\n for (var _len = arguments.length, mixins = Array(_len), _key = 0; _key < _len; _key++) {\n mixins[_key] = arguments[_key];\n }\n\n internalDeprecation('@mixin is deprecated and will be removed shortly. Use @mixin from lodash-decorators.\\n\\n https://www.npmjs.com/package/lodash-decorators');\n\n if (typeof mixins[0] === 'function') {\n return handleClass(mixins[0], []);\n } else {\n return function (target) {\n return handleClass(target, mixins);\n };\n }\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate } from './private/utils';\n\nvar labels = {};\n\n// Exported for mocking in tests\nexport var defaultConsole = {\n time: console.time ? console.time.bind(console) : function (label) {\n labels[label] = new Date();\n },\n timeEnd: console.timeEnd ? console.timeEnd.bind(console) : function (label) {\n var timeNow = new Date();\n var timeTaken = timeNow - labels[label];\n delete labels[label];\n console.log(label + ': ' + timeTaken + 'ms');\n }\n};\n\nvar count = 0;\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n prefix = _ref2$ === undefined ? null : _ref2$,\n _ref2$2 = _ref2[1],\n console = _ref2$2 === undefined ? defaultConsole : _ref2$2;\n\n var fn = descriptor.value;\n\n if (prefix === null) {\n prefix = target.constructor.name + '.' + key;\n }\n\n if (typeof fn !== 'function') {\n throw new SyntaxError('@time can only be used on functions, not: ' + fn);\n }\n\n return _extends({}, descriptor, {\n value: function value() {\n var label = prefix + '-' + count;\n count++;\n console.time(label);\n\n try {\n return fn.apply(this, arguments);\n } finally {\n console.timeEnd(label);\n }\n }\n });\n}\n\nexport default function time() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport { decorate } from './private/utils';\nvar getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n\nfunction handleDescriptor(target, key, descriptor) {\n var superKlass = getPrototypeOf(target);\n var superDesc = getOwnPropertyDescriptor(superKlass, key);\n\n return _extends({}, superDesc, {\n value: descriptor.value,\n initializer: descriptor.initializer,\n get: descriptor.get || superDesc.get,\n set: descriptor.set || superDesc.set\n });\n}\n\nexport default function extendDescriptor() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nimport { decorate, metaFor, warn, bind } from './private/utils';\n\nvar oc = console;\n\n// Exported for mocking in tests\nexport var defaultConsole = {\n profile: console.profile ? bind(console.profile, console) : function () {},\n profileEnd: console.profileEnd ? bind(console.profileEnd, console) : function () {},\n warn: warn\n};\n\nfunction handleDescriptor(target, key, descriptor, _ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n _ref2$ = _ref2[0],\n prefix = _ref2$ === undefined ? null : _ref2$,\n _ref2$2 = _ref2[1],\n onceThrottleOrFunction = _ref2$2 === undefined ? false : _ref2$2,\n _ref2$3 = _ref2[2],\n console = _ref2$3 === undefined ? defaultConsole : _ref2$3;\n\n if (!profile.__enabled) {\n if (!profile.__warned) {\n console.warn('console.profile is not supported. All @profile decorators are disabled.');\n profile.__warned = true;\n }\n return descriptor;\n }\n\n var fn = descriptor.value;\n\n if (prefix === null) {\n prefix = target.constructor.name + '.' + key;\n }\n\n if (typeof fn !== 'function') {\n throw new SyntaxError('@profile can only be used on functions, not: ' + fn);\n }\n\n return _extends({}, descriptor, {\n value: function value() {\n var now = Date.now();\n var meta = metaFor(this);\n if (onceThrottleOrFunction === true && !meta.profileLastRan || onceThrottleOrFunction === false || typeof onceThrottleOrFunction === 'number' && now - meta.profileLastRan > onceThrottleOrFunction || typeof onceThrottleOrFunction === 'function' && onceThrottleOrFunction.apply(this, arguments)) {\n console.profile(prefix);\n meta.profileLastRan = now;\n }\n\n try {\n return fn.apply(this, arguments);\n } finally {\n console.profileEnd(prefix);\n }\n }\n });\n}\n\nexport default function profile() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return decorate(handleDescriptor, args);\n}\n\n// Only Chrome, Firefox, and Edge support profile.\n// Exposing properties for testing.\nprofile.__enabled = !!console.profile;\nprofile.__warned = false;","var defineProperty = Object.defineProperty,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n\nexport default function applyDecorators(Class, props) {\n var prototype = Class.prototype;\n\n\n for (var key in props) {\n var decorators = props[key];\n\n for (var i = 0, l = decorators.length; i < l; i++) {\n var decorator = decorators[i];\n\n defineProperty(prototype, key, decorator(prototype, key, getOwnPropertyDescriptor(prototype, key)));\n }\n }\n\n return Class;\n}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.enc.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.HmacSHA256;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","'use strict';\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true);\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar gopd = require('gopd');\n\n/** @type {(obj: Record, property: PropertyKey, value: unknown, nonEnumerable?: boolean | null, nonWritable?: boolean | null, nonConfigurable?: boolean | null, loose?: boolean) => void} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar getParamBytesForAlg = require('./param-bytes-for-alg');\n\nvar MAX_OCTET = 0x80,\n\tCLASS_UNIVERSAL = 0,\n\tPRIMITIVE_BIT = 0x20,\n\tTAG_SEQ = 0x10,\n\tTAG_INT = 0x02,\n\tENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6),\n\tENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6);\n\nfunction base64Url(base64) {\n\treturn base64\n\t\t.replace(/=/g, '')\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_');\n}\n\nfunction signatureAsBuffer(signature) {\n\tif (Buffer.isBuffer(signature)) {\n\t\treturn signature;\n\t} else if ('string' === typeof signature) {\n\t\treturn Buffer.from(signature, 'base64');\n\t}\n\n\tthrow new TypeError('ECDSA signature must be a Base64 string or a Buffer');\n}\n\nfunction derToJose(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\t// the DER encoded param should at most be the param size, plus a padding\n\t// zero, since due to being a signed integer\n\tvar maxEncodedParamLength = paramBytes + 1;\n\n\tvar inputLength = signature.length;\n\n\tvar offset = 0;\n\tif (signature[offset++] !== ENCODED_TAG_SEQ) {\n\t\tthrow new Error('Could not find expected \"seq\"');\n\t}\n\n\tvar seqLength = signature[offset++];\n\tif (seqLength === (MAX_OCTET | 1)) {\n\t\tseqLength = signature[offset++];\n\t}\n\n\tif (inputLength - offset < seqLength) {\n\t\tthrow new Error('\"seq\" specified length of \"' + seqLength + '\", only \"' + (inputLength - offset) + '\" remaining');\n\t}\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"r\"');\n\t}\n\n\tvar rLength = signature[offset++];\n\n\tif (inputLength - offset - 2 < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", only \"' + (inputLength - offset - 2) + '\" available');\n\t}\n\n\tif (maxEncodedParamLength < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar rOffset = offset;\n\toffset += rLength;\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"s\"');\n\t}\n\n\tvar sLength = signature[offset++];\n\n\tif (inputLength - offset !== sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", expected \"' + (inputLength - offset) + '\"');\n\t}\n\n\tif (maxEncodedParamLength < sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar sOffset = offset;\n\toffset += sLength;\n\n\tif (offset !== inputLength) {\n\t\tthrow new Error('Expected to consume entire buffer, but \"' + (inputLength - offset) + '\" bytes remain');\n\t}\n\n\tvar rPadding = paramBytes - rLength,\n\t\tsPadding = paramBytes - sLength;\n\n\tvar dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength);\n\n\tfor (offset = 0; offset < rPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength);\n\n\toffset = paramBytes;\n\n\tfor (var o = offset; offset < o + sPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength);\n\n\tdst = dst.toString('base64');\n\tdst = base64Url(dst);\n\n\treturn dst;\n}\n\nfunction countPadding(buf, start, stop) {\n\tvar padding = 0;\n\twhile (start + padding < stop && buf[start + padding] === 0) {\n\t\t++padding;\n\t}\n\n\tvar needsSign = buf[start + padding] >= MAX_OCTET;\n\tif (needsSign) {\n\t\t--padding;\n\t}\n\n\treturn padding;\n}\n\nfunction joseToDer(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\tvar signatureBytes = signature.length;\n\tif (signatureBytes !== paramBytes * 2) {\n\t\tthrow new TypeError('\"' + alg + '\" signatures must be \"' + paramBytes * 2 + '\" bytes, saw \"' + signatureBytes + '\"');\n\t}\n\n\tvar rPadding = countPadding(signature, 0, paramBytes);\n\tvar sPadding = countPadding(signature, paramBytes, signature.length);\n\tvar rLength = paramBytes - rPadding;\n\tvar sLength = paramBytes - sPadding;\n\n\tvar rsBytes = 1 + 1 + rLength + 1 + 1 + sLength;\n\n\tvar shortLength = rsBytes < MAX_OCTET;\n\n\tvar dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes);\n\n\tvar offset = 0;\n\tdst[offset++] = ENCODED_TAG_SEQ;\n\tif (shortLength) {\n\t\t// Bit 8 has value \"0\"\n\t\t// bits 7-1 give the length.\n\t\tdst[offset++] = rsBytes;\n\t} else {\n\t\t// Bit 8 of first octet has value \"1\"\n\t\t// bits 7-1 give the number of additional length octets.\n\t\tdst[offset++] = MAX_OCTET\t| 1;\n\t\t// length, base 256\n\t\tdst[offset++] = rsBytes & 0xff;\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = rLength;\n\tif (rPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\toffset += signature.copy(dst, offset, 0, paramBytes);\n\t} else {\n\t\toffset += signature.copy(dst, offset, rPadding, paramBytes);\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = sLength;\n\tif (sPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\tsignature.copy(dst, offset, paramBytes);\n\t} else {\n\t\tsignature.copy(dst, offset, paramBytes + sPadding);\n\t}\n\n\treturn dst;\n}\n\nmodule.exports = {\n\tderToJose: derToJose,\n\tjoseToDer: joseToDer\n};\n","'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define(\"exifr\",[\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).exifr={})}(this,(function(e){\"use strict\";function t(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}var i=\"undefined\"!=typeof self?self:global;const s=\"undefined\"!=typeof navigator,n=s&&\"undefined\"==typeof HTMLImageElement,r=!(\"undefined\"==typeof global||\"undefined\"==typeof process||!process.versions||!process.versions.node),a=i.Buffer,o=i.BigInt,h=!!a,l=e=>u(e)?void 0:e,f=e=>void 0!==e;function u(e){return void 0===e||(e instanceof Map?0===e.size:0===Object.values(e).filter(f).length)}function d(e){let t=new Error(e);throw delete t.stack,t}function c(e){return\"\"===(e=function(e){for(;e.endsWith(\"\\0\");)e=e.slice(0,-1);return e}(e).trim())?void 0:e}function g(e){let t=function(e){let t=0;return e.ifd0.enabled&&(t+=1024),e.exif.enabled&&(t+=2048),e.makerNote&&(t+=2048),e.userComment&&(t+=1024),e.gps.enabled&&(t+=512),e.interop.enabled&&(t+=100),e.ifd1.enabled&&(t+=1024),t+2048}(e);return e.jfif.enabled&&(t+=50),e.xmp.enabled&&(t+=2e4),e.iptc.enabled&&(t+=14e3),e.icc.enabled&&(t+=6e3),t}const p=e=>String.fromCharCode.apply(null,e),m=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):void 0;function y(e){return m?m.decode(e):h?Buffer.from(e).toString(\"utf8\"):decodeURIComponent(escape(p(e)))}class b{static from(e,t){return e instanceof this&&e.le===t?e:new b(e,void 0,void 0,t)}constructor(e,t=0,i,s){if(\"boolean\"==typeof s&&(this.le=s),Array.isArray(e)&&(e=new Uint8Array(e)),0===e)this.byteOffset=0,this.byteLength=0;else if(e instanceof ArrayBuffer){void 0===i&&(i=e.byteLength-t);let s=new DataView(e,t,i);this._swapDataView(s)}else if(e instanceof Uint8Array||e instanceof DataView||e instanceof b){void 0===i&&(i=e.byteLength-t),(t+=e.byteOffset)+i>e.byteOffset+e.byteLength&&d(\"Creating view outside of available memory in ArrayBuffer\");let s=new DataView(e.buffer,t,i);this._swapDataView(s)}else if(\"number\"==typeof e){let t=new DataView(new ArrayBuffer(e));this._swapDataView(t)}else d(\"Invalid input argument for BufferView: \"+e)}_swapArrayBuffer(e){this._swapDataView(new DataView(e))}_swapBuffer(e){this._swapDataView(new DataView(e.buffer,e.byteOffset,e.byteLength))}_swapDataView(e){this.dataView=e,this.buffer=e.buffer,this.byteOffset=e.byteOffset,this.byteLength=e.byteLength}_lengthToEnd(e){return this.byteLength-e}set(e,t,i=b){return e instanceof DataView||e instanceof b?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||d(\"BufferView.set(): Invalid data argument.\"),this.toUint8().set(e,t),new i(this,t,e.byteLength)}subarray(e,t){return t=t||this._lengthToEnd(e),new b(this,e,t)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(e,t){return new Uint8Array(this.buffer,this.byteOffset+e,t)}getString(e=0,t=this.byteLength){return y(this.getUint8Array(e,t))}getLatin1String(e=0,t=this.byteLength){let i=this.getUint8Array(e,t);return p(i)}getUnicodeString(e=0,t=this.byteLength){const i=[];for(let s=0;s1e4?U(e,t,\"base64\"):r&&e.includes(\"://\")?A(e,t,\"url\",B):r?U(e,t,\"fs\"):s?A(e,t,\"url\",B):void d(C);var i}async function A(e,t,i,s){return O.has(i)?U(e,t,i):s?async function(e,t){let i=await t(e);return new b(i)}(e,s):void d(`Parser ${i} is not loaded`)}async function U(e,t,i){let s=new(O.get(i))(e,t);return await s.read(),s}const B=e=>x(e).then((e=>e.arrayBuffer())),I=e=>new Promise(((t,i)=>{let s=new FileReader;s.onloadend=()=>t(s.result||new ArrayBuffer),s.onerror=i,s.readAsArrayBuffer(e)}));class F extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function L(e,t,i){let s=new F;for(let[e,t]of i)s.set(e,t);if(Array.isArray(t))for(let i of t)e.set(i,s);else e.set(t,s);return s}function D(e,t,i){let s,n=e.get(t);for(s of i)n.set(s[0],s[1])}const T=new Map,z=new Map,N=new Map,V=37500,M=37510,E=33723,R=34675,j=34665,G=34853,_=40965,H=[\"chunked\",\"firstChunkSize\",\"firstChunkSizeNode\",\"firstChunkSizeBrowser\",\"chunkSize\",\"chunkLimit\"],W=[\"jfif\",\"xmp\",\"icc\",\"iptc\",\"ihdr\"],$=[\"tiff\",...W],K=[\"ifd0\",\"ifd1\",\"exif\",\"gps\",\"interop\"],X=[...$,...K],Y=[\"makerNote\",\"userComment\"],q=[\"translateKeys\",\"translateValues\",\"reviveValues\",\"multiSegment\"],J=[...q,\"sanitize\",\"mergeOutput\",\"silentErrors\"];class Z{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class Q extends Z{get needed(){return this.enabled||this.deps.size>0}constructor(e,i,s,n){if(super(),t(this,\"enabled\",!1),t(this,\"skip\",new Set),t(this,\"pick\",new Set),t(this,\"deps\",new Set),t(this,\"translateKeys\",!1),t(this,\"translateValues\",!1),t(this,\"reviveValues\",!1),this.key=e,this.enabled=i,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=K.includes(e),this.canBeFiltered&&(this.dict=T.get(e)),void 0!==s)if(Array.isArray(s))this.parse=this.enabled=!0,this.canBeFiltered&&s.length>0&&this.translateTagSet(s,this.pick);else if(\"object\"==typeof s){if(this.enabled=!0,this.parse=!1!==s.parse,this.canBeFiltered){let{pick:e,skip:t}=s;e&&e.length>0&&this.translateTagSet(e,this.pick),t&&t.length>0&&this.translateTagSet(t,this.skip)}this.applyInheritables(s)}else!0===s||!1===s?this.parse=this.enabled=s:d(`Invalid options argument: ${s}`)}applyInheritables(e){let t,i;for(t of q)i=e[t],void 0!==i&&(this[t]=i)}translateTagSet(e,t){if(this.dict){let i,s,{tagKeys:n,tagValues:r}=this.dict;for(i of e)\"string\"==typeof i?(s=r.indexOf(i),-1===s&&(s=n.indexOf(Number(i))),-1!==s&&t.add(Number(n[s]))):t.add(i)}else for(let i of e)t.add(i)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,re(this.pick,this.deps)):this.enabled&&this.pick.size>0&&re(this.pick,this.deps)}}var ee={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},te=new Map;class ie extends Z{static useCached(e){let t=te.get(e);return void 0!==t||(t=new this(e),te.set(e,t)),t}constructor(e){super(),!0===e?this.setupFromTrue():void 0===e?this.setupFromUndefined():Array.isArray(e)?this.setupFromArray(e):\"object\"==typeof e?this.setupFromObject(e):d(`Invalid options argument ${e}`),void 0===this.firstChunkSize&&(this.firstChunkSize=s?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let e;for(e of H)this[e]=ee[e];for(e of J)this[e]=ee[e];for(e of Y)this[e]=ee[e];for(e of X)this[e]=new Q(e,ee[e],void 0,this)}setupFromTrue(){let e;for(e of H)this[e]=ee[e];for(e of J)this[e]=ee[e];for(e of Y)this[e]=!0;for(e of X)this[e]=new Q(e,!0,void 0,this)}setupFromArray(e){let t;for(t of H)this[t]=ee[t];for(t of J)this[t]=ee[t];for(t of Y)this[t]=ee[t];for(t of X)this[t]=new Q(t,!1,void 0,this);this.setupGlobalFilters(e,void 0,K)}setupFromObject(e){let t;for(t of(K.ifd0=K.ifd0||K.image,K.ifd1=K.ifd1||K.thumbnail,Object.assign(this,e),H))this[t]=ne(e[t],ee[t]);for(t of J)this[t]=ne(e[t],ee[t]);for(t of Y)this[t]=ne(e[t],ee[t]);for(t of $)this[t]=new Q(t,ee[t],e[t],this);for(t of K)this[t]=new Q(t,ee[t],e[t],this.tiff);this.setupGlobalFilters(e.pick,e.skip,K,X),!0===e.tiff?this.batchEnableWithBool(K,!0):!1===e.tiff?this.batchEnableWithUserValue(K,e):Array.isArray(e.tiff)?this.setupGlobalFilters(e.tiff,void 0,K):\"object\"==typeof e.tiff&&this.setupGlobalFilters(e.tiff.pick,e.tiff.skip,K)}batchEnableWithBool(e,t){for(let i of e)this[i].enabled=t}batchEnableWithUserValue(e,t){for(let i of e){let e=t[i];this[i].enabled=!1!==e&&void 0!==e}}setupGlobalFilters(e,t,i,s=i){if(e&&e.length){for(let e of s)this[e].enabled=!1;let t=se(e,i);for(let[e,i]of t)re(this[e].pick,i),this[e].enabled=!0}else if(t&&t.length){let e=se(t,i);for(let[t,i]of e)re(this[t].skip,i)}}filterNestedSegmentTags(){let{ifd0:e,exif:t,xmp:i,iptc:s,icc:n}=this;this.makerNote?t.deps.add(V):t.skip.add(V),this.userComment?t.deps.add(M):t.skip.add(M),i.enabled||e.skip.add(700),s.enabled||e.skip.add(E),n.enabled||e.skip.add(R)}traverseTiffDependencyTree(){let{ifd0:e,exif:t,gps:i,interop:s}=this;s.needed&&(t.deps.add(_),e.deps.add(_)),t.needed&&e.deps.add(j),i.needed&&e.deps.add(G),this.tiff.enabled=K.some((e=>!0===this[e].enabled))||this.makerNote||this.userComment;for(let e of K)this[e].finalizeFilters()}get onlyTiff(){return!W.map((e=>this[e].enabled)).some((e=>!0===e))&&this.tiff.enabled}checkLoadedPlugins(){for(let e of $)this[e].enabled&&!v.has(e)&&S(\"segment parser\",e)}}function se(e,t){let i,s,n,r,a=[];for(n of t){for(r of(i=T.get(n),s=[],i))(e.includes(r[0])||e.includes(r[1]))&&s.push(r[0]);s.length&&a.push([n,s])}return a}function ne(e,t){return void 0!==e?e:void 0!==t?t:void 0}function re(e,t){for(let i of t)e.add(i)}t(ie,\"default\",ee);class ae{constructor(e){t(this,\"parsers\",{}),t(this,\"output\",{}),t(this,\"errors\",[]),t(this,\"pushToErrors\",(e=>this.errors.push(e))),this.options=ie.useCached(e)}async read(e){this.file=await function(e,t){return\"string\"==typeof e?P(e,t):s&&!n&&e instanceof HTMLImageElement?P(e.src,t):e instanceof Uint8Array||e instanceof ArrayBuffer||e instanceof DataView?new b(e):s&&e instanceof Blob?A(e,t,\"blob\",I):void d(C)}(e,this.options)}setup(){if(this.fileParser)return;let{file:e}=this,t=e.getUint16(0);for(let[i,s]of k)if(s.canHandle(e,t))return this.fileParser=new s(this.options,this.file,this.parsers),e[i]=!0;this.file.close&&this.file.close(),d(\"Unknown file format\")}async parse(){let{output:e,errors:t}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),t.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&t.length>0&&(e.errors=t),l(e)}async executeParsers(){let{output:e}=this;await this.fileParser.parse();let t=Object.values(this.parsers).map((async t=>{let i=await t.parse();t.assignToOutput(e,i)}));this.options.silentErrors&&(t=t.map((e=>e.catch(this.pushToErrors)))),await Promise.all(t)}async extractThumbnail(){this.setup();let{options:e,file:t}=this,i=v.get(\"tiff\",e);var s;if(t.tiff?s={start:0,type:\"tiff\"}:t.jpeg&&(s=await this.fileParser.getOrFindSegment(\"tiff\")),void 0===s)return;let n=await this.fileParser.ensureSegmentChunk(s),r=this.parsers.tiff=new i(n,e,t),a=await r.extractThumbnail();return t.close&&t.close(),a}}async function oe(e,t){let i=new ae(t);return await i.read(e),i.parse()}var he=Object.freeze({__proto__:null,parse:oe,Exifr:ae,fileParsers:k,segmentParsers:v,fileReaders:O,tagKeys:T,tagValues:z,tagRevivers:N,createDictionary:L,extendDictionary:D,fetchUrlAsArrayBuffer:B,readBlobAsArrayBuffer:I,chunkedProps:H,otherSegments:W,segments:$,tiffBlocks:K,segmentsAndBlocks:X,tiffExtractables:Y,inheritables:q,allFormatters:J,Options:ie});class le{constructor(e,i,s){t(this,\"errors\",[]),t(this,\"ensureSegmentChunk\",(async e=>{let t=e.start,i=e.size||65536;if(this.file.chunked)if(this.file.available(t,i))e.chunk=this.file.subarray(t,i);else try{e.chunk=await this.file.readChunk(t,i)}catch(t){d(`Couldn't read segment: ${JSON.stringify(e)}. ${t.message}`)}else this.file.byteLength>t+i?e.chunk=this.file.subarray(t,i):void 0===e.size?e.chunk=this.file.subarray(t):d(\"Segment unreachable: \"+JSON.stringify(e));return e.chunk})),this.extendOptions&&this.extendOptions(e),this.options=e,this.file=i,this.parsers=s}injectSegment(e,t){this.options[e].enabled&&this.createParser(e,t)}createParser(e,t){let i=new(v.get(e))(t,this.options,this.file);return this.parsers[e]=i}createParsers(e){for(let t of e){let{type:e,chunk:i}=t,s=this.options[e];if(s&&s.enabled){let t=this.parsers[e];t&&t.append||t||this.createParser(e,i)}}}async readSegments(e){let t=e.map(this.ensureSegmentChunk);await Promise.all(t)}}class fe{static findPosition(e,t){let i=e.getUint16(t+2)+2,s=\"function\"==typeof this.headerLength?this.headerLength(e,t,i):this.headerLength,n=t+s,r=i-s;return{offset:t,length:i,headerLength:s,start:n,size:r,end:n+r}}static parse(e,t={}){return new this(e,new ie({[this.type]:t}),e).parse()}normalizeInput(e){return e instanceof b?e:new b(e)}constructor(e,i={},s){t(this,\"errors\",[]),t(this,\"raw\",new Map),t(this,\"handleError\",(e=>{if(!this.options.silentErrors)throw e;this.errors.push(e.message)})),this.chunk=this.normalizeInput(e),this.file=s,this.type=this.constructor.type,this.globalOptions=this.options=i,this.localOptions=i[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(e,t){let i=N.get(t),s=z.get(t),n=T.get(t),r=this.options[t],a=r.reviveValues&&!!i,o=r.translateValues&&!!s,h=r.translateKeys&&!!n,l={};for(let[t,r]of e)a&&i.has(t)?r=i.get(t)(r):o&&s.has(t)&&(r=this.translateValue(r,s.get(t))),h&&n.has(t)&&(t=n.get(t)||t),l[t]=r;return l}translateValue(e,t){return t[e]||t.DEFAULT||e}assignToOutput(e,t){this.assignObjectToOutput(e,this.constructor.type,t)}assignObjectToOutput(e,t,i){if(this.globalOptions.mergeOutput)return Object.assign(e,i);e[t]?Object.assign(e[t],i):e[t]=i}}t(fe,\"headerLength\",4),t(fe,\"type\",void 0),t(fe,\"multiSegment\",!1),t(fe,\"canHandle\",(()=>!1));function ue(e){return 192===e||194===e||196===e||219===e||221===e||218===e||254===e}function de(e){return e>=224&&e<=239}function ce(e,t,i){for(let[s,n]of v)if(n.canHandle(e,t,i))return s}class ge extends le{constructor(...e){super(...e),t(this,\"appSegments\",[]),t(this,\"jpegSegments\",[]),t(this,\"unknownSegments\",[])}static canHandle(e,t){return 65496===t}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(e){!0===e?(this.findAll=!0,this.wanted=new Set(v.keyList())):(e=void 0===e?v.keyList().filter((e=>this.options[e].enabled)):e.filter((e=>this.options[e].enabled&&v.has(e))),this.findAll=!1,this.remaining=new Set(e),this.wanted=new Set(e)),this.unfinishedMultiSegment=!1}async findAppSegments(e=0,t){this.setupSegmentFinderArgs(t);let{file:i,findAll:s,wanted:n,remaining:r}=this;if(!s&&this.file.chunked&&(s=Array.from(n).some((e=>{let t=v.get(e),i=this.options[e];return t.multiSegment&&i.multiSegment})),s&&await this.file.readWhole()),e=this.findAppSegmentsInRange(e,i.byteLength),!this.options.onlyTiff&&i.chunked){let t=!1;for(;r.size>0&&!t&&(i.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:s}=i,n=this.appSegments.some((e=>!this.file.available(e.offset||e.start,e.length||e.size)));if(t=e>s&&!n?!await i.readNextChunk(e):!await i.readNextChunk(s),void 0===(e=this.findAppSegmentsInRange(e,i.byteLength)))return}}}findAppSegmentsInRange(e,t){t-=2;let i,s,n,r,a,o,{file:h,findAll:l,wanted:f,remaining:u,options:d}=this;for(;ee.multiSegment)))return;let e=function(e,t){let i,s,n,r=new Map;for(let a=0;a{let i=v.get(e,this.options);if(i.handleMultiSegments){return{type:e,chunk:i.handleMultiSegments(t)}}return t[0]}))}getSegment(e){return this.appSegments.find((t=>t.type===e))}async getOrFindSegment(e){let t=this.getSegment(e);return void 0===t&&(await this.findAppSegments(0,[e]),t=this.getSegment(e)),t}}t(ge,\"type\",\"jpeg\"),k.set(\"jpeg\",ge);const pe=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class me extends fe{parseHeader(){var e=this.chunk.getUint16();18761===e?this.le=!0:19789===e&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(e,t,i=new Map){let{pick:s,skip:n}=this.options[t];s=new Set(s);let r=s.size>0,a=0===n.size,o=this.chunk.getUint16(e);e+=2;for(let h=0;h13)&&d(`Invalid TIFF value type. block: ${i.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e}`),e>s.byteLength&&d(`Invalid TIFF value offset. block: ${i.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e} is outside of chunk size ${s.byteLength}`),1===n)return s.getUint8Array(e,r);if(2===n)return c(s.getString(e,r));if(7===n)return s.getUint8Array(e,r);if(1===r)return this.parseTagValue(n,e);{let t=new(function(e){switch(e){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(n))(r),i=a;for(let s=0;se.byteLength&&d(`IFD0 offset points to outside of file.\\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e.byteLength}`),e.tiff&&await e.ensureChunk(this.ifd0Offset,g(this.options));let t=this.parseBlock(this.ifd0Offset,\"ifd0\");return 0!==t.size?(this.exifOffset=t.get(j),this.interopOffset=t.get(_),this.gpsOffset=t.get(G),this.xmp=t.get(700),this.iptc=t.get(E),this.icc=t.get(R),this.options.sanitize&&(t.delete(j),t.delete(_),t.delete(G),t.delete(700),t.delete(E),t.delete(R)),t):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,g(this.options));let e=this.parseBlock(this.exifOffset,\"exif\");return this.interopOffset||(this.interopOffset=e.get(_)),this.makerNote=e.get(V),this.userComment=e.get(M),this.options.sanitize&&(e.delete(_),e.delete(V),e.delete(M)),this.unpack(e,41728),this.unpack(e,41729),e}unpack(e,t){let i=e.get(t);i&&1===i.length&&e.set(t,i[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let e=this.parseBlock(this.gpsOffset,\"gps\");return e&&e.has(2)&&e.has(4)&&(e.set(\"latitude\",be(...e.get(2),e.get(1))),e.set(\"longitude\",be(...e.get(4),e.get(3)))),e}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,\"interop\")}async parseThumbnailBlock(e=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||e))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,\"ifd1\"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let e=this.ifd1.get(513),t=this.ifd1.get(514);return this.chunk.getUint8Array(e,t)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let e,t,i,s={};for(t of K)if(e=this[t],!u(e))if(i=this.canTranslate?this.translateBlock(e,t):Object.fromEntries(e),this.options.mergeOutput){if(\"ifd1\"===t)continue;Object.assign(s,i)}else s[t]=i;return this.makerNote&&(s.makerNote=this.makerNote),this.userComment&&(s.userComment=this.userComment),s}assignToOutput(e,t){if(this.globalOptions.mergeOutput)Object.assign(e,t);else for(let[i,s]of Object.entries(t))this.assignObjectToOutput(e,i,s)}}function be(e,t,i,s){var n=e+t/60+i/3600;return\"S\"!==s&&\"W\"!==s||(n*=-1),n}t(ye,\"type\",\"tiff\"),t(ye,\"headerLength\",10),v.set(\"tiff\",ye);var Se=Object.freeze({__proto__:null,default:he,Exifr:ae,fileParsers:k,segmentParsers:v,fileReaders:O,tagKeys:T,tagValues:z,tagRevivers:N,createDictionary:L,extendDictionary:D,fetchUrlAsArrayBuffer:B,readBlobAsArrayBuffer:I,chunkedProps:H,otherSegments:W,segments:$,tiffBlocks:K,segmentsAndBlocks:X,tiffExtractables:Y,inheritables:q,allFormatters:J,Options:ie,parse:oe});const we={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},ke=Object.assign({},we,{firstChunkSize:4e4,gps:[1,2,3,4]});async function ve(e){let t=new ae(ke);await t.read(e);let i=await t.parse();if(i&&i.gps){let{latitude:e,longitude:t}=i.gps;return{latitude:e,longitude:t}}}const Oe=Object.assign({},we,{tiff:!1,ifd1:!0,mergeOutput:!1});async function xe(e){let t=new ae(Oe);await t.read(e);let i=await t.extractThumbnail();return i&&h?a.from(i):i}async function Ce(e){let t=await this.thumbnail(e);if(void 0!==t){let e=new Blob([t]);return URL.createObjectURL(e)}}const Pe=Object.assign({},we,{firstChunkSize:4e4,ifd0:[274]});async function Ae(e){let t=new ae(Pe);await t.read(e);let i=await t.parse();if(i&&i.ifd0)return i.ifd0[274]}const Ue=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});if(e.rotateCanvas=!0,e.rotateCss=!0,\"object\"==typeof navigator){let t=navigator.userAgent;if(t.includes(\"iPad\")||t.includes(\"iPhone\")){let i=t.match(/OS (\\d+)_(\\d+)/);if(i){let[,t,s]=i,n=Number(t)+.1*Number(s);e.rotateCanvas=n<13.4,e.rotateCss=!1}}else if(t.includes(\"OS X 10\")){let[,i]=t.match(/OS X 10[_.](\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<15}if(t.includes(\"Chrome/\")){let[,i]=t.match(/Chrome\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<81}else if(t.includes(\"Firefox/\")){let[,i]=t.match(/Firefox\\/(\\d+)/);e.rotateCanvas=e.rotateCss=Number(i)<77}}async function Be(t){let i=await Ae(t);return Object.assign({canvas:e.rotateCanvas,css:e.rotateCss},Ue[i])}class Ie extends b{constructor(...e){super(...e),t(this,\"ranges\",new Fe),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(e,t,i){if(0===e&&0===this.byteLength&&i){let e=new DataView(i.buffer||i,i.byteOffset,i.byteLength);this._swapDataView(e)}else{let i=e+t;if(i>this.byteLength){let{dataView:e}=this._extend(i);this._swapDataView(e)}}}_extend(e){let t;t=h?a.allocUnsafe(e):new Uint8Array(e);let i=new DataView(t.buffer,t.byteOffset,t.byteLength);return t.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:t,dataView:i}}subarray(e,t,i=!1){return t=t||this._lengthToEnd(e),i&&this._tryExtend(e,t),this.ranges.add(e,t),super.subarray(e,t)}set(e,t,i=!1){i&&this._tryExtend(t,e.byteLength,e);let s=super.set(e,t);return this.ranges.add(t,s.byteLength),s}async ensureChunk(e,t){this.chunked&&(this.ranges.available(e,t)||await this.readChunk(e,t))}available(e,t){return this.ranges.available(e,t)}}class Fe{constructor(){t(this,\"list\",[])}get length(){return this.list.length}add(e,t,i=0){let s=e+t,n=this.list.filter((t=>Le(e,t.offset,s)||Le(e,t.end,s)));if(n.length>0){e=Math.min(e,...n.map((e=>e.offset))),s=Math.max(s,...n.map((e=>e.end))),t=s-e;let i=n.shift();i.offset=e,i.length=t,i.end=s,this.list=this.list.filter((e=>!n.includes(e)))}else this.list.push({offset:e,length:t,end:s})}available(e,t){let i=e+t;return this.list.some((t=>t.offset<=e&&i<=t.end))}}function Le(e,t,i){return e<=t&&t<=i}class De extends Ie{constructor(e,i){super(0),t(this,\"chunksRead\",0),this.input=e,this.options=i}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(e=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let t=this.options.chunkSize,i=await this.readChunk(e,t);return!!i&&i.byteLength===t}async readChunk(e,t){if(this.chunksRead++,0!==(t=this.safeWrapAddress(e,t)))return this._readChunk(e,t)}safeWrapAddress(e,t){return void 0!==this.size&&e+t>this.size?Math.max(0,this.size-e):t}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksReade.kind===t))}parseBoxHead(e){let t=this.file.getUint32(e),i=this.file.getString(e+4,4),s=e+8;return 1===t&&(t=this.file.getUint64(e+8),s+=8),{offset:e,length:t,kind:i,start:s}}parseBoxFullHead(e){if(void 0!==e.version)return;let t=this.file.getUint32(e.start);e.version=t>>24,e.start+=4}}class Ne extends ze{static canHandle(e,t){if(0!==t)return!1;let i=e.getUint16(2);if(i>50)return!1;let s=16,n=[];for(;s=2&&(s=3===t.version?4:2,n=this.file.getString(i+s+2,4),\"Exif\"===n))return this.file.getUintBytes(i,s);r+=t.length}}get8bits(e){let t=this.file.getUint8(e);return[t>>4,15&t]}findExtentInIloc(e,t){this.parseBoxFullHead(e);let i=e.start,[s,n]=this.get8bits(i++),[r,a]=this.get8bits(i++),o=2===e.version?4:2,h=1===e.version||2===e.version?2:0,l=a+s+n,f=2===e.version?4:2,u=this.file.getUintBytes(i,f);for(i+=f;u--;){let e=this.file.getUintBytes(i,o);i+=o+h+2+r;let f=this.file.getUint16(i);if(i+=2,e===t)return f>1&&console.warn(\"ILOC box has more than one extent but we're only processing one\\nPlease create an issue at https://github.com/MikeKovarik/exifr with this file\"),[this.file.getUintBytes(i+a,s),this.file.getUintBytes(i+a+s,n)];i+=f*l}}}class Ve extends Ne{}t(Ve,\"type\",\"heic\");class Me extends Ne{}t(Me,\"type\",\"avif\"),k.set(\"heic\",Ve),k.set(\"avif\",Me),L(T,[\"ifd0\",\"ifd1\"],[[256,\"ImageWidth\"],[257,\"ImageHeight\"],[258,\"BitsPerSample\"],[259,\"Compression\"],[262,\"PhotometricInterpretation\"],[270,\"ImageDescription\"],[271,\"Make\"],[272,\"Model\"],[273,\"StripOffsets\"],[274,\"Orientation\"],[277,\"SamplesPerPixel\"],[278,\"RowsPerStrip\"],[279,\"StripByteCounts\"],[282,\"XResolution\"],[283,\"YResolution\"],[284,\"PlanarConfiguration\"],[296,\"ResolutionUnit\"],[301,\"TransferFunction\"],[305,\"Software\"],[306,\"ModifyDate\"],[315,\"Artist\"],[316,\"HostComputer\"],[317,\"Predictor\"],[318,\"WhitePoint\"],[319,\"PrimaryChromaticities\"],[513,\"ThumbnailOffset\"],[514,\"ThumbnailLength\"],[529,\"YCbCrCoefficients\"],[530,\"YCbCrSubSampling\"],[531,\"YCbCrPositioning\"],[532,\"ReferenceBlackWhite\"],[700,\"ApplicationNotes\"],[33432,\"Copyright\"],[33723,\"IPTC\"],[34665,\"ExifIFD\"],[34675,\"ICC\"],[34853,\"GpsIFD\"],[330,\"SubIFD\"],[40965,\"InteropIFD\"],[40091,\"XPTitle\"],[40092,\"XPComment\"],[40093,\"XPAuthor\"],[40094,\"XPKeywords\"],[40095,\"XPSubject\"]]),L(T,\"exif\",[[33434,\"ExposureTime\"],[33437,\"FNumber\"],[34850,\"ExposureProgram\"],[34852,\"SpectralSensitivity\"],[34855,\"ISO\"],[34858,\"TimeZoneOffset\"],[34859,\"SelfTimerMode\"],[34864,\"SensitivityType\"],[34865,\"StandardOutputSensitivity\"],[34866,\"RecommendedExposureIndex\"],[34867,\"ISOSpeed\"],[34868,\"ISOSpeedLatitudeyyy\"],[34869,\"ISOSpeedLatitudezzz\"],[36864,\"ExifVersion\"],[36867,\"DateTimeOriginal\"],[36868,\"CreateDate\"],[36873,\"GooglePlusUploadCode\"],[36880,\"OffsetTime\"],[36881,\"OffsetTimeOriginal\"],[36882,\"OffsetTimeDigitized\"],[37121,\"ComponentsConfiguration\"],[37122,\"CompressedBitsPerPixel\"],[37377,\"ShutterSpeedValue\"],[37378,\"ApertureValue\"],[37379,\"BrightnessValue\"],[37380,\"ExposureCompensation\"],[37381,\"MaxApertureValue\"],[37382,\"SubjectDistance\"],[37383,\"MeteringMode\"],[37384,\"LightSource\"],[37385,\"Flash\"],[37386,\"FocalLength\"],[37393,\"ImageNumber\"],[37394,\"SecurityClassification\"],[37395,\"ImageHistory\"],[37396,\"SubjectArea\"],[37500,\"MakerNote\"],[37510,\"UserComment\"],[37520,\"SubSecTime\"],[37521,\"SubSecTimeOriginal\"],[37522,\"SubSecTimeDigitized\"],[37888,\"AmbientTemperature\"],[37889,\"Humidity\"],[37890,\"Pressure\"],[37891,\"WaterDepth\"],[37892,\"Acceleration\"],[37893,\"CameraElevationAngle\"],[40960,\"FlashpixVersion\"],[40961,\"ColorSpace\"],[40962,\"ExifImageWidth\"],[40963,\"ExifImageHeight\"],[40964,\"RelatedSoundFile\"],[41483,\"FlashEnergy\"],[41486,\"FocalPlaneXResolution\"],[41487,\"FocalPlaneYResolution\"],[41488,\"FocalPlaneResolutionUnit\"],[41492,\"SubjectLocation\"],[41493,\"ExposureIndex\"],[41495,\"SensingMethod\"],[41728,\"FileSource\"],[41729,\"SceneType\"],[41730,\"CFAPattern\"],[41985,\"CustomRendered\"],[41986,\"ExposureMode\"],[41987,\"WhiteBalance\"],[41988,\"DigitalZoomRatio\"],[41989,\"FocalLengthIn35mmFormat\"],[41990,\"SceneCaptureType\"],[41991,\"GainControl\"],[41992,\"Contrast\"],[41993,\"Saturation\"],[41994,\"Sharpness\"],[41996,\"SubjectDistanceRange\"],[42016,\"ImageUniqueID\"],[42032,\"OwnerName\"],[42033,\"SerialNumber\"],[42034,\"LensInfo\"],[42035,\"LensMake\"],[42036,\"LensModel\"],[42037,\"LensSerialNumber\"],[42080,\"CompositeImage\"],[42081,\"CompositeImageCount\"],[42082,\"CompositeImageExposureTimes\"],[42240,\"Gamma\"],[59932,\"Padding\"],[59933,\"OffsetSchema\"],[65e3,\"OwnerName\"],[65001,\"SerialNumber\"],[65002,\"Lens\"],[65100,\"RawFile\"],[65101,\"Converter\"],[65102,\"WhiteBalance\"],[65105,\"Exposure\"],[65106,\"Shadows\"],[65107,\"Brightness\"],[65108,\"Contrast\"],[65109,\"Saturation\"],[65110,\"Sharpness\"],[65111,\"Smoothness\"],[65112,\"MoireFilter\"],[40965,\"InteropIFD\"]]),L(T,\"gps\",[[0,\"GPSVersionID\"],[1,\"GPSLatitudeRef\"],[2,\"GPSLatitude\"],[3,\"GPSLongitudeRef\"],[4,\"GPSLongitude\"],[5,\"GPSAltitudeRef\"],[6,\"GPSAltitude\"],[7,\"GPSTimeStamp\"],[8,\"GPSSatellites\"],[9,\"GPSStatus\"],[10,\"GPSMeasureMode\"],[11,\"GPSDOP\"],[12,\"GPSSpeedRef\"],[13,\"GPSSpeed\"],[14,\"GPSTrackRef\"],[15,\"GPSTrack\"],[16,\"GPSImgDirectionRef\"],[17,\"GPSImgDirection\"],[18,\"GPSMapDatum\"],[19,\"GPSDestLatitudeRef\"],[20,\"GPSDestLatitude\"],[21,\"GPSDestLongitudeRef\"],[22,\"GPSDestLongitude\"],[23,\"GPSDestBearingRef\"],[24,\"GPSDestBearing\"],[25,\"GPSDestDistanceRef\"],[26,\"GPSDestDistance\"],[27,\"GPSProcessingMethod\"],[28,\"GPSAreaInformation\"],[29,\"GPSDateStamp\"],[30,\"GPSDifferential\"],[31,\"GPSHPositioningError\"]]),L(z,[\"ifd0\",\"ifd1\"],[[274,{1:\"Horizontal (normal)\",2:\"Mirror horizontal\",3:\"Rotate 180\",4:\"Mirror vertical\",5:\"Mirror horizontal and rotate 270 CW\",6:\"Rotate 90 CW\",7:\"Mirror horizontal and rotate 90 CW\",8:\"Rotate 270 CW\"}],[296,{1:\"None\",2:\"inches\",3:\"cm\"}]]);let Ee=L(z,\"exif\",[[34850,{0:\"Not defined\",1:\"Manual\",2:\"Normal program\",3:\"Aperture priority\",4:\"Shutter priority\",5:\"Creative program\",6:\"Action program\",7:\"Portrait mode\",8:\"Landscape mode\"}],[37121,{0:\"-\",1:\"Y\",2:\"Cb\",3:\"Cr\",4:\"R\",5:\"G\",6:\"B\"}],[37383,{0:\"Unknown\",1:\"Average\",2:\"CenterWeightedAverage\",3:\"Spot\",4:\"MultiSpot\",5:\"Pattern\",6:\"Partial\",255:\"Other\"}],[37384,{0:\"Unknown\",1:\"Daylight\",2:\"Fluorescent\",3:\"Tungsten (incandescent light)\",4:\"Flash\",9:\"Fine weather\",10:\"Cloudy weather\",11:\"Shade\",12:\"Daylight fluorescent (D 5700 - 7100K)\",13:\"Day white fluorescent (N 4600 - 5400K)\",14:\"Cool white fluorescent (W 3900 - 4500K)\",15:\"White fluorescent (WW 3200 - 3700K)\",17:\"Standard light A\",18:\"Standard light B\",19:\"Standard light C\",20:\"D55\",21:\"D65\",22:\"D75\",23:\"D50\",24:\"ISO studio tungsten\",255:\"Other\"}],[37385,{0:\"Flash did not fire\",1:\"Flash fired\",5:\"Strobe return light not detected\",7:\"Strobe return light detected\",9:\"Flash fired, compulsory flash mode\",13:\"Flash fired, compulsory flash mode, return light not detected\",15:\"Flash fired, compulsory flash mode, return light detected\",16:\"Flash did not fire, compulsory flash mode\",24:\"Flash did not fire, auto mode\",25:\"Flash fired, auto mode\",29:\"Flash fired, auto mode, return light not detected\",31:\"Flash fired, auto mode, return light detected\",32:\"No flash function\",65:\"Flash fired, red-eye reduction mode\",69:\"Flash fired, red-eye reduction mode, return light not detected\",71:\"Flash fired, red-eye reduction mode, return light detected\",73:\"Flash fired, compulsory flash mode, red-eye reduction mode\",77:\"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\",79:\"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\",89:\"Flash fired, auto mode, red-eye reduction mode\",93:\"Flash fired, auto mode, return light not detected, red-eye reduction mode\",95:\"Flash fired, auto mode, return light detected, red-eye reduction mode\"}],[41495,{1:\"Not defined\",2:\"One-chip color area sensor\",3:\"Two-chip color area sensor\",4:\"Three-chip color area sensor\",5:\"Color sequential area sensor\",7:\"Trilinear sensor\",8:\"Color sequential linear sensor\"}],[41728,{1:\"Film Scanner\",2:\"Reflection Print Scanner\",3:\"Digital Camera\"}],[41729,{1:\"Directly photographed\"}],[41985,{0:\"Normal\",1:\"Custom\",2:\"HDR (no original saved)\",3:\"HDR (original saved)\",4:\"Original (for HDR)\",6:\"Panorama\",7:\"Portrait HDR\",8:\"Portrait\"}],[41986,{0:\"Auto\",1:\"Manual\",2:\"Auto bracket\"}],[41987,{0:\"Auto\",1:\"Manual\"}],[41990,{0:\"Standard\",1:\"Landscape\",2:\"Portrait\",3:\"Night\",4:\"Other\"}],[41991,{0:\"None\",1:\"Low gain up\",2:\"High gain up\",3:\"Low gain down\",4:\"High gain down\"}],[41996,{0:\"Unknown\",1:\"Macro\",2:\"Close\",3:\"Distant\"}],[42080,{0:\"Unknown\",1:\"Not a Composite Image\",2:\"General Composite Image\",3:\"Composite Image Captured While Shooting\"}]]);const Re={1:\"No absolute unit of measurement\",2:\"Inch\",3:\"Centimeter\"};Ee.set(37392,Re),Ee.set(41488,Re);const je={0:\"Normal\",1:\"Low\",2:\"High\"};function Ge(e){return\"object\"==typeof e&&void 0!==e.length?e[0]:e}function _e(e){let t=Array.from(e).slice(1);return t[1]>15&&(t=t.map((e=>String.fromCharCode(e)))),\"0\"!==t[2]&&0!==t[2]||t.pop(),t.join(\".\")}function He(e){if(\"string\"==typeof e){var[t,i,s,n,r,a]=e.trim().split(/[-: ]/g).map(Number),o=new Date(t,i-1,s);return Number.isNaN(n)||Number.isNaN(r)||Number.isNaN(a)||(o.setHours(n),o.setMinutes(r),o.setSeconds(a)),Number.isNaN(+o)?e:o}}function We(e){if(\"string\"==typeof e)return e;let t=[];if(0===e[1]&&0===e[e.length-1])for(let i=0;iArray.from(e).join(\".\")],[7,e=>Array.from(e).join(\":\")]]);const Ke=\"http://ns.adobe.com/\",Xe=\"http://ns.adobe.com/xmp/extension/\";class Ye extends fe{static canHandle(e,t){return 225===e.getUint8(t+1)&&1752462448===e.getUint32(t+4)&&e.getString(t+4,Ke.length)===Ke}static headerLength(e,t){return e.getString(t+4,Xe.length)===Xe?79:4+\"http://ns.adobe.com/xap/1.0/\".length+1}static findPosition(e,t){let i=super.findPosition(e,t);return i.multiSegment=i.extended=79===i.headerLength,i.multiSegment?(i.chunkCount=e.getUint8(t+72),i.chunkNumber=e.getUint8(t+76),0!==e.getUint8(t+77)&&i.chunkNumber++):(i.chunkCount=1/0,i.chunkNumber=-1),i}static handleMultiSegments(e){return e.map((e=>e.chunk.getString())).join(\"\")}normalizeInput(e){return\"string\"==typeof e?e:b.from(e).getString()}parse(e=this.chunk){if(!this.localOptions.parse)return e;e=function(e){let t={},i={};for(let e of rt)t[e]=[],i[e]=0;return e.replace(at,((e,s,n)=>{if(\"<\"===s){let s=++i[n];return t[n].push(s),`${e}#${s}`}return`${e}#${t[n].pop()}`}))}(e);let t=Ze.findAll(e,\"rdf\",\"Description\");0===t.length&&t.push(new Ze(\"rdf\",\"Description\",void 0,e));let i,s={};for(let e of t)for(let t of e.properties)i=it(t.ns,s),Qe(t,i);return function(e){let t;for(let i in e)t=e[i]=l(e[i]),void 0===t&&delete e[i];return l(e)}(s)}assignToOutput(e,t){if(this.localOptions.parse)for(let[i,s]of Object.entries(t))switch(i){case\"tiff\":this.assignObjectToOutput(e,\"ifd0\",s);break;case\"exif\":this.assignObjectToOutput(e,\"exif\",s);break;case\"xmlns\":break;default:this.assignObjectToOutput(e,i,s)}else e.xmp=t}}t(Ye,\"type\",\"xmp\"),t(Ye,\"multiSegment\",!0),v.set(\"xmp\",Ye);class qe{static findAll(e){return st(e,/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)=(\"[^\"]*\"|'[^']*')/gm).map(qe.unpackMatch)}static unpackMatch(e){let t=e[1],i=e[2],s=e[3].slice(1,-1);return s=nt(s),new qe(t,i,s)}constructor(e,t,i){this.ns=e,this.name=t,this.value=i}serialize(){return this.value}}const Je=\"[\\\\w\\\\d-]+\";class Ze{static findAll(e,t,i){if(void 0!==t||void 0!==i){t=t||Je,i=i||Je;var s=new RegExp(`<(${t}):(${i})(#\\\\d+)?((\\\\s+?[\\\\w\\\\d-:]+=(\"[^\"]*\"|'[^']*'))*\\\\s*)(\\\\/>|>([\\\\s\\\\S]*?)<\\\\/\\\\1:\\\\2\\\\3>)`,\"gm\")}else s=/<([\\w\\d-]+):([\\w\\d-]+)(#\\d+)?((\\s+?[\\w\\d-:]+=(\"[^\"]*\"|'[^']*'))*\\s*)(\\/>|>([\\s\\S]*?)<\\/\\1:\\2\\3>)/gm;return st(e,s).map(Ze.unpackMatch)}static unpackMatch(e){let t=e[1],i=e[2],s=e[4],n=e[8];return new Ze(t,i,s,n)}constructor(e,t,i,s){this.ns=e,this.name=t,this.attrString=i,this.innerXml=s,this.attrs=qe.findAll(i),this.children=Ze.findAll(s),this.value=0===this.children.length?nt(s):void 0,this.properties=[...this.attrs,...this.children]}get isPrimitive(){return void 0!==this.value&&0===this.attrs.length&&0===this.children.length}get isListContainer(){return 1===this.children.length&&this.children[0].isList}get isList(){let{ns:e,name:t}=this;return\"rdf\"===e&&(\"Seq\"===t||\"Bag\"===t||\"Alt\"===t)}get isListItem(){return\"rdf\"===this.ns&&\"li\"===this.name}serialize(){if(0===this.properties.length&&void 0===this.value)return;if(this.isPrimitive)return this.value;if(this.isListContainer)return this.children[0].serialize();if(this.isList)return tt(this.children.map(et));if(this.isListItem&&1===this.children.length&&0===this.attrs.length)return this.children[0].serialize();let e={};for(let t of this.properties)Qe(t,e);return void 0!==this.value&&(e.value=this.value),l(e)}}function Qe(e,t){let i=e.serialize();void 0!==i&&(t[e.name]=i)}var et=e=>e.serialize(),tt=e=>1===e.length?e[0]:e,it=(e,t)=>t[e]?t[e]:t[e]={};function st(e,t){let i,s=[];if(!e)return s;for(;null!==(i=t.exec(e));)s.push(i);return s}function nt(e){if(function(e){return null==e||\"null\"===e||\"undefined\"===e||\"\"===e||\"\"===e.trim()}(e))return;let t=Number(e);if(!Number.isNaN(t))return t;let i=e.toLowerCase();return\"true\"===i||\"false\"!==i&&e.trim()}const rt=[\"rdf:li\",\"rdf:Seq\",\"rdf:Bag\",\"rdf:Alt\",\"rdf:Description\"],at=new RegExp(`(<|\\\\/)(${rt.join(\"|\")})`,\"g\");e.Exifr=ae,e.Options=ie,e.allFormatters=J,e.chunkedProps=H,e.createDictionary=L,e.default=Te,e.extendDictionary=D,e.fetchUrlAsArrayBuffer=B,e.fileParsers=k,e.fileReaders=O,e.gps=ve,e.gpsOnlyOptions=ke,e.inheritables=q,e.orientation=Ae,e.orientationOnlyOptions=Pe,e.otherSegments=W,e.parse=oe,e.readBlobAsArrayBuffer=I,e.rotation=Be,e.rotations=Ue,e.segmentParsers=v,e.segments=$,e.segmentsAndBlocks=X,e.tagKeys=T,e.tagRevivers=N,e.tagValues=z,e.thumbnail=xe,e.thumbnailOnlyOptions=Oe,e.thumbnailUrl=Ce,e.tiffBlocks=K,e.tiffExtractables=Y,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","'use strict';\nconst Token = require('token-types');\nconst strtok3 = require('strtok3/lib/core');\nconst {\n\tstringToBytes,\n\ttarHeaderChecksumMatches,\n\tuint32SyncSafeToken\n} = require('./util');\nconst supported = require('./supported');\n\nconst minimumBytes = 4100; // A fair amount of file-types are detectable within this range\n\nasync function fromStream(stream) {\n\tconst tokenizer = await strtok3.fromStream(stream);\n\ttry {\n\t\treturn await fromTokenizer(tokenizer);\n\t} finally {\n\t\tawait tokenizer.close();\n\t}\n}\n\nasync function fromBuffer(input) {\n\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) {\n\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`Buffer\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t}\n\n\tconst buffer = input instanceof Buffer ? input : Buffer.from(input);\n\n\tif (!(buffer && buffer.length > 1)) {\n\t\treturn;\n\t}\n\n\tconst tokenizer = strtok3.fromBuffer(buffer);\n\treturn fromTokenizer(tokenizer);\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nasync function fromTokenizer(tokenizer) {\n\ttry {\n\t\treturn _fromTokenizer(tokenizer);\n\t} catch (error) {\n\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nasync function _fromTokenizer(tokenizer) {\n\tlet buffer = Buffer.alloc(minimumBytes);\n\tconst bytesRead = 12;\n\tconst check = (header, options) => _check(buffer, header, options);\n\tconst checkString = (header, options) => check(stringToBytes(header), options);\n\n\t// Keep reading until EOF if the file size is unknown.\n\tif (!tokenizer.fileInfo.size) {\n\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t}\n\n\tawait tokenizer.peekBuffer(buffer, {length: bytesRead, mayBeLess: true});\n\n\t// -- 2-byte signatures --\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x0B, 0x77])) {\n\t\treturn {\n\t\t\text: 'ac3',\n\t\t\tmime: 'audio/vnd.dolby.dd-raw'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\tawait tokenizer.peekBuffer(buffer, {length: 24, mayBeLess: true});\n\n\t\tif (checkString('PS-Adobe-', {offset: 2}) &&\n\t\t\tcheckString(' EPSF-', {offset: 14})) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\t// -- 3-byte signatures --\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (checkString('ID3')) {\n\t\tawait tokenizer.ignore(6); // Skip ID3 header until the header size\n\t\tconst id3HeaderLen = await tokenizer.readToken(uint32SyncSafeToken);\n\t\tif (tokenizer.position + id3HeaderLen > tokenizer.fileInfo.size) {\n\t\t\t// Guess file type based on ID3 header for backward compatibility\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tawait tokenizer.ignore(id3HeaderLen);\n\t\treturn fromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t}\n\n\t// Musepack, SV7\n\tif (checkString('MP+')) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (\n\t\t(buffer[0] === 0x43 || buffer[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\t// -- 4-byte signatures --\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (checkString('FLIF')) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\tif (checkString('8BPS')) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\tif (checkString('WEBP', {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\t// Musepack, SV8\n\tif (checkString('MPCK')) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (checkString('FORM')) {\n\t\treturn {\n\t\t\text: 'aif',\n\t\t\tmime: 'audio/aiff'\n\t\t};\n\t}\n\n\tif (checkString('icns', {offset: 0})) {\n\t\treturn {\n\t\t\text: 'icns',\n\t\t\tmime: 'image/icns'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\ttry {\n\t\t\twhile (tokenizer.position + 30 < tokenizer.fileInfo.size) {\n\t\t\t\tawait tokenizer.readBuffer(buffer, {length: 30});\n\n\t\t\t\t// https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers\n\t\t\t\tconst zipHeader = {\n\t\t\t\t\tcompressedSize: buffer.readUInt32LE(18),\n\t\t\t\t\tuncompressedSize: buffer.readUInt32LE(22),\n\t\t\t\t\tfilenameLength: buffer.readUInt16LE(26),\n\t\t\t\t\textraFieldLength: buffer.readUInt16LE(28)\n\t\t\t\t};\n\n\t\t\t\tzipHeader.filename = await tokenizer.readToken(new Token.StringType(zipHeader.filenameLength, 'utf-8'));\n\t\t\t\tawait tokenizer.ignore(zipHeader.extraFieldLength);\n\n\t\t\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\t\t\tif (zipHeader.filename === 'META-INF/mozilla.rsa') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) {\n\t\t\t\t\tconst type = zipHeader.filename.split('/')[0];\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase '_rels':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'word':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'ppt':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'xl':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.startsWith('xl/')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: '3mf',\n\t\t\t\t\t\tmime: 'model/3mf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// The docx, xlsx and pptx file types extend the Office Open XML file format:\n\t\t\t\t// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats\n\t\t\t\t// We look for:\n\t\t\t\t// - one entry named '[Content_Types].xml' or '_rels/.rels',\n\t\t\t\t// - one entry indicating specific type of file.\n\t\t\t\t// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.\n\t\t\t\tif (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) {\n\t\t\t\t\tconst mimeType = await tokenizer.readToken(new Token.StringType(zipHeader.compressedSize, 'utf-8'));\n\n\t\t\t\t\tswitch (mimeType) {\n\t\t\t\t\t\tcase 'application/epub+zip':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'epub',\n\t\t\t\t\t\t\t\tmime: 'application/epub+zip'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'odt',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.text'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'ods',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'odp',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Try to find next header manually when current one is corrupted\n\t\t\t\tif (zipHeader.compressedSize === 0) {\n\t\t\t\t\tlet nextHeaderIndex = -1;\n\n\t\t\t\t\twhile (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) {\n\t\t\t\t\t\tawait tokenizer.peekBuffer(buffer, {mayBeLess: true});\n\n\t\t\t\t\t\tnextHeaderIndex = buffer.indexOf('504B0304', 0, 'hex');\n\t\t\t\t\t\t// Move position to the next header if found, skip the whole buffer otherwise\n\t\t\t\t\t\tawait tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : buffer.length);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait tokenizer.ignore(zipHeader.compressedSize);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (checkString('OggS')) {\n\t\t// This is an OGG container\n\t\tawait tokenizer.ignore(28);\n\t\tconst type = Buffer.alloc(8);\n\t\tawait tokenizer.readBuffer(type);\n\n\t\t// Needs to be before `ogg` check\n\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\treturn {\n\t\t\t\text: 'opus',\n\t\t\t\tmime: 'audio/opus'\n\t\t\t};\n\t\t}\n\n\t\t// If ' theora' in header.\n\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\treturn {\n\t\t\t\text: 'ogv',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01video' in header.\n\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ogm',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If ' FLAC' in header https://xiph.org/flac/faq.html\n\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\treturn {\n\t\t\t\text: 'oga',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// 'Speex ' in header https://en.wikipedia.org/wiki/Speex\n\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\treturn {\n\t\t\t\text: 'spx',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01vorbis' in header\n\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\treturn {\n\t\t\t\text: 'ogg',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\treturn {\n\t\t\text: 'ogx',\n\t\t\tmime: 'application/ogg'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) &&\n\t\t(buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\t//\n\n\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\tif (\n\t\tcheckString('ftyp', {offset: 4}) &&\n\t\t(buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t) {\n\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\tconst brandMajor = buffer.toString('binary', 8, 12).replace('\\0', ' ').trim();\n\t\tswitch (brandMajor) {\n\t\t\tcase 'avif':\n\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\tcase 'mif1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\tcase 'msf1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\tcase 'heic':\n\t\t\tcase 'heix':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\tcase 'hevc':\n\t\t\tcase 'hevx':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\tcase 'qt':\n\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\tcase 'M4V':\n\t\t\tcase 'M4VH':\n\t\t\tcase 'M4VP':\n\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\tcase 'M4P':\n\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\tcase 'M4B':\n\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\tcase 'M4A':\n\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\tcase 'F4V':\n\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\tcase 'F4P':\n\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\tcase 'F4A':\n\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\tcase 'F4B':\n\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\tcase 'crx':\n\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\tdefault:\n\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t}\n\n\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t}\n\t}\n\n\tif (checkString('MThd')) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('wOFF') &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheckString('OTTO', {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('wOF2') &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheckString('OTTO', {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\treturn {\n\t\t\text: 'pcap',\n\t\t\tmime: 'application/vnd.tcpdump.pcap'\n\t\t};\n\t}\n\n\t// Sony DSD Stream File (DSF)\n\tif (checkString('DSD ')) {\n\t\treturn {\n\t\t\text: 'dsf',\n\t\t\tmime: 'audio/x-dsf' // Non-standard\n\t\t};\n\t}\n\n\tif (checkString('LZIP')) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (checkString('fLaC')) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\tif (checkString('wvpk')) {\n\t\treturn {\n\t\t\text: 'wv',\n\t\t\tmime: 'audio/wavpack'\n\t\t};\n\t}\n\n\tif (checkString('%PDF')) {\n\t\tawait tokenizer.ignore(1350);\n\t\tconst maxBufferSize = 10 * 1024 * 1024;\n\t\tconst buffer = Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size));\n\t\tawait tokenizer.readBuffer(buffer, {mayBeLess: true});\n\n\t\t// Check if this is an Adobe Illustrator file\n\t\tif (buffer.includes(Buffer.from('AIPrivateData'))) {\n\t\t\treturn {\n\t\t\t\text: 'ai',\n\t\t\t\tmime: 'application/postscript'\n\t\t\t};\n\t\t}\n\n\t\t// Assume this is just a normal PDF\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\t// TIFF, little-endian type\n\tif (check([0x49, 0x49, 0x2A, 0x0])) {\n\t\tif (checkString('CR', {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'cr2',\n\t\t\t\tmime: 'image/x-canon-cr2'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || check([0x1F, 0x00, 0x0B, 0x00], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'nef',\n\t\t\t\tmime: 'image/x-nikon-nef'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0x08, 0x00, 0x00, 0x00], {offset: 4}) &&\n\t\t\t(check([0x2D, 0x00, 0xFE, 0x00], {offset: 8}) ||\n\t\t\t\tcheck([0x27, 0x00, 0xFE, 0x00], {offset: 8}))\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'dng',\n\t\t\t\tmime: 'image/x-adobe-dng'\n\t\t\t};\n\t\t}\n\n\t\tbuffer = Buffer.alloc(24);\n\t\tawait tokenizer.peekBuffer(buffer);\n\t\tif (\n\t\t\t(check([0x10, 0xFB, 0x86, 0x01], {offset: 4}) || check([0x08, 0x00, 0x00, 0x00], {offset: 4})) &&\n\t\t\t// This pattern differentiates ARW from other TIFF-ish file types:\n\t\t\tcheck([0x00, 0xFE, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01], {offset: 9})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'arw',\n\t\t\t\tmime: 'image/x-sony-arw'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\t// TIFF, big-endian type\n\tif (check([0x4D, 0x4D, 0x0, 0x2A])) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (checkString('MAC ')) {\n\t\treturn {\n\t\t\text: 'ape',\n\t\t\tmime: 'audio/ape'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\tasync function readField() {\n\t\t\tconst msb = await tokenizer.peekNumber(Token.UINT8);\n\t\t\tlet mask = 0x80;\n\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D\n\n\t\t\twhile ((msb & mask) === 0 && mask !== 0) {\n\t\t\t\t++ic;\n\t\t\t\tmask >>= 1;\n\t\t\t}\n\n\t\t\tconst id = Buffer.alloc(ic + 1);\n\t\t\tawait tokenizer.readBuffer(id);\n\t\t\treturn id;\n\t\t}\n\n\t\tasync function readElement() {\n\t\t\tconst id = await readField();\n\t\t\tconst lenField = await readField();\n\t\t\tlenField[0] ^= 0x80 >> (lenField.length - 1);\n\t\t\tconst nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer\n\t\t\treturn {\n\t\t\t\tid: id.readUIntBE(0, id.length),\n\t\t\t\tlen: lenField.readUIntBE(lenField.length - nrLen, nrLen)\n\t\t\t};\n\t\t}\n\n\t\tasync function readChildren(level, children) {\n\t\t\twhile (children > 0) {\n\t\t\t\tconst e = await readElement();\n\t\t\t\tif (e.id === 0x4282) {\n\t\t\t\t\treturn tokenizer.readToken(new Token.StringType(e.len, 'utf-8')); // Return DocType\n\t\t\t\t}\n\n\t\t\t\tawait tokenizer.ignore(e.len); // ignore payload\n\t\t\t\t--children;\n\t\t\t}\n\t\t}\n\n\t\tconst re = await readElement();\n\t\tconst docType = await readChildren(1, re.len);\n\n\t\tswitch (docType) {\n\t\t\tcase 'webm':\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\n\t\t\tcase 'matroska':\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t// RIFF file format which might be AVI, WAV, QCP, etc\n\tif (check([0x52, 0x49, 0x46, 0x46])) {\n\t\tif (check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'avi',\n\t\t\t\tmime: 'video/vnd.avi'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'wav',\n\t\t\t\tmime: 'audio/vnd.wave'\n\t\t\t};\n\t\t}\n\n\t\t// QLCM, QCP file\n\t\tif (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'qcp',\n\t\t\t\tmime: 'audio/qcelp'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (checkString('SQLi')) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (checkString('Cr24')) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('MSCF') ||\n\t\tcheckString('ISc(')\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\treturn {\n\t\t\text: 'eps',\n\t\t\tmime: 'application/eps'\n\t\t};\n\t}\n\n\tif (check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\treturn {\n\t\t\text: 'zst',\n\t\t\tmime: 'application/zstd'\n\t\t};\n\t}\n\n\t// -- 5-byte signatures --\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (checkString('#!AMR')) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (checkString('{\\\\rtf')) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (checkString('IMPM')) {\n\t\treturn {\n\t\t\text: 'it',\n\t\t\tmime: 'audio/x-it'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('-lh0-', {offset: 2}) ||\n\t\tcheckString('-lh1-', {offset: 2}) ||\n\t\tcheckString('-lh2-', {offset: 2}) ||\n\t\tcheckString('-lh3-', {offset: 2}) ||\n\t\tcheckString('-lh4-', {offset: 2}) ||\n\t\tcheckString('-lh5-', {offset: 2}) ||\n\t\tcheckString('-lh6-', {offset: 2}) ||\n\t\tcheckString('-lh7-', {offset: 2}) ||\n\t\tcheckString('-lzs-', {offset: 2}) ||\n\t\tcheckString('-lz4-', {offset: 2}) ||\n\t\tcheckString('-lz5-', {offset: 2}) ||\n\t\tcheckString('-lhd-', {offset: 2})\n\t) {\n\t\treturn {\n\t\t\text: 'lzh',\n\t\t\tmime: 'application/x-lzh-compressed'\n\t\t};\n\t}\n\n\t// MPEG program stream (PS or MPEG-PS)\n\tif (check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t// MPEG-PS, MPEG-1 Part 1\n\t\tif (check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\treturn {\n\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\tmime: 'video/MP1S'\n\t\t\t};\n\t\t}\n\n\t\t// MPEG-PS, MPEG-2 Part 1\n\t\tif (check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\treturn {\n\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\tmime: 'video/MP2P'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (checkString('ITSF')) {\n\t\treturn {\n\t\t\text: 'chm',\n\t\t\tmime: 'application/vnd.ms-htmlhelp'\n\t\t};\n\t}\n\n\t// -- 6-byte signatures --\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (checkString('')) {\n\t\tawait tokenizer.ignore(8);\n\t\tconst str = await tokenizer.readToken(new Token.StringType(13, 'ascii'));\n\t\tif (str === 'debian-binary') {\n\t\t\treturn {\n\t\t\t\text: 'deb',\n\t\t\t\tmime: 'application/x-deb'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\t// -- 8-byte signatures --\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t// Offset calculated as follows:\n\t\t// - 8 bytes: PNG signature\n\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\tasync function readChunkHeader() {\n\t\t\treturn {\n\t\t\t\tlength: await tokenizer.readToken(Token.INT32_BE),\n\t\t\t\ttype: await tokenizer.readToken(new Token.StringType(4, 'binary'))\n\t\t\t};\n\t\t}\n\n\t\tdo {\n\t\t\tconst chunk = await readChunkHeader();\n\t\t\tif (chunk.length < 0) {\n\t\t\t\treturn; // Invalid chunk length\n\t\t\t}\n\n\t\t\tswitch (chunk.type) {\n\t\t\t\tcase 'IDAT':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'png',\n\t\t\t\t\t\tmime: 'image/png'\n\t\t\t\t\t};\n\t\t\t\tcase 'acTL':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'apng',\n\t\t\t\t\t\tmime: 'image/apng'\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tawait tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC\n\t\t\t}\n\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'arrow',\n\t\t\tmime: 'application/x-apache-arrow'\n\t\t};\n\t}\n\n\tif (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'glb',\n\t\t\tmime: 'model/gltf-binary'\n\t\t};\n\t}\n\n\t// `mov` format variants\n\tif (\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free`\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG\n\t\tcheck([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov`\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\t// -- 9-byte signatures --\n\n\tif (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\treturn {\n\t\t\text: 'orf',\n\t\t\tmime: 'image/x-olympus-orf'\n\t\t};\n\t}\n\n\tif (checkString('gimp xcf ')) {\n\t\treturn {\n\t\t\text: 'xcf',\n\t\t\tmime: 'image/x-xcf'\n\t\t};\n\t}\n\n\t// -- 12-byte signatures --\n\n\tif (check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\treturn {\n\t\t\text: 'rw2',\n\t\t\tmime: 'image/x-panasonic-rw2'\n\t\t};\n\t}\n\n\t// ASF_Header_Object first 80 bytes\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\tasync function readHeader() {\n\t\t\tconst guid = Buffer.alloc(16);\n\t\t\tawait tokenizer.readBuffer(guid);\n\t\t\treturn {\n\t\t\t\tid: guid,\n\t\t\t\tsize: Number(await tokenizer.readToken(Token.UINT64_LE))\n\t\t\t};\n\t\t}\n\n\t\tawait tokenizer.ignore(30);\n\t\t// Search for header should be in first 1KB of file.\n\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\tconst header = await readHeader();\n\t\t\tlet payload = header.size - 24;\n\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\tconst typeId = Buffer.alloc(16);\n\t\t\t\tpayload -= await tokenizer.readBuffer(typeId);\n\n\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t// Found audio:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\tmime: 'audio/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t// Found video:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\tmime: 'video/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(payload);\n\t\t}\n\n\t\t// Default to ASF generic extension\n\t\treturn {\n\t\t\text: 'asf',\n\t\t\tmime: 'application/vnd.ms-asf'\n\t\t};\n\t}\n\n\tif (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'ktx',\n\t\t\tmime: 'image/ktx'\n\t\t};\n\t}\n\n\tif ((check([0x7E, 0x10, 0x04]) || check([0x7E, 0x18, 0x04])) && check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mie',\n\t\t\tmime: 'application/x-mie'\n\t\t};\n\t}\n\n\tif (check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\treturn {\n\t\t\text: 'shp',\n\t\t\tmime: 'application/x-esri-shape'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t// JPEG-2000 family\n\n\t\tawait tokenizer.ignore(20);\n\t\tconst type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));\n\t\tswitch (type) {\n\t\t\tcase 'jp2 ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jp2',\n\t\t\t\t\tmime: 'image/jp2'\n\t\t\t\t};\n\t\t\tcase 'jpx ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jpx',\n\t\t\t\t\tmime: 'image/jpx'\n\t\t\t\t};\n\t\t\tcase 'jpm ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jpm',\n\t\t\t\t\tmime: 'image/jpm'\n\t\t\t\t};\n\t\t\tcase 'mjp2':\n\t\t\t\treturn {\n\t\t\t\t\text: 'mj2',\n\t\t\t\t\tmime: 'image/mj2'\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0xFF, 0x0A]) ||\n\t\tcheck([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t) {\n\t\treturn {\n\t\t\text: 'jxl',\n\t\t\tmime: 'image/jxl'\n\t\t};\n\t}\n\n\t// -- Unsafe signatures --\n\n\tif (\n\t\tcheck([0x0, 0x0, 0x1, 0xBA]) ||\n\t\tcheck([0x0, 0x0, 0x1, 0xB3])\n\t) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x02, 0x00])) {\n\t\treturn {\n\t\t\text: 'cur',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\treturn {\n\t\t\text: 'cfb',\n\t\t\tmime: 'application/x-cfb'\n\t\t};\n\t}\n\n\t// Increase sample size from 12 to 256.\n\tawait tokenizer.peekBuffer(buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t// -- 15-byte signatures --\n\n\tif (checkString('BEGIN:')) {\n\t\tif (checkString('VCARD', {offset: 6})) {\n\t\t\treturn {\n\t\t\t\text: 'vcf',\n\t\t\t\tmime: 'text/vcard'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('VCALENDAR', {offset: 6})) {\n\t\t\treturn {\n\t\t\t\text: 'ics',\n\t\t\t\tmime: 'text/calendar'\n\t\t\t};\n\t\t}\n\t}\n\n\t// `raf` is here just to keep all the raw image detectors together.\n\tif (checkString('FUJIFILMCCD-RAW')) {\n\t\treturn {\n\t\t\text: 'raf',\n\t\t\tmime: 'image/x-fujifilm-raf'\n\t\t};\n\t}\n\n\tif (checkString('Extended Module:')) {\n\t\treturn {\n\t\t\text: 'xm',\n\t\t\tmime: 'audio/x-xm'\n\t\t};\n\t}\n\n\tif (checkString('Creative Voice File')) {\n\t\treturn {\n\t\t\text: 'voc',\n\t\t\tmime: 'audio/x-voc'\n\t\t};\n\t}\n\n\tif (check([0x04, 0x00, 0x00, 0x00]) && buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\tconst jsonSize = buffer.readUInt32LE(12);\n\t\tif (jsonSize > 12 && buffer.length >= jsonSize + 16) {\n\t\t\ttry {\n\t\t\t\tconst header = buffer.slice(16, jsonSize + 16).toString();\n\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\tmime: 'application/x-asar'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (checkString('SCRM', {offset: 44})) {\n\t\treturn {\n\t\t\text: 's3m',\n\t\t\tmime: 'audio/x-s3m'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\treturn {\n\t\t\text: 'mobi',\n\t\t\tmime: 'application/x-mobipocket-ebook'\n\t\t};\n\t}\n\n\tif (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\treturn {\n\t\t\text: 'dcm',\n\t\t\tmime: 'application/dicom'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\treturn {\n\t\t\text: 'lnk',\n\t\t\tmime: 'application/x.ms.shortcut' // Invented by us\n\t\t};\n\t}\n\n\tif (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'alias',\n\t\t\tmime: 'application/x.apple.alias' // Invented by us\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/vnd.ms-fontobject'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\treturn {\n\t\t\text: 'indd',\n\t\t\tmime: 'application/x-indesign'\n\t\t};\n\t}\n\n\t// Increase sample size from 256 to 512\n\tawait tokenizer.peekBuffer(buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t// Requires a buffer size of 512 bytes\n\tif (tarHeaderChecksumMatches(buffer)) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (check([0xFF, 0xFE, 0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00])) {\n\t\treturn {\n\t\t\text: 'skp',\n\t\t\tmime: 'application/vnd.sketchup.skp'\n\t\t};\n\t}\n\n\tif (checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\treturn {\n\t\t\text: 'pgp',\n\t\t\tmime: 'application/pgp-encrypted'\n\t\t};\n\t}\n\n\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\tif (buffer.length >= 2 && check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) {\n\t\tif (check([0x10], {offset: 1, mask: [0x16]})) {\n\t\t\t// Check for (ADTS) MPEG-2\n\t\t\tif (check([0x08], {offset: 1, mask: [0x08]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Must be (ADTS) MPEG-4\n\t\t\treturn {\n\t\t\t\text: 'aac',\n\t\t\t\tmime: 'audio/aac'\n\t\t\t};\n\t\t}\n\n\t\t// MPEG 1 or 2 Layer 3 header\n\t\t// Check for MPEG layer 3\n\t\tif (check([0x02], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\t// Check for MPEG layer 2\n\t\tif (check([0x04], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\t// Check for MPEG layer 1\n\t\tif (check([0x06], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp1',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n}\n\nconst stream = readableStream => new Promise((resolve, reject) => {\n\t// Using `eval` to work around issues when bundling with Webpack\n\tconst stream = eval('require')('stream'); // eslint-disable-line no-eval\n\n\treadableStream.on('error', reject);\n\treadableStream.once('readable', async () => {\n\t\t// Set up output stream\n\t\tconst pass = new stream.PassThrough();\n\t\tlet outputStream;\n\t\tif (stream.pipeline) {\n\t\t\toutputStream = stream.pipeline(readableStream, pass, () => {\n\t\t\t});\n\t\t} else {\n\t\t\toutputStream = readableStream.pipe(pass);\n\t\t}\n\n\t\t// Read the input stream and detect the filetype\n\t\tconst chunk = readableStream.read(minimumBytes) || readableStream.read() || Buffer.alloc(0);\n\t\ttry {\n\t\t\tconst fileType = await fromBuffer(chunk);\n\t\t\tpass.fileType = fileType;\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\n\t\tresolve(outputStream);\n\t});\n});\n\nconst fileType = {\n\tfromStream,\n\tfromTokenizer,\n\tfromBuffer,\n\tstream\n};\n\nObject.defineProperty(fileType, 'extensions', {\n\tget() {\n\t\treturn new Set(supported.extensions);\n\t}\n});\n\nObject.defineProperty(fileType, 'mimeTypes', {\n\tget() {\n\t\treturn new Set(supported.mimeTypes);\n\t}\n});\n\nmodule.exports = fileType;\n","'use strict';\nconst strtok3 = require('strtok3');\nconst core = require('./core');\n\nasync function fromFile(path) {\n\tconst tokenizer = await strtok3.fromFile(path);\n\ttry {\n\t\treturn await core.fromTokenizer(tokenizer);\n\t} finally {\n\t\tawait tokenizer.close();\n\t}\n}\n\nconst fileType = {\n\tfromFile\n};\n\nObject.assign(fileType, core);\n\nObject.defineProperty(fileType, 'extensions', {\n\tget() {\n\t\treturn core.extensions;\n\t}\n});\n\nObject.defineProperty(fileType, 'mimeTypes', {\n\tget() {\n\t\treturn core.mimeTypes;\n\t}\n});\n\nmodule.exports = fileType;\n","'use strict';\n\nmodule.exports = {\n\textensions: [\n\t\t'jpg',\n\t\t'png',\n\t\t'apng',\n\t\t'gif',\n\t\t'webp',\n\t\t'flif',\n\t\t'xcf',\n\t\t'cr2',\n\t\t'cr3',\n\t\t'orf',\n\t\t'arw',\n\t\t'dng',\n\t\t'nef',\n\t\t'rw2',\n\t\t'raf',\n\t\t'tif',\n\t\t'bmp',\n\t\t'icns',\n\t\t'jxr',\n\t\t'psd',\n\t\t'indd',\n\t\t'zip',\n\t\t'tar',\n\t\t'rar',\n\t\t'gz',\n\t\t'bz2',\n\t\t'7z',\n\t\t'dmg',\n\t\t'mp4',\n\t\t'mid',\n\t\t'mkv',\n\t\t'webm',\n\t\t'mov',\n\t\t'avi',\n\t\t'mpg',\n\t\t'mp2',\n\t\t'mp3',\n\t\t'm4a',\n\t\t'oga',\n\t\t'ogg',\n\t\t'ogv',\n\t\t'opus',\n\t\t'flac',\n\t\t'wav',\n\t\t'spx',\n\t\t'amr',\n\t\t'pdf',\n\t\t'epub',\n\t\t'exe',\n\t\t'swf',\n\t\t'rtf',\n\t\t'wasm',\n\t\t'woff',\n\t\t'woff2',\n\t\t'eot',\n\t\t'ttf',\n\t\t'otf',\n\t\t'ico',\n\t\t'flv',\n\t\t'ps',\n\t\t'xz',\n\t\t'sqlite',\n\t\t'nes',\n\t\t'crx',\n\t\t'xpi',\n\t\t'cab',\n\t\t'deb',\n\t\t'ar',\n\t\t'rpm',\n\t\t'Z',\n\t\t'lz',\n\t\t'cfb',\n\t\t'mxf',\n\t\t'mts',\n\t\t'blend',\n\t\t'bpg',\n\t\t'docx',\n\t\t'pptx',\n\t\t'xlsx',\n\t\t'3gp',\n\t\t'3g2',\n\t\t'jp2',\n\t\t'jpm',\n\t\t'jpx',\n\t\t'mj2',\n\t\t'aif',\n\t\t'qcp',\n\t\t'odt',\n\t\t'ods',\n\t\t'odp',\n\t\t'xml',\n\t\t'mobi',\n\t\t'heic',\n\t\t'cur',\n\t\t'ktx',\n\t\t'ape',\n\t\t'wv',\n\t\t'dcm',\n\t\t'ics',\n\t\t'glb',\n\t\t'pcap',\n\t\t'dsf',\n\t\t'lnk',\n\t\t'alias',\n\t\t'voc',\n\t\t'ac3',\n\t\t'm4v',\n\t\t'm4p',\n\t\t'm4b',\n\t\t'f4v',\n\t\t'f4p',\n\t\t'f4b',\n\t\t'f4a',\n\t\t'mie',\n\t\t'asf',\n\t\t'ogm',\n\t\t'ogx',\n\t\t'mpc',\n\t\t'arrow',\n\t\t'shp',\n\t\t'aac',\n\t\t'mp1',\n\t\t'it',\n\t\t's3m',\n\t\t'xm',\n\t\t'ai',\n\t\t'skp',\n\t\t'avif',\n\t\t'eps',\n\t\t'lzh',\n\t\t'pgp',\n\t\t'asar',\n\t\t'stl',\n\t\t'chm',\n\t\t'3mf',\n\t\t'zst',\n\t\t'jxl',\n\t\t'vcf'\n\t],\n\tmimeTypes: [\n\t\t'image/jpeg',\n\t\t'image/png',\n\t\t'image/gif',\n\t\t'image/webp',\n\t\t'image/flif',\n\t\t'image/x-xcf',\n\t\t'image/x-canon-cr2',\n\t\t'image/x-canon-cr3',\n\t\t'image/tiff',\n\t\t'image/bmp',\n\t\t'image/vnd.ms-photo',\n\t\t'image/vnd.adobe.photoshop',\n\t\t'application/x-indesign',\n\t\t'application/epub+zip',\n\t\t'application/x-xpinstall',\n\t\t'application/vnd.oasis.opendocument.text',\n\t\t'application/vnd.oasis.opendocument.spreadsheet',\n\t\t'application/vnd.oasis.opendocument.presentation',\n\t\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t'application/zip',\n\t\t'application/x-tar',\n\t\t'application/x-rar-compressed',\n\t\t'application/gzip',\n\t\t'application/x-bzip2',\n\t\t'application/x-7z-compressed',\n\t\t'application/x-apple-diskimage',\n\t\t'application/x-apache-arrow',\n\t\t'video/mp4',\n\t\t'audio/midi',\n\t\t'video/x-matroska',\n\t\t'video/webm',\n\t\t'video/quicktime',\n\t\t'video/vnd.avi',\n\t\t'audio/vnd.wave',\n\t\t'audio/qcelp',\n\t\t'audio/x-ms-asf',\n\t\t'video/x-ms-asf',\n\t\t'application/vnd.ms-asf',\n\t\t'video/mpeg',\n\t\t'video/3gpp',\n\t\t'audio/mpeg',\n\t\t'audio/mp4', // RFC 4337\n\t\t'audio/opus',\n\t\t'video/ogg',\n\t\t'audio/ogg',\n\t\t'application/ogg',\n\t\t'audio/x-flac',\n\t\t'audio/ape',\n\t\t'audio/wavpack',\n\t\t'audio/amr',\n\t\t'application/pdf',\n\t\t'application/x-msdownload',\n\t\t'application/x-shockwave-flash',\n\t\t'application/rtf',\n\t\t'application/wasm',\n\t\t'font/woff',\n\t\t'font/woff2',\n\t\t'application/vnd.ms-fontobject',\n\t\t'font/ttf',\n\t\t'font/otf',\n\t\t'image/x-icon',\n\t\t'video/x-flv',\n\t\t'application/postscript',\n\t\t'application/eps',\n\t\t'application/x-xz',\n\t\t'application/x-sqlite3',\n\t\t'application/x-nintendo-nes-rom',\n\t\t'application/x-google-chrome-extension',\n\t\t'application/vnd.ms-cab-compressed',\n\t\t'application/x-deb',\n\t\t'application/x-unix-archive',\n\t\t'application/x-rpm',\n\t\t'application/x-compress',\n\t\t'application/x-lzip',\n\t\t'application/x-cfb',\n\t\t'application/x-mie',\n\t\t'application/mxf',\n\t\t'video/mp2t',\n\t\t'application/x-blender',\n\t\t'image/bpg',\n\t\t'image/jp2',\n\t\t'image/jpx',\n\t\t'image/jpm',\n\t\t'image/mj2',\n\t\t'audio/aiff',\n\t\t'application/xml',\n\t\t'application/x-mobipocket-ebook',\n\t\t'image/heif',\n\t\t'image/heif-sequence',\n\t\t'image/heic',\n\t\t'image/heic-sequence',\n\t\t'image/icns',\n\t\t'image/ktx',\n\t\t'application/dicom',\n\t\t'audio/x-musepack',\n\t\t'text/calendar',\n\t\t'text/vcard',\n\t\t'model/gltf-binary',\n\t\t'application/vnd.tcpdump.pcap',\n\t\t'audio/x-dsf', // Non-standard\n\t\t'application/x.ms.shortcut', // Invented by us\n\t\t'application/x.apple.alias', // Invented by us\n\t\t'audio/x-voc',\n\t\t'audio/vnd.dolby.dd-raw',\n\t\t'audio/x-m4a',\n\t\t'image/apng',\n\t\t'image/x-olympus-orf',\n\t\t'image/x-sony-arw',\n\t\t'image/x-adobe-dng',\n\t\t'image/x-nikon-nef',\n\t\t'image/x-panasonic-rw2',\n\t\t'image/x-fujifilm-raf',\n\t\t'video/x-m4v',\n\t\t'video/3gpp2',\n\t\t'application/x-esri-shape',\n\t\t'audio/aac',\n\t\t'audio/x-it',\n\t\t'audio/x-s3m',\n\t\t'audio/x-xm',\n\t\t'video/MP1S',\n\t\t'video/MP2P',\n\t\t'application/vnd.sketchup.skp',\n\t\t'image/avif',\n\t\t'application/x-lzh-compressed',\n\t\t'application/pgp-encrypted',\n\t\t'application/x-asar',\n\t\t'model/stl',\n\t\t'application/vnd.ms-htmlhelp',\n\t\t'model/3mf',\n\t\t'image/jxl',\n\t\t'application/zstd'\n\t]\n};\n","'use strict';\n\nexports.stringToBytes = string => [...string].map(character => character.charCodeAt(0));\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nexports.tarHeaderChecksumMatches = (buffer, offset = 0) => {\n\tconst readSum = parseInt(buffer.toString('utf8', 148, 154).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let i = offset; i < offset + 148; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\tfor (let i = offset + 156; i < offset + 512; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\treturn readSum === sum;\n};\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nexports.uint32SyncSafeToken = {\n\tget: (buffer, offset) => {\n\t\treturn (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21);\n\t},\n\tlen: 4\n};\n","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {(o: {}, p: PropertyKey) => p is keyof o} */\nmodule.exports = bind.call(call, $hasOwn);\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var isIPv4 = function (ipString) {\n if (!ipString.match(/^([0-9]{1,3}\\.){3}[0-9]{1,3}$/)) {\n return false\n }\n var octets = ipString.split('.')\n for (let octet of octets) {\n var number = Number(octet)\n if (number > 255) {\n return false\n }\n }\n return true\n}\n\nvar isIPv6 = function (ipString, chunks = 8) {\n ipString = ipString.toLowerCase()\n if (ipString === '::') {\n return true\n }\n\n if (!ipString.match(/^([0-9a-f]{0,4}:?){2,8}$/)) {\n return false\n }\n\n // If there is a colon at the end, it must be a double colon\n if (ipString[ipString.length - 1] === ':') {\n if (ipString[ipString.length - 2] !== ':') {\n return false\n }\n }\n\n // No more than one double colon\n if (ipString.split('::').length > 2) {\n return false\n }\n\n // If no double colon, then exactly `chunks` chunks\n if (ipString.split('::').length === 1) {\n if (ipString.split(':').length !== chunks) {\n return false\n }\n }\n\n if (ipString.split('::').length === 2) {\n var right = ipString.split('::')[1]\n right = right.split(':')\n for (let i = 0; i < right.length - 1; i++) {\n if (right[i] === '') {\n return false\n }\n }\n }\n\n return true\n}\n\nvar isIPv64 = function (ipString) {\n var [v6, v4] = splitIPv64(ipString)\n return isIPv6(v6, 6) && isIPv4(v4)\n}\n\n// Reference: https://web.archive.org/web/20181019071947/http://www.tcpipguide.com/free/t_IPv6IPv4AddressEmbedding-2.htm\n// Either starts with 96 0s or 80 0s followed by 16 1s\nvar isIPv4MappedIPv6 = function (ipString) {\n return isIPv64(ipString) &&\n (!binaryIPv64(ipString).substring(0, 96).includes('1') ||\n (!binaryIPv64(ipString).substring(0, 80).includes('1') &&\n !binaryIPv64(ipString).substring(80, 96).includes('0')))\n}\n\nvar ipType = function (ipString) {\n if (isIPv4(ipString)) {\n return 'IPv4'\n }\n if (isIPv6(ipString)) {\n return 'IPv6'\n }\n if (isIPv64(ipString)) {\n return 'IPv6_4'\n }\n return 'None'\n}\n\nvar padRight = function (str, length, char = '0') {\n while (str.length < length) {\n str += char\n }\n return str\n}\n\nvar padLeft = function (str, length, char = '0') {\n while (str.length < length) {\n str = char + str\n }\n return str\n}\n\nvar split = function (str, length) {\n var chunks = []\n while (str.length > 0) {\n var chunk = str.substring(0, length)\n chunks.push(chunk)\n str = str.substring(length)\n }\n return chunks\n}\n\nvar toBinary = function (n) {\n return Number(n).toString(2)\n}\n\nvar fromBinary = function (binaryString) {\n return parseInt(binaryString, 2)\n}\n\nvar binaryIPv4 = function (ipString) {\n var octetStrings = ipString.split('.')\n return octetStrings.map(str => padLeft(toBinary(str), 8)).join('')\n}\n\nvar toHex = function (n) {\n return n.toString(16)\n}\n\nvar binaryIPv6 = function (ipString) {\n var [left, right] = ipString.split('::')\n\n left = left.split(':')\n if (right !== undefined) {\n right = right.split(':')\n } else {\n right = []\n }\n\n while ((left.length + right.length) < 8) {\n left.push('0')\n }\n var chunkStrings = left.concat(right)\n\n for (let i = 0; i < chunkStrings.length; i++) {\n if (chunkStrings[i].length === 0) {\n chunkStrings[i] = '0'\n }\n }\n\n var chunks = chunkStrings.map(str => parseInt(str, 16))\n\n var binaryChunks = chunks.map(n => padLeft(toBinary(n), 16))\n return binaryChunks.join('')\n}\n\nvar splitIPv64 = function (ipString) {\n var separatorIndex = ipString.lastIndexOf(':')\n var v6 = ipString.substring(0, separatorIndex)\n var v4 = ipString.substring(separatorIndex + 1)\n\n if (v6[v6.length - 1] === ':') {\n v6 = v6 + ':'\n }\n\n return [v6, v4]\n}\n\nvar binaryIPv64 = function (ipString) {\n var [v6, v4] = splitIPv64(ipString)\n\n var [left, right] = v6.split('::')\n left = left.split(':')\n if (right !== undefined) {\n right = right.split(':')\n } else {\n right = []\n }\n\n while ((left.length + right.length) < 6) {\n left.push('0')\n }\n var chunkStrings = left.concat(right)\n\n for (let i = 0; i < chunkStrings.length; i++) {\n if (chunkStrings[i].length === 0) {\n chunkStrings[i] = '0'\n }\n }\n\n var chunks = chunkStrings.map(str => parseInt(str, 16))\n\n var binaryChunks = chunks.map(n => padLeft(toBinary(n), 16))\n return binaryChunks.join('') + binaryIPv4(v4)\n}\n\nvar fromBinaryIPv4 = function (binaryString) {\n var octets = split(binaryString, 8)\n return octets.map(fromBinary).join('.')\n}\n\nvar compressIPv6 = function (ipString) {\n var chunks = ipString.split(':')\n\n var bestRunLength = 0\n var bestRunStart = null\n\n var currentlyRun = false\n var runLength = 0\n var runStart = null\n\n for (let i = 0; i < chunks.length; i++) {\n if (currentlyRun) {\n if (chunks[i] === '0') {\n runLength++\n } else {\n if (runLength > bestRunLength) {\n bestRunLength = runLength\n bestRunStart = runStart\n }\n currentlyRun = false\n runLength = 0\n runStart = null\n }\n } else {\n if (chunks[i] === '0') {\n currentlyRun = true\n runLength = 1\n runStart = i\n }\n }\n }\n if (runStart !== null && runLength > bestRunLength) {\n bestRunLength = runLength\n bestRunStart = runStart\n }\n\n if (bestRunLength < 2) {\n return ipString\n }\n\n var left = chunks.slice(0, bestRunStart).join(':')\n var right = chunks.slice(bestRunStart + bestRunLength).join(':')\n var result = left + '::' + right\n return result\n}\n\nvar fromBinaryIPv6 = function (binaryString) {\n var chunks = split(binaryString, 16)\n var hexChunks = chunks.map(fromBinary).map(toHex)\n var compressedChunks = compressIPv6(hexChunks.join(':'))\n return compressedChunks\n}\n\nvar fromBinaryIPv64 = function (binaryString) {\n var v6 = binaryString.substring(0, 96)\n var v4 = binaryString.substring(96)\n\n var left = fromBinaryIPv6(v6)\n var right = fromBinaryIPv4(v4)\n\n var compressedChunks = left\n if (compressedChunks[compressedChunks.length - 1] !== ':') {\n compressedChunks += ':'\n }\n return compressedChunks + right\n}\n\nvar anonymizeIPv4 = function (ipString, maskLength) {\n var binary = binaryIPv4(ipString)\n var segment = binary.substring(0, maskLength)\n var anonymizedBinary = padRight(segment, 32)\n return fromBinaryIPv4(anonymizedBinary)\n}\n\nvar anonymizeIPv6 = function (ipString, maskLength) {\n var binary = binaryIPv6(ipString)\n var segment = binary.substring(0, maskLength)\n var anonymizedBinary = padRight(segment, 128)\n return fromBinaryIPv6(anonymizedBinary)\n}\n\nvar anonymizeIPv64 = function (ipString, maskLength) {\n var binary = binaryIPv64(ipString)\n var segment = binary.substring(0, maskLength)\n var anonymizedBinary = padRight(segment, 128)\n return fromBinaryIPv64(anonymizedBinary)\n}\n\nvar anonymizeIP = function (ipString, v4MaskLength = 24, v6MaskLength = 24) {\n if (typeof ipString !== 'string') {\n return null\n }\n ipString = ipString.trim().toLowerCase()\n\n var type = ipType(ipString)\n if (type === 'IPv4') {\n return anonymizeIPv4(ipString, v4MaskLength)\n }\n if (type === 'IPv6') {\n return anonymizeIPv6(ipString, v6MaskLength)\n }\n if (type === 'IPv6_4') {\n if (isIPv4MappedIPv6(ipString)) {\n return anonymizeIPv64(ipString, v4MaskLength + 96)\n } else {\n return anonymizeIPv64(ipString, v6MaskLength)\n }\n }\n return null\n}\n\nmodule.exports = anonymizeIP\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n if (!fn) {\n return false\n }\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"StateMachineHistory\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StateMachineHistory\"] = factory();\n\telse\n\t\troot[\"StateMachineHistory\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//-------------------------------------------------------------------------------------------------\n\nfunction camelize(label) {\n\n if (label.length === 0)\n return label;\n\n var n, result, word, words = label.split(/[_-]/);\n\n // single word with first character already lowercase, return untouched\n if ((words.length === 1) && (words[0][0].toLowerCase() === words[0][0]))\n return label;\n\n result = words[0].toLowerCase();\n for(n = 1 ; n < words.length ; n++) {\n result = result + words[n].charAt(0).toUpperCase() + words[n].substring(1).toLowerCase();\n }\n\n return result;\n}\n\n//-------------------------------------------------------------------------------------------------\n\ncamelize.prepended = function(prepend, label) {\n label = camelize(label);\n return prepend + label[0].toUpperCase() + label.substring(1);\n}\n\n//-------------------------------------------------------------------------------------------------\n\nmodule.exports = camelize;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//-------------------------------------------------------------------------------------------------\n\nvar camelize = __webpack_require__(0);\n\n//-------------------------------------------------------------------------------------------------\n\nmodule.exports = function(options) { options = options || {};\n\n var past = camelize(options.name || options.past || 'history'),\n future = camelize( options.future || 'future'),\n clear = camelize.prepended('clear', past),\n back = camelize.prepended(past, 'back'),\n forward = camelize.prepended(past, 'forward'),\n canBack = camelize.prepended('can', back),\n canForward = camelize.prepended('can', forward),\n max = options.max;\n\n var plugin = {\n\n configure: function(config) {\n config.addTransitionLifecycleNames(back);\n config.addTransitionLifecycleNames(forward);\n },\n\n init: function(instance) {\n instance[past] = [];\n instance[future] = [];\n },\n\n lifecycle: function(instance, lifecycle) {\n if (lifecycle.event === 'onEnterState') {\n instance[past].push(lifecycle.to);\n if (max && instance[past].length > max)\n instance[past].shift();\n if (lifecycle.transition !== back && lifecycle.transition !== forward)\n instance[future].length = 0;\n }\n },\n\n methods: {},\n properties: {}\n\n }\n\n plugin.methods[clear] = function() {\n this[past].length = 0\n this[future].length = 0\n }\n\n plugin.properties[canBack] = {\n get: function() {\n return this[past].length > 1\n }\n }\n\n plugin.properties[canForward] = {\n get: function() {\n return this[future].length > 0\n }\n }\n\n plugin.methods[back] = function() {\n if (!this[canBack])\n throw Error('no history');\n var from = this[past].pop(),\n to = this[past].pop();\n this[future].push(from);\n this._fsm.transit(back, from, to, []);\n }\n\n plugin.methods[forward] = function() {\n if (!this[canForward])\n throw Error('no history');\n var from = this.state,\n to = this[future].pop();\n this._fsm.transit(forward, from, to, []);\n }\n\n return plugin;\n\n}\n\n\n/***/ })\n/******/ ]);\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"StateMachine\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"StateMachine\"] = factory();\n\telse\n\t\troot[\"StateMachine\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 5);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function(target, sources) {\n var n, source, key;\n for(n = 1 ; n < arguments.length ; n++) {\n source = arguments[n];\n for(key in source) {\n if (source.hasOwnProperty(key))\n target[key] = source[key];\n }\n }\n return target;\n}\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//-------------------------------------------------------------------------------------------------\n\nvar mixin = __webpack_require__(0);\n\n//-------------------------------------------------------------------------------------------------\n\nmodule.exports = {\n\n build: function(target, config) {\n var n, max, plugin, plugins = config.plugins;\n for(n = 0, max = plugins.length ; n < max ; n++) {\n plugin = plugins[n];\n if (plugin.methods)\n mixin(target, plugin.methods);\n if (plugin.properties)\n Object.defineProperties(target, plugin.properties);\n }\n },\n\n hook: function(fsm, name, additional) {\n var n, max, method, plugin,\n plugins = fsm.config.plugins,\n args = [fsm.context];\n\n if (additional)\n args = args.concat(additional)\n\n for(n = 0, max = plugins.length ; n < max ; n++) {\n plugin = plugins[n]\n method = plugins[n][name]\n if (method)\n method.apply(plugin, args);\n }\n }\n\n}\n\n//-------------------------------------------------------------------------------------------------\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//-------------------------------------------------------------------------------------------------\n\nfunction camelize(label) {\n\n if (label.length === 0)\n return label;\n\n var n, result, word, words = label.split(/[_-]/);\n\n // single word with first character already lowercase, return untouched\n if ((words.length === 1) && (words[0][0].toLowerCase() === words[0][0]))\n return label;\n\n result = words[0].toLowerCase();\n for(n = 1 ; n < words.length ; n++) {\n result = result + words[n].charAt(0).toUpperCase() + words[n].substring(1).toLowerCase();\n }\n\n return result;\n}\n\n//-------------------------------------------------------------------------------------------------\n\ncamelize.prepended = function(prepend, label) {\n label = camelize(label);\n return prepend + label[0].toUpperCase() + label.substring(1);\n}\n\n//-------------------------------------------------------------------------------------------------\n\nmodule.exports = camelize;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//-------------------------------------------------------------------------------------------------\n\nvar mixin = __webpack_require__(0),\n camelize = __webpack_require__(2);\n\n//-------------------------------------------------------------------------------------------------\n\nfunction Config(options, StateMachine) {\n\n options = options || {};\n\n this.options = options; // preserving original options can be useful (e.g visualize plugin)\n this.defaults = StateMachine.defaults;\n this.states = [];\n this.transitions = [];\n this.map = {};\n this.lifecycle = this.configureLifecycle();\n this.init = this.configureInitTransition(options.init);\n this.data = this.configureData(options.data);\n this.methods = this.configureMethods(options.methods);\n\n this.map[this.defaults.wildcard] = {};\n\n this.configureTransitions(options.transitions || []);\n\n this.plugins = this.configurePlugins(options.plugins, StateMachine.plugin);\n\n}\n\n//-------------------------------------------------------------------------------------------------\n\nmixin(Config.prototype, {\n\n addState: function(name) {\n if (!this.map[name]) {\n this.states.push(name);\n this.addStateLifecycleNames(name);\n this.map[name] = {};\n }\n },\n\n addStateLifecycleNames: function(name) {\n this.lifecycle.onEnter[name] = camelize.prepended('onEnter', name);\n this.lifecycle.onLeave[name] = camelize.prepended('onLeave', name);\n this.lifecycle.on[name] = camelize.prepended('on', name);\n },\n\n addTransition: function(name) {\n if (this.transitions.indexOf(name) < 0) {\n this.transitions.push(name);\n this.addTransitionLifecycleNames(name);\n }\n },\n\n addTransitionLifecycleNames: function(name) {\n this.lifecycle.onBefore[name] = camelize.prepended('onBefore', name);\n this.lifecycle.onAfter[name] = camelize.prepended('onAfter', name);\n this.lifecycle.on[name] = camelize.prepended('on', name);\n },\n\n mapTransition: function(transition) {\n var name = transition.name,\n from = transition.from,\n to = transition.to;\n this.addState(from);\n if (typeof to !== 'function')\n this.addState(to);\n this.addTransition(name);\n this.map[from][name] = transition;\n return transition;\n },\n\n configureLifecycle: function() {\n return {\n onBefore: { transition: 'onBeforeTransition' },\n onAfter: { transition: 'onAfterTransition' },\n onEnter: { state: 'onEnterState' },\n onLeave: { state: 'onLeaveState' },\n on: { transition: 'onTransition' }\n };\n },\n\n configureInitTransition: function(init) {\n if (typeof init === 'string') {\n return this.mapTransition(mixin({}, this.defaults.init, { to: init, active: true }));\n }\n else if (typeof init === 'object') {\n return this.mapTransition(mixin({}, this.defaults.init, init, { active: true }));\n }\n else {\n this.addState(this.defaults.init.from);\n return this.defaults.init;\n }\n },\n\n configureData: function(data) {\n if (typeof data === 'function')\n return data;\n else if (typeof data === 'object')\n return function() { return data; }\n else\n return function() { return {}; }\n },\n\n configureMethods: function(methods) {\n return methods || {};\n },\n\n configurePlugins: function(plugins, builtin) {\n plugins = plugins || [];\n var n, max, plugin;\n for(n = 0, max = plugins.length ; n < max ; n++) {\n plugin = plugins[n];\n if (typeof plugin === 'function')\n plugins[n] = plugin = plugin()\n if (plugin.configure)\n plugin.configure(this);\n }\n return plugins\n },\n\n configureTransitions: function(transitions) {\n var i, n, transition, from, to, wildcard = this.defaults.wildcard;\n for(n = 0 ; n < transitions.length ; n++) {\n transition = transitions[n];\n from = Array.isArray(transition.from) ? transition.from : [transition.from || wildcard]\n to = transition.to || wildcard;\n for(i = 0 ; i < from.length ; i++) {\n this.mapTransition({ name: transition.name, from: from[i], to: to });\n }\n }\n },\n\n transitionFor: function(state, transition) {\n var wildcard = this.defaults.wildcard;\n return this.map[state][transition] ||\n this.map[wildcard][transition];\n },\n\n transitionsFor: function(state) {\n var wildcard = this.defaults.wildcard;\n return Object.keys(this.map[state]).concat(Object.keys(this.map[wildcard]));\n },\n\n allStates: function() {\n return this.states;\n },\n\n allTransitions: function() {\n return this.transitions;\n }\n\n});\n\n//-------------------------------------------------------------------------------------------------\n\nmodule.exports = Config;\n\n//-------------------------------------------------------------------------------------------------\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\nvar mixin = __webpack_require__(0),\n Exception = __webpack_require__(6),\n plugin = __webpack_require__(1),\n UNOBSERVED = [ null, [] ];\n\n//-------------------------------------------------------------------------------------------------\n\nfunction JSM(context, config) {\n this.context = context;\n this.config = config;\n this.state = config.init.from;\n this.observers = [context];\n}\n\n//-------------------------------------------------------------------------------------------------\n\nmixin(JSM.prototype, {\n\n init: function(args) {\n mixin(this.context, this.config.data.apply(this.context, args));\n plugin.hook(this, 'init');\n if (this.config.init.active)\n return this.fire(this.config.init.name, []);\n },\n\n is: function(state) {\n return Array.isArray(state) ? (state.indexOf(this.state) >= 0) : (this.state === state);\n },\n\n isPending: function() {\n return this.pending;\n },\n\n can: function(transition) {\n return !this.isPending() && !!this.seek(transition);\n },\n\n cannot: function(transition) {\n return !this.can(transition);\n },\n\n allStates: function() {\n return this.config.allStates();\n },\n\n allTransitions: function() {\n return this.config.allTransitions();\n },\n\n transitions: function() {\n return this.config.transitionsFor(this.state);\n },\n\n seek: function(transition, args) {\n var wildcard = this.config.defaults.wildcard,\n entry = this.config.transitionFor(this.state, transition),\n to = entry && entry.to;\n if (typeof to === 'function')\n return to.apply(this.context, args);\n else if (to === wildcard)\n return this.state\n else\n return to\n },\n\n fire: function(transition, args) {\n return this.transit(transition, this.state, this.seek(transition, args), args);\n },\n\n transit: function(transition, from, to, args) {\n\n var lifecycle = this.config.lifecycle,\n changed = this.config.options.observeUnchangedState || (from !== to);\n\n if (!to)\n return this.context.onInvalidTransition(transition, from, to);\n\n if (this.isPending())\n return this.context.onPendingTransition(transition, from, to);\n\n this.config.addState(to); // might need to add this state if it's unknown (e.g. conditional transition or goto)\n\n this.beginTransit();\n\n args.unshift({ // this context will be passed to each lifecycle event observer\n transition: transition,\n from: from,\n to: to,\n fsm: this.context\n });\n\n return this.observeEvents([\n this.observersForEvent(lifecycle.onBefore.transition),\n this.observersForEvent(lifecycle.onBefore[transition]),\n changed ? this.observersForEvent(lifecycle.onLeave.state) : UNOBSERVED,\n changed ? this.observersForEvent(lifecycle.onLeave[from]) : UNOBSERVED,\n this.observersForEvent(lifecycle.on.transition),\n changed ? [ 'doTransit', [ this ] ] : UNOBSERVED,\n changed ? this.observersForEvent(lifecycle.onEnter.state) : UNOBSERVED,\n changed ? this.observersForEvent(lifecycle.onEnter[to]) : UNOBSERVED,\n changed ? this.observersForEvent(lifecycle.on[to]) : UNOBSERVED,\n this.observersForEvent(lifecycle.onAfter.transition),\n this.observersForEvent(lifecycle.onAfter[transition]),\n this.observersForEvent(lifecycle.on[transition])\n ], args);\n },\n\n beginTransit: function() { this.pending = true; },\n endTransit: function(result) { this.pending = false; return result; },\n failTransit: function(result) { this.pending = false; throw result; },\n doTransit: function(lifecycle) { this.state = lifecycle.to; },\n\n observe: function(args) {\n if (args.length === 2) {\n var observer = {};\n observer[args[0]] = args[1];\n this.observers.push(observer);\n }\n else {\n this.observers.push(args[0]);\n }\n },\n\n observersForEvent: function(event) { // TODO: this could be cached\n var n = 0, max = this.observers.length, observer, result = [];\n for( ; n < max ; n++) {\n observer = this.observers[n];\n if (observer[event])\n result.push(observer);\n }\n return [ event, result, true ]\n },\n\n observeEvents: function(events, args, previousEvent, previousResult) {\n if (events.length === 0) {\n return this.endTransit(previousResult === undefined ? true : previousResult);\n }\n\n var event = events[0][0],\n observers = events[0][1],\n pluggable = events[0][2];\n\n args[0].event = event;\n if (event && pluggable && event !== previousEvent)\n plugin.hook(this, 'lifecycle', args);\n\n if (observers.length === 0) {\n events.shift();\n return this.observeEvents(events, args, event, previousResult);\n }\n else {\n var observer = observers.shift(),\n result = observer[event].apply(observer, args);\n if (result && typeof result.then === 'function') {\n return result.then(this.observeEvents.bind(this, events, args, event))\n .catch(this.failTransit.bind(this))\n }\n else if (result === false) {\n return this.endTransit(false);\n }\n else {\n return this.observeEvents(events, args, event, result);\n }\n }\n },\n\n onInvalidTransition: function(transition, from, to) {\n throw new Exception(\"transition is invalid in current state\", transition, from, to, this.state);\n },\n\n onPendingTransition: function(transition, from, to) {\n throw new Exception(\"transition is invalid while previous transition is still in progress\", transition, from, to, this.state);\n }\n\n});\n\n//-------------------------------------------------------------------------------------------------\n\nmodule.exports = JSM;\n\n//-------------------------------------------------------------------------------------------------\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//-----------------------------------------------------------------------------------------------\n\nvar mixin = __webpack_require__(0),\n camelize = __webpack_require__(2),\n plugin = __webpack_require__(1),\n Config = __webpack_require__(3),\n JSM = __webpack_require__(4);\n\n//-----------------------------------------------------------------------------------------------\n\nvar PublicMethods = {\n is: function(state) { return this._fsm.is(state) },\n can: function(transition) { return this._fsm.can(transition) },\n cannot: function(transition) { return this._fsm.cannot(transition) },\n observe: function() { return this._fsm.observe(arguments) },\n transitions: function() { return this._fsm.transitions() },\n allTransitions: function() { return this._fsm.allTransitions() },\n allStates: function() { return this._fsm.allStates() },\n onInvalidTransition: function(t, from, to) { return this._fsm.onInvalidTransition(t, from, to) },\n onPendingTransition: function(t, from, to) { return this._fsm.onPendingTransition(t, from, to) },\n}\n\nvar PublicProperties = {\n state: {\n configurable: false,\n enumerable: true,\n get: function() {\n return this._fsm.state;\n },\n set: function(state) {\n throw Error('use transitions to change state')\n }\n }\n}\n\n//-----------------------------------------------------------------------------------------------\n\nfunction StateMachine(options) {\n return apply(this || {}, options);\n}\n\nfunction factory() {\n var cstor, options;\n if (typeof arguments[0] === 'function') {\n cstor = arguments[0];\n options = arguments[1] || {};\n }\n else {\n cstor = function() { this._fsm.apply(this, arguments) };\n options = arguments[0] || {};\n }\n var config = new Config(options, StateMachine);\n build(cstor.prototype, config);\n cstor.prototype._fsm.config = config; // convenience access to shared config without needing an instance\n return cstor;\n}\n\n//-------------------------------------------------------------------------------------------------\n\nfunction apply(instance, options) {\n var config = new Config(options, StateMachine);\n build(instance, config);\n instance._fsm();\n return instance;\n}\n\nfunction build(target, config) {\n if ((typeof target !== 'object') || Array.isArray(target))\n throw Error('StateMachine can only be applied to objects');\n plugin.build(target, config);\n Object.defineProperties(target, PublicProperties);\n mixin(target, PublicMethods);\n mixin(target, config.methods);\n config.allTransitions().forEach(function(transition) {\n target[camelize(transition)] = function() {\n return this._fsm.fire(transition, [].slice.call(arguments))\n }\n });\n target._fsm = function() {\n this._fsm = new JSM(this, config);\n this._fsm.init(arguments);\n }\n}\n\n//-----------------------------------------------------------------------------------------------\n\nStateMachine.version = '3.0.1';\nStateMachine.factory = factory;\nStateMachine.apply = apply;\nStateMachine.defaults = {\n wildcard: '*',\n init: {\n name: 'init',\n from: 'none'\n }\n}\n\n//===============================================================================================\n\nmodule.exports = StateMachine;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function(message, transition, from, to, current) {\n this.message = message;\n this.transition = transition;\n this.from = from;\n this.to = to;\n this.current = current;\n}\n\n\n/***/ })\n/******/ ]);\n});","var jws = require('jws');\n\nmodule.exports = function (jwt, options) {\n options = options || {};\n var decoded = jws.decode(jwt, options);\n if (!decoded) { return null; }\n var payload = decoded.payload;\n\n //try parse the payload\n if(typeof payload === 'string') {\n try {\n var obj = JSON.parse(payload);\n if(obj !== null && typeof obj === 'object') {\n payload = obj;\n }\n } catch (e) { }\n }\n\n //return header if `complete` option is enabled. header includes claims\n //such as `kid` and `alg` used to select the key within a JWKS needed to\n //verify the signature\n if (options.complete === true) {\n return {\n header: decoded.header,\n payload: payload,\n signature: decoded.signature\n };\n }\n return payload;\n};\n","module.exports = {\n decode: require('./decode'),\n verify: require('./verify'),\n sign: require('./sign'),\n JsonWebTokenError: require('./lib/JsonWebTokenError'),\n NotBeforeError: require('./lib/NotBeforeError'),\n TokenExpiredError: require('./lib/TokenExpiredError'),\n};\n","var JsonWebTokenError = function (message, error) {\n Error.call(this, message);\n if(Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = 'JsonWebTokenError';\n this.message = message;\n if (error) this.inner = error;\n};\n\nJsonWebTokenError.prototype = Object.create(Error.prototype);\nJsonWebTokenError.prototype.constructor = JsonWebTokenError;\n\nmodule.exports = JsonWebTokenError;\n","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar NotBeforeError = function (message, date) {\n JsonWebTokenError.call(this, message);\n this.name = 'NotBeforeError';\n this.date = date;\n};\n\nNotBeforeError.prototype = Object.create(JsonWebTokenError.prototype);\n\nNotBeforeError.prototype.constructor = NotBeforeError;\n\nmodule.exports = NotBeforeError;","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar TokenExpiredError = function (message, expiredAt) {\n JsonWebTokenError.call(this, message);\n this.name = 'TokenExpiredError';\n this.expiredAt = expiredAt;\n};\n\nTokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype);\n\nTokenExpiredError.prototype.constructor = TokenExpiredError;\n\nmodule.exports = TokenExpiredError;","const semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '>=15.7.0');\n","var semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0');\n","const semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '>=16.9.0');\n","var ms = require('ms');\n\nmodule.exports = function (time, iat) {\n var timestamp = iat || Math.floor(Date.now() / 1000);\n\n if (typeof time === 'string') {\n var milliseconds = ms(time);\n if (typeof milliseconds === 'undefined') {\n return;\n }\n return Math.floor(timestamp + milliseconds / 1000);\n } else if (typeof time === 'number') {\n return timestamp + time;\n } else {\n return;\n }\n\n};","const ASYMMETRIC_KEY_DETAILS_SUPPORTED = require('./asymmetricKeyDetailsSupported');\nconst RSA_PSS_KEY_DETAILS_SUPPORTED = require('./rsaPssKeyDetailsSupported');\n\nconst allowedAlgorithmsForKeys = {\n 'ec': ['ES256', 'ES384', 'ES512'],\n 'rsa': ['RS256', 'PS256', 'RS384', 'PS384', 'RS512', 'PS512'],\n 'rsa-pss': ['PS256', 'PS384', 'PS512']\n};\n\nconst allowedCurves = {\n ES256: 'prime256v1',\n ES384: 'secp384r1',\n ES512: 'secp521r1',\n};\n\nmodule.exports = function(algorithm, key) {\n if (!algorithm || !key) return;\n\n const keyType = key.asymmetricKeyType;\n if (!keyType) return;\n\n const allowedAlgorithms = allowedAlgorithmsForKeys[keyType];\n\n if (!allowedAlgorithms) {\n throw new Error(`Unknown key type \"${keyType}\".`);\n }\n\n if (!allowedAlgorithms.includes(algorithm)) {\n throw new Error(`\"alg\" parameter for \"${keyType}\" key type must be one of: ${allowedAlgorithms.join(', ')}.`)\n }\n\n /*\n * Ignore the next block from test coverage because it gets executed\n * conditionally depending on the Node version. Not ignoring it would\n * prevent us from reaching the target % of coverage for versions of\n * Node under 15.7.0.\n */\n /* istanbul ignore next */\n if (ASYMMETRIC_KEY_DETAILS_SUPPORTED) {\n switch (keyType) {\n case 'ec':\n const keyCurve = key.asymmetricKeyDetails.namedCurve;\n const allowedCurve = allowedCurves[algorithm];\n\n if (keyCurve !== allowedCurve) {\n throw new Error(`\"alg\" parameter \"${algorithm}\" requires curve \"${allowedCurve}\".`);\n }\n break;\n\n case 'rsa-pss':\n if (RSA_PSS_KEY_DETAILS_SUPPORTED) {\n const length = parseInt(algorithm.slice(-3), 10);\n const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = key.asymmetricKeyDetails;\n\n if (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm) {\n throw new Error(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of \"alg\" ${algorithm}.`);\n }\n\n if (saltLength !== undefined && saltLength > length >> 3) {\n throw new Error(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of \"alg\" ${algorithm}.`)\n }\n }\n break;\n }\n }\n}\n","const timespan = require('./lib/timespan');\nconst PS_SUPPORTED = require('./lib/psSupported');\nconst validateAsymmetricKey = require('./lib/validateAsymmetricKey');\nconst jws = require('jws');\nconst includes = require('lodash.includes');\nconst isBoolean = require('lodash.isboolean');\nconst isInteger = require('lodash.isinteger');\nconst isNumber = require('lodash.isnumber');\nconst isPlainObject = require('lodash.isplainobject');\nconst isString = require('lodash.isstring');\nconst once = require('lodash.once');\nconst { KeyObject, createSecretKey, createPrivateKey } = require('crypto')\n\nconst SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none'];\nif (PS_SUPPORTED) {\n SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nconst sign_options_schema = {\n expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"expiresIn\" should be a number of seconds or string representing a timespan' },\n notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"notBefore\" should be a number of seconds or string representing a timespan' },\n audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '\"audience\" must be a string or array' },\n algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '\"algorithm\" must be a valid string enum value' },\n header: { isValid: isPlainObject, message: '\"header\" must be an object' },\n encoding: { isValid: isString, message: '\"encoding\" must be a string' },\n issuer: { isValid: isString, message: '\"issuer\" must be a string' },\n subject: { isValid: isString, message: '\"subject\" must be a string' },\n jwtid: { isValid: isString, message: '\"jwtid\" must be a string' },\n noTimestamp: { isValid: isBoolean, message: '\"noTimestamp\" must be a boolean' },\n keyid: { isValid: isString, message: '\"keyid\" must be a string' },\n mutatePayload: { isValid: isBoolean, message: '\"mutatePayload\" must be a boolean' },\n allowInsecureKeySizes: { isValid: isBoolean, message: '\"allowInsecureKeySizes\" must be a boolean'},\n allowInvalidAsymmetricKeyTypes: { isValid: isBoolean, message: '\"allowInvalidAsymmetricKeyTypes\" must be a boolean'}\n};\n\nconst registered_claims_schema = {\n iat: { isValid: isNumber, message: '\"iat\" should be a number of seconds' },\n exp: { isValid: isNumber, message: '\"exp\" should be a number of seconds' },\n nbf: { isValid: isNumber, message: '\"nbf\" should be a number of seconds' }\n};\n\nfunction validate(schema, allowUnknown, object, parameterName) {\n if (!isPlainObject(object)) {\n throw new Error('Expected \"' + parameterName + '\" to be a plain object.');\n }\n Object.keys(object)\n .forEach(function(key) {\n const validator = schema[key];\n if (!validator) {\n if (!allowUnknown) {\n throw new Error('\"' + key + '\" is not allowed in \"' + parameterName + '\"');\n }\n return;\n }\n if (!validator.isValid(object[key])) {\n throw new Error(validator.message);\n }\n });\n}\n\nfunction validateOptions(options) {\n return validate(sign_options_schema, false, options, 'options');\n}\n\nfunction validatePayload(payload) {\n return validate(registered_claims_schema, true, payload, 'payload');\n}\n\nconst options_to_payload = {\n 'audience': 'aud',\n 'issuer': 'iss',\n 'subject': 'sub',\n 'jwtid': 'jti'\n};\n\nconst options_for_objects = [\n 'expiresIn',\n 'notBefore',\n 'noTimestamp',\n 'audience',\n 'issuer',\n 'subject',\n 'jwtid',\n];\n\nmodule.exports = function (payload, secretOrPrivateKey, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n } else {\n options = options || {};\n }\n\n const isObjectPayload = typeof payload === 'object' &&\n !Buffer.isBuffer(payload);\n\n const header = Object.assign({\n alg: options.algorithm || 'HS256',\n typ: isObjectPayload ? 'JWT' : undefined,\n kid: options.keyid\n }, options.header);\n\n function failure(err) {\n if (callback) {\n return callback(err);\n }\n throw err;\n }\n\n if (!secretOrPrivateKey && options.algorithm !== 'none') {\n return failure(new Error('secretOrPrivateKey must have a value'));\n }\n\n if (secretOrPrivateKey != null && !(secretOrPrivateKey instanceof KeyObject)) {\n try {\n secretOrPrivateKey = createPrivateKey(secretOrPrivateKey)\n } catch (_) {\n try {\n secretOrPrivateKey = createSecretKey(typeof secretOrPrivateKey === 'string' ? Buffer.from(secretOrPrivateKey) : secretOrPrivateKey)\n } catch (_) {\n return failure(new Error('secretOrPrivateKey is not valid key material'));\n }\n }\n }\n\n if (header.alg.startsWith('HS') && secretOrPrivateKey.type !== 'secret') {\n return failure(new Error((`secretOrPrivateKey must be a symmetric key when using ${header.alg}`)))\n } else if (/^(?:RS|PS|ES)/.test(header.alg)) {\n if (secretOrPrivateKey.type !== 'private') {\n return failure(new Error((`secretOrPrivateKey must be an asymmetric key when using ${header.alg}`)))\n }\n if (!options.allowInsecureKeySizes &&\n !header.alg.startsWith('ES') &&\n secretOrPrivateKey.asymmetricKeyDetails !== undefined && //KeyObject.asymmetricKeyDetails is supported in Node 15+\n secretOrPrivateKey.asymmetricKeyDetails.modulusLength < 2048) {\n return failure(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`));\n }\n }\n\n if (typeof payload === 'undefined') {\n return failure(new Error('payload is required'));\n } else if (isObjectPayload) {\n try {\n validatePayload(payload);\n }\n catch (error) {\n return failure(error);\n }\n if (!options.mutatePayload) {\n payload = Object.assign({},payload);\n }\n } else {\n const invalid_options = options_for_objects.filter(function (opt) {\n return typeof options[opt] !== 'undefined';\n });\n\n if (invalid_options.length > 0) {\n return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload'));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') {\n return failure(new Error('Bad \"options.expiresIn\" option the payload already has an \"exp\" property.'));\n }\n\n if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') {\n return failure(new Error('Bad \"options.notBefore\" option the payload already has an \"nbf\" property.'));\n }\n\n try {\n validateOptions(options);\n }\n catch (error) {\n return failure(error);\n }\n\n if (!options.allowInvalidAsymmetricKeyTypes) {\n try {\n validateAsymmetricKey(header.alg, secretOrPrivateKey);\n } catch (error) {\n return failure(error);\n }\n }\n\n const timestamp = payload.iat || Math.floor(Date.now() / 1000);\n\n if (options.noTimestamp) {\n delete payload.iat;\n } else if (isObjectPayload) {\n payload.iat = timestamp;\n }\n\n if (typeof options.notBefore !== 'undefined') {\n try {\n payload.nbf = timespan(options.notBefore, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.nbf === 'undefined') {\n return failure(new Error('\"notBefore\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') {\n try {\n payload.exp = timespan(options.expiresIn, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.exp === 'undefined') {\n return failure(new Error('\"expiresIn\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n Object.keys(options_to_payload).forEach(function (key) {\n const claim = options_to_payload[key];\n if (typeof options[key] !== 'undefined') {\n if (typeof payload[claim] !== 'undefined') {\n return failure(new Error('Bad \"options.' + key + '\" option. The payload already has an \"' + claim + '\" property.'));\n }\n payload[claim] = options[key];\n }\n });\n\n const encoding = options.encoding || 'utf8';\n\n if (typeof callback === 'function') {\n callback = callback && once(callback);\n\n jws.createSign({\n header: header,\n privateKey: secretOrPrivateKey,\n payload: payload,\n encoding: encoding\n }).once('error', callback)\n .once('done', function (signature) {\n // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version\n if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) {\n return callback(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`))\n }\n callback(null, signature);\n });\n } else {\n let signature = jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding});\n // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version\n if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) {\n throw new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`)\n }\n return signature\n }\n};\n","const JsonWebTokenError = require('./lib/JsonWebTokenError');\nconst NotBeforeError = require('./lib/NotBeforeError');\nconst TokenExpiredError = require('./lib/TokenExpiredError');\nconst decode = require('./decode');\nconst timespan = require('./lib/timespan');\nconst validateAsymmetricKey = require('./lib/validateAsymmetricKey');\nconst PS_SUPPORTED = require('./lib/psSupported');\nconst jws = require('jws');\nconst {KeyObject, createSecretKey, createPublicKey} = require(\"crypto\");\n\nconst PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nconst EC_KEY_ALGS = ['ES256', 'ES384', 'ES512'];\nconst RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nconst HS_ALGS = ['HS256', 'HS384', 'HS512'];\n\nif (PS_SUPPORTED) {\n PUB_KEY_ALGS.splice(PUB_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512');\n RSA_KEY_ALGS.splice(RSA_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512');\n}\n\nmodule.exports = function (jwtString, secretOrPublicKey, options, callback) {\n if ((typeof options === 'function') && !callback) {\n callback = options;\n options = {};\n }\n\n if (!options) {\n options = {};\n }\n\n //clone this object since we are going to mutate it.\n options = Object.assign({}, options);\n\n let done;\n\n if (callback) {\n done = callback;\n } else {\n done = function(err, data) {\n if (err) throw err;\n return data;\n };\n }\n\n if (options.clockTimestamp && typeof options.clockTimestamp !== 'number') {\n return done(new JsonWebTokenError('clockTimestamp must be a number'));\n }\n\n if (options.nonce !== undefined && (typeof options.nonce !== 'string' || options.nonce.trim() === '')) {\n return done(new JsonWebTokenError('nonce must be a non-empty string'));\n }\n\n if (options.allowInvalidAsymmetricKeyTypes !== undefined && typeof options.allowInvalidAsymmetricKeyTypes !== 'boolean') {\n return done(new JsonWebTokenError('allowInvalidAsymmetricKeyTypes must be a boolean'));\n }\n\n const clockTimestamp = options.clockTimestamp || Math.floor(Date.now() / 1000);\n\n if (!jwtString){\n return done(new JsonWebTokenError('jwt must be provided'));\n }\n\n if (typeof jwtString !== 'string') {\n return done(new JsonWebTokenError('jwt must be a string'));\n }\n\n const parts = jwtString.split('.');\n\n if (parts.length !== 3){\n return done(new JsonWebTokenError('jwt malformed'));\n }\n\n let decodedToken;\n\n try {\n decodedToken = decode(jwtString, { complete: true });\n } catch(err) {\n return done(err);\n }\n\n if (!decodedToken) {\n return done(new JsonWebTokenError('invalid token'));\n }\n\n const header = decodedToken.header;\n let getSecret;\n\n if(typeof secretOrPublicKey === 'function') {\n if(!callback) {\n return done(new JsonWebTokenError('verify must be called asynchronous if secret or public key is provided as a callback'));\n }\n\n getSecret = secretOrPublicKey;\n }\n else {\n getSecret = function(header, secretCallback) {\n return secretCallback(null, secretOrPublicKey);\n };\n }\n\n return getSecret(header, function(err, secretOrPublicKey) {\n if(err) {\n return done(new JsonWebTokenError('error in secret or public key callback: ' + err.message));\n }\n\n const hasSignature = parts[2].trim() !== '';\n\n if (!hasSignature && secretOrPublicKey){\n return done(new JsonWebTokenError('jwt signature is required'));\n }\n\n if (hasSignature && !secretOrPublicKey) {\n return done(new JsonWebTokenError('secret or public key must be provided'));\n }\n\n if (!hasSignature && !options.algorithms) {\n return done(new JsonWebTokenError('please specify \"none\" in \"algorithms\" to verify unsigned tokens'));\n }\n\n if (secretOrPublicKey != null && !(secretOrPublicKey instanceof KeyObject)) {\n try {\n secretOrPublicKey = createPublicKey(secretOrPublicKey);\n } catch (_) {\n try {\n secretOrPublicKey = createSecretKey(typeof secretOrPublicKey === 'string' ? Buffer.from(secretOrPublicKey) : secretOrPublicKey);\n } catch (_) {\n return done(new JsonWebTokenError('secretOrPublicKey is not valid key material'))\n }\n }\n }\n\n if (!options.algorithms) {\n if (secretOrPublicKey.type === 'secret') {\n options.algorithms = HS_ALGS;\n } else if (['rsa', 'rsa-pss'].includes(secretOrPublicKey.asymmetricKeyType)) {\n options.algorithms = RSA_KEY_ALGS\n } else if (secretOrPublicKey.asymmetricKeyType === 'ec') {\n options.algorithms = EC_KEY_ALGS\n } else {\n options.algorithms = PUB_KEY_ALGS\n }\n }\n\n if (options.algorithms.indexOf(decodedToken.header.alg) === -1) {\n return done(new JsonWebTokenError('invalid algorithm'));\n }\n\n if (header.alg.startsWith('HS') && secretOrPublicKey.type !== 'secret') {\n return done(new JsonWebTokenError((`secretOrPublicKey must be a symmetric key when using ${header.alg}`)))\n } else if (/^(?:RS|PS|ES)/.test(header.alg) && secretOrPublicKey.type !== 'public') {\n return done(new JsonWebTokenError((`secretOrPublicKey must be an asymmetric key when using ${header.alg}`)))\n }\n\n if (!options.allowInvalidAsymmetricKeyTypes) {\n try {\n validateAsymmetricKey(header.alg, secretOrPublicKey);\n } catch (e) {\n return done(e);\n }\n }\n\n let valid;\n\n try {\n valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey);\n } catch (e) {\n return done(e);\n }\n\n if (!valid) {\n return done(new JsonWebTokenError('invalid signature'));\n }\n\n const payload = decodedToken.payload;\n\n if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) {\n if (typeof payload.nbf !== 'number') {\n return done(new JsonWebTokenError('invalid nbf value'));\n }\n if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) {\n return done(new NotBeforeError('jwt not active', new Date(payload.nbf * 1000)));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) {\n if (typeof payload.exp !== 'number') {\n return done(new JsonWebTokenError('invalid exp value'));\n }\n if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)));\n }\n }\n\n if (options.audience) {\n const audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n const target = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n const match = target.some(function (targetAudience) {\n return audiences.some(function (audience) {\n return audience instanceof RegExp ? audience.test(targetAudience) : audience === targetAudience;\n });\n });\n\n if (!match) {\n return done(new JsonWebTokenError('jwt audience invalid. expected: ' + audiences.join(' or ')));\n }\n }\n\n if (options.issuer) {\n const invalid_issuer =\n (typeof options.issuer === 'string' && payload.iss !== options.issuer) ||\n (Array.isArray(options.issuer) && options.issuer.indexOf(payload.iss) === -1);\n\n if (invalid_issuer) {\n return done(new JsonWebTokenError('jwt issuer invalid. expected: ' + options.issuer));\n }\n }\n\n if (options.subject) {\n if (payload.sub !== options.subject) {\n return done(new JsonWebTokenError('jwt subject invalid. expected: ' + options.subject));\n }\n }\n\n if (options.jwtid) {\n if (payload.jti !== options.jwtid) {\n return done(new JsonWebTokenError('jwt jwtid invalid. expected: ' + options.jwtid));\n }\n }\n\n if (options.nonce) {\n if (payload.nonce !== options.nonce) {\n return done(new JsonWebTokenError('jwt nonce invalid. expected: ' + options.nonce));\n }\n }\n\n if (options.maxAge) {\n if (typeof payload.iat !== 'number') {\n return done(new JsonWebTokenError('iat required when maxAge is specified'));\n }\n\n const maxAgeTimestamp = timespan(options.maxAge, payload.iat);\n if (typeof maxAgeTimestamp === 'undefined') {\n return done(new JsonWebTokenError('\"maxAge\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n if (clockTimestamp >= maxAgeTimestamp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('maxAge exceeded', new Date(maxAgeTimestamp * 1000)));\n }\n }\n\n if (options.complete === true) {\n const signature = decodedToken.signature;\n\n return done(null, {\n header: header,\n payload: payload,\n signature: signature\n });\n }\n\n return done(null, payload);\n });\n};\n","var bufferEqual = require('buffer-equal-constant-time');\nvar Buffer = require('safe-buffer').Buffer;\nvar crypto = require('crypto');\nvar formatEcdsa = require('ecdsa-sig-formatter');\nvar util = require('util');\n\nvar MSG_INVALID_ALGORITHM = '\"%s\" is not a valid algorithm.\\n Supported algorithms are:\\n \"HS256\", \"HS384\", \"HS512\", \"RS256\", \"RS384\", \"RS512\", \"PS256\", \"PS384\", \"PS512\", \"ES256\", \"ES384\", \"ES512\" and \"none\".'\nvar MSG_INVALID_SECRET = 'secret must be a string or buffer';\nvar MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer';\nvar MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object';\n\nvar supportsKeyObjects = typeof crypto.createPublicKey === 'function';\nif (supportsKeyObjects) {\n MSG_INVALID_VERIFIER_KEY += ' or a KeyObject';\n MSG_INVALID_SECRET += 'or a KeyObject';\n}\n\nfunction checkIsPublicKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.type !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.asymmetricKeyType !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n};\n\nfunction checkIsPrivateKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (typeof key === 'object') {\n return;\n }\n\n throw typeError(MSG_INVALID_SIGNER_KEY);\n};\n\nfunction checkIsSecretKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (key.type !== 'secret') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_SECRET);\n }\n}\n\nfunction fromBase64(base64) {\n return base64\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction toBase64(base64url) {\n base64url = base64url.toString();\n\n var padding = 4 - base64url.length % 4;\n if (padding !== 4) {\n for (var i = 0; i < padding; ++i) {\n base64url += '=';\n }\n }\n\n return base64url\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n}\n\nfunction typeError(template) {\n var args = [].slice.call(arguments, 1);\n var errMsg = util.format.bind(util, template).apply(null, args);\n return new TypeError(errMsg);\n}\n\nfunction bufferOrString(obj) {\n return Buffer.isBuffer(obj) || typeof obj === 'string';\n}\n\nfunction normalizeInput(thing) {\n if (!bufferOrString(thing))\n thing = JSON.stringify(thing);\n return thing;\n}\n\nfunction createHmacSigner(bits) {\n return function sign(thing, secret) {\n checkIsSecretKey(secret);\n thing = normalizeInput(thing);\n var hmac = crypto.createHmac('sha' + bits, secret);\n var sig = (hmac.update(thing), hmac.digest('base64'))\n return fromBase64(sig);\n }\n}\n\nfunction createHmacVerifier(bits) {\n return function verify(thing, signature, secret) {\n var computedSig = createHmacSigner(bits)(thing, secret);\n return bufferEqual(Buffer.from(signature), Buffer.from(computedSig));\n }\n}\n\nfunction createKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n // Even though we are specifying \"RSA\" here, this works with ECDSA\n // keys as well.\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign(privateKey, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify(publicKey, signature, 'base64');\n }\n}\n\nfunction createPSSKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createPSSKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify({\n key: publicKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, signature, 'base64');\n }\n}\n\nfunction createECDSASigner(bits) {\n var inner = createKeySigner(bits);\n return function sign() {\n var signature = inner.apply(null, arguments);\n signature = formatEcdsa.derToJose(signature, 'ES' + bits);\n return signature;\n };\n}\n\nfunction createECDSAVerifer(bits) {\n var inner = createKeyVerifier(bits);\n return function verify(thing, signature, publicKey) {\n signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64');\n var result = inner(thing, signature, publicKey);\n return result;\n };\n}\n\nfunction createNoneSigner() {\n return function sign() {\n return '';\n }\n}\n\nfunction createNoneVerifier() {\n return function verify(thing, signature) {\n return signature === '';\n }\n}\n\nmodule.exports = function jwa(algorithm) {\n var signerFactories = {\n hs: createHmacSigner,\n rs: createKeySigner,\n ps: createPSSKeySigner,\n es: createECDSASigner,\n none: createNoneSigner,\n }\n var verifierFactories = {\n hs: createHmacVerifier,\n rs: createKeyVerifier,\n ps: createPSSKeyVerifier,\n es: createECDSAVerifer,\n none: createNoneVerifier,\n }\n var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i);\n if (!match)\n throw typeError(MSG_INVALID_ALGORITHM, algorithm);\n var algo = (match[1] || match[3]).toLowerCase();\n var bits = match[2];\n\n return {\n sign: signerFactories[algo](bits),\n verify: verifierFactories[algo](bits),\n }\n};\n","/*global exports*/\nvar SignStream = require('./lib/sign-stream');\nvar VerifyStream = require('./lib/verify-stream');\n\nvar ALGORITHMS = [\n 'HS256', 'HS384', 'HS512',\n 'RS256', 'RS384', 'RS512',\n 'PS256', 'PS384', 'PS512',\n 'ES256', 'ES384', 'ES512'\n];\n\nexports.ALGORITHMS = ALGORITHMS;\nexports.sign = SignStream.sign;\nexports.verify = VerifyStream.verify;\nexports.decode = VerifyStream.decode;\nexports.isValid = VerifyStream.isValid;\nexports.createSign = function createSign(opts) {\n return new SignStream(opts);\n};\nexports.createVerify = function createVerify(opts) {\n return new VerifyStream(opts);\n};\n","/*global module, process*/\nvar Buffer = require('safe-buffer').Buffer;\nvar Stream = require('stream');\nvar util = require('util');\n\nfunction DataStream(data) {\n this.buffer = null;\n this.writable = true;\n this.readable = true;\n\n // No input\n if (!data) {\n this.buffer = Buffer.alloc(0);\n return this;\n }\n\n // Stream\n if (typeof data.pipe === 'function') {\n this.buffer = Buffer.alloc(0);\n data.pipe(this);\n return this;\n }\n\n // Buffer or String\n // or Object (assumedly a passworded key)\n if (data.length || typeof data === 'object') {\n this.buffer = data;\n this.writable = false;\n process.nextTick(function () {\n this.emit('end', data);\n this.readable = false;\n this.emit('close');\n }.bind(this));\n return this;\n }\n\n throw new TypeError('Unexpected data type ('+ typeof data + ')');\n}\nutil.inherits(DataStream, Stream);\n\nDataStream.prototype.write = function write(data) {\n this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]);\n this.emit('data', data);\n};\n\nDataStream.prototype.end = function end(data) {\n if (data)\n this.write(data);\n this.emit('end', data);\n this.emit('close');\n this.writable = false;\n this.readable = false;\n};\n\nmodule.exports = DataStream;\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\n\nfunction base64url(string, encoding) {\n return Buffer\n .from(string, encoding)\n .toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction jwsSecuredInput(header, payload, encoding) {\n encoding = encoding || 'utf8';\n var encodedHeader = base64url(toString(header), 'binary');\n var encodedPayload = base64url(toString(payload), encoding);\n return util.format('%s.%s', encodedHeader, encodedPayload);\n}\n\nfunction jwsSign(opts) {\n var header = opts.header;\n var payload = opts.payload;\n var secretOrKey = opts.secret || opts.privateKey;\n var encoding = opts.encoding;\n var algo = jwa(header.alg);\n var securedInput = jwsSecuredInput(header, payload, encoding);\n var signature = algo.sign(securedInput, secretOrKey);\n return util.format('%s.%s', securedInput, signature);\n}\n\nfunction SignStream(opts) {\n var secret = opts.secret||opts.privateKey||opts.key;\n var secretStream = new DataStream(secret);\n this.readable = true;\n this.header = opts.header;\n this.encoding = opts.encoding;\n this.secret = this.privateKey = this.key = secretStream;\n this.payload = new DataStream(opts.payload);\n this.secret.once('close', function () {\n if (!this.payload.writable && this.readable)\n this.sign();\n }.bind(this));\n\n this.payload.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.sign();\n }.bind(this));\n}\nutil.inherits(SignStream, Stream);\n\nSignStream.prototype.sign = function sign() {\n try {\n var signature = jwsSign({\n header: this.header,\n payload: this.payload.buffer,\n secret: this.secret.buffer,\n encoding: this.encoding\n });\n this.emit('done', signature);\n this.emit('data', signature);\n this.emit('end');\n this.readable = false;\n return signature;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nSignStream.sign = jwsSign;\n\nmodule.exports = SignStream;\n","/*global module*/\nvar Buffer = require('buffer').Buffer;\n\nmodule.exports = function toString(obj) {\n if (typeof obj === 'string')\n return obj;\n if (typeof obj === 'number' || Buffer.isBuffer(obj))\n return obj.toString();\n return JSON.stringify(obj);\n};\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\nvar JWS_REGEX = /^[a-zA-Z0-9\\-_]+?\\.[a-zA-Z0-9\\-_]+?\\.([a-zA-Z0-9\\-_]+)?$/;\n\nfunction isObject(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction safeJsonParse(thing) {\n if (isObject(thing))\n return thing;\n try { return JSON.parse(thing); }\n catch (e) { return undefined; }\n}\n\nfunction headerFromJWS(jwsSig) {\n var encodedHeader = jwsSig.split('.', 1)[0];\n return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary'));\n}\n\nfunction securedInputFromJWS(jwsSig) {\n return jwsSig.split('.', 2).join('.');\n}\n\nfunction signatureFromJWS(jwsSig) {\n return jwsSig.split('.')[2];\n}\n\nfunction payloadFromJWS(jwsSig, encoding) {\n encoding = encoding || 'utf8';\n var payload = jwsSig.split('.')[1];\n return Buffer.from(payload, 'base64').toString(encoding);\n}\n\nfunction isValidJws(string) {\n return JWS_REGEX.test(string) && !!headerFromJWS(string);\n}\n\nfunction jwsVerify(jwsSig, algorithm, secretOrKey) {\n if (!algorithm) {\n var err = new Error(\"Missing algorithm parameter for jws.verify\");\n err.code = \"MISSING_ALGORITHM\";\n throw err;\n }\n jwsSig = toString(jwsSig);\n var signature = signatureFromJWS(jwsSig);\n var securedInput = securedInputFromJWS(jwsSig);\n var algo = jwa(algorithm);\n return algo.verify(securedInput, signature, secretOrKey);\n}\n\nfunction jwsDecode(jwsSig, opts) {\n opts = opts || {};\n jwsSig = toString(jwsSig);\n\n if (!isValidJws(jwsSig))\n return null;\n\n var header = headerFromJWS(jwsSig);\n\n if (!header)\n return null;\n\n var payload = payloadFromJWS(jwsSig);\n if (header.typ === 'JWT' || opts.json)\n payload = JSON.parse(payload, opts.encoding);\n\n return {\n header: header,\n payload: payload,\n signature: signatureFromJWS(jwsSig)\n };\n}\n\nfunction VerifyStream(opts) {\n opts = opts || {};\n var secretOrKey = opts.secret||opts.publicKey||opts.key;\n var secretStream = new DataStream(secretOrKey);\n this.readable = true;\n this.algorithm = opts.algorithm;\n this.encoding = opts.encoding;\n this.secret = this.publicKey = this.key = secretStream;\n this.signature = new DataStream(opts.signature);\n this.secret.once('close', function () {\n if (!this.signature.writable && this.readable)\n this.verify();\n }.bind(this));\n\n this.signature.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.verify();\n }.bind(this));\n}\nutil.inherits(VerifyStream, Stream);\nVerifyStream.prototype.verify = function verify() {\n try {\n var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer);\n var obj = jwsDecode(this.signature.buffer, this.encoding);\n this.emit('done', valid, obj);\n this.emit('data', valid);\n this.emit('end');\n this.readable = false;\n return valid;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nVerifyStream.decode = jwsDecode;\nVerifyStream.isValid = isValidJws;\nVerifyStream.verify = jwsVerify;\n\nmodule.exports = VerifyStream;\n","var slice = Array.prototype.slice;\n\n// our constructor\nfunction KeyTreeStore(options) {\n options = options || {};\n if (typeof options !== 'object') {\n throw new TypeError('Options must be an object');\n }\n var DEFAULT_SEPARATOR = '.';\n\n this.storage = {};\n this.separator = options.separator || DEFAULT_SEPARATOR;\n}\n\n// add an object to the store\nKeyTreeStore.prototype.add = function (keypath, obj) {\n var arr = this.storage[keypath] || (this.storage[keypath] = []);\n arr.push(obj);\n};\n\n// remove an object\nKeyTreeStore.prototype.remove = function (obj) {\n var path, arr;\n for (path in this.storage) {\n arr = this.storage[path];\n arr.some(function (item, index) {\n if (item === obj) {\n arr.splice(index, 1);\n return true;\n }\n });\n }\n};\n\n// get array of all all relevant functions, without keys\nKeyTreeStore.prototype.get = function (keypath) {\n var res = [];\n var key;\n\n for (key in this.storage) {\n if (!keypath || keypath === key || key.indexOf(keypath + this.separator) === 0) {\n res = res.concat(this.storage[key]);\n }\n }\n\n return res;\n};\n\n// get all results that match keypath but still grouped by key\nKeyTreeStore.prototype.getGrouped = function (keypath) {\n var res = {};\n var key;\n\n for (key in this.storage) {\n if (!keypath || keypath === key || key.indexOf(keypath + this.separator) === 0) {\n res[key] = slice.call(this.storage[key]);\n }\n }\n\n return res;\n};\n\n// get all results that match keypath but still grouped by key\nKeyTreeStore.prototype.getAll = function (keypath) {\n var res = {};\n var key;\n\n for (key in this.storage) {\n if (keypath === key || key.indexOf(keypath + this.separator) === 0) {\n res[key] = slice.call(this.storage[key]);\n }\n }\n\n return res;\n};\n\n// run all matches with optional context\nKeyTreeStore.prototype.run = function (keypath, context) {\n var args = slice.call(arguments, 2);\n this.get(keypath).forEach(function (fn) {\n fn.apply(context || this, args);\n });\n};\n\nmodule.exports = KeyTreeStore;\n","/**\n * lodash 3.0.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.7.0 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * lodash 3.0.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.7.0 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * lodash 3.2.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseCopy = require('lodash._basecopy'),\n keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return source == null\n ? object\n : baseCopy(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * lodash 3.3.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar arrayCopy = require('lodash._arraycopy'),\n arrayEach = require('lodash._arrayeach'),\n baseAssign = require('lodash._baseassign'),\n baseFor = require('lodash._basefor'),\n isArray = require('lodash.isarray'),\n keys = require('lodash.keys');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\ncloneableTags[dateTag] = cloneableTags[float32Tag] =\ncloneableTags[float64Tag] = cloneableTags[int8Tag] =\ncloneableTags[int16Tag] = cloneableTags[int32Tag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[stringTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[mapTag] = cloneableTags[setTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Native method references. */\nvar ArrayBuffer = global.ArrayBuffer,\n Uint8Array = global.Uint8Array;\n\n/**\n * The base implementation of `_.clone` without support for argument juggling\n * and `this` binding `customizer` functions.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {Function} [customizer] The function to customize cloning values.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The object `value` belongs to.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates clones with source counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return arrayCopy(value, result);\n }\n } else {\n var tag = objToString.call(value),\n isFunc = tag == funcTag;\n\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return baseAssign(result, value);\n }\n } else {\n return cloneableTags[tag]\n ? initCloneByTag(value, tag, isDeep)\n : (object ? value : {});\n }\n }\n // Check for circular references and return its corresponding clone.\n stackA || (stackA = []);\n stackB || (stackB = []);\n\n var length = stackA.length;\n while (length--) {\n if (stackA[length] == value) {\n return stackB[length];\n }\n }\n // Add the source value to the stack of traversed objects and associate it with its clone.\n stackA.push(value);\n stackB.push(result);\n\n // Recursively populate clone (susceptible to call stack limits).\n (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n });\n return result;\n}\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return baseFor(object, iteratee, keys);\n}\n\n/**\n * Creates a clone of the given array buffer.\n *\n * @private\n * @param {ArrayBuffer} buffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction bufferClone(buffer) {\n var result = new ArrayBuffer(buffer.byteLength),\n view = new Uint8Array(result);\n\n view.set(new Uint8Array(buffer));\n return result;\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add array properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n var Ctor = object.constructor;\n if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n Ctor = Object;\n }\n return new Ctor;\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return bufferClone(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n var buffer = object.buffer;\n return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n var result = new Ctor(object.source, reFlags.exec(object));\n result.lastIndex = object.lastIndex;\n }\n return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseClone;\n","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * Creates a base function for methods like `_.forIn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = baseFor;\n","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = bindCallback;\n","/**\n * lodash 3.9.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n","/**\n * lodash 3.0.9 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseClone = require('lodash._baseclone'),\n bindCallback = require('lodash._bindcallback'),\n isIterateeCall = require('lodash._isiterateecall');\n\n/**\n * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,\n * otherwise they are assigned by reference. If `customizer` is provided it's\n * invoked to produce the cloned values. If `customizer` returns `undefined`\n * cloning is handled by the method instead. The `customizer` is bound to\n * `thisArg` and invoked with up to three argument; (value [, index|key, object]).\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\n * The enumerable properties of `arguments` objects and objects created by\n * constructors other than `Object` are cloned to plain `Object` objects. An\n * empty object is returned for uncloneable values such as functions, DOM nodes,\n * Maps, Sets, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {Function} [customizer] The function to customize cloning values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {*} Returns the cloned value.\n * @example\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * var shallow = _.clone(users);\n * shallow[0] === users[0];\n * // => true\n *\n * var deep = _.clone(users, true);\n * deep[0] === users[0];\n * // => false\n *\n * // using a customizer callback\n * var el = _.clone(document.body, function(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * });\n *\n * el === document.body\n * // => false\n * el.nodeName\n * // => BODY\n * el.childNodes.length;\n * // => 0\n */\nfunction clone(value, isDeep, customizer, thisArg) {\n if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n isDeep = false;\n }\n else if (typeof isDeep == 'function') {\n thisArg = customizer;\n customizer = isDeep;\n isDeep = false;\n }\n return typeof customizer == 'function'\n ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 3))\n : baseClone(value, isDeep);\n}\n\nmodule.exports = clone;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object ? baseValues(object, keys(object)) : [];\n}\n\nmodule.exports = includes;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isArguments;\n","/**\n * lodash 3.0.4 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = isInteger;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && objectToString.call(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) ||\n objectToString.call(value) != objectTag || isHostObject(value)) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\n","/**\n * lodash 4.0.1 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * lodash 3.1.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar getNative = require('lodash._getnative'),\n isArguments = require('lodash.isarguments'),\n isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object != 'function' && isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n result = Array(length),\n skipIndexes = length > 0;\n\n while (++index < length) {\n result[index] = (index + '');\n }\n for (var key in object) {\n if (!(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keys;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var baseCreate = require('./_baseCreate'),\n baseLodash = require('./_baseLodash');\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\nfunction LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n}\n\n// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype = baseCreate(baseLodash.prototype);\nLazyWrapper.prototype.constructor = LazyWrapper;\n\nmodule.exports = LazyWrapper;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var baseCreate = require('./_baseCreate'),\n baseLodash = require('./_baseLodash');\n\n/**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\nfunction LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n}\n\nLodashWrapper.prototype = baseCreate(baseLodash.prototype);\nLodashWrapper.prototype.constructor = LodashWrapper;\n\nmodule.exports = LodashWrapper;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nmodule.exports = baseClamp;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nmodule.exports = baseDelay;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var toInteger = require('./toInteger'),\n toLength = require('./toLength');\n\n/**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\nfunction baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n}\n\nmodule.exports = baseFill;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseIntersection;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar dateTag = '[object Date]';\n\n/**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\nfunction baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n}\n\nmodule.exports = baseIsDate;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\nfunction baseLodash() {\n // No operation performed.\n}\n\nmodule.exports = baseLodash;\n","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n","var baseSum = require('./_baseSum');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\nfunction baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n}\n\nmodule.exports = baseMean;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var arrayMap = require('./_arrayMap'),\n baseGet = require('./_baseGet'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var baseUnset = require('./_baseUnset'),\n isIndex = require('./_isIndex');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n}\n\nmodule.exports = basePullAt;\n","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var identity = require('./identity'),\n metaMap = require('./_metaMap');\n\n/**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n};\n\nmodule.exports = baseSetData;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n","/**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\nfunction baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n}\n\nmodule.exports = baseSum;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nmodule.exports = castArrayLikeObject;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n}\n\nmodule.exports = composeArgs;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n}\n\nmodule.exports = composeArgsRight;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\nfunction countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n}\n\nmodule.exports = countHolders;\n","var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var createCtor = require('./_createCtor'),\n root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\n\n/**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n}\n\nmodule.exports = createBind;\n","var castSlice = require('./_castSlice'),\n hasUnicode = require('./_hasUnicode'),\n stringToArray = require('./_stringToArray'),\n toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nmodule.exports = createCaseFirst;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","var baseCreate = require('./_baseCreate'),\n isObject = require('./isObject');\n\n/**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n}\n\nmodule.exports = createCtor;\n","var apply = require('./_apply'),\n createCtor = require('./_createCtor'),\n createHybrid = require('./_createHybrid'),\n createRecurry = require('./_createRecurry'),\n getHolder = require('./_getHolder'),\n replaceHolders = require('./_replaceHolders'),\n root = require('./_root');\n\n/**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n}\n\nmodule.exports = createCurry;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","var composeArgs = require('./_composeArgs'),\n composeArgsRight = require('./_composeArgsRight'),\n countHolders = require('./_countHolders'),\n createCtor = require('./_createCtor'),\n createRecurry = require('./_createRecurry'),\n getHolder = require('./_getHolder'),\n reorder = require('./_reorder'),\n replaceHolders = require('./_replaceHolders'),\n root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_ARY_FLAG = 128,\n WRAP_FLIP_FLAG = 512;\n\n/**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n}\n\nmodule.exports = createHybrid;\n","var apply = require('./_apply'),\n createCtor = require('./_createCtor'),\n root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\n\n/**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n}\n\nmodule.exports = createPartial;\n","var isLaziable = require('./_isLaziable'),\n setData = require('./_setData'),\n setWrapToString = require('./_setWrapToString');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n}\n\nmodule.exports = createRecurry;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var baseSetData = require('./_baseSetData'),\n createBind = require('./_createBind'),\n createCurry = require('./_createCurry'),\n createHybrid = require('./_createHybrid'),\n createPartial = require('./_createPartial'),\n getData = require('./_getData'),\n mergeData = require('./_mergeData'),\n setData = require('./_setData'),\n setWrapToString = require('./_setWrapToString'),\n toInteger = require('./toInteger');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n}\n\nmodule.exports = createWrap;\n","var baseMerge = require('./_baseMerge'),\n isObject = require('./isObject');\n\n/**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n}\n\nmodule.exports = customDefaultsMerge;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nvar escapeHtmlChar = basePropertyOf(htmlEscapes);\n\nmodule.exports = escapeHtmlChar;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var metaMap = require('./_metaMap'),\n noop = require('./noop');\n\n/**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\nvar getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n};\n\nmodule.exports = getData;\n","var realNames = require('./_realNames');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\nfunction getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n}\n\nmodule.exports = getFuncName;\n","/**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\nfunction getHolder(func) {\n var object = func;\n return object.placeholder;\n}\n\nmodule.exports = getHolder;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/** Used to match wrap detail comments. */\nvar reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n/**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\nfunction getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n}\n\nmodule.exports = getWrapDetails;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","/** Used to match wrap detail comments. */\nvar reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/;\n\n/**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\nfunction insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n}\n\nmodule.exports = insertWrapDetails;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var LazyWrapper = require('./_LazyWrapper'),\n getData = require('./_getData'),\n getFuncName = require('./_getFuncName'),\n lodash = require('./wrapperLodash');\n\n/**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\nfunction isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n}\n\nmodule.exports = isLaziable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var composeArgs = require('./_composeArgs'),\n composeArgsRight = require('./_composeArgsRight'),\n replaceHolders = require('./_replaceHolders');\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\nfunction mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n}\n\nmodule.exports = mergeData;\n","var WeakMap = require('./_WeakMap');\n\n/** Used to store function metadata. */\nvar metaMap = WeakMap && new WeakMap;\n\nmodule.exports = metaMap;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","/** Used to lookup unminified function names. */\nvar realNames = {};\n\nmodule.exports = realNames;\n","var copyArray = require('./_copyArray'),\n isIndex = require('./_isIndex');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\nfunction reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n}\n\nmodule.exports = reorder;\n","/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\nfunction replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n}\n\nmodule.exports = replaceHolders;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var baseSetData = require('./_baseSetData'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar setData = shortOut(baseSetData);\n\nmodule.exports = setData;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var getWrapDetails = require('./_getWrapDetails'),\n insertWrapDetails = require('./_insertWrapDetails'),\n setToString = require('./_setToString'),\n updateWrapDetails = require('./_updateWrapDetails');\n\n/**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\nfunction setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n}\n\nmodule.exports = setWrapToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var asciiToArray = require('./_asciiToArray'),\n hasUnicode = require('./_hasUnicode'),\n unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var arrayEach = require('./_arrayEach'),\n arrayIncludes = require('./_arrayIncludes');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n/** Used to associate wrap methods with their bit flags. */\nvar wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n];\n\n/**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\nfunction updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n}\n\nmodule.exports = updateWrapDetails;\n","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n copyArray = require('./_copyArray');\n\n/**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\nfunction wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n}\n\nmodule.exports = wrapperClone;\n","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n","var copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n keys = require('./keys');\n\n/**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n});\n\nmodule.exports = assignWith;\n","var toInteger = require('./toInteger');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\nmodule.exports = before;\n","var baseRest = require('./_baseRest'),\n createWrap = require('./_createWrap'),\n getHolder = require('./_getHolder'),\n replaceHolders = require('./_replaceHolders');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n WRAP_PARTIAL_FLAG = 32;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\nvar bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n});\n\n// Assign default placeholders.\nbind.placeholder = {};\n\nmodule.exports = bind;\n","var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n","var toString = require('./toString'),\n upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\nfunction cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n}\n\nmodule.exports = cloneDeepWith;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","var createWrap = require('./_createWrap');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_CURRY_FLAG = 8;\n\n/**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\nfunction curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n}\n\n// Assign default placeholders.\ncurry.placeholder = {};\n\nmodule.exports = curry;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var deburrLetter = require('./_deburrLetter'),\n toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","var baseRest = require('./_baseRest'),\n eq = require('./eq'),\n isIterateeCall = require('./_isIterateeCall'),\n keysIn = require('./keysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nmodule.exports = defaults;\n","var apply = require('./_apply'),\n baseRest = require('./_baseRest'),\n customDefaultsMerge = require('./_customDefaultsMerge'),\n mergeWith = require('./mergeWith');\n\n/**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\nvar defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n});\n\nmodule.exports = defaultsDeep;\n","var baseDelay = require('./_baseDelay'),\n baseRest = require('./_baseRest');\n\n/**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\nvar defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n});\n\nmodule.exports = defer;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nmodule.exports = difference;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var escapeHtmlChar = require('./_escapeHtmlChar'),\n toString = require('./toString');\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"']/g,\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\nfunction escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n}\n\nmodule.exports = escape;\n","var baseFill = require('./_baseFill'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\nfunction fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n}\n\nmodule.exports = fill;\n","var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseForOwn = require('./_baseForOwn'),\n castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","var arrayMap = require('./_arrayMap'),\n baseIntersection = require('./_baseIntersection'),\n baseRest = require('./_baseRest'),\n castArrayLikeObject = require('./_castArrayLikeObject');\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nmodule.exports = intersection;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseIsDate = require('./_baseIsDate'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsDate = nodeUtil && nodeUtil.isDate;\n\n/**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\nvar isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\nmodule.exports = isDate;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","var baseMean = require('./_baseMean'),\n identity = require('./identity');\n\n/**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\nfunction mean(array) {\n return baseMean(array, identity);\n}\n\nmodule.exports = mean;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n});\n\nmodule.exports = mergeWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n});\n\nmodule.exports = omit;\n","var before = require('./before');\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\nmodule.exports = once;\n","var baseRest = require('./_baseRest'),\n createWrap = require('./_createWrap'),\n getHolder = require('./_getHolder'),\n replaceHolders = require('./_replaceHolders');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_PARTIAL_FLAG = 32;\n\n/**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\nvar partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n});\n\n// Assign default placeholders.\npartial.placeholder = {};\n\nmodule.exports = partial;\n","var baseRest = require('./_baseRest'),\n createWrap = require('./_createWrap'),\n getHolder = require('./_getHolder'),\n replaceHolders = require('./_replaceHolders');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\nvar partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n});\n\n// Assign default placeholders.\npartialRight.placeholder = {};\n\nmodule.exports = partialRight;\n","var createAggregator = require('./_createAggregator');\n\n/**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\nvar partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nmodule.exports = partition;\n","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var arrayReduce = require('./_arrayReduce'),\n baseEach = require('./_baseEach'),\n baseIteratee = require('./_baseIteratee'),\n baseReduce = require('./_baseReduce'),\n isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var baseIteratee = require('./_baseIteratee'),\n basePullAt = require('./_basePullAt');\n\n/**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\nfunction remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = baseIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n}\n\nmodule.exports = remove;\n","var castPath = require('./_castPath'),\n isFunction = require('./isFunction'),\n toKey = require('./_toKey');\n\n/**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\nfunction result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n}\n\nmodule.exports = result;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n","var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseClamp = require('./_baseClamp'),\n toInteger = require('./toInteger');\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\nfunction toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n}\n\nmodule.exports = toLength;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n baseUniq = require('./_baseUniq'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","var toString = require('./toString');\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nmodule.exports = uniqueId;\n","var baseUnset = require('./_baseUnset');\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n}\n\nmodule.exports = unset;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var baseValues = require('./_baseValues'),\n keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var asciiWords = require('./_asciiWords'),\n hasUnicodeWord = require('./_hasUnicodeWord'),\n toString = require('./toString'),\n unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var castFunction = require('./_castFunction'),\n partial = require('./partial');\n\n/**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\nfunction wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n}\n\nmodule.exports = wrap;\n","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n baseLodash = require('./_baseLodash'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike'),\n wrapperClone = require('./_wrapperClone');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\nfunction lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n}\n\n// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype = baseLodash.prototype;\nlodash.prototype.constructor = lodash;\n\nmodule.exports = lodash;\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n this._types = Object.create(null);\n this._extensions = Object.create(null);\n\n for (let i = 0; i < arguments.length; i++) {\n this.define(arguments[i]);\n }\n\n this.define = this.define.bind(this);\n this.getType = this.getType.bind(this);\n this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown. To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true. Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n for (let type in typeMap) {\n let extensions = typeMap[type].map(function(t) {\n return t.toLowerCase();\n });\n type = type.toLowerCase();\n\n for (let i = 0; i < extensions.length; i++) {\n const ext = extensions[i];\n\n // '*' prefix = not the preferred type for this extension. So fixup the\n // extension, and skip it.\n if (ext[0] === '*') {\n continue;\n }\n\n if (!force && (ext in this._types)) {\n throw new Error(\n 'Attempt to change mapping for \"' + ext +\n '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n '\" from the list of extensions for \"' + type + '\".'\n );\n }\n\n this._types[ext] = type;\n }\n\n // Use first extension as default\n if (force || !this._extensions[type]) {\n const ext = extensions[0];\n this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n }\n }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n path = String(path);\n let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n let hasPath = last.length < path.length;\n let hasDot = ext.length < last.length - 1;\n\n return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'), require('./types/other'));\n","module.exports = {\"application/prs.cww\":[\"cww\"],\"application/vnd.1000minds.decision-model+xml\":[\"1km\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.keynote\":[\"key\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.numbers\":[\"numbers\"],\"application/vnd.apple.pages\":[\"pages\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.balsamiq.bmml+xml\":[\"bmml\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.citationstyles.style+xml\":[\"csl\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dbf\":[\"dbf\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mapbox-vector-tile\":[\"mvt\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"*stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.ac+xml\":[\"*ac\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openblox.game+xml\":[\"obgx\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openstreetmap.data+xml\":[\"osm\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.rar\":[\"rar\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.software602.filler.form+xml\":[\"fo\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.syncml.dmddf+xml\":[\"ddf\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[\"*dmg\"],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[\"*bdoc\"],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"*deb\",\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[\"*iso\"],\"application/x-iwork-keynote-sffkey\":[\"*key\"],\"application/x-iwork-numbers-sffnumbers\":[\"*numbers\"],\"application/x-iwork-pages-sffpages\":[\"*pages\"],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-keepass2\":[\"kdbx\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[\"*exe\"],\"application/x-msdownload\":[\"*exe\",\"*dll\",\"com\",\"bat\",\"*msi\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"*wmf\",\"*wmz\",\"*emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[\"*prc\",\"*pdb\"],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"*rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"*obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"*xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[\"*m4a\"],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[\"*ra\"],\"audio/x-wav\":[\"*wav\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"image/prs.btif\":[\"btif\"],\"image/prs.pti\":[\"pti\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.airzip.accelerator.azv\":[\"azv\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[\"*sub\"],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.microsoft.icon\":[\"ico\"],\"image/vnd.ms-dds\":[\"dds\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.pco.b16\":[\"b16\"],\"image/vnd.tencent.tap\":[\"tap\"],\"image/vnd.valve.source.texture\":[\"vtf\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/vnd.zbrush.pcx\":[\"pcx\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"*ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[\"*bmp\"],\"image/x-pcx\":[\"*pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/vnd.wfa.wsc\":[\"wsc\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.opengex\":[\"ogex\"],\"model/vnd.parasolid.transmit.binary\":[\"x_b\"],\"model/vnd.parasolid.transmit.text\":[\"x_t\"],\"model/vnd.sap.vds\":[\"vds\"],\"model/vnd.usdz+zip\":[\"usdz\"],\"model/vnd.valve.source.compiled-map\":[\"bsp\"],\"model/vnd.vtu\":[\"vtu\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[\"*org\"],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]};","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"es\",\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/express\":[\"exp\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/trig\":[\"trig\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/amr\":[\"amr\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\",\"opus\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/step+xml\":[\"stpx\"],\"model/step+zip\":[\"stpz\"],\"model/step-xml+zip\":[\"stpxz\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/iso.segment\":[\"m4s\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/**\n * Advanced Encryption Standard (AES) implementation.\n *\n * This implementation is based on the public domain library 'jscrypto' which\n * was written by:\n *\n * Emily Stark (estark@stanford.edu)\n * Mike Hamburg (mhamburg@stanford.edu)\n * Dan Boneh (dabo@cs.stanford.edu)\n *\n * Parts of this code are based on the OpenSSL implementation of AES:\n * http://www.openssl.org\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* AES API */\nmodule.exports = forge.aes = forge.aes || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-', key);\n * cipher.start({iv: iv});\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-', key);\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-', key);\n * decipher.start({iv: iv});\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-', key);\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new AES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the AES algorithm object.\n */\nforge.aes.Algorithm = function(name, mode) {\n if(!init) {\n initialize();\n }\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 16,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this AES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.aes.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = options.key;\n var tmp;\n\n /* Note: The key may be a string of bytes, an array of bytes, a byte\n buffer, or an array of 32-bit integers. If the key is in bytes, then\n it must be 16, 24, or 32 bytes in length. If it is in 32-bit\n integers, it must be 4, 6, or 8 integers long. */\n\n if(typeof key === 'string' &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key) &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key integer array into byte buffer\n tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // convert key byte buffer into 32-bit integer array\n if(!forge.util.isArray(key)) {\n tmp = key;\n key = [];\n\n // key lengths of 16, 24, 32 bytes allowed\n var len = tmp.length();\n if(len === 16 || len === 24 || len === 32) {\n len = len >>> 2;\n for(var i = 0; i < len; ++i) {\n key.push(tmp.getInt32());\n }\n }\n }\n\n // key must be an array of 32-bit integers by now\n if(!forge.util.isArray(key) ||\n !(key.length === 4 || key.length === 6 || key.length === 8)) {\n throw new Error('Invalid key parameter.');\n }\n\n // encryption operation is always used for these modes\n var mode = this.mode.name;\n var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1);\n\n // do key expansion\n this._w = _expandKey(key, options.decrypt && !encryptOp);\n this._init = true;\n};\n\n/**\n * Expands a key. Typically only used for testing.\n *\n * @param key the symmetric key to expand, as an array of 32-bit words.\n * @param decrypt true to expand for decryption, false for encryption.\n *\n * @return the expanded key.\n */\nforge.aes._expandKey = function(key, decrypt) {\n if(!init) {\n initialize();\n }\n return _expandKey(key, decrypt);\n};\n\n/**\n * Updates a single block. Typically only used for testing.\n *\n * @param w the expanded key to use.\n * @param input an array of block-size 32-bit words.\n * @param output an array of block-size 32-bit words.\n * @param decrypt true to decrypt, false to encrypt.\n */\nforge.aes._updateBlock = _updateBlock;\n\n/** Register AES algorithms **/\n\nregisterAlgorithm('AES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('AES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('AES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('AES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('AES-CTR', forge.cipher.modes.ctr);\nregisterAlgorithm('AES-GCM', forge.cipher.modes.gcm);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.aes.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** AES implementation **/\n\nvar init = false; // not yet initialized\nvar Nb = 4; // number of words comprising the state (AES = 4)\nvar sbox; // non-linear substitution table used in key expansion\nvar isbox; // inversion of sbox\nvar rcon; // round constant word array\nvar mix; // mix-columns table\nvar imix; // inverse mix-columns table\n\n/**\n * Performs initialization, ie: precomputes tables to optimize for speed.\n *\n * One way to understand how AES works is to imagine that 'addition' and\n * 'multiplication' are interfaces that require certain mathematical\n * properties to hold true (ie: they are associative) but they might have\n * different implementations and produce different kinds of results ...\n * provided that their mathematical properties remain true. AES defines\n * its own methods of addition and multiplication but keeps some important\n * properties the same, ie: associativity and distributivity. The\n * explanation below tries to shed some light on how AES defines addition\n * and multiplication of bytes and 32-bit words in order to perform its\n * encryption and decryption algorithms.\n *\n * The basics:\n *\n * The AES algorithm views bytes as binary representations of polynomials\n * that have either 1 or 0 as the coefficients. It defines the addition\n * or subtraction of two bytes as the XOR operation. It also defines the\n * multiplication of two bytes as a finite field referred to as GF(2^8)\n * (Note: 'GF' means \"Galois Field\" which is a field that contains a finite\n * number of elements so GF(2^8) has 256 elements).\n *\n * This means that any two bytes can be represented as binary polynomials;\n * when they multiplied together and modularly reduced by an irreducible\n * polynomial of the 8th degree, the results are the field GF(2^8). The\n * specific irreducible polynomial that AES uses in hexadecimal is 0x11b.\n * This multiplication is associative with 0x01 as the identity:\n *\n * (b * 0x01 = GF(b, 0x01) = b).\n *\n * The operation GF(b, 0x02) can be performed at the byte level by left\n * shifting b once and then XOR'ing it (to perform the modular reduction)\n * with 0x11b if b is >= 128. Repeated application of the multiplication\n * of 0x02 can be used to implement the multiplication of any two bytes.\n *\n * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can\n * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these\n * factors can each be multiplied by 0x57 and then added together. To do\n * the multiplication, values for 0x57 multiplied by each of these 3 factors\n * can be precomputed and stored in a table. To add them, the values from\n * the table are XOR'd together.\n *\n * AES also defines addition and multiplication of words, that is 4-byte\n * numbers represented as polynomials of 3 degrees where the coefficients\n * are the values of the bytes.\n *\n * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0.\n *\n * Addition is performed by XOR'ing like powers of x. Multiplication\n * is performed in two steps, the first is an algebriac expansion as\n * you would do normally (where addition is XOR). But the result is\n * a polynomial larger than 3 degrees and thus it cannot fit in a word. So\n * next the result is modularly reduced by an AES-specific polynomial of\n * degree 4 which will always produce a polynomial of less than 4 degrees\n * such that it will fit in a word. In AES, this polynomial is x^4 + 1.\n *\n * The modular product of two polynomials 'a' and 'b' is thus:\n *\n * d(x) = d3x^3 + d2x^2 + d1x + d0\n * with\n * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3)\n * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3)\n * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3)\n * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3)\n *\n * As a matrix:\n *\n * [d0] = [a0 a3 a2 a1][b0]\n * [d1] [a1 a0 a3 a2][b1]\n * [d2] [a2 a1 a0 a3][b2]\n * [d3] [a3 a2 a1 a0][b3]\n *\n * Special polynomials defined by AES (0x02 == {02}):\n * a(x) = {03}x^3 + {01}x^2 + {01}x + {02}\n * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}.\n *\n * These polynomials are used in the MixColumns() and InverseMixColumns()\n * operations, respectively, to cause each element in the state to affect\n * the output (referred to as diffusing).\n *\n * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the\n * polynomial x3.\n *\n * The ShiftRows() method modifies the last 3 rows in the state (where\n * the state is 4 words with 4 bytes per word) by shifting bytes cyclically.\n * The 1st byte in the second row is moved to the end of the row. The 1st\n * and 2nd bytes in the third row are moved to the end of the row. The 1st,\n * 2nd, and 3rd bytes are moved in the fourth row.\n *\n * More details on how AES arithmetic works:\n *\n * In the polynomial representation of binary numbers, XOR performs addition\n * and subtraction and multiplication in GF(2^8) denoted as GF(a, b)\n * corresponds with the multiplication of polynomials modulo an irreducible\n * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply\n * polynomial 'a' with polynomial 'b' and then do a modular reduction by\n * an AES-specific irreducible polynomial of degree 8.\n *\n * A polynomial is irreducible if its only divisors are one and itself. For\n * the AES algorithm, this irreducible polynomial is:\n *\n * m(x) = x^8 + x^4 + x^3 + x + 1,\n *\n * or {01}{1b} in hexadecimal notation, where each coefficient is a bit:\n * 100011011 = 283 = 0x11b.\n *\n * For example, GF(0x57, 0x83) = 0xc1 because\n *\n * 0x57 = 87 = 01010111 = x^6 + x^4 + x^2 + x + 1\n * 0x85 = 131 = 10000101 = x^7 + x + 1\n *\n * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1)\n * = x^13 + x^11 + x^9 + x^8 + x^7 +\n * x^7 + x^5 + x^3 + x^2 + x +\n * x^6 + x^4 + x^2 + x + 1\n * = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y\n * y modulo (x^8 + x^4 + x^3 + x + 1)\n * = x^7 + x^6 + 1.\n *\n * The modular reduction by m(x) guarantees the result will be a binary\n * polynomial of less than degree 8, so that it can fit in a byte.\n *\n * The operation to multiply a binary polynomial b with x (the polynomial\n * x in binary representation is 00000010) is:\n *\n * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1\n *\n * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the\n * most significant bit is 0 in b) then the result is already reduced. If\n * it is 1, then we can reduce it by subtracting m(x) via an XOR.\n *\n * It follows that multiplication by x (00000010 or 0x02) can be implemented\n * by performing a left shift followed by a conditional bitwise XOR with\n * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by\n * higher powers of x can be implemented by repeated application of xtime().\n *\n * By adding intermediate results, multiplication by any constant can be\n * implemented. For instance:\n *\n * GF(0x57, 0x13) = 0xfe because:\n *\n * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1)\n *\n * Note: We XOR with 0x11b instead of 0x1b because in javascript our\n * datatype for b can be larger than 1 byte, so a left shift will not\n * automatically eliminate bits that overflow a byte ... by XOR'ing the\n * overflow bit with 1 (the extra one from 0x11b) we zero it out.\n *\n * GF(0x57, 0x02) = xtime(0x57) = 0xae\n * GF(0x57, 0x04) = xtime(0xae) = 0x47\n * GF(0x57, 0x08) = xtime(0x47) = 0x8e\n * GF(0x57, 0x10) = xtime(0x8e) = 0x07\n *\n * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10))\n *\n * And by the distributive property (since XOR is addition and GF() is\n * multiplication):\n *\n * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10)\n * = 0x57 ^ 0xae ^ 0x07\n * = 0xfe.\n */\nfunction initialize() {\n init = true;\n\n /* Populate the Rcon table. These are the values given by\n [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02)\n in the field of GF(2^8), where i starts at 1.\n\n rcon[0] = [0x00, 0x00, 0x00, 0x00]\n rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1\n rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2\n ...\n rcon[9] = [0x1B, 0x00, 0x00, 0x00] 2^(9-1) = 2^8 = 0x1B\n rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36\n\n We only store the first byte because it is the only one used.\n */\n rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36];\n\n // compute xtime table which maps i onto GF(i, 0x02)\n var xtime = new Array(256);\n for(var i = 0; i < 128; ++i) {\n xtime[i] = i << 1;\n xtime[i + 128] = (i + 128) << 1 ^ 0x11B;\n }\n\n // compute all other tables\n sbox = new Array(256);\n isbox = new Array(256);\n mix = new Array(4);\n imix = new Array(4);\n for(var i = 0; i < 4; ++i) {\n mix[i] = new Array(256);\n imix[i] = new Array(256);\n }\n var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime;\n for(var i = 0; i < 256; ++i) {\n /* We need to generate the SubBytes() sbox and isbox tables so that\n we can perform byte substitutions. This requires us to traverse\n all of the elements in GF, find their multiplicative inverses,\n and apply to each the following affine transformation:\n\n bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^\n b(i + 7) mod 8 ^ ci\n for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the\n ith bit of a byte c with the value {63} or {01100011}.\n\n It is possible to traverse every possible value in a Galois field\n using what is referred to as a 'generator'. There are many\n generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully\n traverse GF we iterate 255 times, multiplying by our generator\n each time.\n\n On each iteration we can determine the multiplicative inverse for\n the current element.\n\n Suppose there is an element in GF 'e'. For a given generator 'g',\n e = g^x. The multiplicative inverse of e is g^(255 - x). It turns\n out that if use the inverse of a generator as another generator\n it will produce all of the corresponding multiplicative inverses\n at the same time. For this reason, we choose 5 as our inverse\n generator because it only requires 2 multiplies and 1 add and its\n inverse, 82, requires relatively few operations as well.\n\n In order to apply the affine transformation, the multiplicative\n inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a\n bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and\n 'x'. Then 's' is left shifted and the high bit of 's' is made the\n low bit. The resulting value is stored in 's'. Then 'x' is XOR'd\n with 's' and stored in 'x'. On each subsequent iteration the same\n operation is performed. When 4 iterations are complete, 'x' is\n XOR'd with 'c' (0x63) and the transformed value is stored in 'x'.\n For example:\n\n s = 01000001\n x = 01000001\n\n iteration 1: s = 10000010, x ^= s\n iteration 2: s = 00000101, x ^= s\n iteration 3: s = 00001010, x ^= s\n iteration 4: s = 00010100, x ^= s\n x ^= 0x63\n\n This can be done with a loop where s = (s << 1) | (s >> 7). However,\n it can also be done by using a single 16-bit (in this case 32-bit)\n number 'sx'. Since XOR is an associative operation, we can set 'sx'\n to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times.\n The most significant bits will flow into the high 8 bit positions\n and be correctly XOR'd with one another. All that remains will be\n to cycle the high 8 bits by XOR'ing them all with the lower 8 bits\n afterwards.\n\n At the same time we're populating sbox and isbox we can precompute\n the multiplication we'll need to do to do MixColumns() later.\n */\n\n // apply affine transformation\n sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4);\n sx = (sx >> 8) ^ (sx & 255) ^ 0x63;\n\n // update tables\n sbox[e] = sx;\n isbox[sx] = e;\n\n /* Mixing columns is done using matrix multiplication. The columns\n that are to be mixed are each a single word in the current state.\n The state has Nb columns (4 columns). Therefore each column is a\n 4 byte word. So to mix the columns in a single column 'c' where\n its rows are r0, r1, r2, and r3, we use the following matrix\n multiplication:\n\n [2 3 1 1]*[r0,c]=[r'0,c]\n [1 2 3 1] [r1,c] [r'1,c]\n [1 1 2 3] [r2,c] [r'2,c]\n [3 1 1 2] [r3,c] [r'3,c]\n\n r0, r1, r2, and r3 are each 1 byte of one of the words in the\n state (a column). To do matrix multiplication for each mixed\n column c' we multiply the corresponding row from the left matrix\n with the corresponding column from the right matrix. In total, we\n get 4 equations:\n\n r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c\n r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c\n r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c\n r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c\n\n As usual, the multiplication is as previously defined and the\n addition is XOR. In order to optimize mixing columns we can store\n the multiplication results in tables. If you think of the whole\n column as a word (it might help to visualize by mentally rotating\n the equations above by counterclockwise 90 degrees) then you can\n see that it would be useful to map the multiplications performed on\n each byte (r0, r1, r2, r3) onto a word as well. For instance, we\n could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the\n highest 8 bits and 3*r0 in the lowest 8 bits (with the other two\n respectively in the middle). This means that a table can be\n constructed that uses r0 as an index to the word. We can do the\n same with r1, r2, and r3, creating a total of 4 tables.\n\n To construct a full c', we can just look up each byte of c in\n their respective tables and XOR the results together.\n\n Also, to build each table we only have to calculate the word\n for 2,1,1,3 for every byte ... which we can do on each iteration\n of this loop since we will iterate over every byte. After we have\n calculated 2,1,1,3 we can get the results for the other tables\n by cycling the byte at the end to the beginning. For instance\n we can take the result of table 2,1,1,3 and produce table 3,2,1,1\n by moving the right most byte to the left most position just like\n how you can imagine the 3 moved out of 2,1,1,3 and to the front\n to produce 3,2,1,1.\n\n There is another optimization in that the same multiples of\n the current element we need in order to advance our generator\n to the next iteration can be reused in performing the 2,1,1,3\n calculation. We also calculate the inverse mix column tables,\n with e,9,d,b being the inverse of 2,1,1,3.\n\n When we're done, and we need to actually mix columns, the first\n byte of each state word should be put through mix[0] (2,1,1,3),\n the second through mix[1] (3,2,1,1) and so forth. Then they should\n be XOR'd together to produce the fully mixed column.\n */\n\n // calculate mix and imix table values\n sx2 = xtime[sx];\n e2 = xtime[e];\n e4 = xtime[e2];\n e8 = xtime[e4];\n me =\n (sx2 << 24) ^ // 2\n (sx << 16) ^ // 1\n (sx << 8) ^ // 1\n (sx ^ sx2); // 3\n ime =\n (e2 ^ e4 ^ e8) << 24 ^ // E (14)\n (e ^ e8) << 16 ^ // 9\n (e ^ e4 ^ e8) << 8 ^ // D (13)\n (e ^ e2 ^ e8); // B (11)\n // produce each of the mix tables by rotating the 2,1,1,3 value\n for(var n = 0; n < 4; ++n) {\n mix[n][e] = me;\n imix[n][sx] = ime;\n // cycle the right most byte to the left most position\n // ie: 2,1,1,3 becomes 3,2,1,1\n me = me << 24 | me >>> 8;\n ime = ime << 24 | ime >>> 8;\n }\n\n // get next element and inverse\n if(e === 0) {\n // 1 is the inverse of 1\n e = ei = 1;\n } else {\n // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator)\n // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator)\n e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]];\n ei ^= xtime[xtime[ei]];\n }\n }\n}\n\n/**\n * Generates a key schedule using the AES key expansion algorithm.\n *\n * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion\n * routine to generate a key schedule. The Key Expansion generates a total\n * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words,\n * and each of the Nr rounds requires Nb words of key data. The resulting\n * key schedule consists of a linear array of 4-byte words, denoted [wi ],\n * with i in the range 0 <= i < Nb(Nr + 1).\n *\n * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)\n * AES-128 (Nb=4, Nk=4, Nr=10)\n * AES-192 (Nb=4, Nk=6, Nr=12)\n * AES-256 (Nb=4, Nk=8, Nr=14)\n * Note: Nr=Nk+6.\n *\n * Nb is the number of columns (32-bit words) comprising the State (or\n * number of bytes in a block). For AES, Nb=4.\n *\n * @param key the key to schedule (as an array of 32-bit words).\n * @param decrypt true to modify the key schedule to decrypt, false not to.\n *\n * @return the generated key schedule.\n */\nfunction _expandKey(key, decrypt) {\n // copy the key's words to initialize the key schedule\n var w = key.slice(0);\n\n /* RotWord() will rotate a word, moving the first byte to the last\n byte's position (shifting the other bytes left).\n\n We will be getting the value of Rcon at i / Nk. 'i' will iterate\n from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in\n a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from\n 4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will\n increase by 1. We use a counter iNk to keep track of this.\n */\n\n // go through the rounds expanding the key\n var temp, iNk = 1;\n var Nk = w.length;\n var Nr1 = Nk + 6 + 1;\n var end = Nb * Nr1;\n for(var i = Nk; i < end; ++i) {\n temp = w[i - 1];\n if(i % Nk === 0) {\n // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]\n temp =\n sbox[temp >>> 16 & 255] << 24 ^\n sbox[temp >>> 8 & 255] << 16 ^\n sbox[temp & 255] << 8 ^\n sbox[temp >>> 24] ^ (rcon[iNk] << 24);\n iNk++;\n } else if(Nk > 6 && (i % Nk === 4)) {\n // temp = SubWord(temp)\n temp =\n sbox[temp >>> 24] << 24 ^\n sbox[temp >>> 16 & 255] << 16 ^\n sbox[temp >>> 8 & 255] << 8 ^\n sbox[temp & 255];\n }\n w[i] = w[i - Nk] ^ temp;\n }\n\n /* When we are updating a cipher block we always use the code path for\n encryption whether we are decrypting or not (to shorten code and\n simplify the generation of look up tables). However, because there\n are differences in the decryption algorithm, other than just swapping\n in different look up tables, we must transform our key schedule to\n account for these changes:\n\n 1. The decryption algorithm gets its key rounds in reverse order.\n 2. The decryption algorithm adds the round key before mixing columns\n instead of afterwards.\n\n We don't need to modify our key schedule to handle the first case,\n we can just traverse the key schedule in reverse order when decrypting.\n\n The second case requires a little work.\n\n The tables we built for performing rounds will take an input and then\n perform SubBytes() and MixColumns() or, for the decrypt version,\n InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires\n us to AddRoundKey() before InvMixColumns(). This means we'll need to\n apply some transformations to the round key to inverse-mix its columns\n so they'll be correct for moving AddRoundKey() to after the state has\n had its columns inverse-mixed.\n\n To inverse-mix the columns of the state when we're decrypting we use a\n lookup table that will apply InvSubBytes() and InvMixColumns() at the\n same time. However, the round key's bytes are not inverse-substituted\n in the decryption algorithm. To get around this problem, we can first\n substitute the bytes in the round key so that when we apply the\n transformation via the InvSubBytes()+InvMixColumns() table, it will\n undo our substitution leaving us with the original value that we\n want -- and then inverse-mix that value.\n\n This change will correctly alter our key schedule so that we can XOR\n each round key with our already transformed decryption state. This\n allows us to use the same code path as the encryption algorithm.\n\n We make one more change to the decryption key. Since the decryption\n algorithm runs in reverse from the encryption algorithm, we reverse\n the order of the round keys to avoid having to iterate over the key\n schedule backwards when running the encryption algorithm later in\n decryption mode. In addition to reversing the order of the round keys,\n we also swap each round key's 2nd and 4th rows. See the comments\n section where rounds are performed for more details about why this is\n done. These changes are done inline with the other substitution\n described above.\n */\n if(decrypt) {\n var tmp;\n var m0 = imix[0];\n var m1 = imix[1];\n var m2 = imix[2];\n var m3 = imix[3];\n var wnew = w.slice(0);\n end = w.length;\n for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) {\n // do not sub the first or last round key (round keys are Nb\n // words) as no column mixing is performed before they are added,\n // but do change the key order\n if(i === 0 || i === (end - Nb)) {\n wnew[i] = w[wi];\n wnew[i + 1] = w[wi + 3];\n wnew[i + 2] = w[wi + 2];\n wnew[i + 3] = w[wi + 1];\n } else {\n // substitute each round key byte because the inverse-mix\n // table will inverse-substitute it (effectively cancel the\n // substitution because round key bytes aren't sub'd in\n // decryption mode) and swap indexes 3 and 1\n for(var n = 0; n < Nb; ++n) {\n tmp = w[wi + n];\n wnew[i + (3&-n)] =\n m0[sbox[tmp >>> 24]] ^\n m1[sbox[tmp >>> 16 & 255]] ^\n m2[sbox[tmp >>> 8 & 255]] ^\n m3[sbox[tmp & 255]];\n }\n }\n }\n w = wnew;\n }\n\n return w;\n}\n\n/**\n * Updates a single block (16 bytes) using AES. The update will either\n * encrypt or decrypt the block.\n *\n * @param w the key schedule.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(w, input, output, decrypt) {\n /*\n Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[0, Nb-1])\n for round = 1 step 1 to Nr-1\n SubBytes(state)\n ShiftRows(state)\n MixColumns(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n end for\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n out = state\n end\n\n InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n for round = Nr-1 step -1 downto 1\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n InvMixColumns(state)\n end for\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n out = state\n end\n */\n\n // Encrypt: AddRoundKey(state, w[0, Nb-1])\n // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n var Nr = w.length / 4 - 1;\n var m0, m1, m2, m3, sub;\n if(decrypt) {\n m0 = imix[0];\n m1 = imix[1];\n m2 = imix[2];\n m3 = imix[3];\n sub = isbox;\n } else {\n m0 = mix[0];\n m1 = mix[1];\n m2 = mix[2];\n m3 = mix[3];\n sub = sbox;\n }\n var a, b, c, d, a2, b2, c2;\n a = input[0] ^ w[0];\n b = input[decrypt ? 3 : 1] ^ w[1];\n c = input[2] ^ w[2];\n d = input[decrypt ? 1 : 3] ^ w[3];\n var i = 3;\n\n /* In order to share code we follow the encryption algorithm when both\n encrypting and decrypting. To account for the changes required in the\n decryption algorithm, we use different lookup tables when decrypting\n and use a modified key schedule to account for the difference in the\n order of transformations applied when performing rounds. We also get\n key rounds in reverse order (relative to encryption). */\n for(var round = 1; round < Nr; ++round) {\n /* As described above, we'll be using table lookups to perform the\n column mixing. Each column is stored as a word in the state (the\n array 'input' has one column as a word at each index). In order to\n mix a column, we perform these transformations on each row in c,\n which is 1 byte in each word. The new column for c0 is c'0:\n\n m0 m1 m2 m3\n r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0\n r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0\n r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0\n r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0\n\n So using mix tables where c0 is a word with r0 being its upper\n 8 bits and r3 being its lower 8 bits:\n\n m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0]\n ...\n m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3]\n\n Therefore to mix the columns in each word in the state we\n do the following (& 255 omitted for brevity):\n c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n\n However, before mixing, the algorithm requires us to perform\n ShiftRows(). The ShiftRows() transformation cyclically shifts the\n last 3 rows of the state over different offsets. The first row\n (r = 0) is not shifted.\n\n s'_r,c = s_r,(c + shift(r, Nb) mod Nb\n for 0 < r < 4 and 0 <= c < Nb and\n shift(1, 4) = 1\n shift(2, 4) = 2\n shift(3, 4) = 3.\n\n This causes the first byte in r = 1 to be moved to the end of\n the row, the first 2 bytes in r = 2 to be moved to the end of\n the row, the first 3 bytes in r = 3 to be moved to the end of\n the row:\n\n r1: [c0 c1 c2 c3] => [c1 c2 c3 c0]\n r2: [c0 c1 c2 c3] [c2 c3 c0 c1]\n r3: [c0 c1 c2 c3] [c3 c0 c1 c2]\n\n We can make these substitutions inline with our column mixing to\n generate an updated set of equations to produce each word in the\n state (note the columns have changed positions):\n\n c0 c1 c2 c3 => c0 c1 c2 c3\n c0 c1 c2 c3 c1 c2 c3 c0 (cycled 1 byte)\n c0 c1 c2 c3 c2 c3 c0 c1 (cycled 2 bytes)\n c0 c1 c2 c3 c3 c0 c1 c2 (cycled 3 bytes)\n\n Therefore:\n\n c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3\n c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3\n\n c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0\n c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0\n\n ... and so forth for c'2 and c'3. The important distinction is\n that the columns are cycling, with c0 being used with the m0\n map when calculating c0, but c1 being used with the m0 map when\n calculating c1 ... and so forth.\n\n When performing the inverse we transform the mirror image and\n skip the bottom row, instead of the top one, and move upwards:\n\n c3 c2 c1 c0 => c0 c3 c2 c1 (cycled 3 bytes) *same as encryption\n c3 c2 c1 c0 c1 c0 c3 c2 (cycled 2 bytes)\n c3 c2 c1 c0 c2 c1 c0 c3 (cycled 1 byte) *same as encryption\n c3 c2 c1 c0 c3 c2 c1 c0\n\n If you compare the resulting matrices for ShiftRows()+MixColumns()\n and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are\n different (in encrypt mode vs. decrypt mode). So in order to use\n the same code to handle both encryption and decryption, we will\n need to do some mapping.\n\n If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r be\n a row number in the state, then the resulting matrix in encryption\n mode for applying the above transformations would be:\n\n r1: a b c d\n r2: b c d a\n r3: c d a b\n r4: d a b c\n\n If we did the same in decryption mode we would get:\n\n r1: a d c b\n r2: b a d c\n r3: c b a d\n r4: d c b a\n\n If instead we swap d and b (set b=c3 and d=c1), then we get:\n\n r1: a b c d\n r2: d a b c\n r3: c d a b\n r4: b c d a\n\n Now the 1st and 3rd rows are the same as the encryption matrix. All\n we need to do then to make the mapping exactly the same is to swap\n the 2nd and 4th rows when in decryption mode. To do this without\n having to do it on each iteration, we swapped the 2nd and 4th rows\n in the decryption key schedule. We also have to do the swap above\n when we first pull in the input and when we set the final output. */\n a2 =\n m0[a >>> 24] ^\n m1[b >>> 16 & 255] ^\n m2[c >>> 8 & 255] ^\n m3[d & 255] ^ w[++i];\n b2 =\n m0[b >>> 24] ^\n m1[c >>> 16 & 255] ^\n m2[d >>> 8 & 255] ^\n m3[a & 255] ^ w[++i];\n c2 =\n m0[c >>> 24] ^\n m1[d >>> 16 & 255] ^\n m2[a >>> 8 & 255] ^\n m3[b & 255] ^ w[++i];\n d =\n m0[d >>> 24] ^\n m1[a >>> 16 & 255] ^\n m2[b >>> 8 & 255] ^\n m3[c & 255] ^ w[++i];\n a = a2;\n b = b2;\n c = c2;\n }\n\n /*\n Encrypt:\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n\n Decrypt:\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n */\n // Note: rows are shifted inline\n output[0] =\n (sub[a >>> 24] << 24) ^\n (sub[b >>> 16 & 255] << 16) ^\n (sub[c >>> 8 & 255] << 8) ^\n (sub[d & 255]) ^ w[++i];\n output[decrypt ? 3 : 1] =\n (sub[b >>> 24] << 24) ^\n (sub[c >>> 16 & 255] << 16) ^\n (sub[d >>> 8 & 255] << 8) ^\n (sub[a & 255]) ^ w[++i];\n output[2] =\n (sub[c >>> 24] << 24) ^\n (sub[d >>> 16 & 255] << 16) ^\n (sub[a >>> 8 & 255] << 8) ^\n (sub[b & 255]) ^ w[++i];\n output[decrypt ? 1 : 3] =\n (sub[d >>> 24] << 24) ^\n (sub[a >>> 16 & 255] << 16) ^\n (sub[b >>> 8 & 255] << 8) ^\n (sub[c & 255]) ^ w[++i];\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('AES-', key);\n * forge.cipher.createDecipher('AES-', key);\n *\n * Creates a deprecated AES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key and iv may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param options the options to use.\n * key the symmetric key to use.\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'AES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * Javascript implementation of Abstract Syntax Notation Number One.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n *\n * An API for storing data using the Abstract Syntax Notation Number One\n * format using DER (Distinguished Encoding Rules) encoding. This encoding is\n * commonly used to store data for PKI, i.e. X.509 Certificates, and this\n * implementation exists for that purpose.\n *\n * Abstract Syntax Notation Number One (ASN.1) is used to define the abstract\n * syntax of information without restricting the way the information is encoded\n * for transmission. It provides a standard that allows for open systems\n * communication. ASN.1 defines the syntax of information data and a number of\n * simple data types as well as a notation for describing them and specifying\n * values for them.\n *\n * The RSA algorithm creates public and private keys that are often stored in\n * X.509 or PKCS#X formats -- which use ASN.1 (encoded in DER format). This\n * class provides the most basic functionality required to store and load DSA\n * keys that are encoded according to ASN.1.\n *\n * The most common binary encodings for ASN.1 are BER (Basic Encoding Rules)\n * and DER (Distinguished Encoding Rules). DER is just a subset of BER that\n * has stricter requirements for how data must be encoded.\n *\n * Each ASN.1 structure has a tag (a byte identifying the ASN.1 structure type)\n * and a byte array for the value of this ASN1 structure which may be data or a\n * list of ASN.1 structures.\n *\n * Each ASN.1 structure using BER is (Tag-Length-Value):\n *\n * | byte 0 | bytes X | bytes Y |\n * |--------|---------|----------\n * | tag | length | value |\n *\n * ASN.1 allows for tags to be of \"High-tag-number form\" which allows a tag to\n * be two or more octets, but that is not supported by this class. A tag is\n * only 1 byte. Bits 1-5 give the tag number (ie the data type within a\n * particular 'class'), 6 indicates whether or not the ASN.1 value is\n * constructed from other ASN.1 values, and bits 7 and 8 give the 'class'. If\n * bits 7 and 8 are both zero, the class is UNIVERSAL. If only bit 7 is set,\n * then the class is APPLICATION. If only bit 8 is set, then the class is\n * CONTEXT_SPECIFIC. If both bits 7 and 8 are set, then the class is PRIVATE.\n * The tag numbers for the data types for the class UNIVERSAL are listed below:\n *\n * UNIVERSAL 0 Reserved for use by the encoding rules\n * UNIVERSAL 1 Boolean type\n * UNIVERSAL 2 Integer type\n * UNIVERSAL 3 Bitstring type\n * UNIVERSAL 4 Octetstring type\n * UNIVERSAL 5 Null type\n * UNIVERSAL 6 Object identifier type\n * UNIVERSAL 7 Object descriptor type\n * UNIVERSAL 8 External type and Instance-of type\n * UNIVERSAL 9 Real type\n * UNIVERSAL 10 Enumerated type\n * UNIVERSAL 11 Embedded-pdv type\n * UNIVERSAL 12 UTF8String type\n * UNIVERSAL 13 Relative object identifier type\n * UNIVERSAL 14-15 Reserved for future editions\n * UNIVERSAL 16 Sequence and Sequence-of types\n * UNIVERSAL 17 Set and Set-of types\n * UNIVERSAL 18-22, 25-30 Character string types\n * UNIVERSAL 23-24 Time types\n *\n * The length of an ASN.1 structure is specified after the tag identifier.\n * There is a definite form and an indefinite form. The indefinite form may\n * be used if the encoding is constructed and not all immediately available.\n * The indefinite form is encoded using a length byte with only the 8th bit\n * set. The end of the constructed object is marked using end-of-contents\n * octets (two zero bytes).\n *\n * The definite form looks like this:\n *\n * The length may take up 1 or more bytes, it depends on the length of the\n * value of the ASN.1 structure. DER encoding requires that if the ASN.1\n * structure has a value that has a length greater than 127, more than 1 byte\n * will be used to store its length, otherwise just one byte will be used.\n * This is strict.\n *\n * In the case that the length of the ASN.1 value is less than 127, 1 octet\n * (byte) is used to store the \"short form\" length. The 8th bit has a value of\n * 0 indicating the length is \"short form\" and not \"long form\" and bits 7-1\n * give the length of the data. (The 8th bit is the left-most, most significant\n * bit: also known as big endian or network format).\n *\n * In the case that the length of the ASN.1 value is greater than 127, 2 to\n * 127 octets (bytes) are used to store the \"long form\" length. The first\n * byte's 8th bit is set to 1 to indicate the length is \"long form.\" Bits 7-1\n * give the number of additional octets. All following octets are in base 256\n * with the most significant digit first (typical big-endian binary unsigned\n * integer storage). So, for instance, if the length of a value was 257, the\n * first byte would be set to:\n *\n * 10000010 = 130 = 0x82.\n *\n * This indicates there are 2 octets (base 256) for the length. The second and\n * third bytes (the octets just mentioned) would store the length in base 256:\n *\n * octet 2: 00000001 = 1 * 256^1 = 256\n * octet 3: 00000001 = 1 * 256^0 = 1\n * total = 257\n *\n * The algorithm for converting a js integer value of 257 to base-256 is:\n *\n * var value = 257;\n * var bytes = [];\n * bytes[0] = (value >>> 8) & 0xFF; // most significant byte first\n * bytes[1] = value & 0xFF; // least significant byte last\n *\n * On the ASN.1 UNIVERSAL Object Identifier (OID) type:\n *\n * An OID can be written like: \"value1.value2.value3...valueN\"\n *\n * The DER encoding rules:\n *\n * The first byte has the value 40 * value1 + value2.\n * The following bytes, if any, encode the remaining values. Each value is\n * encoded in base 128, most significant digit first (big endian), with as\n * few digits as possible, and the most significant bit of each byte set\n * to 1 except the last in each value's encoding. For example: Given the\n * OID \"1.2.840.113549\", its DER encoding is (remember each byte except the\n * last one in each encoding is OR'd with 0x80):\n *\n * byte 1: 40 * 1 + 2 = 42 = 0x2A.\n * bytes 2-3: 128 * 6 + 72 = 840 = 6 72 = 6 72 = 0x0648 = 0x8648\n * bytes 4-6: 16384 * 6 + 128 * 119 + 13 = 6 119 13 = 0x06770D = 0x86F70D\n *\n * The final value is: 0x2A864886F70D.\n * The full OID (including ASN.1 tag and length of 6 bytes) is:\n * 0x06062A864886F70D\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./oids');\n\n/* ASN.1 API */\nvar asn1 = module.exports = forge.asn1 = forge.asn1 || {};\n\n/**\n * ASN.1 classes.\n */\nasn1.Class = {\n UNIVERSAL: 0x00,\n APPLICATION: 0x40,\n CONTEXT_SPECIFIC: 0x80,\n PRIVATE: 0xC0\n};\n\n/**\n * ASN.1 types. Not all types are supported by this implementation, only\n * those necessary to implement a simple PKI are implemented.\n */\nasn1.Type = {\n NONE: 0,\n BOOLEAN: 1,\n INTEGER: 2,\n BITSTRING: 3,\n OCTETSTRING: 4,\n NULL: 5,\n OID: 6,\n ODESC: 7,\n EXTERNAL: 8,\n REAL: 9,\n ENUMERATED: 10,\n EMBEDDED: 11,\n UTF8: 12,\n ROID: 13,\n SEQUENCE: 16,\n SET: 17,\n PRINTABLESTRING: 19,\n IA5STRING: 22,\n UTCTIME: 23,\n GENERALIZEDTIME: 24,\n BMPSTRING: 30\n};\n\n/**\n * Creates a new asn1 object.\n *\n * @param tagClass the tag class for the object.\n * @param type the data type (tag number) for the object.\n * @param constructed true if the asn1 object is in constructed form.\n * @param value the value for the object, if it is not constructed.\n * @param [options] the options to use:\n * [bitStringContents] the plain BIT STRING content including padding\n * byte.\n *\n * @return the asn1 object.\n */\nasn1.create = function(tagClass, type, constructed, value, options) {\n /* An asn1 object has a tagClass, a type, a constructed flag, and a\n value. The value's type depends on the constructed flag. If\n constructed, it will contain a list of other asn1 objects. If not,\n it will contain the ASN.1 value as an array of bytes formatted\n according to the ASN.1 data type. */\n\n // remove undefined values\n if(forge.util.isArray(value)) {\n var tmp = [];\n for(var i = 0; i < value.length; ++i) {\n if(value[i] !== undefined) {\n tmp.push(value[i]);\n }\n }\n value = tmp;\n }\n\n var obj = {\n tagClass: tagClass,\n type: type,\n constructed: constructed,\n composed: constructed || forge.util.isArray(value),\n value: value\n };\n if(options && 'bitStringContents' in options) {\n // TODO: copy byte buffer if it's a buffer not a string\n obj.bitStringContents = options.bitStringContents;\n // TODO: add readonly flag to avoid this overhead\n // save copy to detect changes\n obj.original = asn1.copy(obj);\n }\n return obj;\n};\n\n/**\n * Copies an asn1 object.\n *\n * @param obj the asn1 object.\n * @param [options] copy options:\n * [excludeBitStringContents] true to not copy bitStringContents\n *\n * @return the a copy of the asn1 object.\n */\nasn1.copy = function(obj, options) {\n var copy;\n\n if(forge.util.isArray(obj)) {\n copy = [];\n for(var i = 0; i < obj.length; ++i) {\n copy.push(asn1.copy(obj[i], options));\n }\n return copy;\n }\n\n if(typeof obj === 'string') {\n // TODO: copy byte buffer if it's a buffer not a string\n return obj;\n }\n\n copy = {\n tagClass: obj.tagClass,\n type: obj.type,\n constructed: obj.constructed,\n composed: obj.composed,\n value: asn1.copy(obj.value, options)\n };\n if(options && !options.excludeBitStringContents) {\n // TODO: copy byte buffer if it's a buffer not a string\n copy.bitStringContents = obj.bitStringContents;\n }\n return copy;\n};\n\n/**\n * Compares asn1 objects for equality.\n *\n * Note this function does not run in constant time.\n *\n * @param obj1 the first asn1 object.\n * @param obj2 the second asn1 object.\n * @param [options] compare options:\n * [includeBitStringContents] true to compare bitStringContents\n *\n * @return true if the asn1 objects are equal.\n */\nasn1.equals = function(obj1, obj2, options) {\n if(forge.util.isArray(obj1)) {\n if(!forge.util.isArray(obj2)) {\n return false;\n }\n if(obj1.length !== obj2.length) {\n return false;\n }\n for(var i = 0; i < obj1.length; ++i) {\n if(!asn1.equals(obj1[i], obj2[i])) {\n return false;\n }\n }\n return true;\n }\n\n if(typeof obj1 !== typeof obj2) {\n return false;\n }\n\n if(typeof obj1 === 'string') {\n return obj1 === obj2;\n }\n\n var equal = obj1.tagClass === obj2.tagClass &&\n obj1.type === obj2.type &&\n obj1.constructed === obj2.constructed &&\n obj1.composed === obj2.composed &&\n asn1.equals(obj1.value, obj2.value);\n if(options && options.includeBitStringContents) {\n equal = equal && (obj1.bitStringContents === obj2.bitStringContents);\n }\n\n return equal;\n};\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param b the BER-encoded ASN.1 byte buffer, starting with the first\n * length byte.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nasn1.getBerValueLength = function(b) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n var b2 = b.getByte();\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n length = b.getInt((b2 & 0x7F) << 3);\n }\n return length;\n};\n\n/**\n * Check if the byte buffer has enough bytes. Throws an Error if not.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n * @param n the number of bytes the buffer must have.\n */\nfunction _checkBufferLength(bytes, remaining, n) {\n if(n > remaining) {\n var error = new Error('Too few bytes to parse DER.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = n;\n throw error;\n }\n}\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nvar _getValueLength = function(bytes, remaining) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n // fromDer already checked that this byte exists\n var b2 = bytes.getByte();\n remaining--;\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n var longFormBytes = b2 & 0x7F;\n _checkBufferLength(bytes, remaining, longFormBytes);\n length = bytes.getInt(longFormBytes << 3);\n }\n // FIXME: this will only happen for 32 bit getInt with high bit set\n if(length < 0) {\n throw new Error('Negative length: ' + length);\n }\n return length;\n};\n\n/**\n * Parses an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * @param [options] object with options or boolean strict flag\n * [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * [parseAllBytes] true to ensure all bytes are parsed\n * (default: true)\n * [decodeBitStrings] true to attempt to decode the content of\n * BIT STRINGs (not OCTET STRINGs) using strict mode. Note that\n * without schema support to understand the data context this can\n * erroneously decode values that happen to be valid ASN.1. This\n * flag will be deprecated or removed as soon as schema support is\n * available. (default: true)\n *\n * @throws Will throw an error for various malformed input conditions.\n *\n * @return the parsed asn1 object.\n */\nasn1.fromDer = function(bytes, options) {\n if(options === undefined) {\n options = {\n strict: true,\n parseAllBytes: true,\n decodeBitStrings: true\n };\n }\n if(typeof options === 'boolean') {\n options = {\n strict: options,\n parseAllBytes: true,\n decodeBitStrings: true\n };\n }\n if(!('strict' in options)) {\n options.strict = true;\n }\n if(!('parseAllBytes' in options)) {\n options.parseAllBytes = true;\n }\n if(!('decodeBitStrings' in options)) {\n options.decodeBitStrings = true;\n }\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n var byteCount = bytes.length();\n var value = _fromDer(bytes, bytes.length(), 0, options);\n if(options.parseAllBytes && bytes.length() !== 0) {\n var error = new Error('Unparsed DER bytes remain after ASN.1 parsing.');\n error.byteCount = byteCount;\n error.remaining = bytes.length();\n throw error;\n }\n return value;\n};\n\n/**\n * Internal function to parse an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the number of bytes remaining for this chunk.\n * @param depth the current parsing depth.\n * @param options object with same options as fromDer().\n *\n * @return the parsed asn1 object.\n */\nfunction _fromDer(bytes, remaining, depth, options) {\n // temporary storage for consumption calculations\n var start;\n\n // minimum length for ASN.1 DER structure is 2\n _checkBufferLength(bytes, remaining, 2);\n\n // get the first byte\n var b1 = bytes.getByte();\n // consumed one byte\n remaining--;\n\n // get the tag class\n var tagClass = (b1 & 0xC0);\n\n // get the type (bits 1-5)\n var type = b1 & 0x1F;\n\n // get the variable value length and adjust remaining bytes\n start = bytes.length();\n var length = _getValueLength(bytes, remaining);\n remaining -= start - bytes.length();\n\n // ensure there are enough bytes to get the value\n if(length !== undefined && length > remaining) {\n if(options.strict) {\n var error = new Error('Too few bytes to read ASN.1 value.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = length;\n throw error;\n }\n // Note: be lenient with truncated values and use remaining state bytes\n length = remaining;\n }\n\n // value storage\n var value;\n // possible BIT STRING contents storage\n var bitStringContents;\n\n // constructed flag is bit 6 (32 = 0x20) of the first byte\n var constructed = ((b1 & 0x20) === 0x20);\n if(constructed) {\n // parse child asn1 objects from the value\n value = [];\n if(length === undefined) {\n // asn1 object of indefinite length, read until end tag\n for(;;) {\n _checkBufferLength(bytes, remaining, 2);\n if(bytes.bytes(2) === String.fromCharCode(0, 0)) {\n bytes.getBytes(2);\n remaining -= 2;\n break;\n }\n start = bytes.length();\n value.push(_fromDer(bytes, remaining, depth + 1, options));\n remaining -= start - bytes.length();\n }\n } else {\n // parsing asn1 object of definite length\n while(length > 0) {\n start = bytes.length();\n value.push(_fromDer(bytes, length, depth + 1, options));\n remaining -= start - bytes.length();\n length -= start - bytes.length();\n }\n }\n }\n\n // if a BIT STRING, save the contents including padding\n if(value === undefined && tagClass === asn1.Class.UNIVERSAL &&\n type === asn1.Type.BITSTRING) {\n bitStringContents = bytes.bytes(length);\n }\n\n // determine if a non-constructed value should be decoded as a composed\n // value that contains other ASN.1 objects. BIT STRINGs (and OCTET STRINGs)\n // can be used this way.\n if(value === undefined && options.decodeBitStrings &&\n tagClass === asn1.Class.UNIVERSAL &&\n // FIXME: OCTET STRINGs not yet supported here\n // .. other parts of forge expect to decode OCTET STRINGs manually\n (type === asn1.Type.BITSTRING /*|| type === asn1.Type.OCTETSTRING*/) &&\n length > 1) {\n // save read position\n var savedRead = bytes.read;\n var savedRemaining = remaining;\n var unused = 0;\n if(type === asn1.Type.BITSTRING) {\n /* The first octet gives the number of bits by which the length of the\n bit string is less than the next multiple of eight (this is called\n the \"number of unused bits\").\n\n The second and following octets give the value of the bit string\n converted to an octet string. */\n _checkBufferLength(bytes, remaining, 1);\n unused = bytes.getByte();\n remaining--;\n }\n // if all bits are used, maybe the BIT/OCTET STRING holds ASN.1 objs\n if(unused === 0) {\n try {\n // attempt to parse child asn1 object from the value\n // (stored in array to signal composed value)\n start = bytes.length();\n var subOptions = {\n // enforce strict mode to avoid parsing ASN.1 from plain data\n strict: true,\n decodeBitStrings: true\n };\n var composed = _fromDer(bytes, remaining, depth + 1, subOptions);\n var used = start - bytes.length();\n remaining -= used;\n if(type == asn1.Type.BITSTRING) {\n used++;\n }\n\n // if the data all decoded and the class indicates UNIVERSAL or\n // CONTEXT_SPECIFIC then assume we've got an encapsulated ASN.1 object\n var tc = composed.tagClass;\n if(used === length &&\n (tc === asn1.Class.UNIVERSAL || tc === asn1.Class.CONTEXT_SPECIFIC)) {\n value = [composed];\n }\n } catch(ex) {\n }\n }\n if(value === undefined) {\n // restore read position\n bytes.read = savedRead;\n remaining = savedRemaining;\n }\n }\n\n if(value === undefined) {\n // asn1 not constructed or composed, get raw value\n // TODO: do DER to OID conversion and vice-versa in .toDer?\n\n if(length === undefined) {\n if(options.strict) {\n throw new Error('Non-constructed ASN.1 object of indefinite length.');\n }\n // be lenient and use remaining state bytes\n length = remaining;\n }\n\n if(type === asn1.Type.BMPSTRING) {\n value = '';\n for(; length > 0; length -= 2) {\n _checkBufferLength(bytes, remaining, 2);\n value += String.fromCharCode(bytes.getInt16());\n remaining -= 2;\n }\n } else {\n value = bytes.getBytes(length);\n remaining -= length;\n }\n }\n\n // add BIT STRING contents if available\n var asn1Options = bitStringContents === undefined ? null : {\n bitStringContents: bitStringContents\n };\n\n // create and return asn1 object\n return asn1.create(tagClass, type, constructed, value, asn1Options);\n}\n\n/**\n * Converts the given asn1 object to a buffer of bytes in DER format.\n *\n * @param asn1 the asn1 object to convert to bytes.\n *\n * @return the buffer of bytes.\n */\nasn1.toDer = function(obj) {\n var bytes = forge.util.createBuffer();\n\n // build the first byte\n var b1 = obj.tagClass | obj.type;\n\n // for storing the ASN.1 value\n var value = forge.util.createBuffer();\n\n // use BIT STRING contents if available and data not changed\n var useBitStringContents = false;\n if('bitStringContents' in obj) {\n useBitStringContents = true;\n if(obj.original) {\n useBitStringContents = asn1.equals(obj, obj.original);\n }\n }\n\n if(useBitStringContents) {\n value.putBytes(obj.bitStringContents);\n } else if(obj.composed) {\n // if composed, use each child asn1 object's DER bytes as value\n // turn on 6th bit (0x20 = 32) to indicate asn1 is constructed\n // from other asn1 objects\n if(obj.constructed) {\n b1 |= 0x20;\n } else {\n // type is a bit string, add unused bits of 0x00\n value.putByte(0x00);\n }\n\n // add all of the child DER bytes together\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n value.putBuffer(asn1.toDer(obj.value[i]));\n }\n }\n } else {\n // use asn1.value directly\n if(obj.type === asn1.Type.BMPSTRING) {\n for(var i = 0; i < obj.value.length; ++i) {\n value.putInt16(obj.value.charCodeAt(i));\n }\n } else {\n // ensure integer is minimally-encoded\n // TODO: should all leading bytes be stripped vs just one?\n // .. ex '00 00 01' => '01'?\n if(obj.type === asn1.Type.INTEGER &&\n obj.value.length > 1 &&\n // leading 0x00 for positive integer\n ((obj.value.charCodeAt(0) === 0 &&\n (obj.value.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (obj.value.charCodeAt(0) === 0xFF &&\n (obj.value.charCodeAt(1) & 0x80) === 0x80))) {\n value.putBytes(obj.value.substr(1));\n } else {\n value.putBytes(obj.value);\n }\n }\n }\n\n // add tag byte\n bytes.putByte(b1);\n\n // use \"short form\" encoding\n if(value.length() <= 127) {\n // one byte describes the length\n // bit 8 = 0 and bits 7-1 = length\n bytes.putByte(value.length() & 0x7F);\n } else {\n // use \"long form\" encoding\n // 2 to 127 bytes describe the length\n // first byte: bit 8 = 1 and bits 7-1 = # of additional bytes\n // other bytes: length in base 256, big-endian\n var len = value.length();\n var lenBytes = '';\n do {\n lenBytes += String.fromCharCode(len & 0xFF);\n len = len >>> 8;\n } while(len > 0);\n\n // set first byte to # bytes used to store the length and turn on\n // bit 8 to indicate long-form length is used\n bytes.putByte(lenBytes.length | 0x80);\n\n // concatenate length bytes in reverse since they were generated\n // little endian and we need big endian\n for(var i = lenBytes.length - 1; i >= 0; --i) {\n bytes.putByte(lenBytes.charCodeAt(i));\n }\n }\n\n // concatenate value bytes\n bytes.putBuffer(value);\n return bytes;\n};\n\n/**\n * Converts an OID dot-separated string to a byte buffer. The byte buffer\n * contains only the DER-encoded value, not any tag or length bytes.\n *\n * @param oid the OID dot-separated string.\n *\n * @return the byte buffer.\n */\nasn1.oidToDer = function(oid) {\n // split OID into individual values\n var values = oid.split('.');\n var bytes = forge.util.createBuffer();\n\n // first byte is 40 * value1 + value2\n bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10));\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var last, valueBytes, value, b;\n for(var i = 2; i < values.length; ++i) {\n // produce value bytes in reverse because we don't know how many\n // bytes it will take to store the value\n last = true;\n valueBytes = [];\n value = parseInt(values[i], 10);\n do {\n b = value & 0x7F;\n value = value >>> 7;\n // if value is not last, then turn on 8th bit\n if(!last) {\n b |= 0x80;\n }\n valueBytes.push(b);\n last = false;\n } while(value > 0);\n\n // add value bytes in reverse (needs to be in big endian)\n for(var n = valueBytes.length - 1; n >= 0; --n) {\n bytes.putByte(valueBytes[n]);\n }\n }\n\n return bytes;\n};\n\n/**\n * Converts a DER-encoded byte buffer to an OID dot-separated string. The\n * byte buffer should contain only the DER-encoded value, not any tag or\n * length bytes.\n *\n * @param bytes the byte buffer.\n *\n * @return the OID dot-separated string.\n */\nasn1.derToOid = function(bytes) {\n var oid;\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n // first byte is 40 * value1 + value2\n var b = bytes.getByte();\n oid = Math.floor(b / 40) + '.' + (b % 40);\n\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var value = 0;\n while(bytes.length() > 0) {\n b = bytes.getByte();\n value = value << 7;\n // not the last byte for the value\n if(b & 0x80) {\n value += b & 0x7F;\n } else {\n // last byte\n oid += '.' + (value + b);\n value = 0;\n }\n }\n\n return oid;\n};\n\n/**\n * Converts a UTCTime value to a date.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Parsing that structure hasn't been implemented yet.\n *\n * @param utc the UTCTime value to convert.\n *\n * @return the date.\n */\nasn1.utcTimeToDate = function(utc) {\n /* The following formats can be used:\n\n YYMMDDhhmmZ\n YYMMDDhhmm+hh'mm'\n YYMMDDhhmm-hh'mm'\n YYMMDDhhmmssZ\n YYMMDDhhmmss+hh'mm'\n YYMMDDhhmmss-hh'mm'\n\n Where:\n\n YY is the least significant two digits of the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n // if YY >= 50 use 19xx, if YY < 50 use 20xx\n var year = parseInt(utc.substr(0, 2), 10);\n year = (year >= 50) ? 1900 + year : 2000 + year;\n var MM = parseInt(utc.substr(2, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(utc.substr(4, 2), 10);\n var hh = parseInt(utc.substr(6, 2), 10);\n var mm = parseInt(utc.substr(8, 2), 10);\n var ss = 0;\n\n // not just YYMMDDhhmmZ\n if(utc.length > 11) {\n // get character after minutes\n var c = utc.charAt(10);\n var end = 10;\n\n // see if seconds are present\n if(c !== '+' && c !== '-') {\n // get seconds\n ss = parseInt(utc.substr(10, 2), 10);\n end += 2;\n }\n }\n\n // update date\n date.setUTCFullYear(year, MM, DD);\n date.setUTCHours(hh, mm, ss, 0);\n\n if(end) {\n // get +/- after end of time\n c = utc.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(utc.substr(end + 1, 2), 10);\n var mmoffset = parseInt(utc.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n var offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n date.setTime(+date - offset);\n } else {\n date.setTime(+date + offset);\n }\n }\n }\n\n return date;\n};\n\n/**\n * Converts a GeneralizedTime value to a date.\n *\n * @param gentime the GeneralizedTime value to convert.\n *\n * @return the date.\n */\nasn1.generalizedTimeToDate = function(gentime) {\n /* The following formats can be used:\n\n YYYYMMDDHHMMSS\n YYYYMMDDHHMMSS.fff\n YYYYMMDDHHMMSSZ\n YYYYMMDDHHMMSS.fffZ\n YYYYMMDDHHMMSS+hh'mm'\n YYYYMMDDHHMMSS.fff+hh'mm'\n YYYYMMDDHHMMSS-hh'mm'\n YYYYMMDDHHMMSS.fff-hh'mm'\n\n Where:\n\n YYYY is the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n .fff is the second fraction, accurate to three decimal places\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n var YYYY = parseInt(gentime.substr(0, 4), 10);\n var MM = parseInt(gentime.substr(4, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(gentime.substr(6, 2), 10);\n var hh = parseInt(gentime.substr(8, 2), 10);\n var mm = parseInt(gentime.substr(10, 2), 10);\n var ss = parseInt(gentime.substr(12, 2), 10);\n var fff = 0;\n var offset = 0;\n var isUTC = false;\n\n if(gentime.charAt(gentime.length - 1) === 'Z') {\n isUTC = true;\n }\n\n var end = gentime.length - 5, c = gentime.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(gentime.substr(end + 1, 2), 10);\n var mmoffset = parseInt(gentime.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n offset *= -1;\n }\n\n isUTC = true;\n }\n\n // check for second fraction\n if(gentime.charAt(14) === '.') {\n fff = parseFloat(gentime.substr(14), 10) * 1000;\n }\n\n if(isUTC) {\n date.setUTCFullYear(YYYY, MM, DD);\n date.setUTCHours(hh, mm, ss, fff);\n\n // apply offset\n date.setTime(+date + offset);\n } else {\n date.setFullYear(YYYY, MM, DD);\n date.setHours(hh, mm, ss, fff);\n }\n\n return date;\n};\n\n/**\n * Converts a date to a UTCTime value.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Converting to a GeneralizedTime hasn't been\n * implemented yet.\n *\n * @param date the date to convert.\n *\n * @return the UTCTime value.\n */\nasn1.dateToUtcTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYMMDDhhmmssZ\n var format = [];\n format.push(('' + date.getUTCFullYear()).substr(2));\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a date to a GeneralizedTime value.\n *\n * @param date the date to convert.\n *\n * @return the GeneralizedTime value as a string.\n */\nasn1.dateToGeneralizedTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYYYMMDDHHMMSSZ\n var format = [];\n format.push('' + date.getUTCFullYear());\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a javascript integer to a DER-encoded byte buffer to be used\n * as the value for an INTEGER type.\n *\n * @param x the integer.\n *\n * @return the byte buffer.\n */\nasn1.integerToDer = function(x) {\n var rval = forge.util.createBuffer();\n if(x >= -0x80 && x < 0x80) {\n return rval.putSignedInt(x, 8);\n }\n if(x >= -0x8000 && x < 0x8000) {\n return rval.putSignedInt(x, 16);\n }\n if(x >= -0x800000 && x < 0x800000) {\n return rval.putSignedInt(x, 24);\n }\n if(x >= -0x80000000 && x < 0x80000000) {\n return rval.putSignedInt(x, 32);\n }\n var error = new Error('Integer too large; max is 32-bits.');\n error.integer = x;\n throw error;\n};\n\n/**\n * Converts a DER-encoded byte buffer to a javascript integer. This is\n * typically used to decode the value of an INTEGER type.\n *\n * @param bytes the byte buffer.\n *\n * @return the integer.\n */\nasn1.derToInteger = function(bytes) {\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n var n = bytes.length() * 8;\n if(n > 32) {\n throw new Error('Integer too large; max is 32-bits.');\n }\n return bytes.getSignedInt(n);\n};\n\n/**\n * Validates that the given ASN.1 object is at least a super set of the\n * given ASN.1 structure. Only tag classes and types are checked. An\n * optional map may also be provided to capture ASN.1 values while the\n * structure is checked.\n *\n * To capture an ASN.1 value, set an object in the validator's 'capture'\n * parameter to the key to use in the capture map. To capture the full\n * ASN.1 object, specify 'captureAsn1'. To capture BIT STRING bytes, including\n * the leading unused bits counter byte, specify 'captureBitStringContents'.\n * To capture BIT STRING bytes, without the leading unused bits counter byte,\n * specify 'captureBitStringValue'.\n *\n * Objects in the validator may set a field 'optional' to true to indicate\n * that it isn't necessary to pass validation.\n *\n * @param obj the ASN.1 object to validate.\n * @param v the ASN.1 structure validator.\n * @param capture an optional map to capture values in.\n * @param errors an optional array for storing validation errors.\n *\n * @return true on success, false on failure.\n */\nasn1.validate = function(obj, v, capture, errors) {\n var rval = false;\n\n // ensure tag class and type are the same if specified\n if((obj.tagClass === v.tagClass || typeof(v.tagClass) === 'undefined') &&\n (obj.type === v.type || typeof(v.type) === 'undefined')) {\n // ensure constructed flag is the same if specified\n if(obj.constructed === v.constructed ||\n typeof(v.constructed) === 'undefined') {\n rval = true;\n\n // handle sub values\n if(v.value && forge.util.isArray(v.value)) {\n var j = 0;\n for(var i = 0; rval && i < v.value.length; ++i) {\n rval = v.value[i].optional || false;\n if(obj.value[j]) {\n rval = asn1.validate(obj.value[j], v.value[i], capture, errors);\n if(rval) {\n ++j;\n } else if(v.value[i].optional) {\n rval = true;\n }\n }\n if(!rval && errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Tag class \"' + v.tagClass + '\", type \"' +\n v.type + '\" expected value length \"' +\n v.value.length + '\", got \"' +\n obj.value.length + '\"');\n }\n }\n }\n\n if(rval && capture) {\n if(v.capture) {\n capture[v.capture] = obj.value;\n }\n if(v.captureAsn1) {\n capture[v.captureAsn1] = obj;\n }\n if(v.captureBitStringContents && 'bitStringContents' in obj) {\n capture[v.captureBitStringContents] = obj.bitStringContents;\n }\n if(v.captureBitStringValue && 'bitStringContents' in obj) {\n var value;\n if(obj.bitStringContents.length < 2) {\n capture[v.captureBitStringValue] = '';\n } else {\n // FIXME: support unused bits with data shifting\n var unused = obj.bitStringContents.charCodeAt(0);\n if(unused !== 0) {\n throw new Error(\n 'captureBitStringValue only supported for zero unused bits');\n }\n capture[v.captureBitStringValue] = obj.bitStringContents.slice(1);\n }\n }\n }\n } else if(errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected constructed \"' + v.constructed + '\", got \"' +\n obj.constructed + '\"');\n }\n } else if(errors) {\n if(obj.tagClass !== v.tagClass) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected tag class \"' + v.tagClass + '\", got \"' +\n obj.tagClass + '\"');\n }\n if(obj.type !== v.type) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected type \"' + v.type + '\", got \"' + obj.type + '\"');\n }\n }\n return rval;\n};\n\n// regex for testing for non-latin characters\nvar _nonLatinRegex = /[^\\\\u0000-\\\\u00ff]/;\n\n/**\n * Pretty prints an ASN.1 object to a string.\n *\n * @param obj the object to write out.\n * @param level the level in the tree.\n * @param indentation the indentation to use.\n *\n * @return the string.\n */\nasn1.prettyPrint = function(obj, level, indentation) {\n var rval = '';\n\n // set default level and indentation\n level = level || 0;\n indentation = indentation || 2;\n\n // start new line for deep levels\n if(level > 0) {\n rval += '\\n';\n }\n\n // create indent\n var indent = '';\n for(var i = 0; i < level * indentation; ++i) {\n indent += ' ';\n }\n\n // print class:type\n rval += indent + 'Tag: ';\n switch(obj.tagClass) {\n case asn1.Class.UNIVERSAL:\n rval += 'Universal:';\n break;\n case asn1.Class.APPLICATION:\n rval += 'Application:';\n break;\n case asn1.Class.CONTEXT_SPECIFIC:\n rval += 'Context-Specific:';\n break;\n case asn1.Class.PRIVATE:\n rval += 'Private:';\n break;\n }\n\n if(obj.tagClass === asn1.Class.UNIVERSAL) {\n rval += obj.type;\n\n // known types\n switch(obj.type) {\n case asn1.Type.NONE:\n rval += ' (None)';\n break;\n case asn1.Type.BOOLEAN:\n rval += ' (Boolean)';\n break;\n case asn1.Type.INTEGER:\n rval += ' (Integer)';\n break;\n case asn1.Type.BITSTRING:\n rval += ' (Bit string)';\n break;\n case asn1.Type.OCTETSTRING:\n rval += ' (Octet string)';\n break;\n case asn1.Type.NULL:\n rval += ' (Null)';\n break;\n case asn1.Type.OID:\n rval += ' (Object Identifier)';\n break;\n case asn1.Type.ODESC:\n rval += ' (Object Descriptor)';\n break;\n case asn1.Type.EXTERNAL:\n rval += ' (External or Instance of)';\n break;\n case asn1.Type.REAL:\n rval += ' (Real)';\n break;\n case asn1.Type.ENUMERATED:\n rval += ' (Enumerated)';\n break;\n case asn1.Type.EMBEDDED:\n rval += ' (Embedded PDV)';\n break;\n case asn1.Type.UTF8:\n rval += ' (UTF8)';\n break;\n case asn1.Type.ROID:\n rval += ' (Relative Object Identifier)';\n break;\n case asn1.Type.SEQUENCE:\n rval += ' (Sequence)';\n break;\n case asn1.Type.SET:\n rval += ' (Set)';\n break;\n case asn1.Type.PRINTABLESTRING:\n rval += ' (Printable String)';\n break;\n case asn1.Type.IA5String:\n rval += ' (IA5String (ASCII))';\n break;\n case asn1.Type.UTCTIME:\n rval += ' (UTC time)';\n break;\n case asn1.Type.GENERALIZEDTIME:\n rval += ' (Generalized time)';\n break;\n case asn1.Type.BMPSTRING:\n rval += ' (BMP String)';\n break;\n }\n } else {\n rval += obj.type;\n }\n\n rval += '\\n';\n rval += indent + 'Constructed: ' + obj.constructed + '\\n';\n\n if(obj.composed) {\n var subvalues = 0;\n var sub = '';\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n subvalues += 1;\n sub += asn1.prettyPrint(obj.value[i], level + 1, indentation);\n if((i + 1) < obj.value.length) {\n sub += ',';\n }\n }\n }\n rval += indent + 'Sub values: ' + subvalues + sub;\n } else {\n rval += indent + 'Value: ';\n if(obj.type === asn1.Type.OID) {\n var oid = asn1.derToOid(obj.value);\n rval += oid;\n if(forge.pki && forge.pki.oids) {\n if(oid in forge.pki.oids) {\n rval += ' (' + forge.pki.oids[oid] + ') ';\n }\n }\n }\n if(obj.type === asn1.Type.INTEGER) {\n try {\n rval += asn1.derToInteger(obj.value);\n } catch(ex) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n }\n } else if(obj.type === asn1.Type.BITSTRING) {\n // TODO: shift bits as needed to display without padding\n if(obj.value.length > 1) {\n // remove unused bits field\n rval += '0x' + forge.util.bytesToHex(obj.value.slice(1));\n } else {\n rval += '(none)';\n }\n // show unused bit count\n if(obj.value.length > 0) {\n var unused = obj.value.charCodeAt(0);\n if(unused == 1) {\n rval += ' (1 unused bit shown)';\n } else if(unused > 1) {\n rval += ' (' + unused + ' unused bits shown)';\n }\n }\n } else if(obj.type === asn1.Type.OCTETSTRING) {\n if(!_nonLatinRegex.test(obj.value)) {\n rval += '(' + obj.value + ') ';\n }\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.type === asn1.Type.UTF8) {\n try {\n rval += forge.util.decodeUtf8(obj.value);\n } catch(e) {\n if(e.message === 'URI malformed') {\n rval +=\n '0x' + forge.util.bytesToHex(obj.value) + ' (malformed UTF8)';\n } else {\n throw e;\n }\n }\n } else if(obj.type === asn1.Type.PRINTABLESTRING ||\n obj.type === asn1.Type.IA5String) {\n rval += obj.value;\n } else if(_nonLatinRegex.test(obj.value)) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.value.length === 0) {\n rval += '[null]';\n } else {\n rval += obj.value;\n }\n }\n\n return rval;\n};\n","/**\n * Base-N/Base-X encoding/decoding functions.\n *\n * Original implementation from base-x:\n * https://github.com/cryptocoinjs/base-x\n *\n * Which is MIT licensed:\n *\n * The MIT License (MIT)\n *\n * Copyright base-x contributors (c) 2016\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\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nvar api = {};\nmodule.exports = api;\n\n// baseN alphabet indexes\nvar _reverseAlphabets = {};\n\n/**\n * BaseN-encodes a Uint8Array using the given alphabet.\n *\n * @param input the Uint8Array to encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the baseN-encoded output string.\n */\napi.encode = function(input, alphabet, maxline) {\n if(typeof alphabet !== 'string') {\n throw new TypeError('\"alphabet\" must be a string.');\n }\n if(maxline !== undefined && typeof maxline !== 'number') {\n throw new TypeError('\"maxline\" must be a number.');\n }\n\n var output = '';\n\n if(!(input instanceof Uint8Array)) {\n // assume forge byte buffer\n output = _encodeWithByteBuffer(input, alphabet);\n } else {\n var i = 0;\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var digits = [0];\n for(i = 0; i < input.length; ++i) {\n for(var j = 0, carry = input[i]; j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % base;\n carry = (carry / base) | 0;\n }\n\n while(carry > 0) {\n digits.push(carry % base);\n carry = (carry / base) | 0;\n }\n }\n\n // deal with leading zeros\n for(i = 0; input[i] === 0 && i < input.length - 1; ++i) {\n output += first;\n }\n // convert digits to a string\n for(i = digits.length - 1; i >= 0; --i) {\n output += alphabet[digits[i]];\n }\n }\n\n if(maxline) {\n var regex = new RegExp('.{1,' + maxline + '}', 'g');\n output = output.match(regex).join('\\r\\n');\n }\n\n return output;\n};\n\n/**\n * Decodes a baseN-encoded (using the given alphabet) string to a\n * Uint8Array.\n *\n * @param input the baseN-encoded input string.\n *\n * @return the Uint8Array.\n */\napi.decode = function(input, alphabet) {\n if(typeof input !== 'string') {\n throw new TypeError('\"input\" must be a string.');\n }\n if(typeof alphabet !== 'string') {\n throw new TypeError('\"alphabet\" must be a string.');\n }\n\n var table = _reverseAlphabets[alphabet];\n if(!table) {\n // compute reverse alphabet\n table = _reverseAlphabets[alphabet] = [];\n for(var i = 0; i < alphabet.length; ++i) {\n table[alphabet.charCodeAt(i)] = i;\n }\n }\n\n // remove whitespace characters\n input = input.replace(/\\s/g, '');\n\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var bytes = [0];\n for(var i = 0; i < input.length; i++) {\n var value = table[input.charCodeAt(i)];\n if(value === undefined) {\n return;\n }\n\n for(var j = 0, carry = value; j < bytes.length; ++j) {\n carry += bytes[j] * base;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n\n while(carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n // deal with leading zeros\n for(var k = 0; input[k] === first && k < input.length - 1; ++k) {\n bytes.push(0);\n }\n\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(bytes.reverse());\n }\n\n return new Uint8Array(bytes.reverse());\n};\n\nfunction _encodeWithByteBuffer(input, alphabet) {\n var i = 0;\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var digits = [0];\n for(i = 0; i < input.length(); ++i) {\n for(var j = 0, carry = input.at(i); j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % base;\n carry = (carry / base) | 0;\n }\n\n while(carry > 0) {\n digits.push(carry % base);\n carry = (carry / base) | 0;\n }\n }\n\n var output = '';\n\n // deal with leading zeros\n for(i = 0; input.at(i) === 0 && i < input.length() - 1; ++i) {\n output += first;\n }\n // convert digits to a string\n for(i = digits.length - 1; i >= 0; --i) {\n output += alphabet[digits[i]];\n }\n\n return output;\n}\n","/**\n * Cipher base API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nmodule.exports = forge.cipher = forge.cipher || {};\n\n// registered algorithms\nforge.cipher.algorithms = forge.cipher.algorithms || {};\n\n/**\n * Creates a cipher object that can be used to encrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createCipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: false\n });\n};\n\n/**\n * Creates a decipher object that can be used to decrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createDecipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: true\n });\n};\n\n/**\n * Registers an algorithm by name. If the name was already registered, the\n * algorithm API object will be overwritten.\n *\n * @param name the name of the algorithm.\n * @param algorithm the algorithm API object.\n */\nforge.cipher.registerAlgorithm = function(name, algorithm) {\n name = name.toUpperCase();\n forge.cipher.algorithms[name] = algorithm;\n};\n\n/**\n * Gets a registered algorithm by name.\n *\n * @param name the name of the algorithm.\n *\n * @return the algorithm, if found, null if not.\n */\nforge.cipher.getAlgorithm = function(name) {\n name = name.toUpperCase();\n if(name in forge.cipher.algorithms) {\n return forge.cipher.algorithms[name];\n }\n return null;\n};\n\nvar BlockCipher = forge.cipher.BlockCipher = function(options) {\n this.algorithm = options.algorithm;\n this.mode = this.algorithm.mode;\n this.blockSize = this.mode.blockSize;\n this._finish = false;\n this._input = null;\n this.output = null;\n this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt;\n this._decrypt = options.decrypt;\n this.algorithm.initialize(options);\n};\n\n/**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * For non-GCM mode, the IV may be a binary-encoded string of bytes, an array\n * of bytes, a byte buffer, or an array of 32-bit integers. If the IV is in\n * bytes, then it must be Nb (16) bytes in length. If the IV is given in as\n * 32-bit integers, then it must be 4 integers long.\n *\n * Note: an IV is not required or used in ECB mode.\n *\n * For GCM-mode, the IV must be given as a binary-encoded string of bytes or\n * a byte buffer. The number of bytes should be 12 (96 bits) as recommended\n * by NIST SP-800-38D but another length may be given.\n *\n * @param options the options to use:\n * iv the initialization vector to use as a binary-encoded string of\n * bytes, null to reuse the last ciphered block from a previous\n * update() (this \"residue\" method is for legacy support only).\n * additionalData additional authentication data as a binary-encoded\n * string of bytes, for 'GCM' mode, (default: none).\n * tagLength desired length of authentication tag, in bits, for\n * 'GCM' mode (0-128, default: 128).\n * tag the authentication tag to check if decrypting, as a\n * binary-encoded string of bytes.\n * output the output the buffer to write to, null to create one.\n */\nBlockCipher.prototype.start = function(options) {\n options = options || {};\n var opts = {};\n for(var key in options) {\n opts[key] = options[key];\n }\n opts.decrypt = this._decrypt;\n this._finish = false;\n this._input = forge.util.createBuffer();\n this.output = options.output || forge.util.createBuffer();\n this.mode.start(opts);\n};\n\n/**\n * Updates the next block according to the cipher mode.\n *\n * @param input the buffer to read from.\n */\nBlockCipher.prototype.update = function(input) {\n if(input) {\n // input given, so empty it into the input buffer\n this._input.putBuffer(input);\n }\n\n // do cipher operation until it needs more input and not finished\n while(!this._op.call(this.mode, this._input, this.output, this._finish) &&\n !this._finish) {}\n\n // free consumed memory from input buffer\n this._input.compact();\n};\n\n/**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use in CBC mode, null for default,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\nBlockCipher.prototype.finish = function(pad) {\n // backwards-compatibility w/deprecated padding API\n // Note: will overwrite padding functions even after another start() call\n if(pad && (this.mode.name === 'ECB' || this.mode.name === 'CBC')) {\n this.mode.pad = function(input) {\n return pad(this.blockSize, input, false);\n };\n this.mode.unpad = function(output) {\n return pad(this.blockSize, output, true);\n };\n }\n\n // build options for padding and afterFinish functions\n var options = {};\n options.decrypt = this._decrypt;\n\n // get # of bytes that won't fill a block\n options.overflow = this._input.length() % this.blockSize;\n\n if(!this._decrypt && this.mode.pad) {\n if(!this.mode.pad(this._input, options)) {\n return false;\n }\n }\n\n // do final update\n this._finish = true;\n this.update();\n\n if(this._decrypt && this.mode.unpad) {\n if(!this.mode.unpad(this.output, options)) {\n return false;\n }\n }\n\n if(this.mode.afterFinish) {\n if(!this.mode.afterFinish(this.output, options)) {\n return false;\n }\n }\n\n return true;\n};\n","/**\n * Supported cipher modes.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.cipher = forge.cipher || {};\n\n// supported cipher modes\nvar modes = module.exports = forge.cipher.modes = forge.cipher.modes || {};\n\n/** Electronic codebook (ECB) (Don't use this; it's not secure) **/\n\nmodes.ecb = function(options) {\n options = options || {};\n this.name = 'ECB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.ecb.prototype.start = function(options) {};\n\nmodes.ecb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.ecb.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher-block Chaining (CBC) **/\n\nmodes.cbc = function(options) {\n options = options || {};\n this.name = 'CBC';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.cbc.prototype.start = function(options) {\n // Note: legacy support for using IV residue (has security flaws)\n // if IV is null, reuse block from previous processing\n if(options.iv === null) {\n // must have a previous block\n if(!this._prev) {\n throw new Error('Invalid IV parameter.');\n }\n this._iv = this._prev.slice(0);\n } else if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n } else {\n // save IV as \"previous\" block\n this._iv = transformIV(options.iv, this.blockSize);\n this._prev = this._iv.slice(0);\n }\n};\n\nmodes.cbc.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n // CBC XOR's IV (or previous block) with plaintext\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._prev[i] ^ input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output, save previous block\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n this._prev = this._outBlock;\n};\n\nmodes.cbc.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output, save previous ciphered block\n // CBC XOR's IV (or previous block) with ciphertext\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._prev[i] ^ this._outBlock[i]);\n }\n this._prev = this._inBlock.slice(0);\n};\n\nmodes.cbc.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.cbc.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher feedback (CFB) **/\n\nmodes.cfb = function(options) {\n options = options || {};\n this.name = 'CFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32() ^ this._outBlock[i];\n output.putInt32(this._inBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32() ^ this._outBlock[i];\n this._partialOutput.putInt32(this._partialBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n output.putInt32(this._inBlock[i] ^ this._outBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32();\n this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\n/** Output feedback (OFB) **/\n\nmodes.ofb = function(options) {\n options = options || {};\n this.name = 'OFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(input.length() === 0) {\n return true;\n }\n\n // encrypt block (OFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output and update next input\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n this._inBlock[i] = this._outBlock[i];\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._outBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt;\n\n/** Counter (CTR) **/\n\nmodes.ctr = function(options) {\n options = options || {};\n this.name = 'CTR';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CTR always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // block complete, increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt;\n\n/** Galois/Counter Mode (GCM) **/\n\nmodes.gcm = function(options) {\n options = options || {};\n this.name = 'GCM';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n\n // R is actually this value concatenated with 120 more zero bits, but\n // we only XOR against R so the other zeros have no effect -- we just\n // apply this value to the first integer in a block\n this._R = 0xE1000000;\n};\n\nmodes.gcm.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // ensure IV is a byte buffer\n var iv = forge.util.createBuffer(options.iv);\n\n // no ciphered data processed yet\n this._cipherLength = 0;\n\n // default additional data is none\n var additionalData;\n if('additionalData' in options) {\n additionalData = forge.util.createBuffer(options.additionalData);\n } else {\n additionalData = forge.util.createBuffer();\n }\n\n // default tag length is 128 bits\n if('tagLength' in options) {\n this._tagLength = options.tagLength;\n } else {\n this._tagLength = 128;\n }\n\n // if tag is given, ensure tag matches tag length\n this._tag = null;\n if(options.decrypt) {\n // save tag to check later\n this._tag = forge.util.createBuffer(options.tag).getBytes();\n if(this._tag.length !== (this._tagLength / 8)) {\n throw new Error('Authentication tag does not match tag length.');\n }\n }\n\n // create tmp storage for hash calculation\n this._hashBlock = new Array(this._ints);\n\n // no tag generated yet\n this.tag = null;\n\n // generate hash subkey\n // (apply block cipher to \"zero\" block)\n this._hashSubkey = new Array(this._ints);\n this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey);\n\n // generate table M\n // use 4-bit tables (32 component decomposition of a 16 byte value)\n // 8-bit tables take more space and are known to have security\n // vulnerabilities (in native implementations)\n this.componentBits = 4;\n this._m = this.generateHashTable(this._hashSubkey, this.componentBits);\n\n // Note: support IV length different from 96 bits? (only supporting\n // 96 bits is recommended by NIST SP-800-38D)\n // generate J_0\n var ivLength = iv.length();\n if(ivLength === 12) {\n // 96-bit IV\n this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1];\n } else {\n // IV is NOT 96-bits\n this._j0 = [0, 0, 0, 0];\n while(iv.length() > 0) {\n this._j0 = this.ghash(\n this._hashSubkey, this._j0,\n [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]);\n }\n this._j0 = this.ghash(\n this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8)));\n }\n\n // generate ICB (initial counter block)\n this._inBlock = this._j0.slice(0);\n inc32(this._inBlock);\n this._partialBytes = 0;\n\n // consume authentication data\n additionalData = forge.util.createBuffer(additionalData);\n // save additional data length as a BE 64-bit number\n this._aDataLength = from64To32(additionalData.length() * 8);\n // pad additional data to 128 bit (16 byte) block size\n var overflow = additionalData.length() % this.blockSize;\n if(overflow) {\n additionalData.fillWithByte(0, this.blockSize - overflow);\n }\n this._s = [0, 0, 0, 0];\n while(additionalData.length() > 0) {\n this._s = this.ghash(this._hashSubkey, this._s, [\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32()\n ]);\n }\n};\n\nmodes.gcm.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^= input.getInt32());\n }\n this._cipherLength += this.blockSize;\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes <= 0 || finish) {\n // handle overflow prior to hashing\n if(finish) {\n // get block overflow\n var overflow = inputLength % this.blockSize;\n this._cipherLength += overflow;\n // truncate for hash function\n this._partialOutput.truncate(this.blockSize - overflow);\n } else {\n this._cipherLength += this.blockSize;\n }\n\n // get output block for hashing\n for(var i = 0; i < this._ints; ++i) {\n this._outBlock[i] = this._partialOutput.getInt32();\n }\n this._partialOutput.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n // block still incomplete, restore input buffer, get partial output,\n // and return early\n input.read -= this.blockSize;\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // update hash block S\n this._s = this.ghash(this._hashSubkey, this._s, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.gcm.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength < this.blockSize && !(finish && inputLength > 0)) {\n return true;\n }\n\n // encrypt block (GCM always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n\n // update hash block S\n this._hashBlock[0] = input.getInt32();\n this._hashBlock[1] = input.getInt32();\n this._hashBlock[2] = input.getInt32();\n this._hashBlock[3] = input.getInt32();\n this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock);\n\n // XOR hash input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^ this._hashBlock[i]);\n }\n\n // increment cipher data length\n if(inputLength < this.blockSize) {\n this._cipherLength += inputLength % this.blockSize;\n } else {\n this._cipherLength += this.blockSize;\n }\n};\n\nmodes.gcm.prototype.afterFinish = function(output, options) {\n var rval = true;\n\n // handle overflow\n if(options.decrypt && options.overflow) {\n output.truncate(this.blockSize - options.overflow);\n }\n\n // handle authentication tag\n this.tag = forge.util.createBuffer();\n\n // concatenate additional data length with cipher length\n var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8));\n\n // include lengths in hash\n this._s = this.ghash(this._hashSubkey, this._s, lengths);\n\n // do GCTR(J_0, S)\n var tag = [];\n this.cipher.encrypt(this._j0, tag);\n for(var i = 0; i < this._ints; ++i) {\n this.tag.putInt32(this._s[i] ^ tag[i]);\n }\n\n // trim tag to length\n this.tag.truncate(this.tag.length() % (this._tagLength / 8));\n\n // check authentication tag\n if(options.decrypt && this.tag.bytes() !== this._tag) {\n rval = false;\n }\n\n return rval;\n};\n\n/**\n * See NIST SP-800-38D 6.3 (Algorithm 1). This function performs Galois\n * field multiplication. The field, GF(2^128), is defined by the polynomial:\n *\n * x^128 + x^7 + x^2 + x + 1\n *\n * Which is represented in little-endian binary form as: 11100001 (0xe1). When\n * the value of a coefficient is 1, a bit is set. The value R, is the\n * concatenation of this value and 120 zero bits, yielding a 128-bit value\n * which matches the block size.\n *\n * This function will multiply two elements (vectors of bytes), X and Y, in\n * the field GF(2^128). The result is initialized to zero. For each bit of\n * X (out of 128), x_i, if x_i is set, then the result is multiplied (XOR'd)\n * by the current value of Y. For each bit, the value of Y will be raised by\n * a power of x (multiplied by the polynomial x). This can be achieved by\n * shifting Y once to the right. If the current value of Y, prior to being\n * multiplied by x, has 0 as its LSB, then it is a 127th degree polynomial.\n * Otherwise, we must divide by R after shifting to find the remainder.\n *\n * @param x the first block to multiply by the second.\n * @param y the second block to multiply by the first.\n *\n * @return the block result of the multiplication.\n */\nmodes.gcm.prototype.multiply = function(x, y) {\n var z_i = [0, 0, 0, 0];\n var v_i = y.slice(0);\n\n // calculate Z_128 (block has 128 bits)\n for(var i = 0; i < 128; ++i) {\n // if x_i is 0, Z_{i+1} = Z_i (unchanged)\n // else Z_{i+1} = Z_i ^ V_i\n // get x_i by finding 32-bit int position, then left shift 1 by remainder\n var x_i = x[(i / 32) | 0] & (1 << (31 - i % 32));\n if(x_i) {\n z_i[0] ^= v_i[0];\n z_i[1] ^= v_i[1];\n z_i[2] ^= v_i[2];\n z_i[3] ^= v_i[3];\n }\n\n // if LSB(V_i) is 1, V_i = V_i >> 1\n // else V_i = (V_i >> 1) ^ R\n this.pow(v_i, v_i);\n }\n\n return z_i;\n};\n\nmodes.gcm.prototype.pow = function(x, out) {\n // if LSB(x) is 1, x = x >>> 1\n // else x = (x >>> 1) ^ R\n var lsb = x[3] & 1;\n\n // always do x >>> 1:\n // starting with the rightmost integer, shift each integer to the right\n // one bit, pulling in the bit from the integer to the left as its top\n // most bit (do this for the last 3 integers)\n for(var i = 3; i > 0; --i) {\n out[i] = (x[i] >>> 1) | ((x[i - 1] & 1) << 31);\n }\n // shift the first integer normally\n out[0] = x[0] >>> 1;\n\n // if lsb was not set, then polynomial had a degree of 127 and doesn't\n // need to divided; otherwise, XOR with R to find the remainder; we only\n // need to XOR the first integer since R technically ends w/120 zero bits\n if(lsb) {\n out[0] ^= this._R;\n }\n};\n\nmodes.gcm.prototype.tableMultiply = function(x) {\n // assumes 4-bit tables are used\n var z = [0, 0, 0, 0];\n for(var i = 0; i < 32; ++i) {\n var idx = (i / 8) | 0;\n var x_i = (x[idx] >>> ((7 - (i % 8)) * 4)) & 0xF;\n var ah = this._m[i][x_i];\n z[0] ^= ah[0];\n z[1] ^= ah[1];\n z[2] ^= ah[2];\n z[3] ^= ah[3];\n }\n return z;\n};\n\n/**\n * A continuing version of the GHASH algorithm that operates on a single\n * block. The hash block, last hash value (Ym) and the new block to hash\n * are given.\n *\n * @param h the hash block.\n * @param y the previous value for Ym, use [0, 0, 0, 0] for a new hash.\n * @param x the block to hash.\n *\n * @return the hashed value (Ym).\n */\nmodes.gcm.prototype.ghash = function(h, y, x) {\n y[0] ^= x[0];\n y[1] ^= x[1];\n y[2] ^= x[2];\n y[3] ^= x[3];\n return this.tableMultiply(y);\n //return this.multiply(y, h);\n};\n\n/**\n * Precomputes a table for multiplying against the hash subkey. This\n * mechanism provides a substantial speed increase over multiplication\n * performed without a table. The table-based multiplication this table is\n * for solves X * H by multiplying each component of X by H and then\n * composing the results together using XOR.\n *\n * This function can be used to generate tables with different bit sizes\n * for the components, however, this implementation assumes there are\n * 32 components of X (which is a 16 byte vector), therefore each component\n * takes 4-bits (so the table is constructed with bits=4).\n *\n * @param h the hash subkey.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateHashTable = function(h, bits) {\n // TODO: There are further optimizations that would use only the\n // first table M_0 (or some variant) along with a remainder table;\n // this can be explored in the future\n var multiplier = 8 / bits;\n var perInt = 4 * multiplier;\n var size = 16 * multiplier;\n var m = new Array(size);\n for(var i = 0; i < size; ++i) {\n var tmp = [0, 0, 0, 0];\n var idx = (i / perInt) | 0;\n var shft = ((perInt - 1 - (i % perInt)) * bits);\n tmp[idx] = (1 << (bits - 1)) << shft;\n m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits);\n }\n return m;\n};\n\n/**\n * Generates a table for multiplying against the hash subkey for one\n * particular component (out of all possible component values).\n *\n * @param mid the pre-multiplied value for the middle key of the table.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateSubHashTable = function(mid, bits) {\n // compute the table quickly by minimizing the number of\n // POW operations -- they only need to be performed for powers of 2,\n // all other entries can be composed from those powers using XOR\n var size = 1 << bits;\n var half = size >>> 1;\n var m = new Array(size);\n m[half] = mid.slice(0);\n var i = half >>> 1;\n while(i > 0) {\n // raise m0[2 * i] and store in m0[i]\n this.pow(m[2 * i], m[i] = []);\n i >>= 1;\n }\n i = 2;\n while(i < half) {\n for(var j = 1; j < i; ++j) {\n var m_i = m[i];\n var m_j = m[j];\n m[i + j] = [\n m_i[0] ^ m_j[0],\n m_i[1] ^ m_j[1],\n m_i[2] ^ m_j[2],\n m_i[3] ^ m_j[3]\n ];\n }\n i *= 2;\n }\n m[0] = [0, 0, 0, 0];\n /* Note: We could avoid storing these by doing composition during multiply\n calculate top half using composition by speed is preferred. */\n for(i = half + 1; i < size; ++i) {\n var c = m[i ^ half];\n m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]];\n }\n return m;\n};\n\n/** Utility functions */\n\nfunction transformIV(iv, blockSize) {\n if(typeof iv === 'string') {\n // convert iv string into byte buffer\n iv = forge.util.createBuffer(iv);\n }\n\n if(forge.util.isArray(iv) && iv.length > 4) {\n // convert iv byte array into byte buffer\n var tmp = iv;\n iv = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n iv.putByte(tmp[i]);\n }\n }\n\n if(iv.length() < blockSize) {\n throw new Error(\n 'Invalid IV length; got ' + iv.length() +\n ' bytes and expected ' + blockSize + ' bytes.');\n }\n\n if(!forge.util.isArray(iv)) {\n // convert iv byte buffer into 32-bit integer array\n var ints = [];\n var blocks = blockSize / 4;\n for(var i = 0; i < blocks; ++i) {\n ints.push(iv.getInt32());\n }\n iv = ints;\n }\n\n return iv;\n}\n\nfunction inc32(block) {\n // increment last 32 bits of block only\n block[block.length - 1] = (block[block.length - 1] + 1) & 0xFFFFFFFF;\n}\n\nfunction from64To32(num) {\n // convert 64-bit number to two BE Int32s\n return [(num / 0x100000000) | 0, num & 0xFFFFFFFF];\n}\n","/**\n * DES (Data Encryption Standard) implementation.\n *\n * This implementation supports DES as well as 3DES-EDE in ECB and CBC mode.\n * It is based on the BSD-licensed implementation by Paul Tero:\n *\n * Paul Tero, July 2001\n * http://www.tero.co.uk/des/\n *\n * Optimised for performance with large blocks by\n * Michael Hayworth, November 2001\n * http://www.netdealing.com\n *\n * THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2012-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* DES API */\nmodule.exports = forge.des = forge.des || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-', key);\n * cipher.start({iv: iv});\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-', key);\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-', key);\n * decipher.start({iv: iv});\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-', key);\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new DES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the DES algorithm object.\n */\nforge.des.Algorithm = function(name, mode) {\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 8,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this DES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.des.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = forge.util.createBuffer(options.key);\n if(this.name.indexOf('3DES') === 0) {\n if(key.length() !== 24) {\n throw new Error('Invalid Triple-DES key size: ' + key.length() * 8);\n }\n }\n\n // do key expansion to 16 or 48 subkeys (single or triple DES)\n this._keys = _createKeys(key);\n this._init = true;\n};\n\n/** Register DES algorithms **/\n\nregisterAlgorithm('DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('DES-CTR', forge.cipher.modes.ctr);\n\nregisterAlgorithm('3DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('3DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('3DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('3DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('3DES-CTR', forge.cipher.modes.ctr);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.des.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** DES implementation **/\n\nvar spfunction1 = [0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004];\nvar spfunction2 = [-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000];\nvar spfunction3 = [0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200];\nvar spfunction4 = [0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080];\nvar spfunction5 = [0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100];\nvar spfunction6 = [0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010];\nvar spfunction7 = [0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002];\nvar spfunction8 = [0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000];\n\n/**\n * Create necessary sub keys.\n *\n * @param key the 64-bit or 192-bit key.\n *\n * @return the expanded keys.\n */\nfunction _createKeys(key) {\n var pc2bytes0 = [0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204],\n pc2bytes1 = [0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101],\n pc2bytes2 = [0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808],\n pc2bytes3 = [0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000],\n pc2bytes4 = [0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010],\n pc2bytes5 = [0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],\n pc2bytes6 = [0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002],\n pc2bytes7 = [0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800],\n pc2bytes8 = [0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],\n pc2bytes9 = [0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408],\n pc2bytes10 = [0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020],\n pc2bytes11 = [0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],\n pc2bytes12 = [0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010],\n pc2bytes13 = [0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105];\n\n // how many iterations (1 for des, 3 for triple des)\n // changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n var iterations = key.length() > 8 ? 3 : 1;\n\n // stores the return keys\n var keys = [];\n\n // now define the left shifts which need to be done\n var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n\n var n = 0, tmp;\n for(var j = 0; j < iterations; j++) {\n var left = key.getInt32();\n var right = key.getInt32();\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 2) ^ right) & 0x33333333;\n right ^= tmp;\n left ^= (tmp << 2);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // right needs to be shifted and OR'd with last four bits of left\n tmp = (left << 8) | ((right >>> 20) & 0x000000f0);\n\n // left needs to be put upside down\n left = ((right << 24) | ((right << 8) & 0xff0000) |\n ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0));\n right = tmp;\n\n // now go through and perform these shifts on the left and right keys\n for(var i = 0; i < shifts.length; ++i) {\n //shift the keys either one or two bits to the left\n if(shifts[i]) {\n left = (left << 2) | (left >>> 26);\n right = (right << 2) | (right >>> 26);\n } else {\n left = (left << 1) | (left >>> 27);\n right = (right << 1) | (right >>> 27);\n }\n left &= -0xf;\n right &= -0xf;\n\n // now apply PC-2, in such a way that E is easier when encrypting or\n // decrypting this conversion will look like PC-2 except only the last 6\n // bits of each byte are used rather than 48 consecutive bits and the\n // order of lines will be according to how the S selection functions will\n // be applied: S2, S4, S6, S8, S1, S3, S5, S7\n var lefttmp = (\n pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] |\n pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] |\n pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] |\n pc2bytes6[(left >>> 4) & 0xf]);\n var righttmp = (\n pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] |\n pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] |\n pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |\n pc2bytes13[(right >>> 4) & 0xf]);\n tmp = ((righttmp >>> 16) ^ lefttmp) & 0x0000ffff;\n keys[n++] = lefttmp ^ tmp;\n keys[n++] = righttmp ^ (tmp << 16);\n }\n }\n\n return keys;\n}\n\n/**\n * Updates a single block (1 byte) using DES. The update will either\n * encrypt or decrypt the block.\n *\n * @param keys the expanded keys.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(keys, input, output, decrypt) {\n // set up loops for single or triple DES\n var iterations = keys.length === 32 ? 3 : 9;\n var looping;\n if(iterations === 3) {\n looping = decrypt ? [30, -2, -2] : [0, 32, 2];\n } else {\n looping = (decrypt ?\n [94, 62, -2, 32, 64, 2, 30, -2, -2] :\n [0, 32, 2, 62, 30, -2, 64, 96, 2]);\n }\n\n var tmp;\n\n var left = input[0];\n var right = input[1];\n\n // first each 64 bit chunk of the message must be permuted according to IP\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // rotate left 1 bit\n left = ((left << 1) | (left >>> 31));\n right = ((right << 1) | (right >>> 31));\n\n for(var j = 0; j < iterations; j += 3) {\n var endloop = looping[j + 1];\n var loopinc = looping[j + 2];\n\n // now go through and perform the encryption or decryption\n for(var i = looping[j]; i != endloop; i += loopinc) {\n var right1 = right ^ keys[i];\n var right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];\n\n // passing these bytes through the S selection functions\n tmp = left;\n left = right;\n right = tmp ^ (\n spfunction2[(right1 >>> 24) & 0x3f] |\n spfunction4[(right1 >>> 16) & 0x3f] |\n spfunction6[(right1 >>> 8) & 0x3f] |\n spfunction8[right1 & 0x3f] |\n spfunction1[(right2 >>> 24) & 0x3f] |\n spfunction3[(right2 >>> 16) & 0x3f] |\n spfunction5[(right2 >>> 8) & 0x3f] |\n spfunction7[right2 & 0x3f]);\n }\n // unreverse left and right\n tmp = left;\n left = right;\n right = tmp;\n }\n\n // rotate right 1 bit\n left = ((left >>> 1) | (left << 31));\n right = ((right >>> 1) | (right << 31));\n\n // now perform IP-1, which is IP in the opposite direction\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n output[0] = left;\n output[1] = right;\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('DES-', key);\n * forge.cipher.createDecipher('DES-', key);\n *\n * Creates a deprecated DES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param options the options to use.\n * key the symmetric key to use (64 or 192 bits).\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'DES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * Node.js module for Forge.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2016 Digital Bazaar, Inc.\n */\nmodule.exports = {\n // default options\n options: {\n usePureJavaScript: false\n }\n};\n","/**\n * Hash-based Message Authentication Code implementation. Requires a message\n * digest object that can be obtained, for example, from forge.md.sha1 or\n * forge.md.md5.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2012 Digital Bazaar, Inc. All rights reserved.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\n/* HMAC API */\nvar hmac = module.exports = forge.hmac = forge.hmac || {};\n\n/**\n * Creates an HMAC object that uses the given message digest object.\n *\n * @return an HMAC object.\n */\nhmac.create = function() {\n // the hmac key to use\n var _key = null;\n\n // the message digest to use\n var _md = null;\n\n // the inner padding\n var _ipadding = null;\n\n // the outer padding\n var _opadding = null;\n\n // hmac context\n var ctx = {};\n\n /**\n * Starts or restarts the HMAC with the given key and message digest.\n *\n * @param md the message digest to use, null to reuse the previous one,\n * a string to use builtin 'sha1', 'md5', 'sha256'.\n * @param key the key to use as a string, array of bytes, byte buffer,\n * or null to reuse the previous key.\n */\n ctx.start = function(md, key) {\n if(md !== null) {\n if(typeof md === 'string') {\n // create builtin message digest\n md = md.toLowerCase();\n if(md in forge.md.algorithms) {\n _md = forge.md.algorithms[md].create();\n } else {\n throw new Error('Unknown hash algorithm \"' + md + '\"');\n }\n } else {\n // store message digest\n _md = md;\n }\n }\n\n if(key === null) {\n // reuse previous key\n key = _key;\n } else {\n if(typeof key === 'string') {\n // convert string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key)) {\n // convert byte array into byte buffer\n var tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // if key is longer than blocksize, hash it\n var keylen = key.length();\n if(keylen > _md.blockLength) {\n _md.start();\n _md.update(key.bytes());\n key = _md.digest();\n }\n\n // mix key into inner and outer padding\n // ipadding = [0x36 * blocksize] ^ key\n // opadding = [0x5C * blocksize] ^ key\n _ipadding = forge.util.createBuffer();\n _opadding = forge.util.createBuffer();\n keylen = key.length();\n for(var i = 0; i < keylen; ++i) {\n var tmp = key.at(i);\n _ipadding.putByte(0x36 ^ tmp);\n _opadding.putByte(0x5C ^ tmp);\n }\n\n // if key is shorter than blocksize, add additional padding\n if(keylen < _md.blockLength) {\n var tmp = _md.blockLength - keylen;\n for(var i = 0; i < tmp; ++i) {\n _ipadding.putByte(0x36);\n _opadding.putByte(0x5C);\n }\n }\n _key = key;\n _ipadding = _ipadding.bytes();\n _opadding = _opadding.bytes();\n }\n\n // digest is done like so: hash(opadding | hash(ipadding | message))\n\n // prepare to do inner hash\n // hash(ipadding | message)\n _md.start();\n _md.update(_ipadding);\n };\n\n /**\n * Updates the HMAC with the given message bytes.\n *\n * @param bytes the bytes to update with.\n */\n ctx.update = function(bytes) {\n _md.update(bytes);\n };\n\n /**\n * Produces the Message Authentication Code (MAC).\n *\n * @return a byte buffer containing the digest value.\n */\n ctx.getMac = function() {\n // digest is done like so: hash(opadding | hash(ipadding | message))\n // here we do the outer hashing\n var inner = _md.digest().bytes();\n _md.start();\n _md.update(_opadding);\n _md.update(inner);\n return _md.digest();\n };\n // alias for getMac\n ctx.digest = ctx.getMac;\n\n return ctx;\n};\n","// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n/*\nLicensing (LICENSE)\n-------------------\n\nThis software is covered under the following copyright:\n*/\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n/*\nAddress all questions regarding this license to:\n\n Tom Wu\n tjw@cs.Stanford.EDU\n*/\nvar forge = require('./forge');\n\nmodule.exports = forge.jsbn = forge.jsbn || {};\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary&0xffffff)==0xefcafe);\n\n// (public) Constructor\nfunction BigInteger(a,b,c) {\n this.data = [];\n if(a != null)\n if(\"number\" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n}\nforge.jsbn.BigInteger = BigInteger;\n\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this.data[i++]+w.data[j]+c;\n c = Math.floor(v/0x4000000);\n w.data[j++] = v&0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this.data[i]&0x7fff;\n var h = this.data[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w.data[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w.data[j++] = l&0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this.data[i]&0x3fff;\n var h = this.data[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w.data[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w.data[j++] = l&0xfffffff;\n }\n return c;\n}\n\n// node.js (no browser)\nif(typeof(navigator) === 'undefined')\n{\n BigInteger.prototype.am = am3;\n dbits = 28;\n} else if(j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if(j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1<= 0; --i) r.data[i] = this.data[i];\n r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this.data[0] = x;\n else if(x < -1) this.data[0] = x+this.DV;\n else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n// (protected) set from string and radix\nfunction bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this.data[this.t++] = x;\n else if(sh+k > this.DB) {\n this.data[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));\n } else\n this.data[this.t-1] |= x<= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this.data[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this.data[this.t-1] == c) --this.t;\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if(this.s < 0) return \"-\"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1< 0) {\n if(p < this.DB && (d = this.data[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this.data[i]&((1<>(p+=this.DB-k);\n } else {\n d = (this.data[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:\"0\";\n}\n\n// (public) -this\nfunction bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n// (public) |this|\nfunction bnAbs() { return (this.s<0)?this.negate():this; }\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this.data[i]-a.data[i]) != 0) return r;\n return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this.data[this.t-1]^(this.s&this.DM));\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r.data[i+n] = this.data[i];\n for(i = n-1; i >= 0; --i) r.data[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r.data[i-n] = this.data[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<= 0; --i) {\n r.data[i+ds+1] = (this.data[i]>>cbs)|c;\n c = (this.data[i]&bm)<= 0; --i) r.data[i] = 0;\n r.data[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r.data[i-ds-1] |= (this.data[i]&bm)<>bs;\n }\n if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while(i < a.t) {\n c -= a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r.data[i++] = this.DV+c;\n else if(c > 0) r.data[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < y.t; ++i) r.data[i+x.t] = x.am(0,y.data[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x.data[i],r,2*i,0,1);\n if((r.data[i+x.t]+=x.am(i+1,2*x.data[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r.data[i+x.t] -= x.DV;\n r.data[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r.data[r.t-1] += x.am(i,x.data[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm.data[pm.t-1]);\t// normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y.data[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<1)?y.data[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<= 0) {\n r.data[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y);\t// \"negative\" y so we can replace sub with am later\n while(y.t < ys) y.data[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r.data[--i]==y0)?this.DM:Math.floor(r.data[i]*d1+(r.data[i-1]+e)*d2);\n if((r.data[i]+=y.am(0,qd,r,j,0,ys)) < qd) {\t// Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r.data[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r);\t// Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n}\n\n// Modular reduction using \"classic\" algorithm\nfunction Classic(m) { this.m = m; }\nfunction cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n}\nfunction cRevert(x) { return x; }\nfunction cReduce(x) { x.divRemTo(this.m,null,x); }\nfunction cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\nfunction cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this.data[0];\n if((x&1) == 0) return 0;\n var y = x&3;\t\t// y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf;\t// y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff;\t// y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;\t// y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV;\t\t// y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while(x.t <= this.mt2)\t// pad x so am has enough room later\n x.data[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x.data[i]*mp mod DV\n var j = x.data[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x.data[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x.data[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x.data[j] >= x.DV) { x.data[j] -= x.DV; x.data[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (protected) true iff this is even\nfunction bnpIsEven() { return ((this.t>0)?(this.data[0]&1):this.s) == 0; }\n\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\nfunction bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1< 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n}\n\n// (public) this^e % m, 0 <= e < 2^32\nfunction bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n// jsbn2 lib\n\n//Copyright (c) 2005-2009 Tom Wu\n//All Rights Reserved.\n//See \"LICENSE\" for details (See jsbn.js for LICENSE).\n\n//Extended JavaScript BN functions, required for RSA private ops.\n\n//Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n\n//(public)\nfunction bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n//(public) return value as integer\nfunction bnIntValue() {\nif(this.s < 0) {\n if(this.t == 1) return this.data[0]-this.DV;\n else if(this.t == 0) return -1;\n} else if(this.t == 1) return this.data[0];\nelse if(this.t == 0) return 0;\n// assumes 16 < DB < 32\nreturn ((this.data[1]&((1<<(32-this.DB))-1))<>24; }\n\n//(public) return value as short (assumes DB>=16)\nfunction bnShortValue() { return (this.t==0)?this.s:(this.data[0]<<16)>>16; }\n\n//(protected) return x s.t. r^x < DV\nfunction bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n//(public) 0 if this == 0, 1 if this > 0\nfunction bnSigNum() {\nif(this.s < 0) return -1;\nelse if(this.t <= 0 || (this.t == 1 && this.data[0] <= 0)) return 0;\nelse return 1;\n}\n\n//(protected) convert to radix string\nfunction bnpToRadix(b) {\nif(b == null) b = 10;\nif(this.signum() == 0 || b < 2 || b > 36) return \"0\";\nvar cs = this.chunkSize(b);\nvar a = Math.pow(b,cs);\nvar d = nbv(a), y = nbi(), z = nbi(), r = \"\";\nthis.divRemTo(d,y,z);\nwhile(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n}\nreturn z.intValue().toString(b) + r;\n}\n\n//(protected) convert from radix string\nfunction bnpFromRadix(s,b) {\nthis.fromInt(0);\nif(b == null) b = 10;\nvar cs = this.chunkSize(b);\nvar d = Math.pow(b,cs), mi = false, j = 0, w = 0;\nfor(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n}\nif(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n}\nif(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n//(protected) alternate constructor\nfunction bnpFromNumber(a,b,c) {\nif(\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1)) // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n} else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1< 0) {\n if(p < this.DB && (d = this.data[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this.data[i]&((1<>(p+=this.DB-8);\n } else {\n d = (this.data[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n}\nreturn r;\n}\n\nfunction bnEquals(a) { return(this.compareTo(a)==0); }\nfunction bnMin(a) { return(this.compareTo(a)<0)?this:a; }\nfunction bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n//(protected) r = this op a (bitwise)\nfunction bnpBitwiseTo(a,op,r) {\nvar i, f, m = Math.min(a.t,this.t);\nfor(i = 0; i < m; ++i) r.data[i] = op(this.data[i],a.data[i]);\nif(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r.data[i] = op(this.data[i],f);\n r.t = this.t;\n} else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r.data[i] = op(f,a.data[i]);\n r.t = a.t;\n}\nr.s = op(this.s,a.s);\nr.clamp();\n}\n\n//(public) this & a\nfunction op_and(x,y) { return x&y; }\nfunction bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n//(public) this | a\nfunction op_or(x,y) { return x|y; }\nfunction bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n//(public) this ^ a\nfunction op_xor(x,y) { return x^y; }\nfunction bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n//(public) this & ~a\nfunction op_andnot(x,y) { return x&~y; }\nfunction bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n//(public) ~this\nfunction bnNot() {\nvar r = nbi();\nfor(var i = 0; i < this.t; ++i) r.data[i] = this.DM&~this.data[i];\nr.t = this.t;\nr.s = ~this.s;\nreturn r;\n}\n\n//(public) this << n\nfunction bnShiftLeft(n) {\nvar r = nbi();\nif(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\nreturn r;\n}\n\n//(public) this >> n\nfunction bnShiftRight(n) {\nvar r = nbi();\nif(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\nreturn r;\n}\n\n//return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\nif(x == 0) return -1;\nvar r = 0;\nif((x&0xffff) == 0) { x >>= 16; r += 16; }\nif((x&0xff) == 0) { x >>= 8; r += 8; }\nif((x&0xf) == 0) { x >>= 4; r += 4; }\nif((x&3) == 0) { x >>= 2; r += 2; }\nif((x&1) == 0) ++r;\nreturn r;\n}\n\n//(public) returns index of lowest 1-bit (or -1 if none)\nfunction bnGetLowestSetBit() {\nfor(var i = 0; i < this.t; ++i)\n if(this.data[i] != 0) return i*this.DB+lbit(this.data[i]);\nif(this.s < 0) return this.t*this.DB;\nreturn -1;\n}\n\n//return number of 1 bits in x\nfunction cbit(x) {\nvar r = 0;\nwhile(x != 0) { x &= x-1; ++r; }\nreturn r;\n}\n\n//(public) return number of set bits\nfunction bnBitCount() {\nvar r = 0, x = this.s&this.DM;\nfor(var i = 0; i < this.t; ++i) r += cbit(this.data[i]^x);\nreturn r;\n}\n\n//(public) true iff nth bit is set\nfunction bnTestBit(n) {\nvar j = Math.floor(n/this.DB);\nif(j >= this.t) return(this.s!=0);\nreturn((this.data[j]&(1<<(n%this.DB)))!=0);\n}\n\n//(protected) this op (1<>= this.DB;\n}\nif(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n} else {\n c += this.s;\n while(i < a.t) {\n c += a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n}\nr.s = (c<0)?-1:0;\nif(c > 0) r.data[i++] = c;\nelse if(c < -1) r.data[i++] = this.DV+c;\nr.t = i;\nr.clamp();\n}\n\n//(public) this + a\nfunction bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n//(public) this - a\nfunction bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n//(public) this * a\nfunction bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n//(public) this / a\nfunction bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n//(public) this % a\nfunction bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n//(public) [this/a,this%a]\nfunction bnDivideAndRemainder(a) {\nvar q = nbi(), r = nbi();\nthis.divRemTo(a,q,r);\nreturn new Array(q,r);\n}\n\n//(protected) this *= n, this >= 0, 1 < n < DV\nfunction bnpDMultiply(n) {\nthis.data[this.t] = this.am(0,n-1,this,0,0,this.t);\n++this.t;\nthis.clamp();\n}\n\n//(protected) this += n << w words, this >= 0\nfunction bnpDAddOffset(n,w) {\nif(n == 0) return;\nwhile(this.t <= w) this.data[this.t++] = 0;\nthis.data[w] += n;\nwhile(this.data[w] >= this.DV) {\n this.data[w] -= this.DV;\n if(++w >= this.t) this.data[this.t++] = 0;\n ++this.data[w];\n}\n}\n\n//A \"null\" reducer\nfunction NullExp() {}\nfunction nNop(x) { return x; }\nfunction nMulTo(x,y,r) { x.multiplyTo(y,r); }\nfunction nSqrTo(x,r) { x.squareTo(r); }\n\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\n\n//(public) this^e\nfunction bnPow(e) { return this.exp(e,new NullExp()); }\n\n//(protected) r = lower n words of \"this * a\", a.t <= n\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyLowerTo(a,n,r) {\nvar i = Math.min(this.t+a.t,n);\nr.s = 0; // assumes a,this >= 0\nr.t = i;\nwhile(i > 0) r.data[--i] = 0;\nvar j;\nfor(j = r.t-this.t; i < j; ++i) r.data[i+this.t] = this.am(0,a.data[i],r,i,0,this.t);\nfor(j = Math.min(a.t,n); i < j; ++i) this.am(0,a.data[i],r,i,0,n-i);\nr.clamp();\n}\n\n//(protected) r = \"this * a\" without lower n words, n > 0\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyUpperTo(a,n,r) {\n--n;\nvar i = r.t = this.t+a.t-n;\nr.s = 0; // assumes a,this >= 0\nwhile(--i >= 0) r.data[i] = 0;\nfor(i = Math.max(n-this.t,0); i < a.t; ++i)\n r.data[this.t+i-n] = this.am(n-i,a.data[i],r,0,0,this.t+i-n);\nr.clamp();\nr.drShiftTo(1,r);\n}\n\n//Barrett modular reduction\nfunction Barrett(m) {\n// setup Barrett\nthis.r2 = nbi();\nthis.q3 = nbi();\nBigInteger.ONE.dlShiftTo(2*m.t,this.r2);\nthis.mu = this.r2.divide(m);\nthis.m = m;\n}\n\nfunction barrettConvert(x) {\nif(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\nelse if(x.compareTo(this.m) < 0) return x;\nelse { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n}\n\nfunction barrettRevert(x) { return x; }\n\n//x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\nx.drShiftTo(this.m.t-1,this.r2);\nif(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\nthis.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\nthis.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\nwhile(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\nx.subTo(this.r2,x);\nwhile(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n//r = x^2 mod m; x != r\nfunction barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n//r = x*y mod m; x,y != r\nfunction barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n//(public) this^e % m (HAC 14.85)\nfunction bnModPow(e,m) {\nvar i = e.bitLength(), k, r = nbv(1), z;\nif(i <= 0) return r;\nelse if(i < 18) k = 1;\nelse if(i < 48) k = 3;\nelse if(i < 144) k = 4;\nelse if(i < 768) k = 5;\nelse k = 6;\nif(i < 8)\n z = new Classic(m);\nelse if(m.isEven())\n z = new Barrett(m);\nelse\n z = new Montgomery(m);\n\n// precomputation\nvar g = new Array(), n = 3, k1 = k-1, km = (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n}\n\nvar j = e.t-1, w, is1 = true, r2 = nbi(), t;\ni = nbits(e.data[j])-1;\nwhile(j >= 0) {\n if(i >= k1) w = (e.data[j]>>(i-k1))&km;\n else {\n w = (e.data[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e.data[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e.data[j]&(1< 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n}\nwhile(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n } else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n}\nif(g > 0) y.lShiftTo(g,y);\nreturn y;\n}\n\n//(protected) this % n, n < 2^26\nfunction bnpModInt(n) {\nif(n <= 0) return 0;\nvar d = this.DV%n, r = (this.s<0)?n-1:0;\nif(this.t > 0)\n if(d == 0) r = this.data[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this.data[i])%n;\nreturn r;\n}\n\n//(public) 1/this % m (HAC 14.61)\nfunction bnModInverse(m) {\nvar ac = m.isEven();\nif((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\nvar u = m.clone(), v = this.clone();\nvar a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\nwhile(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n } else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n } else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n } else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n}\nif(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\nif(d.compareTo(m) >= 0) return d.subtract(m);\nif(d.signum() < 0) d.addTo(m,d); else return d;\nif(d.signum() < 0) return d.add(m); else return d;\n}\n\nvar lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];\nvar lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n//(public) test primality with certainty >= 1-.5^t\nfunction bnIsProbablePrime(t) {\nvar i, x = this.abs();\nif(x.t == 1 && x.data[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x.data[0] == lowprimes[i]) return true;\n return false;\n}\nif(x.isEven()) return false;\ni = 1;\nwhile(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n}\nreturn x.millerRabin(t);\n}\n\n//(protected) true if probably prime (HAC 4.24, Miller-Rabin)\nfunction bnpMillerRabin(t) {\nvar n1 = this.subtract(BigInteger.ONE);\nvar k = n1.getLowestSetBit();\nif(k <= 0) return false;\nvar r = n1.shiftRight(k);\nvar prng = bnGetPrng();\nvar a;\nfor(var i = 0; i < t; ++i) {\n // select witness 'a' at random from between 1 and n1\n do {\n a = new BigInteger(this.bitLength(), prng);\n }\n while(a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n}\nreturn true;\n}\n\n// get pseudo random number generator\nfunction bnGetPrng() {\n // create prng with api that matches BigInteger secure random\n return {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n for(var i = 0; i < x.length; ++i) {\n x[i] = Math.floor(Math.random() * 0x0100);\n }\n }\n };\n}\n\n//protected\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\n\n//public\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n//BigInteger interfaces not implemented in jsbn:\n\n//BigInteger(int signum, byte[] magnitude)\n//double doubleValue()\n//float floatValue()\n//int hashCode()\n//long longValue()\n//static BigInteger valueOf(long val)\n","/**\n * Node.js module for Forge message digests.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2017 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nmodule.exports = forge.md = forge.md || {};\nforge.md.algorithms = forge.md.algorithms || {};\n","/**\n * Node.js module for Forge mask generation functions.\n *\n * @author Stefan Siegl\n *\n * Copyright 2012 Stefan Siegl \n */\nvar forge = require('./forge');\nrequire('./mgf1');\n\nmodule.exports = forge.mgf = forge.mgf || {};\nforge.mgf.mgf1 = forge.mgf1;\n","/**\n * Javascript implementation of mask generation function MGF1.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.mgf = forge.mgf || {};\nvar mgf1 = module.exports = forge.mgf.mgf1 = forge.mgf1 = forge.mgf1 || {};\n\n/**\n * Creates a MGF1 mask generation function object.\n *\n * @param md the message digest API to use (eg: forge.md.sha1.create()).\n *\n * @return a mask generation function object.\n */\nmgf1.create = function(md) {\n var mgf = {\n /**\n * Generate mask of specified length.\n *\n * @param {String} seed The seed for mask generation.\n * @param maskLen Number of bytes to generate.\n * @return {String} The generated mask.\n */\n generate: function(seed, maskLen) {\n /* 2. Let T be the empty octet string. */\n var t = new forge.util.ByteBuffer();\n\n /* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */\n var len = Math.ceil(maskLen / md.digestLength);\n for(var i = 0; i < len; i++) {\n /* a. Convert counter to an octet string C of length 4 octets */\n var c = new forge.util.ByteBuffer();\n c.putInt32(i);\n\n /* b. Concatenate the hash of the seed mgfSeed and C to the octet\n * string T: */\n md.start();\n md.update(seed + c.getBytes());\n t.putBuffer(md.digest());\n }\n\n /* Output the leading maskLen octets of T as the octet string mask. */\n t.truncate(t.length() - maskLen);\n return t.getBytes();\n }\n };\n\n return mgf;\n};\n","/**\n * Object IDs for ASN.1.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nforge.pki = forge.pki || {};\nvar oids = module.exports = forge.pki.oids = forge.oids = forge.oids || {};\n\n// set id to name mapping and name to id mapping\nfunction _IN(id, name) {\n oids[id] = name;\n oids[name] = id;\n}\n// set id to name mapping only\nfunction _I_(id, name) {\n oids[id] = name;\n}\n\n// algorithm OIDs\n_IN('1.2.840.113549.1.1.1', 'rsaEncryption');\n// Note: md2 & md4 not implemented\n//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption');\n//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption');\n_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption');\n_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption');\n_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP');\n_IN('1.2.840.113549.1.1.8', 'mgf1');\n_IN('1.2.840.113549.1.1.9', 'pSpecified');\n_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS');\n_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption');\n_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption');\n_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption');\n// Edwards-curve Digital Signature Algorithm (EdDSA) Ed25519\n_IN('1.3.101.112', 'EdDSA25519');\n\n_IN('1.2.840.10040.4.3', 'dsa-with-sha1');\n\n_IN('1.3.14.3.2.7', 'desCBC');\n\n_IN('1.3.14.3.2.26', 'sha1');\n// Deprecated equivalent of sha1WithRSAEncryption\n_IN('1.3.14.3.2.29', 'sha1WithRSASignature');\n_IN('2.16.840.1.101.3.4.2.1', 'sha256');\n_IN('2.16.840.1.101.3.4.2.2', 'sha384');\n_IN('2.16.840.1.101.3.4.2.3', 'sha512');\n_IN('2.16.840.1.101.3.4.2.4', 'sha224');\n_IN('2.16.840.1.101.3.4.2.5', 'sha512-224');\n_IN('2.16.840.1.101.3.4.2.6', 'sha512-256');\n_IN('1.2.840.113549.2.2', 'md2');\n_IN('1.2.840.113549.2.5', 'md5');\n\n// pkcs#7 content types\n_IN('1.2.840.113549.1.7.1', 'data');\n_IN('1.2.840.113549.1.7.2', 'signedData');\n_IN('1.2.840.113549.1.7.3', 'envelopedData');\n_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData');\n_IN('1.2.840.113549.1.7.5', 'digestedData');\n_IN('1.2.840.113549.1.7.6', 'encryptedData');\n\n// pkcs#9 oids\n_IN('1.2.840.113549.1.9.1', 'emailAddress');\n_IN('1.2.840.113549.1.9.2', 'unstructuredName');\n_IN('1.2.840.113549.1.9.3', 'contentType');\n_IN('1.2.840.113549.1.9.4', 'messageDigest');\n_IN('1.2.840.113549.1.9.5', 'signingTime');\n_IN('1.2.840.113549.1.9.6', 'counterSignature');\n_IN('1.2.840.113549.1.9.7', 'challengePassword');\n_IN('1.2.840.113549.1.9.8', 'unstructuredAddress');\n_IN('1.2.840.113549.1.9.14', 'extensionRequest');\n\n_IN('1.2.840.113549.1.9.20', 'friendlyName');\n_IN('1.2.840.113549.1.9.21', 'localKeyId');\n_IN('1.2.840.113549.1.9.22.1', 'x509Certificate');\n\n// pkcs#12 safe bags\n_IN('1.2.840.113549.1.12.10.1.1', 'keyBag');\n_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag');\n_IN('1.2.840.113549.1.12.10.1.3', 'certBag');\n_IN('1.2.840.113549.1.12.10.1.4', 'crlBag');\n_IN('1.2.840.113549.1.12.10.1.5', 'secretBag');\n_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag');\n\n// password-based-encryption for pkcs#12\n_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2');\n_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2');\n\n_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4');\n_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4');\n_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC');\n_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC');\n\n// hmac OIDs\n_IN('1.2.840.113549.2.7', 'hmacWithSHA1');\n_IN('1.2.840.113549.2.8', 'hmacWithSHA224');\n_IN('1.2.840.113549.2.9', 'hmacWithSHA256');\n_IN('1.2.840.113549.2.10', 'hmacWithSHA384');\n_IN('1.2.840.113549.2.11', 'hmacWithSHA512');\n\n// symmetric key algorithm oids\n_IN('1.2.840.113549.3.7', 'des-EDE3-CBC');\n_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC');\n_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC');\n_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC');\n\n// certificate issuer/subject OIDs\n_IN('2.5.4.3', 'commonName');\n_IN('2.5.4.4', 'surname');\n_IN('2.5.4.5', 'serialNumber');\n_IN('2.5.4.6', 'countryName');\n_IN('2.5.4.7', 'localityName');\n_IN('2.5.4.8', 'stateOrProvinceName');\n_IN('2.5.4.9', 'streetAddress');\n_IN('2.5.4.10', 'organizationName');\n_IN('2.5.4.11', 'organizationalUnitName');\n_IN('2.5.4.12', 'title');\n_IN('2.5.4.13', 'description');\n_IN('2.5.4.15', 'businessCategory');\n_IN('2.5.4.17', 'postalCode');\n_IN('2.5.4.42', 'givenName');\n_IN('1.3.6.1.4.1.311.60.2.1.2', 'jurisdictionOfIncorporationStateOrProvinceName');\n_IN('1.3.6.1.4.1.311.60.2.1.3', 'jurisdictionOfIncorporationCountryName');\n\n// X.509 extension OIDs\n_IN('2.16.840.1.113730.1.1', 'nsCertType');\n_IN('2.16.840.1.113730.1.13', 'nsComment'); // deprecated in theory; still widely used\n_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35\n_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15\n_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32\n_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15\n_I_('2.5.29.5', 'policyMapping'); // deprecated use .33\n_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30\n_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17\n_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18\n_I_('2.5.29.9', 'subjectDirectoryAttributes');\n_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19\n_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30\n_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36\n_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19\n_IN('2.5.29.14', 'subjectKeyIdentifier');\n_IN('2.5.29.15', 'keyUsage');\n_I_('2.5.29.16', 'privateKeyUsagePeriod');\n_IN('2.5.29.17', 'subjectAltName');\n_IN('2.5.29.18', 'issuerAltName');\n_IN('2.5.29.19', 'basicConstraints');\n_I_('2.5.29.20', 'cRLNumber');\n_I_('2.5.29.21', 'cRLReason');\n_I_('2.5.29.22', 'expirationDate');\n_I_('2.5.29.23', 'instructionCode');\n_I_('2.5.29.24', 'invalidityDate');\n_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31\n_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28\n_I_('2.5.29.27', 'deltaCRLIndicator');\n_I_('2.5.29.28', 'issuingDistributionPoint');\n_I_('2.5.29.29', 'certificateIssuer');\n_I_('2.5.29.30', 'nameConstraints');\n_IN('2.5.29.31', 'cRLDistributionPoints');\n_IN('2.5.29.32', 'certificatePolicies');\n_I_('2.5.29.33', 'policyMappings');\n_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36\n_IN('2.5.29.35', 'authorityKeyIdentifier');\n_I_('2.5.29.36', 'policyConstraints');\n_IN('2.5.29.37', 'extKeyUsage');\n_I_('2.5.29.46', 'freshestCRL');\n_I_('2.5.29.54', 'inhibitAnyPolicy');\n\n// extKeyUsage purposes\n_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList');\n_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess');\n_IN('1.3.6.1.5.5.7.3.1', 'serverAuth');\n_IN('1.3.6.1.5.5.7.3.2', 'clientAuth');\n_IN('1.3.6.1.5.5.7.3.3', 'codeSigning');\n_IN('1.3.6.1.5.5.7.3.4', 'emailProtection');\n_IN('1.3.6.1.5.5.7.3.8', 'timeStamping');\n","/**\n * Password-based encryption functions.\n *\n * @author Dave Longley\n * @author Stefan Siegl \n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * An EncryptedPrivateKeyInfo:\n *\n * EncryptedPrivateKeyInfo ::= SEQUENCE {\n * encryptionAlgorithm EncryptionAlgorithmIdentifier,\n * encryptedData EncryptedData }\n *\n * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedData ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./oids');\nrequire('./pbkdf2');\nrequire('./pem');\nrequire('./random');\nrequire('./rc2');\nrequire('./rsa');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Password-based encryption implementation. */\nvar pki = forge.pki = forge.pki || {};\nmodule.exports = pki.pbe = forge.pbe = forge.pbe || {};\nvar oids = pki.oids;\n\n// validator for an EncryptedPrivateKeyInfo structure\n// Note: Currently only works w/algorithm params\nvar encryptedPrivateKeyValidator = {\n name: 'EncryptedPrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedPrivateKeyInfo.encryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encryptionOid'\n }, {\n name: 'AlgorithmIdentifier.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'encryptionParams'\n }]\n }, {\n // encryptedData\n name: 'EncryptedPrivateKeyInfo.encryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encryptedData'\n }]\n};\n\n// validator for a PBES2Algorithms structure\n// Note: Currently only works w/PBKDF2 + AES encryption schemes\nvar PBES2AlgorithmsValidator = {\n name: 'PBES2Algorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'kdfOid'\n }, {\n name: 'PBES2Algorithms.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.params.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'kdfSalt'\n }, {\n name: 'PBES2Algorithms.params.iterationCount',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'kdfIterationCount'\n }, {\n name: 'PBES2Algorithms.params.keyLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'keyLength'\n }, {\n // prf\n name: 'PBES2Algorithms.params.prf',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'PBES2Algorithms.params.prf.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'prfOid'\n }]\n }]\n }]\n }, {\n name: 'PBES2Algorithms.encryptionScheme',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.encryptionScheme.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encOid'\n }, {\n name: 'PBES2Algorithms.encryptionScheme.iv',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encIv'\n }]\n }]\n};\n\nvar pkcs12PbeParamsValidator = {\n name: 'pkcs-12PbeParams',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'pkcs-12PbeParams.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'salt'\n }, {\n name: 'pkcs-12PbeParams.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'iterations'\n }]\n};\n\n/**\n * Encrypts a ASN.1 PrivateKeyInfo object, producing an EncryptedPrivateKeyInfo.\n *\n * PBES2Algorithms ALGORITHM-IDENTIFIER ::=\n * { {PBES2-params IDENTIFIED BY id-PBES2}, ...}\n *\n * id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}\n *\n * PBES2-params ::= SEQUENCE {\n * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},\n * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}\n * }\n *\n * PBES2-KDFs ALGORITHM-IDENTIFIER ::=\n * { {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }\n *\n * PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }\n *\n * PBKDF2-params ::= SEQUENCE {\n * salt CHOICE {\n * specified OCTET STRING,\n * otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}\n * },\n * iterationCount INTEGER (1..MAX),\n * keyLength INTEGER (1..MAX) OPTIONAL,\n * prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1\n * }\n *\n * @param obj the ASN.1 PrivateKeyInfo object.\n * @param password the password to encrypt with.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * prfAlgorithm the PRF message digest algorithm to use\n * ('sha1', 'sha224', 'sha256', 'sha384', 'sha512')\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptPrivateKeyInfo = function(obj, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || 'aes128';\n options.prfAlgorithm = options.prfAlgorithm || 'sha1';\n\n // generate PBE params\n var salt = forge.random.getBytesSync(options.saltSize);\n var count = options.count;\n var countBytes = asn1.integerToDer(count);\n var dkLen;\n var encryptionAlgorithm;\n var encryptedData;\n if(options.algorithm.indexOf('aes') === 0 || options.algorithm === 'des') {\n // do PBES2\n var ivLen, encOid, cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n dkLen = 16;\n ivLen = 16;\n encOid = oids['aes128-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n dkLen = 24;\n ivLen = 16;\n encOid = oids['aes192-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n dkLen = 32;\n ivLen = 16;\n encOid = oids['aes256-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'des':\n dkLen = 8;\n ivLen = 8;\n encOid = oids['desCBC'];\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // get PRF message digest\n var prfAlgorithm = 'hmacWith' + options.prfAlgorithm.toUpperCase();\n var md = prfAlgorithmToMessageDigest(prfAlgorithm);\n\n // encrypt private key using pbe SHA-1 and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = forge.random.getBytesSync(ivLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n // get PBKDF2-params\n var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm);\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBES2']).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // keyDerivationFunc\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBKDF2']).getBytes()),\n // PBKDF2-params\n params\n ]),\n // encryptionScheme\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(encOid).getBytes()),\n // iv\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, iv)\n ])\n ])\n ]);\n } else if(options.algorithm === '3des') {\n // Do PKCS12 PBE\n dkLen = 24;\n\n var saltBytes = new forge.util.ByteBuffer(salt);\n var dk = pki.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen);\n var iv = pki.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen);\n var cipher = forge.des.createEncryptionCipher(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pbeWithSHAAnd3-KeyTripleDES-CBC']).getBytes()),\n // pkcs-12PbeParams\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ])\n ]);\n } else {\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // EncryptedPrivateKeyInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // encryptionAlgorithm\n encryptionAlgorithm,\n // encryptedData\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, encryptedData)\n ]);\n return rval;\n};\n\n/**\n * Decrypts a ASN.1 PrivateKeyInfo object.\n *\n * @param obj the ASN.1 EncryptedPrivateKeyInfo object.\n * @param password the password to decrypt with.\n *\n * @return the ASN.1 PrivateKeyInfo on success, null on failure.\n */\npki.decryptPrivateKeyInfo = function(obj, password) {\n var rval = null;\n\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, encryptedPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // get cipher\n var oid = asn1.derToOid(capture.encryptionOid);\n var cipher = pki.pbe.getCipher(oid, capture.encryptionParams, password);\n\n // get encrypted data\n var encrypted = forge.util.createBuffer(capture.encryptedData);\n\n cipher.update(encrypted);\n if(cipher.finish()) {\n rval = asn1.fromDer(cipher.output);\n }\n\n return rval;\n};\n\n/**\n * Converts a EncryptedPrivateKeyInfo to PEM format.\n *\n * @param epki the EncryptedPrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted encrypted private key.\n */\npki.encryptedPrivateKeyToPem = function(epki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'ENCRYPTED PRIVATE KEY',\n body: asn1.toDer(epki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format. Decryption\n * is not performed.\n *\n * @param pem the EncryptedPrivateKeyInfo in PEM-format.\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptedPrivateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY') {\n var error = new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM header type is \"ENCRYPTED PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n return asn1.fromDer(msg.body);\n};\n\n/**\n * Encrypts an RSA private key. By default, the key will be wrapped in\n * a PrivateKeyInfo and encrypted to produce a PKCS#8 EncryptedPrivateKeyInfo.\n * This is the standard, preferred way to encrypt a private key.\n *\n * To produce a non-standard PEM-encrypted private key that uses encapsulated\n * headers to indicate the encryption algorithm (old-style non-PKCS#8 OpenSSL\n * private key encryption), set the 'legacy' option to true. Note: Using this\n * option will cause the iteration count to be forced to 1.\n *\n * Note: The 'des' algorithm is supported, but it is not considered to be\n * secure because it only uses a single 56-bit key. If possible, it is highly\n * recommended that a different algorithm be used.\n *\n * @param rsaKey the RSA key to encrypt.\n * @param password the password to use.\n * @param options:\n * algorithm: the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des', 'des').\n * count: the iteration count to use.\n * saltSize: the salt size to use.\n * legacy: output an old non-PKCS#8 PEM-encrypted+encapsulated\n * headers (DEK-Info) private key.\n *\n * @return the PEM-encoded ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptRsaPrivateKey = function(rsaKey, password, options) {\n // standard PKCS#8\n options = options || {};\n if(!options.legacy) {\n // encrypt PrivateKeyInfo\n var rval = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(rsaKey));\n rval = pki.encryptPrivateKeyInfo(rval, password, options);\n return pki.encryptedPrivateKeyToPem(rval);\n }\n\n // legacy non-PKCS#8\n var algorithm;\n var iv;\n var dkLen;\n var cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n algorithm = 'AES-128-CBC';\n dkLen = 16;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n algorithm = 'AES-192-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n algorithm = 'AES-256-CBC';\n dkLen = 32;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case '3des':\n algorithm = 'DES-EDE3-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n case 'des':\n algorithm = 'DES-CBC';\n dkLen = 8;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Could not encrypt RSA private key; unsupported ' +\n 'encryption algorithm \"' + options.algorithm + '\".');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // encrypt private key using OpenSSL legacy key derivation\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(pki.privateKeyToAsn1(rsaKey)));\n cipher.finish();\n\n var msg = {\n type: 'RSA PRIVATE KEY',\n procType: {\n version: '4',\n type: 'ENCRYPTED'\n },\n dekInfo: {\n algorithm: algorithm,\n parameters: forge.util.bytesToHex(iv).toUpperCase()\n },\n body: cipher.output.getBytes()\n };\n return forge.pem.encode(msg);\n};\n\n/**\n * Decrypts an RSA private key.\n *\n * @param pem the PEM-formatted EncryptedPrivateKeyInfo to decrypt.\n * @param password the password to use.\n *\n * @return the RSA key on success, null on failure.\n */\npki.decryptRsaPrivateKey = function(pem, password) {\n var rval = null;\n\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY' &&\n msg.type !== 'PRIVATE KEY' &&\n msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM header type ' +\n 'is not \"ENCRYPTED PRIVATE KEY\", \"PRIVATE KEY\", or \"RSA PRIVATE KEY\".');\n error.headerType = error;\n throw error;\n }\n\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n var dkLen;\n var cipherFn;\n switch(msg.dekInfo.algorithm) {\n case 'DES-CBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'DES-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'AES-128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'RC2-40-CBC':\n dkLen = 5;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 40);\n };\n break;\n case 'RC2-64-CBC':\n dkLen = 8;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 64);\n };\n break;\n case 'RC2-128-CBC':\n dkLen = 16;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 128);\n };\n break;\n default:\n var error = new Error('Could not decrypt private key; unsupported ' +\n 'encryption algorithm \"' + msg.dekInfo.algorithm + '\".');\n error.algorithm = msg.dekInfo.algorithm;\n throw error;\n }\n\n // use OpenSSL legacy key derivation\n var iv = forge.util.hexToBytes(msg.dekInfo.parameters);\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(forge.util.createBuffer(msg.body));\n if(cipher.finish()) {\n rval = cipher.output.getBytes();\n } else {\n return rval;\n }\n } else {\n rval = msg.body;\n }\n\n if(msg.type === 'ENCRYPTED PRIVATE KEY') {\n rval = pki.decryptPrivateKeyInfo(asn1.fromDer(rval), password);\n } else {\n // decryption already performed above\n rval = asn1.fromDer(rval);\n }\n\n if(rval !== null) {\n rval = pki.privateKeyFromAsn1(rval);\n }\n\n return rval;\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\npki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {\n var j, l;\n\n if(typeof md === 'undefined' || md === null) {\n if(!('sha1' in forge.md)) {\n throw new Error('\"sha1\" hash algorithm unavailable.');\n }\n md = forge.md.sha1.create();\n }\n\n var u = md.digestLength;\n var v = md.blockLength;\n var result = new forge.util.ByteBuffer();\n\n /* Convert password to Unicode byte buffer + trailing 0-byte. */\n var passBuf = new forge.util.ByteBuffer();\n if(password !== null && password !== undefined) {\n for(l = 0; l < password.length; l++) {\n passBuf.putInt16(password.charCodeAt(l));\n }\n passBuf.putInt16(0);\n }\n\n /* Length of salt and password in BYTES. */\n var p = passBuf.length();\n var s = salt.length();\n\n /* 1. Construct a string, D (the \"diversifier\"), by concatenating\n v copies of ID. */\n var D = new forge.util.ByteBuffer();\n D.fillWithByte(id, v);\n\n /* 2. Concatenate copies of the salt together to create a string S of length\n v * ceil(s / v) bytes (the final copy of the salt may be trunacted\n to create S).\n Note that if the salt is the empty string, then so is S. */\n var Slen = v * Math.ceil(s / v);\n var S = new forge.util.ByteBuffer();\n for(l = 0; l < Slen; l++) {\n S.putByte(salt.at(l % s));\n }\n\n /* 3. Concatenate copies of the password together to create a string P of\n length v * ceil(p / v) bytes (the final copy of the password may be\n truncated to create P).\n Note that if the password is the empty string, then so is P. */\n var Plen = v * Math.ceil(p / v);\n var P = new forge.util.ByteBuffer();\n for(l = 0; l < Plen; l++) {\n P.putByte(passBuf.at(l % p));\n }\n\n /* 4. Set I=S||P to be the concatenation of S and P. */\n var I = S;\n I.putBuffer(P);\n\n /* 5. Set c=ceil(n / u). */\n var c = Math.ceil(n / u);\n\n /* 6. For i=1, 2, ..., c, do the following: */\n for(var i = 1; i <= c; i++) {\n /* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */\n var buf = new forge.util.ByteBuffer();\n buf.putBytes(D.bytes());\n buf.putBytes(I.bytes());\n for(var round = 0; round < iter; round++) {\n md.start();\n md.update(buf.getBytes());\n buf = md.digest();\n }\n\n /* b) Concatenate copies of Ai to create a string B of length v bytes (the\n final copy of Ai may be truncated to create B). */\n var B = new forge.util.ByteBuffer();\n for(l = 0; l < v; l++) {\n B.putByte(buf.at(l % u));\n }\n\n /* c) Treating I as a concatenation I0, I1, ..., Ik-1 of v-byte blocks,\n where k=ceil(s / v) + ceil(p / v), modify I by setting\n Ij=(Ij+B+1) mod 2v for each j. */\n var k = Math.ceil(s / v) + Math.ceil(p / v);\n var Inew = new forge.util.ByteBuffer();\n for(j = 0; j < k; j++) {\n var chunk = new forge.util.ByteBuffer(I.getBytes(v));\n var x = 0x1ff;\n for(l = B.length() - 1; l >= 0; l--) {\n x = x >> 8;\n x += B.at(l) + chunk.at(l);\n chunk.setAt(l, x & 0xff);\n }\n Inew.putBuffer(chunk);\n }\n I = Inew;\n\n /* Add Ai to A. */\n result.putBuffer(buf);\n }\n\n result.truncate(result.length() - n);\n return result;\n};\n\n/**\n * Get new Forge cipher object instance.\n *\n * @param oid the OID (in string notation).\n * @param params the ASN.1 params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipher = function(oid, params, password) {\n switch(oid) {\n case pki.oids['pkcs5PBES2']:\n return pki.pbe.getCipherForPBES2(oid, params, password);\n\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n return pki.pbe.getCipherForPKCS12PBE(oid, params, password);\n\n default:\n var error = new Error('Cannot read encrypted PBE data block. Unsupported OID.');\n error.oid = oid;\n error.supportedOids = [\n 'pkcs5PBES2',\n 'pbeWithSHAAnd3-KeyTripleDES-CBC',\n 'pbewithSHAAnd40BitRC2-CBC'\n ];\n throw error;\n }\n};\n\n/**\n * Get new Forge cipher object instance according to PBES2 params block.\n *\n * The returned cipher instance is already started using the IV\n * from PBES2 parameter block.\n *\n * @param oid the PKCS#5 PBKDF2 OID (in string notation).\n * @param params the ASN.1 PBES2-params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipherForPBES2 = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, PBES2AlgorithmsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // check oids\n oid = asn1.derToOid(capture.kdfOid);\n if(oid !== pki.oids['pkcs5PBKDF2']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported key derivation function OID.');\n error.oid = oid;\n error.supportedOids = ['pkcs5PBKDF2'];\n throw error;\n }\n oid = asn1.derToOid(capture.encOid);\n if(oid !== pki.oids['aes128-CBC'] &&\n oid !== pki.oids['aes192-CBC'] &&\n oid !== pki.oids['aes256-CBC'] &&\n oid !== pki.oids['des-EDE3-CBC'] &&\n oid !== pki.oids['desCBC']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported encryption scheme OID.');\n error.oid = oid;\n error.supportedOids = [\n 'aes128-CBC', 'aes192-CBC', 'aes256-CBC', 'des-EDE3-CBC', 'desCBC'];\n throw error;\n }\n\n // set PBE params\n var salt = capture.kdfSalt;\n var count = forge.util.createBuffer(capture.kdfIterationCount);\n count = count.getInt(count.length() << 3);\n var dkLen;\n var cipherFn;\n switch(pki.oids[oid]) {\n case 'aes128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'des-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'desCBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n\n // decrypt private key using pbe with chosen PRF and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = capture.encIv;\n var cipher = cipherFn(dk);\n cipher.start(iv);\n\n return cipher;\n};\n\n/**\n * Get new Forge cipher object instance for PKCS#12 PBE.\n *\n * The returned cipher instance is already started using the key & IV\n * derived from the provided password and PKCS#12 PBE salt.\n *\n * @param oid The PKCS#12 PBE OID (in string notation).\n * @param params The ASN.1 PKCS#12 PBE-params object.\n * @param password The password to decrypt with.\n *\n * @return the new cipher object instance.\n */\npki.pbe.getCipherForPKCS12PBE = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, pkcs12PbeParamsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n var salt = forge.util.createBuffer(capture.salt);\n var count = forge.util.createBuffer(capture.iterations);\n count = count.getInt(count.length() << 3);\n\n var dkLen, dIvLen, cipherFn;\n switch(oid) {\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n dkLen = 24;\n dIvLen = 8;\n cipherFn = forge.des.startDecrypting;\n break;\n\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n dkLen = 5;\n dIvLen = 8;\n cipherFn = function(key, iv) {\n var cipher = forge.rc2.createDecryptionCipher(key, 40);\n cipher.start(iv, null);\n return cipher;\n };\n break;\n\n default:\n var error = new Error('Cannot read PKCS #12 PBE data block. Unsupported OID.');\n error.oid = oid;\n throw error;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n var key = pki.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md);\n md.start();\n var iv = pki.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md);\n\n return cipherFn(key, iv);\n};\n\n/**\n * OpenSSL's legacy key derivation function.\n *\n * See: http://www.openssl.org/docs/crypto/EVP_BytesToKey.html\n *\n * @param password the password to derive the key from.\n * @param salt the salt to use, null for none.\n * @param dkLen the number of bytes needed for the derived key.\n * @param [options] the options to use:\n * [md] an optional message digest object to use.\n */\npki.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) {\n if(typeof md === 'undefined' || md === null) {\n if(!('md5' in forge.md)) {\n throw new Error('\"md5\" hash algorithm unavailable.');\n }\n md = forge.md.md5.create();\n }\n if(salt === null) {\n salt = '';\n }\n var digests = [hash(md, password + salt)];\n for(var length = 16, i = 1; length < dkLen; ++i, length += 16) {\n digests.push(hash(md, digests[i - 1] + password + salt));\n }\n return digests.join('').substr(0, dkLen);\n};\n\nfunction hash(md, bytes) {\n return md.start().update(bytes).digest().getBytes();\n}\n\nfunction prfOidToMessageDigest(prfOid) {\n // get PRF algorithm, default to SHA-1\n var prfAlgorithm;\n if(!prfOid) {\n prfAlgorithm = 'hmacWithSHA1';\n } else {\n prfAlgorithm = pki.oids[asn1.derToOid(prfOid)];\n if(!prfAlgorithm) {\n var error = new Error('Unsupported PRF OID.');\n error.oid = prfOid;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n }\n return prfAlgorithmToMessageDigest(prfAlgorithm);\n}\n\nfunction prfAlgorithmToMessageDigest(prfAlgorithm) {\n var factory = forge.md;\n switch(prfAlgorithm) {\n case 'hmacWithSHA224':\n factory = forge.md.sha512;\n case 'hmacWithSHA1':\n case 'hmacWithSHA256':\n case 'hmacWithSHA384':\n case 'hmacWithSHA512':\n prfAlgorithm = prfAlgorithm.substr(8).toLowerCase();\n break;\n default:\n var error = new Error('Unsupported PRF algorithm.');\n error.algorithm = prfAlgorithm;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n if(!factory || !(prfAlgorithm in factory)) {\n throw new Error('Unknown hash algorithm: ' + prfAlgorithm);\n }\n return factory[prfAlgorithm].create();\n}\n\nfunction createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) {\n var params = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ]);\n // when PRF algorithm is not SHA-1 default, add key length and PRF algorithm\n if(prfAlgorithm !== 'hmacWithSHA1') {\n params.value.push(\n // key length\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(dkLen.toString(16))),\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids[prfAlgorithm]).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n return params;\n}\n","/**\n * Password-Based Key-Derivation Function #2 implementation.\n *\n * See RFC 2898 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./hmac');\nrequire('./md');\nrequire('./util');\n\nvar pkcs5 = forge.pkcs5 = forge.pkcs5 || {};\n\nvar crypto;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript) {\n crypto = require('crypto');\n}\n\n/**\n * Derives a key from a password.\n *\n * @param p the password as a binary-encoded string of bytes.\n * @param s the salt as a binary-encoded string of bytes.\n * @param c the iteration count, a positive integer.\n * @param dkLen the intended length, in bytes, of the derived key,\n * (max: 2^32 - 1) * hash length of the PRF.\n * @param [md] the message digest (or algorithm identifier as a string) to use\n * in the PRF, defaults to SHA-1.\n * @param [callback(err, key)] presence triggers asynchronous version, called\n * once the operation completes.\n *\n * @return the derived key, as a binary-encoded string of bytes, for the\n * synchronous version (if no callback is specified).\n */\nmodule.exports = forge.pbkdf2 = pkcs5.pbkdf2 = function(\n p, s, c, dkLen, md, callback) {\n if(typeof md === 'function') {\n callback = md;\n md = null;\n }\n\n // use native implementation if possible and not disabled, note that\n // some node versions only support SHA-1, others allow digest to be changed\n if(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n crypto.pbkdf2 && (md === null || typeof md !== 'object') &&\n (crypto.pbkdf2Sync.length > 4 || (!md || md === 'sha1'))) {\n if(typeof md !== 'string') {\n // default prf to SHA-1\n md = 'sha1';\n }\n p = Buffer.from(p, 'binary');\n s = Buffer.from(s, 'binary');\n if(!callback) {\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2Sync(p, s, c, dkLen).toString('binary');\n }\n return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString('binary');\n }\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2(p, s, c, dkLen, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n return crypto.pbkdf2(p, s, c, dkLen, md, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n\n if(typeof md === 'undefined' || md === null) {\n // default prf to SHA-1\n md = 'sha1';\n }\n if(typeof md === 'string') {\n if(!(md in forge.md.algorithms)) {\n throw new Error('Unknown hash algorithm: ' + md);\n }\n md = forge.md[md].create();\n }\n\n var hLen = md.digestLength;\n\n /* 1. If dkLen > (2^32 - 1) * hLen, output \"derived key too long\" and\n stop. */\n if(dkLen > (0xFFFFFFFF * hLen)) {\n var err = new Error('Derived key is too long.');\n if(callback) {\n return callback(err);\n }\n throw err;\n }\n\n /* 2. Let len be the number of hLen-octet blocks in the derived key,\n rounding up, and let r be the number of octets in the last\n block:\n\n len = CEIL(dkLen / hLen),\n r = dkLen - (len - 1) * hLen. */\n var len = Math.ceil(dkLen / hLen);\n var r = dkLen - (len - 1) * hLen;\n\n /* 3. For each block of the derived key apply the function F defined\n below to the password P, the salt S, the iteration count c, and\n the block index to compute the block:\n\n T_1 = F(P, S, c, 1),\n T_2 = F(P, S, c, 2),\n ...\n T_len = F(P, S, c, len),\n\n where the function F is defined as the exclusive-or sum of the\n first c iterates of the underlying pseudorandom function PRF\n applied to the password P and the concatenation of the salt S\n and the block index i:\n\n F(P, S, c, i) = u_1 XOR u_2 XOR ... XOR u_c\n\n where\n\n u_1 = PRF(P, S || INT(i)),\n u_2 = PRF(P, u_1),\n ...\n u_c = PRF(P, u_{c-1}).\n\n Here, INT(i) is a four-octet encoding of the integer i, most\n significant octet first. */\n var prf = forge.hmac.create();\n prf.start(md, p);\n var dk = '';\n var xor, u_c, u_c1;\n\n // sync version\n if(!callback) {\n for(var i = 1; i <= len; ++i) {\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n for(var j = 2; j <= c; ++j) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n }\n /* 5. Output the derived key DK. */\n return dk;\n }\n\n // async version\n var i = 1, j;\n function outer() {\n if(i > len) {\n // done\n return callback(null, dk);\n }\n\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n j = 2;\n inner();\n }\n\n function inner() {\n if(j <= c) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n ++j;\n return forge.util.setImmediate(inner);\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n\n ++i;\n outer();\n }\n\n outer();\n};\n","/**\n * Javascript implementation of basic PEM (Privacy Enhanced Mail) algorithms.\n *\n * See: RFC 1421.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n *\n * A Forge PEM object has the following fields:\n *\n * type: identifies the type of message (eg: \"RSA PRIVATE KEY\").\n *\n * procType: identifies the type of processing performed on the message,\n * it has two subfields: version and type, eg: 4,ENCRYPTED.\n *\n * contentDomain: identifies the type of content in the message, typically\n * only uses the value: \"RFC822\".\n *\n * dekInfo: identifies the message encryption algorithm and mode and includes\n * any parameters for the algorithm, it has two subfields: algorithm and\n * parameters, eg: DES-CBC,F8143EDE5960C597.\n *\n * headers: contains all other PEM encapsulated headers -- where order is\n * significant (for pairing data like recipient ID + key info).\n *\n * body: the binary-encoded body.\n */\nvar forge = require('./forge');\nrequire('./util');\n\n// shortcut for pem API\nvar pem = module.exports = forge.pem = forge.pem || {};\n\n/**\n * Encodes (serializes) the given PEM object.\n *\n * @param msg the PEM message object to encode.\n * @param options the options to use:\n * maxline the maximum characters per line for the body, (default: 64).\n *\n * @return the PEM-formatted string.\n */\npem.encode = function(msg, options) {\n options = options || {};\n var rval = '-----BEGIN ' + msg.type + '-----\\r\\n';\n\n // encode special headers\n var header;\n if(msg.procType) {\n header = {\n name: 'Proc-Type',\n values: [String(msg.procType.version), msg.procType.type]\n };\n rval += foldHeader(header);\n }\n if(msg.contentDomain) {\n header = {name: 'Content-Domain', values: [msg.contentDomain]};\n rval += foldHeader(header);\n }\n if(msg.dekInfo) {\n header = {name: 'DEK-Info', values: [msg.dekInfo.algorithm]};\n if(msg.dekInfo.parameters) {\n header.values.push(msg.dekInfo.parameters);\n }\n rval += foldHeader(header);\n }\n\n if(msg.headers) {\n // encode all other headers\n for(var i = 0; i < msg.headers.length; ++i) {\n rval += foldHeader(msg.headers[i]);\n }\n }\n\n // terminate header\n if(msg.procType) {\n rval += '\\r\\n';\n }\n\n // add body\n rval += forge.util.encode64(msg.body, options.maxline || 64) + '\\r\\n';\n\n rval += '-----END ' + msg.type + '-----\\r\\n';\n return rval;\n};\n\n/**\n * Decodes (deserializes) all PEM messages found in the given string.\n *\n * @param str the PEM-formatted string to decode.\n *\n * @return the PEM message objects in an array.\n */\npem.decode = function(str) {\n var rval = [];\n\n // split string into PEM messages (be lenient w/EOF on BEGIN line)\n var rMessage = /\\s*-----BEGIN ([A-Z0-9- ]+)-----\\r?\\n?([\\x21-\\x7e\\s]+?(?:\\r?\\n\\r?\\n))?([:A-Za-z0-9+\\/=\\s]+?)-----END \\1-----/g;\n var rHeader = /([\\x21-\\x7e]+):\\s*([\\x21-\\x7e\\s^:]+)/;\n var rCRLF = /\\r?\\n/;\n var match;\n while(true) {\n match = rMessage.exec(str);\n if(!match) {\n break;\n }\n\n // accept \"NEW CERTIFICATE REQUEST\" as \"CERTIFICATE REQUEST\"\n // https://datatracker.ietf.org/doc/html/rfc7468#section-7\n var type = match[1];\n if(type === 'NEW CERTIFICATE REQUEST') {\n type = 'CERTIFICATE REQUEST';\n }\n\n var msg = {\n type: type,\n procType: null,\n contentDomain: null,\n dekInfo: null,\n headers: [],\n body: forge.util.decode64(match[3])\n };\n rval.push(msg);\n\n // no headers\n if(!match[2]) {\n continue;\n }\n\n // parse headers\n var lines = match[2].split(rCRLF);\n var li = 0;\n while(match && li < lines.length) {\n // get line, trim any rhs whitespace\n var line = lines[li].replace(/\\s+$/, '');\n\n // RFC2822 unfold any following folded lines\n for(var nl = li + 1; nl < lines.length; ++nl) {\n var next = lines[nl];\n if(!/\\s/.test(next[0])) {\n break;\n }\n line += next;\n li = nl;\n }\n\n // parse header\n match = line.match(rHeader);\n if(match) {\n var header = {name: match[1], values: []};\n var values = match[2].split(',');\n for(var vi = 0; vi < values.length; ++vi) {\n header.values.push(ltrim(values[vi]));\n }\n\n // Proc-Type must be the first header\n if(!msg.procType) {\n if(header.name !== 'Proc-Type') {\n throw new Error('Invalid PEM formatted message. The first ' +\n 'encapsulated header must be \"Proc-Type\".');\n } else if(header.values.length !== 2) {\n throw new Error('Invalid PEM formatted message. The \"Proc-Type\" ' +\n 'header must have two subfields.');\n }\n msg.procType = {version: values[0], type: values[1]};\n } else if(!msg.contentDomain && header.name === 'Content-Domain') {\n // special-case Content-Domain\n msg.contentDomain = values[0] || '';\n } else if(!msg.dekInfo && header.name === 'DEK-Info') {\n // special-case DEK-Info\n if(header.values.length === 0) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must have at least one subfield.');\n }\n msg.dekInfo = {algorithm: values[0], parameters: values[1] || null};\n } else {\n msg.headers.push(header);\n }\n }\n\n ++li;\n }\n\n if(msg.procType === 'ENCRYPTED' && !msg.dekInfo) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must be present if \"Proc-Type\" is \"ENCRYPTED\".');\n }\n }\n\n if(rval.length === 0) {\n throw new Error('Invalid PEM formatted message.');\n }\n\n return rval;\n};\n\nfunction foldHeader(header) {\n var rval = header.name + ': ';\n\n // ensure values with CRLF are folded\n var values = [];\n var insertSpace = function(match, $1) {\n return ' ' + $1;\n };\n for(var i = 0; i < header.values.length; ++i) {\n values.push(header.values[i].replace(/^(\\S+\\r\\n)/, insertSpace));\n }\n rval += values.join(',') + '\\r\\n';\n\n // do folding\n var length = 0;\n var candidate = -1;\n for(var i = 0; i < rval.length; ++i, ++length) {\n if(length > 65 && candidate !== -1) {\n var insert = rval[candidate];\n if(insert === ',') {\n ++candidate;\n rval = rval.substr(0, candidate) + '\\r\\n ' + rval.substr(candidate);\n } else {\n rval = rval.substr(0, candidate) +\n '\\r\\n' + insert + rval.substr(candidate + 1);\n }\n length = (i - candidate - 1);\n candidate = -1;\n ++i;\n } else if(rval[i] === ' ' || rval[i] === '\\t' || rval[i] === ',') {\n candidate = i;\n }\n }\n\n return rval;\n}\n\nfunction ltrim(str) {\n return str.replace(/^\\s+/, '');\n}\n","/**\n * Partial implementation of PKCS#1 v2.2: RSA-OEAP\n *\n * Modified but based on the following MIT and BSD licensed code:\n *\n * https://github.com/kjur/jsjws/blob/master/rsa.js:\n *\n * The 'jsjws'(JSON Web Signature JavaScript Library) License\n *\n * Copyright (c) 2012 Kenji Urushima\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\n * THE SOFTWARE.\n *\n * http://webrsa.cvs.sourceforge.net/viewvc/webrsa/Client/RSAES-OAEP.js?content-type=text%2Fplain:\n *\n * RSAES-OAEP.js\n * $Id: RSAES-OAEP.js,v 1.1.1.1 2003/03/19 15:37:20 ellispritchard Exp $\n * JavaScript Implementation of PKCS #1 v2.1 RSA CRYPTOGRAPHY STANDARD (RSA Laboratories, June 14, 2002)\n * Copyright (C) Ellis Pritchard, Guardian Unlimited 2003.\n * Contact: ellis@nukinetics.com\n * Distributed under the BSD License.\n *\n * Official documentation: http://www.rsa.com/rsalabs/node.asp?id=2125\n *\n * @author Evan Jones (http://evanjones.ca/)\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./random');\nrequire('./sha1');\n\n// shortcut for PKCS#1 API\nvar pkcs1 = module.exports = forge.pkcs1 = forge.pkcs1 || {};\n\n/**\n * Encode the given RSAES-OAEP message (M) using key, with optional label (L)\n * and seed.\n *\n * This method does not perform RSA encryption, it only encodes the message\n * using RSAES-OAEP.\n *\n * @param key the RSA key to use.\n * @param message the message to encode.\n * @param options the options to use:\n * label an optional label to use.\n * seed the seed to use.\n * md the message digest object to use, undefined for SHA-1.\n * mgf1 optional mgf1 parameters:\n * md the message digest object to use for MGF1.\n *\n * @return the encoded message bytes.\n */\npkcs1.encode_rsa_oaep = function(key, message, options) {\n // parse arguments\n var label;\n var seed;\n var md;\n var mgf1Md;\n // legacy args (label, seed, md)\n if(typeof options === 'string') {\n label = options;\n seed = arguments[3] || undefined;\n md = arguments[4] || undefined;\n } else if(options) {\n label = options.label || undefined;\n seed = options.seed || undefined;\n md = options.md || undefined;\n if(options.mgf1 && options.mgf1.md) {\n mgf1Md = options.mgf1.md;\n }\n }\n\n // default OAEP to SHA-1 message digest\n if(!md) {\n md = forge.md.sha1.create();\n } else {\n md.start();\n }\n\n // default MGF-1 to same as OAEP\n if(!mgf1Md) {\n mgf1Md = md;\n }\n\n // compute length in bytes and check output\n var keyLength = Math.ceil(key.n.bitLength() / 8);\n var maxLength = keyLength - 2 * md.digestLength - 2;\n if(message.length > maxLength) {\n var error = new Error('RSAES-OAEP input message length is too long.');\n error.length = message.length;\n error.maxLength = maxLength;\n throw error;\n }\n\n if(!label) {\n label = '';\n }\n md.update(label, 'raw');\n var lHash = md.digest();\n\n var PS = '';\n var PS_length = maxLength - message.length;\n for(var i = 0; i < PS_length; i++) {\n PS += '\\x00';\n }\n\n var DB = lHash.getBytes() + PS + '\\x01' + message;\n\n if(!seed) {\n seed = forge.random.getBytes(md.digestLength);\n } else if(seed.length !== md.digestLength) {\n var error = new Error('Invalid RSAES-OAEP seed. The seed length must ' +\n 'match the digest length.');\n error.seedLength = seed.length;\n error.digestLength = md.digestLength;\n throw error;\n }\n\n var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);\n var maskedDB = forge.util.xorBytes(DB, dbMask, DB.length);\n\n var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);\n var maskedSeed = forge.util.xorBytes(seed, seedMask, seed.length);\n\n // return encoded message\n return '\\x00' + maskedSeed + maskedDB;\n};\n\n/**\n * Decode the given RSAES-OAEP encoded message (EM) using key, with optional\n * label (L).\n *\n * This method does not perform RSA decryption, it only decodes the message\n * using RSAES-OAEP.\n *\n * @param key the RSA key to use.\n * @param em the encoded message to decode.\n * @param options the options to use:\n * label an optional label to use.\n * md the message digest object to use for OAEP, undefined for SHA-1.\n * mgf1 optional mgf1 parameters:\n * md the message digest object to use for MGF1.\n *\n * @return the decoded message bytes.\n */\npkcs1.decode_rsa_oaep = function(key, em, options) {\n // parse args\n var label;\n var md;\n var mgf1Md;\n // legacy args\n if(typeof options === 'string') {\n label = options;\n md = arguments[3] || undefined;\n } else if(options) {\n label = options.label || undefined;\n md = options.md || undefined;\n if(options.mgf1 && options.mgf1.md) {\n mgf1Md = options.mgf1.md;\n }\n }\n\n // compute length in bytes\n var keyLength = Math.ceil(key.n.bitLength() / 8);\n\n if(em.length !== keyLength) {\n var error = new Error('RSAES-OAEP encoded message length is invalid.');\n error.length = em.length;\n error.expectedLength = keyLength;\n throw error;\n }\n\n // default OAEP to SHA-1 message digest\n if(md === undefined) {\n md = forge.md.sha1.create();\n } else {\n md.start();\n }\n\n // default MGF-1 to same as OAEP\n if(!mgf1Md) {\n mgf1Md = md;\n }\n\n if(keyLength < 2 * md.digestLength + 2) {\n throw new Error('RSAES-OAEP key is too short for the hash function.');\n }\n\n if(!label) {\n label = '';\n }\n md.update(label, 'raw');\n var lHash = md.digest().getBytes();\n\n // split the message into its parts\n var y = em.charAt(0);\n var maskedSeed = em.substring(1, md.digestLength + 1);\n var maskedDB = em.substring(1 + md.digestLength);\n\n var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);\n var seed = forge.util.xorBytes(maskedSeed, seedMask, maskedSeed.length);\n\n var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);\n var db = forge.util.xorBytes(maskedDB, dbMask, maskedDB.length);\n\n var lHashPrime = db.substring(0, md.digestLength);\n\n // constant time check that all values match what is expected\n var error = (y !== '\\x00');\n\n // constant time check lHash vs lHashPrime\n for(var i = 0; i < md.digestLength; ++i) {\n error |= (lHash.charAt(i) !== lHashPrime.charAt(i));\n }\n\n // \"constant time\" find the 0x1 byte separating the padding (zeros) from the\n // message\n // TODO: It must be possible to do this in a better/smarter way?\n var in_ps = 1;\n var index = md.digestLength;\n for(var j = md.digestLength; j < db.length; j++) {\n var code = db.charCodeAt(j);\n\n var is_0 = (code & 0x1) ^ 0x1;\n\n // non-zero if not 0 or 1 in the ps section\n var error_mask = in_ps ? 0xfffe : 0x0000;\n error |= (code & error_mask);\n\n // latch in_ps to zero after we find 0x1\n in_ps = in_ps & is_0;\n index += in_ps;\n }\n\n if(error || db.charCodeAt(index) !== 0x1) {\n throw new Error('Invalid RSAES-OAEP padding.');\n }\n\n return db.substring(index + 1);\n};\n\nfunction rsa_mgf1(seed, maskLength, hash) {\n // default to SHA-1 message digest\n if(!hash) {\n hash = forge.md.sha1.create();\n }\n var t = '';\n var count = Math.ceil(maskLength / hash.digestLength);\n for(var i = 0; i < count; ++i) {\n var c = String.fromCharCode(\n (i >> 24) & 0xFF, (i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF);\n hash.start();\n hash.update(seed + c);\n t += hash.digest().getBytes();\n }\n return t.substring(0, maskLength);\n}\n","/**\n * Javascript implementation of PKCS#12.\n *\n * @author Dave Longley\n * @author Stefan Siegl \n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * The ASN.1 representation of PKCS#12 is as follows\n * (see ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12-tc1.pdf for details)\n *\n * PFX ::= SEQUENCE {\n * version INTEGER {v3(3)}(v3,...),\n * authSafe ContentInfo,\n * macData MacData OPTIONAL\n * }\n *\n * MacData ::= SEQUENCE {\n * mac DigestInfo,\n * macSalt OCTET STRING,\n * iterations INTEGER DEFAULT 1\n * }\n * Note: The iterations default is for historical reasons and its use is\n * deprecated. A higher value, like 1024, is recommended.\n *\n * DigestInfo is defined in PKCS#7 as follows:\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of SHA1 there is none.\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * Digest ::= OCTET STRING\n *\n *\n * ContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL\n * }\n *\n * ContentType ::= OBJECT IDENTIFIER\n *\n * AuthenticatedSafe ::= SEQUENCE OF ContentInfo\n * -- Data if unencrypted\n * -- EncryptedData if password-encrypted\n * -- EnvelopedData if public key-encrypted\n *\n *\n * SafeContents ::= SEQUENCE OF SafeBag\n *\n * SafeBag ::= SEQUENCE {\n * bagId BAG-TYPE.&id ({PKCS12BagSet})\n * bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}),\n * bagAttributes SET OF PKCS12Attribute OPTIONAL\n * }\n *\n * PKCS12Attribute ::= SEQUENCE {\n * attrId ATTRIBUTE.&id ({PKCS12AttrSet}),\n * attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})\n * } -- This type is compatible with the X.500 type 'Attribute'\n *\n * PKCS12AttrSet ATTRIBUTE ::= {\n * friendlyName | -- from PKCS #9\n * localKeyId, -- from PKCS #9\n * ... -- Other attributes are allowed\n * }\n *\n * CertBag ::= SEQUENCE {\n * certId BAG-TYPE.&id ({CertTypes}),\n * certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})\n * }\n *\n * x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}}\n * -- DER-encoded X.509 certificate stored in OCTET STRING\n *\n * sdsiCertificate BAG-TYPE ::= {IA5String IDENTIFIED BY {certTypes 2}}\n * -- Base64-encoded SDSI certificate stored in IA5String\n *\n * CertTypes BAG-TYPE ::= {\n * x509Certificate |\n * sdsiCertificate,\n * ... -- For future extensions\n * }\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./hmac');\nrequire('./oids');\nrequire('./pkcs7asn1');\nrequire('./pbe');\nrequire('./random');\nrequire('./rsa');\nrequire('./sha1');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for asn.1 & PKI API\nvar asn1 = forge.asn1;\nvar pki = forge.pki;\n\n// shortcut for PKCS#12 API\nvar p12 = module.exports = forge.pkcs12 = forge.pkcs12 || {};\n\nvar contentInfoValidator = {\n name: 'ContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // a ContentInfo\n constructed: true,\n value: [{\n name: 'ContentInfo.contentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'ContentInfo.content',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n captureAsn1: 'content'\n }]\n};\n\nvar pfxValidator = {\n name: 'PFX',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PFX.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n },\n contentInfoValidator, {\n name: 'PFX.macData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'mac',\n value: [{\n name: 'PFX.macData.mac',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // DigestInfo\n constructed: true,\n value: [{\n name: 'PFX.macData.mac.digestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // DigestAlgorithmIdentifier\n constructed: true,\n value: [{\n name: 'PFX.macData.mac.digestAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'macAlgorithm'\n }, {\n name: 'PFX.macData.mac.digestAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n captureAsn1: 'macAlgorithmParameters'\n }]\n }, {\n name: 'PFX.macData.mac.digest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'macDigest'\n }]\n }, {\n name: 'PFX.macData.macSalt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'macSalt'\n }, {\n name: 'PFX.macData.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'macIterations'\n }]\n }]\n};\n\nvar safeBagValidator = {\n name: 'SafeBag',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SafeBag.bagId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'bagId'\n }, {\n name: 'SafeBag.bagValue',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n captureAsn1: 'bagValue'\n }, {\n name: 'SafeBag.bagAttributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n optional: true,\n capture: 'bagAttributes'\n }]\n};\n\nvar attributeValidator = {\n name: 'Attribute',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Attribute.attrId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'oid'\n }, {\n name: 'Attribute.attrValues',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n capture: 'values'\n }]\n};\n\nvar certBagValidator = {\n name: 'CertBag',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertBag.certId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certId'\n }, {\n name: 'CertBag.certValue',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n /* So far we only support X.509 certificates (which are wrapped in\n an OCTET STRING, hence hard code that here). */\n value: [{\n name: 'CertBag.certValue[0]',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.OCTETSTRING,\n constructed: false,\n capture: 'cert'\n }]\n }]\n};\n\n/**\n * Search SafeContents structure for bags with matching attributes.\n *\n * The search can optionally be narrowed by a certain bag type.\n *\n * @param safeContents the SafeContents structure to search in.\n * @param attrName the name of the attribute to compare against.\n * @param attrValue the attribute value to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of matching bags.\n */\nfunction _getBagsByAttribute(safeContents, attrName, attrValue, bagType) {\n var result = [];\n\n for(var i = 0; i < safeContents.length; i++) {\n for(var j = 0; j < safeContents[i].safeBags.length; j++) {\n var bag = safeContents[i].safeBags[j];\n if(bagType !== undefined && bag.type !== bagType) {\n continue;\n }\n // only filter by bag type, no attribute specified\n if(attrName === null) {\n result.push(bag);\n continue;\n }\n if(bag.attributes[attrName] !== undefined &&\n bag.attributes[attrName].indexOf(attrValue) >= 0) {\n result.push(bag);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Converts a PKCS#12 PFX in ASN.1 notation into a PFX object.\n *\n * @param obj The PKCS#12 PFX in ASN.1 notation.\n * @param strict true to use strict DER decoding, false not to (default: true).\n * @param {String} password Password to decrypt with (optional).\n *\n * @return PKCS#12 PFX object.\n */\np12.pkcs12FromAsn1 = function(obj, strict, password) {\n // handle args\n if(typeof strict === 'string') {\n password = strict;\n strict = true;\n } else if(strict === undefined) {\n strict = true;\n }\n\n // validate PFX and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, pfxValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 PFX. ' +\n 'ASN.1 object is not an PKCS#12 PFX.');\n error.errors = error;\n throw error;\n }\n\n var pfx = {\n version: capture.version.charCodeAt(0),\n safeContents: [],\n\n /**\n * Gets bags with matching attributes.\n *\n * @param filter the attributes to filter by:\n * [localKeyId] the localKeyId to search for.\n * [localKeyIdHex] the localKeyId in hex to search for.\n * [friendlyName] the friendly name to search for.\n * [bagType] bag type to narrow each attribute search by.\n *\n * @return a map of attribute type to an array of matching bags or, if no\n * attribute was given but a bag type, the map key will be the\n * bag type.\n */\n getBags: function(filter) {\n var rval = {};\n\n var localKeyId;\n if('localKeyId' in filter) {\n localKeyId = filter.localKeyId;\n } else if('localKeyIdHex' in filter) {\n localKeyId = forge.util.hexToBytes(filter.localKeyIdHex);\n }\n\n // filter on bagType only\n if(localKeyId === undefined && !('friendlyName' in filter) &&\n 'bagType' in filter) {\n rval[filter.bagType] = _getBagsByAttribute(\n pfx.safeContents, null, null, filter.bagType);\n }\n\n if(localKeyId !== undefined) {\n rval.localKeyId = _getBagsByAttribute(\n pfx.safeContents, 'localKeyId',\n localKeyId, filter.bagType);\n }\n if('friendlyName' in filter) {\n rval.friendlyName = _getBagsByAttribute(\n pfx.safeContents, 'friendlyName',\n filter.friendlyName, filter.bagType);\n }\n\n return rval;\n },\n\n /**\n * DEPRECATED: use getBags() instead.\n *\n * Get bags with matching friendlyName attribute.\n *\n * @param friendlyName the friendly name to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of bags with matching friendlyName attribute.\n */\n getBagsByFriendlyName: function(friendlyName, bagType) {\n return _getBagsByAttribute(\n pfx.safeContents, 'friendlyName', friendlyName, bagType);\n },\n\n /**\n * DEPRECATED: use getBags() instead.\n *\n * Get bags with matching localKeyId attribute.\n *\n * @param localKeyId the localKeyId to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of bags with matching localKeyId attribute.\n */\n getBagsByLocalKeyId: function(localKeyId, bagType) {\n return _getBagsByAttribute(\n pfx.safeContents, 'localKeyId', localKeyId, bagType);\n }\n };\n\n if(capture.version.charCodeAt(0) !== 3) {\n var error = new Error('PKCS#12 PFX of version other than 3 not supported.');\n error.version = capture.version.charCodeAt(0);\n throw error;\n }\n\n if(asn1.derToOid(capture.contentType) !== pki.oids.data) {\n var error = new Error('Only PKCS#12 PFX in password integrity mode supported.');\n error.oid = asn1.derToOid(capture.contentType);\n throw error;\n }\n\n var data = capture.content.value[0];\n if(data.tagClass !== asn1.Class.UNIVERSAL ||\n data.type !== asn1.Type.OCTETSTRING) {\n throw new Error('PKCS#12 authSafe content data is not an OCTET STRING.');\n }\n data = _decodePkcs7Data(data);\n\n // check for MAC\n if(capture.mac) {\n var md = null;\n var macKeyBytes = 0;\n var macAlgorithm = asn1.derToOid(capture.macAlgorithm);\n switch(macAlgorithm) {\n case pki.oids.sha1:\n md = forge.md.sha1.create();\n macKeyBytes = 20;\n break;\n case pki.oids.sha256:\n md = forge.md.sha256.create();\n macKeyBytes = 32;\n break;\n case pki.oids.sha384:\n md = forge.md.sha384.create();\n macKeyBytes = 48;\n break;\n case pki.oids.sha512:\n md = forge.md.sha512.create();\n macKeyBytes = 64;\n break;\n case pki.oids.md5:\n md = forge.md.md5.create();\n macKeyBytes = 16;\n break;\n }\n if(md === null) {\n throw new Error('PKCS#12 uses unsupported MAC algorithm: ' + macAlgorithm);\n }\n\n // verify MAC (iterations default to 1)\n var macSalt = new forge.util.ByteBuffer(capture.macSalt);\n var macIterations = (('macIterations' in capture) ?\n parseInt(forge.util.bytesToHex(capture.macIterations), 16) : 1);\n var macKey = p12.generateKey(\n password, macSalt, 3, macIterations, macKeyBytes, md);\n var mac = forge.hmac.create();\n mac.start(md, macKey);\n mac.update(data.value);\n var macValue = mac.getMac();\n if(macValue.getBytes() !== capture.macDigest) {\n throw new Error('PKCS#12 MAC could not be verified. Invalid password?');\n }\n }\n\n _decodeAuthenticatedSafe(pfx, data.value, strict, password);\n return pfx;\n};\n\n/**\n * Decodes PKCS#7 Data. PKCS#7 (RFC 2315) defines \"Data\" as an OCTET STRING,\n * but it is sometimes an OCTET STRING that is composed/constructed of chunks,\n * each its own OCTET STRING. This is BER-encoding vs. DER-encoding. This\n * function transforms this corner-case into the usual simple,\n * non-composed/constructed OCTET STRING.\n *\n * This function may be moved to ASN.1 at some point to better deal with\n * more BER-encoding issues, should they arise.\n *\n * @param data the ASN.1 Data object to transform.\n */\nfunction _decodePkcs7Data(data) {\n // handle special case of \"chunked\" data content: an octet string composed\n // of other octet strings\n if(data.composed || data.constructed) {\n var value = forge.util.createBuffer();\n for(var i = 0; i < data.value.length; ++i) {\n value.putBytes(data.value[i].value);\n }\n data.composed = data.constructed = false;\n data.value = value.getBytes();\n }\n return data;\n}\n\n/**\n * Decode PKCS#12 AuthenticatedSafe (BER encoded) into PFX object.\n *\n * The AuthenticatedSafe is a BER-encoded SEQUENCE OF ContentInfo.\n *\n * @param pfx The PKCS#12 PFX object to fill.\n * @param {String} authSafe BER-encoded AuthenticatedSafe.\n * @param strict true to use strict DER decoding, false not to.\n * @param {String} password Password to decrypt with (optional).\n */\nfunction _decodeAuthenticatedSafe(pfx, authSafe, strict, password) {\n authSafe = asn1.fromDer(authSafe, strict); /* actually it's BER encoded */\n\n if(authSafe.tagClass !== asn1.Class.UNIVERSAL ||\n authSafe.type !== asn1.Type.SEQUENCE ||\n authSafe.constructed !== true) {\n throw new Error('PKCS#12 AuthenticatedSafe expected to be a ' +\n 'SEQUENCE OF ContentInfo');\n }\n\n for(var i = 0; i < authSafe.value.length; i++) {\n var contentInfo = authSafe.value[i];\n\n // validate contentInfo and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(contentInfo, contentInfoValidator, capture, errors)) {\n var error = new Error('Cannot read ContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var obj = {\n encrypted: false\n };\n var safeContents = null;\n var data = capture.content.value[0];\n switch(asn1.derToOid(capture.contentType)) {\n case pki.oids.data:\n if(data.tagClass !== asn1.Class.UNIVERSAL ||\n data.type !== asn1.Type.OCTETSTRING) {\n throw new Error('PKCS#12 SafeContents Data is not an OCTET STRING.');\n }\n safeContents = _decodePkcs7Data(data).value;\n break;\n case pki.oids.encryptedData:\n safeContents = _decryptSafeContents(data, password);\n obj.encrypted = true;\n break;\n default:\n var error = new Error('Unsupported PKCS#12 contentType.');\n error.contentType = asn1.derToOid(capture.contentType);\n throw error;\n }\n\n obj.safeBags = _decodeSafeContents(safeContents, strict, password);\n pfx.safeContents.push(obj);\n }\n}\n\n/**\n * Decrypt PKCS#7 EncryptedData structure.\n *\n * @param data ASN.1 encoded EncryptedContentInfo object.\n * @param password The user-provided password.\n *\n * @return The decrypted SafeContents (ASN.1 object).\n */\nfunction _decryptSafeContents(data, password) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(\n data, forge.pkcs7.asn1.encryptedDataValidator, capture, errors)) {\n var error = new Error('Cannot read EncryptedContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var oid = asn1.derToOid(capture.contentType);\n if(oid !== pki.oids.data) {\n var error = new Error(\n 'PKCS#12 EncryptedContentInfo ContentType is not Data.');\n error.oid = oid;\n throw error;\n }\n\n // get cipher\n oid = asn1.derToOid(capture.encAlgorithm);\n var cipher = pki.pbe.getCipher(oid, capture.encParameter, password);\n\n // get encrypted data\n var encryptedContentAsn1 = _decodePkcs7Data(capture.encryptedContentAsn1);\n var encrypted = forge.util.createBuffer(encryptedContentAsn1.value);\n\n cipher.update(encrypted);\n if(!cipher.finish()) {\n throw new Error('Failed to decrypt PKCS#12 SafeContents.');\n }\n\n return cipher.output.getBytes();\n}\n\n/**\n * Decode PKCS#12 SafeContents (BER-encoded) into array of Bag objects.\n *\n * The safeContents is a BER-encoded SEQUENCE OF SafeBag.\n *\n * @param {String} safeContents BER-encoded safeContents.\n * @param strict true to use strict DER decoding, false not to.\n * @param {String} password Password to decrypt with (optional).\n *\n * @return {Array} Array of Bag objects.\n */\nfunction _decodeSafeContents(safeContents, strict, password) {\n // if strict and no safe contents, return empty safes\n if(!strict && safeContents.length === 0) {\n return [];\n }\n\n // actually it's BER-encoded\n safeContents = asn1.fromDer(safeContents, strict);\n\n if(safeContents.tagClass !== asn1.Class.UNIVERSAL ||\n safeContents.type !== asn1.Type.SEQUENCE ||\n safeContents.constructed !== true) {\n throw new Error(\n 'PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag.');\n }\n\n var res = [];\n for(var i = 0; i < safeContents.value.length; i++) {\n var safeBag = safeContents.value[i];\n\n // validate SafeBag and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(safeBag, safeBagValidator, capture, errors)) {\n var error = new Error('Cannot read SafeBag.');\n error.errors = errors;\n throw error;\n }\n\n /* Create bag object and push to result array. */\n var bag = {\n type: asn1.derToOid(capture.bagId),\n attributes: _decodeBagAttributes(capture.bagAttributes)\n };\n res.push(bag);\n\n var validator, decoder;\n var bagAsn1 = capture.bagValue.value[0];\n switch(bag.type) {\n case pki.oids.pkcs8ShroudedKeyBag:\n /* bagAsn1 has a EncryptedPrivateKeyInfo, which we need to decrypt.\n Afterwards we can handle it like a keyBag,\n which is a PrivateKeyInfo. */\n bagAsn1 = pki.decryptPrivateKeyInfo(bagAsn1, password);\n if(bagAsn1 === null) {\n throw new Error(\n 'Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?');\n }\n\n /* fall through */\n case pki.oids.keyBag:\n /* A PKCS#12 keyBag is a simple PrivateKeyInfo as understood by our\n PKI module, hence we don't have to do validation/capturing here,\n just pass what we already got. */\n try {\n bag.key = pki.privateKeyFromAsn1(bagAsn1);\n } catch(e) {\n // ignore unknown key type, pass asn1 value\n bag.key = null;\n bag.asn1 = bagAsn1;\n }\n continue; /* Nothing more to do. */\n\n case pki.oids.certBag:\n /* A PKCS#12 certBag can wrap both X.509 and sdsi certificates.\n Therefore put the SafeBag content through another validator to\n capture the fields. Afterwards check & store the results. */\n validator = certBagValidator;\n decoder = function() {\n if(asn1.derToOid(capture.certId) !== pki.oids.x509Certificate) {\n var error = new Error(\n 'Unsupported certificate type, only X.509 supported.');\n error.oid = asn1.derToOid(capture.certId);\n throw error;\n }\n\n // true=produce cert hash\n var certAsn1 = asn1.fromDer(capture.cert, strict);\n try {\n bag.cert = pki.certificateFromAsn1(certAsn1, true);\n } catch(e) {\n // ignore unknown cert type, pass asn1 value\n bag.cert = null;\n bag.asn1 = certAsn1;\n }\n };\n break;\n\n default:\n var error = new Error('Unsupported PKCS#12 SafeBag type.');\n error.oid = bag.type;\n throw error;\n }\n\n /* Validate SafeBag value (i.e. CertBag, etc.) and capture data if needed. */\n if(validator !== undefined &&\n !asn1.validate(bagAsn1, validator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 ' + validator.name);\n error.errors = errors;\n throw error;\n }\n\n /* Call decoder function from above to store the results. */\n decoder();\n }\n\n return res;\n}\n\n/**\n * Decode PKCS#12 SET OF PKCS12Attribute into JavaScript object.\n *\n * @param attributes SET OF PKCS12Attribute (ASN.1 object).\n *\n * @return the decoded attributes.\n */\nfunction _decodeBagAttributes(attributes) {\n var decodedAttrs = {};\n\n if(attributes !== undefined) {\n for(var i = 0; i < attributes.length; ++i) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(attributes[i], attributeValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 BagAttribute.');\n error.errors = errors;\n throw error;\n }\n\n var oid = asn1.derToOid(capture.oid);\n if(pki.oids[oid] === undefined) {\n // unsupported attribute type, ignore.\n continue;\n }\n\n decodedAttrs[pki.oids[oid]] = [];\n for(var j = 0; j < capture.values.length; ++j) {\n decodedAttrs[pki.oids[oid]].push(capture.values[j].value);\n }\n }\n }\n\n return decodedAttrs;\n}\n\n/**\n * Wraps a private key and certificate in a PKCS#12 PFX wrapper. If a\n * password is provided then the private key will be encrypted.\n *\n * An entire certificate chain may also be included. To do this, pass\n * an array for the \"cert\" parameter where the first certificate is\n * the one that is paired with the private key and each subsequent one\n * verifies the previous one. The certificates may be in PEM format or\n * have been already parsed by Forge.\n *\n * @todo implement password-based-encryption for the whole package\n *\n * @param key the private key.\n * @param cert the certificate (may be an array of certificates in order\n * to specify a certificate chain).\n * @param password the password to use, null for none.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * useMac true to include a MAC, false not to, defaults to true.\n * localKeyId the local key ID to use, in hex.\n * friendlyName the friendly name to use.\n * generateLocalKeyId true to generate a random local key ID,\n * false not to, defaults to true.\n *\n * @return the PKCS#12 PFX ASN.1 object.\n */\np12.toPkcs12Asn1 = function(key, cert, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || options.encAlgorithm || 'aes128';\n if(!('useMac' in options)) {\n options.useMac = true;\n }\n if(!('localKeyId' in options)) {\n options.localKeyId = null;\n }\n if(!('generateLocalKeyId' in options)) {\n options.generateLocalKeyId = true;\n }\n\n var localKeyId = options.localKeyId;\n var bagAttrs;\n if(localKeyId !== null) {\n localKeyId = forge.util.hexToBytes(localKeyId);\n } else if(options.generateLocalKeyId) {\n // use SHA-1 of paired cert, if available\n if(cert) {\n var pairedCert = forge.util.isArray(cert) ? cert[0] : cert;\n if(typeof pairedCert === 'string') {\n pairedCert = pki.certificateFromPem(pairedCert);\n }\n var sha1 = forge.md.sha1.create();\n sha1.update(asn1.toDer(pki.certificateToAsn1(pairedCert)).getBytes());\n localKeyId = sha1.digest().getBytes();\n } else {\n // FIXME: consider using SHA-1 of public key (which can be generated\n // from private key components), see: cert.generateSubjectKeyIdentifier\n // generate random bytes\n localKeyId = forge.random.getBytes(20);\n }\n }\n\n var attrs = [];\n if(localKeyId !== null) {\n attrs.push(\n // localKeyID\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // attrId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.localKeyId).getBytes()),\n // attrValues\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n localKeyId)\n ])\n ]));\n }\n if('friendlyName' in options) {\n attrs.push(\n // friendlyName\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // attrId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.friendlyName).getBytes()),\n // attrValues\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BMPSTRING, false,\n options.friendlyName)\n ])\n ]));\n }\n\n if(attrs.length > 0) {\n bagAttrs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, attrs);\n }\n\n // collect contents for AuthenticatedSafe\n var contents = [];\n\n // create safe bag(s) for certificate chain\n var chain = [];\n if(cert !== null) {\n if(forge.util.isArray(cert)) {\n chain = cert;\n } else {\n chain = [cert];\n }\n }\n\n var certSafeBags = [];\n for(var i = 0; i < chain.length; ++i) {\n // convert cert from PEM as necessary\n cert = chain[i];\n if(typeof cert === 'string') {\n cert = pki.certificateFromPem(cert);\n }\n\n // SafeBag\n var certBagAttrs = (i === 0) ? bagAttrs : undefined;\n var certAsn1 = pki.certificateToAsn1(cert);\n var certSafeBag =\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.certBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // CertBag\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // certId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.x509Certificate).getBytes()),\n // certValue (x509Certificate)\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(certAsn1).getBytes())\n ])])]),\n // bagAttributes (OPTIONAL)\n certBagAttrs\n ]);\n certSafeBags.push(certSafeBag);\n }\n\n if(certSafeBags.length > 0) {\n // SafeContents\n var certSafeContents = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, certSafeBags);\n\n // ContentInfo\n var certCI =\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(certSafeContents).getBytes())\n ])\n ]);\n contents.push(certCI);\n }\n\n // create safe contents for private key\n var keyBag = null;\n if(key !== null) {\n // SafeBag\n var pkAsn1 = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(key));\n if(password === null) {\n // no encryption\n keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.keyBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // PrivateKeyInfo\n pkAsn1\n ]),\n // bagAttributes (OPTIONAL)\n bagAttrs\n ]);\n } else {\n // encrypted PrivateKeyInfo\n keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.pkcs8ShroudedKeyBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // EncryptedPrivateKeyInfo\n pki.encryptPrivateKeyInfo(pkAsn1, password, options)\n ]),\n // bagAttributes (OPTIONAL)\n bagAttrs\n ]);\n }\n\n // SafeContents\n var keySafeContents =\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [keyBag]);\n\n // ContentInfo\n var keyCI =\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(keySafeContents).getBytes())\n ])\n ]);\n contents.push(keyCI);\n }\n\n // create AuthenticatedSafe by stringing together the contents\n var safe = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, contents);\n\n var macData;\n if(options.useMac) {\n // MacData\n var sha1 = forge.md.sha1.create();\n var macSalt = new forge.util.ByteBuffer(\n forge.random.getBytes(options.saltSize));\n var count = options.count;\n // 160-bit key\n var key = p12.generateKey(password, macSalt, 3, count, 20);\n var mac = forge.hmac.create();\n mac.start(sha1, key);\n mac.update(asn1.toDer(safe).getBytes());\n var macValue = mac.getMac();\n macData = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // mac DigestInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // digestAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm = SHA-1\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.sha1).getBytes()),\n // parameters = Null\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // digest\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, macValue.getBytes())\n ]),\n // macSalt OCTET STRING\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, macSalt.getBytes()),\n // iterations INTEGER (XXX: Only support count < 65536)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(count).getBytes()\n )\n ]);\n }\n\n // PFX\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (3)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(3).getBytes()),\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(safe).getBytes())\n ])\n ]),\n macData\n ]);\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\np12.generateKey = forge.pbe.generatePkcs12Key;\n","/**\n * Javascript implementation of PKCS#7 v1.5.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2012-2015 Digital Bazaar, Inc.\n *\n * Currently this implementation only supports ContentType of EnvelopedData,\n * EncryptedData, or SignedData at the root level. The top level elements may\n * contain only a ContentInfo of ContentType Data, i.e. plain data. Further\n * nesting is not (yet) supported.\n *\n * The Forge validators for PKCS #7's ASN.1 structures are available from\n * a separate file pkcs7asn1.js, since those are referenced from other\n * PKCS standards like PKCS #12.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./oids');\nrequire('./pem');\nrequire('./pkcs7asn1');\nrequire('./random');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for ASN.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for PKCS#7 API\nvar p7 = module.exports = forge.pkcs7 = forge.pkcs7 || {};\n\n/**\n * Converts a PKCS#7 message from PEM format.\n *\n * @param pem the PEM-formatted PKCS#7 message.\n *\n * @return the PKCS#7 message.\n */\np7.messageFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PKCS7') {\n var error = new Error('Could not convert PKCS#7 message from PEM; PEM ' +\n 'header type is not \"PKCS#7\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert PKCS#7 message from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return p7.messageFromAsn1(obj);\n};\n\n/**\n * Converts a PKCS#7 message to PEM format.\n *\n * @param msg The PKCS#7 message object\n * @param maxline The maximum characters per line, defaults to 64.\n *\n * @return The PEM-formatted PKCS#7 message.\n */\np7.messageToPem = function(msg, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var pemObj = {\n type: 'PKCS7',\n body: asn1.toDer(msg.toAsn1()).getBytes()\n };\n return forge.pem.encode(pemObj, {maxline: maxline});\n};\n\n/**\n * Converts a PKCS#7 message from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a ContentInfo.\n *\n * @return the PKCS#7 message.\n */\np7.messageFromAsn1 = function(obj) {\n // validate root level ContentInfo and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.contentInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 message. ' +\n 'ASN.1 object is not an PKCS#7 ContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var contentType = asn1.derToOid(capture.contentType);\n var msg;\n\n switch(contentType) {\n case forge.pki.oids.envelopedData:\n msg = p7.createEnvelopedData();\n break;\n\n case forge.pki.oids.encryptedData:\n msg = p7.createEncryptedData();\n break;\n\n case forge.pki.oids.signedData:\n msg = p7.createSignedData();\n break;\n\n default:\n throw new Error('Cannot read PKCS#7 message. ContentType with OID ' +\n contentType + ' is not (yet) supported.');\n }\n\n msg.fromAsn1(capture.content.value[0]);\n return msg;\n};\n\np7.createSignedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.signedData,\n version: 1,\n certificates: [],\n crls: [],\n // TODO: add json-formatted signer stuff here?\n signers: [],\n // populated during sign()\n digestAlgorithmIdentifiers: [],\n contentInfo: null,\n signerInfos: [],\n\n fromAsn1: function(obj) {\n // validate SignedData content block and capture data.\n _fromAsn1(msg, obj, p7.asn1.signedDataValidator);\n msg.certificates = [];\n msg.crls = [];\n msg.digestAlgorithmIdentifiers = [];\n msg.contentInfo = null;\n msg.signerInfos = [];\n\n if(msg.rawCapture.certificates) {\n var certs = msg.rawCapture.certificates.value;\n for(var i = 0; i < certs.length; ++i) {\n msg.certificates.push(forge.pki.certificateFromAsn1(certs[i]));\n }\n }\n\n // TODO: parse crls\n },\n\n toAsn1: function() {\n // degenerate case with no content\n if(!msg.contentInfo) {\n msg.sign();\n }\n\n var certs = [];\n for(var i = 0; i < msg.certificates.length; ++i) {\n certs.push(forge.pki.certificateToAsn1(msg.certificates[i]));\n }\n\n var crls = [];\n // TODO: implement CRLs\n\n // [0] SignedData\n var signedData = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(msg.version).getBytes()),\n // DigestAlgorithmIdentifiers\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n msg.digestAlgorithmIdentifiers),\n // ContentInfo\n msg.contentInfo\n ])\n ]);\n if(certs.length > 0) {\n // [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL\n signedData.value[0].value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, certs));\n }\n if(crls.length > 0) {\n // [1] IMPLICIT CertificateRevocationLists OPTIONAL\n signedData.value[0].value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, crls));\n }\n // SignerInfos\n signedData.value[0].value.push(\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n msg.signerInfos));\n\n // ContentInfo\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(msg.type).getBytes()),\n // [0] SignedData\n signedData\n ]);\n },\n\n /**\n * Add (another) entity to list of signers.\n *\n * Note: If authenticatedAttributes are provided, then, per RFC 2315,\n * they must include at least two attributes: content type and\n * message digest. The message digest attribute value will be\n * auto-calculated during signing and will be ignored if provided.\n *\n * Here's an example of providing these two attributes:\n *\n * forge.pkcs7.createSignedData();\n * p7.addSigner({\n * issuer: cert.issuer.attributes,\n * serialNumber: cert.serialNumber,\n * key: privateKey,\n * digestAlgorithm: forge.pki.oids.sha1,\n * authenticatedAttributes: [{\n * type: forge.pki.oids.contentType,\n * value: forge.pki.oids.data\n * }, {\n * type: forge.pki.oids.messageDigest\n * }]\n * });\n *\n * TODO: Support [subjectKeyIdentifier] as signer's ID.\n *\n * @param signer the signer information:\n * key the signer's private key.\n * [certificate] a certificate containing the public key\n * associated with the signer's private key; use this option as\n * an alternative to specifying signer.issuer and\n * signer.serialNumber.\n * [issuer] the issuer attributes (eg: cert.issuer.attributes).\n * [serialNumber] the signer's certificate's serial number in\n * hexadecimal (eg: cert.serialNumber).\n * [digestAlgorithm] the message digest OID, as a string, to use\n * (eg: forge.pki.oids.sha1).\n * [authenticatedAttributes] an optional array of attributes\n * to also sign along with the content.\n */\n addSigner: function(signer) {\n var issuer = signer.issuer;\n var serialNumber = signer.serialNumber;\n if(signer.certificate) {\n var cert = signer.certificate;\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n issuer = cert.issuer.attributes;\n serialNumber = cert.serialNumber;\n }\n var key = signer.key;\n if(!key) {\n throw new Error(\n 'Could not add PKCS#7 signer; no private key specified.');\n }\n if(typeof key === 'string') {\n key = forge.pki.privateKeyFromPem(key);\n }\n\n // ensure OID known for digest algorithm\n var digestAlgorithm = signer.digestAlgorithm || forge.pki.oids.sha1;\n switch(digestAlgorithm) {\n case forge.pki.oids.sha1:\n case forge.pki.oids.sha256:\n case forge.pki.oids.sha384:\n case forge.pki.oids.sha512:\n case forge.pki.oids.md5:\n break;\n default:\n throw new Error(\n 'Could not add PKCS#7 signer; unknown message digest algorithm: ' +\n digestAlgorithm);\n }\n\n // if authenticatedAttributes is present, then the attributes\n // must contain at least PKCS #9 content-type and message-digest\n var authenticatedAttributes = signer.authenticatedAttributes || [];\n if(authenticatedAttributes.length > 0) {\n var contentType = false;\n var messageDigest = false;\n for(var i = 0; i < authenticatedAttributes.length; ++i) {\n var attr = authenticatedAttributes[i];\n if(!contentType && attr.type === forge.pki.oids.contentType) {\n contentType = true;\n if(messageDigest) {\n break;\n }\n continue;\n }\n if(!messageDigest && attr.type === forge.pki.oids.messageDigest) {\n messageDigest = true;\n if(contentType) {\n break;\n }\n continue;\n }\n }\n\n if(!contentType || !messageDigest) {\n throw new Error('Invalid signer.authenticatedAttributes. If ' +\n 'signer.authenticatedAttributes is specified, then it must ' +\n 'contain at least two attributes, PKCS #9 content-type and ' +\n 'PKCS #9 message-digest.');\n }\n }\n\n msg.signers.push({\n key: key,\n version: 1,\n issuer: issuer,\n serialNumber: serialNumber,\n digestAlgorithm: digestAlgorithm,\n signatureAlgorithm: forge.pki.oids.rsaEncryption,\n signature: null,\n authenticatedAttributes: authenticatedAttributes,\n unauthenticatedAttributes: []\n });\n },\n\n /**\n * Signs the content.\n * @param options Options to apply when signing:\n * [detached] boolean. If signing should be done in detached mode. Defaults to false.\n */\n sign: function(options) {\n options = options || {};\n // auto-generate content info\n if(typeof msg.content !== 'object' || msg.contentInfo === null) {\n // use Data ContentInfo\n msg.contentInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(forge.pki.oids.data).getBytes())\n ]);\n\n // add actual content, if present\n if('content' in msg) {\n var content;\n if(msg.content instanceof forge.util.ByteBuffer) {\n content = msg.content.bytes();\n } else if(typeof msg.content === 'string') {\n content = forge.util.encodeUtf8(msg.content);\n }\n\n if (options.detached) {\n msg.detachedContent = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content);\n } else {\n msg.contentInfo.value.push(\n // [0] EXPLICIT content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n content)\n ]));\n }\n }\n }\n\n // no signers, return early (degenerate case for certificate container)\n if(msg.signers.length === 0) {\n return;\n }\n\n // generate digest algorithm identifiers\n var mds = addDigestAlgorithmIds();\n\n // generate signerInfos\n addSignerInfos(mds);\n },\n\n verify: function() {\n throw new Error('PKCS#7 signature verification not yet implemented.');\n },\n\n /**\n * Add a certificate.\n *\n * @param cert the certificate to add.\n */\n addCertificate: function(cert) {\n // convert from PEM\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n msg.certificates.push(cert);\n },\n\n /**\n * Add a certificate revokation list.\n *\n * @param crl the certificate revokation list to add.\n */\n addCertificateRevokationList: function(crl) {\n throw new Error('PKCS#7 CRL support not yet implemented.');\n }\n };\n return msg;\n\n function addDigestAlgorithmIds() {\n var mds = {};\n\n for(var i = 0; i < msg.signers.length; ++i) {\n var signer = msg.signers[i];\n var oid = signer.digestAlgorithm;\n if(!(oid in mds)) {\n // content digest\n mds[oid] = forge.md[forge.pki.oids[oid]].create();\n }\n if(signer.authenticatedAttributes.length === 0) {\n // no custom attributes to digest; use content message digest\n signer.md = mds[oid];\n } else {\n // custom attributes to be digested; use own message digest\n // TODO: optimize to just copy message digest state if that\n // feature is ever supported with message digests\n signer.md = forge.md[forge.pki.oids[oid]].create();\n }\n }\n\n // add unique digest algorithm identifiers\n msg.digestAlgorithmIdentifiers = [];\n for(var oid in mds) {\n msg.digestAlgorithmIdentifiers.push(\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oid).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n\n return mds;\n }\n\n function addSignerInfos(mds) {\n var content;\n\n if (msg.detachedContent) {\n // Signature has been made in detached mode.\n content = msg.detachedContent;\n } else {\n // Note: ContentInfo is a SEQUENCE with 2 values, second value is\n // the content field and is optional for a ContentInfo but required here\n // since signers are present\n // get ContentInfo content\n content = msg.contentInfo.value[1];\n // skip [0] EXPLICIT content wrapper\n content = content.value[0];\n }\n\n if(!content) {\n throw new Error(\n 'Could not sign PKCS#7 message; there is no content to sign.');\n }\n\n // get ContentInfo content type\n var contentType = asn1.derToOid(msg.contentInfo.value[0].value);\n\n // serialize content\n var bytes = asn1.toDer(content);\n\n // skip identifier and length per RFC 2315 9.3\n // skip identifier (1 byte)\n bytes.getByte();\n // read and discard length bytes\n asn1.getBerValueLength(bytes);\n bytes = bytes.getBytes();\n\n // digest content DER value bytes\n for(var oid in mds) {\n mds[oid].start().update(bytes);\n }\n\n // sign content\n var signingTime = new Date();\n for(var i = 0; i < msg.signers.length; ++i) {\n var signer = msg.signers[i];\n\n if(signer.authenticatedAttributes.length === 0) {\n // if ContentInfo content type is not \"Data\", then\n // authenticatedAttributes must be present per RFC 2315\n if(contentType !== forge.pki.oids.data) {\n throw new Error(\n 'Invalid signer; authenticatedAttributes must be present ' +\n 'when the ContentInfo content type is not PKCS#7 Data.');\n }\n } else {\n // process authenticated attributes\n // [0] IMPLICIT\n signer.authenticatedAttributesAsn1 = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // per RFC 2315, attributes are to be digested using a SET container\n // not the above [0] IMPLICIT container\n var attrsAsn1 = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SET, true, []);\n\n for(var ai = 0; ai < signer.authenticatedAttributes.length; ++ai) {\n var attr = signer.authenticatedAttributes[ai];\n if(attr.type === forge.pki.oids.messageDigest) {\n // use content message digest as value\n attr.value = mds[signer.digestAlgorithm].digest();\n } else if(attr.type === forge.pki.oids.signingTime) {\n // auto-populate signing time if not already set\n if(!attr.value) {\n attr.value = signingTime;\n }\n }\n\n // convert to ASN.1 and push onto Attributes SET (for signing) and\n // onto authenticatedAttributesAsn1 to complete SignedData ASN.1\n // TODO: optimize away duplication\n attrsAsn1.value.push(_attributeToAsn1(attr));\n signer.authenticatedAttributesAsn1.value.push(_attributeToAsn1(attr));\n }\n\n // DER-serialize and digest SET OF attributes only\n bytes = asn1.toDer(attrsAsn1).getBytes();\n signer.md.start().update(bytes);\n }\n\n // sign digest\n signer.signature = signer.key.sign(signer.md, 'RSASSA-PKCS1-V1_5');\n }\n\n // add signer info\n msg.signerInfos = _signersToAsn1(msg.signers);\n }\n};\n\n/**\n * Creates an empty PKCS#7 message of type EncryptedData.\n *\n * @return the message.\n */\np7.createEncryptedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.encryptedData,\n version: 0,\n encryptedContent: {\n algorithm: forge.pki.oids['aes256-CBC']\n },\n\n /**\n * Reads an EncryptedData content block (in ASN.1 format)\n *\n * @param obj The ASN.1 representation of the EncryptedData content block\n */\n fromAsn1: function(obj) {\n // Validate EncryptedData content block and capture data.\n _fromAsn1(msg, obj, p7.asn1.encryptedDataValidator);\n },\n\n /**\n * Decrypt encrypted content\n *\n * @param key The (symmetric) key as a byte buffer\n */\n decrypt: function(key) {\n if(key !== undefined) {\n msg.encryptedContent.key = key;\n }\n _decryptContent(msg);\n }\n };\n return msg;\n};\n\n/**\n * Creates an empty PKCS#7 message of type EnvelopedData.\n *\n * @return the message.\n */\np7.createEnvelopedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.envelopedData,\n version: 0,\n recipients: [],\n encryptedContent: {\n algorithm: forge.pki.oids['aes256-CBC']\n },\n\n /**\n * Reads an EnvelopedData content block (in ASN.1 format)\n *\n * @param obj the ASN.1 representation of the EnvelopedData content block.\n */\n fromAsn1: function(obj) {\n // validate EnvelopedData content block and capture data\n var capture = _fromAsn1(msg, obj, p7.asn1.envelopedDataValidator);\n msg.recipients = _recipientsFromAsn1(capture.recipientInfos.value);\n },\n\n toAsn1: function() {\n // ContentInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(msg.type).getBytes()),\n // [0] EnvelopedData\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(msg.version).getBytes()),\n // RecipientInfos\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n _recipientsToAsn1(msg.recipients)),\n // EncryptedContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true,\n _encryptedContentToAsn1(msg.encryptedContent))\n ])\n ])\n ]);\n },\n\n /**\n * Find recipient by X.509 certificate's issuer.\n *\n * @param cert the certificate with the issuer to look for.\n *\n * @return the recipient object.\n */\n findRecipient: function(cert) {\n var sAttr = cert.issuer.attributes;\n\n for(var i = 0; i < msg.recipients.length; ++i) {\n var r = msg.recipients[i];\n var rAttr = r.issuer;\n\n if(r.serialNumber !== cert.serialNumber) {\n continue;\n }\n\n if(rAttr.length !== sAttr.length) {\n continue;\n }\n\n var match = true;\n for(var j = 0; j < sAttr.length; ++j) {\n if(rAttr[j].type !== sAttr[j].type ||\n rAttr[j].value !== sAttr[j].value) {\n match = false;\n break;\n }\n }\n\n if(match) {\n return r;\n }\n }\n\n return null;\n },\n\n /**\n * Decrypt enveloped content\n *\n * @param recipient The recipient object related to the private key\n * @param privKey The (RSA) private key object\n */\n decrypt: function(recipient, privKey) {\n if(msg.encryptedContent.key === undefined && recipient !== undefined &&\n privKey !== undefined) {\n switch(recipient.encryptedContent.algorithm) {\n case forge.pki.oids.rsaEncryption:\n case forge.pki.oids.desCBC:\n var key = privKey.decrypt(recipient.encryptedContent.content);\n msg.encryptedContent.key = forge.util.createBuffer(key);\n break;\n\n default:\n throw new Error('Unsupported asymmetric cipher, ' +\n 'OID ' + recipient.encryptedContent.algorithm);\n }\n }\n\n _decryptContent(msg);\n },\n\n /**\n * Add (another) entity to list of recipients.\n *\n * @param cert The certificate of the entity to add.\n */\n addRecipient: function(cert) {\n msg.recipients.push({\n version: 0,\n issuer: cert.issuer.attributes,\n serialNumber: cert.serialNumber,\n encryptedContent: {\n // We simply assume rsaEncryption here, since forge.pki only\n // supports RSA so far. If the PKI module supports other\n // ciphers one day, we need to modify this one as well.\n algorithm: forge.pki.oids.rsaEncryption,\n key: cert.publicKey\n }\n });\n },\n\n /**\n * Encrypt enveloped content.\n *\n * This function supports two optional arguments, cipher and key, which\n * can be used to influence symmetric encryption. Unless cipher is\n * provided, the cipher specified in encryptedContent.algorithm is used\n * (defaults to AES-256-CBC). If no key is provided, encryptedContent.key\n * is (re-)used. If that one's not set, a random key will be generated\n * automatically.\n *\n * @param [key] The key to be used for symmetric encryption.\n * @param [cipher] The OID of the symmetric cipher to use.\n */\n encrypt: function(key, cipher) {\n // Part 1: Symmetric encryption\n if(msg.encryptedContent.content === undefined) {\n cipher = cipher || msg.encryptedContent.algorithm;\n key = key || msg.encryptedContent.key;\n\n var keyLen, ivLen, ciphFn;\n switch(cipher) {\n case forge.pki.oids['aes128-CBC']:\n keyLen = 16;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['aes192-CBC']:\n keyLen = 24;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['aes256-CBC']:\n keyLen = 32;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['des-EDE3-CBC']:\n keyLen = 24;\n ivLen = 8;\n ciphFn = forge.des.createEncryptionCipher;\n break;\n\n default:\n throw new Error('Unsupported symmetric cipher, OID ' + cipher);\n }\n\n if(key === undefined) {\n key = forge.util.createBuffer(forge.random.getBytes(keyLen));\n } else if(key.length() != keyLen) {\n throw new Error('Symmetric key has wrong length; ' +\n 'got ' + key.length() + ' bytes, expected ' + keyLen + '.');\n }\n\n // Keep a copy of the key & IV in the object, so the caller can\n // use it for whatever reason.\n msg.encryptedContent.algorithm = cipher;\n msg.encryptedContent.key = key;\n msg.encryptedContent.parameter = forge.util.createBuffer(\n forge.random.getBytes(ivLen));\n\n var ciph = ciphFn(key);\n ciph.start(msg.encryptedContent.parameter.copy());\n ciph.update(msg.content);\n\n // The finish function does PKCS#7 padding by default, therefore\n // no action required by us.\n if(!ciph.finish()) {\n throw new Error('Symmetric encryption failed.');\n }\n\n msg.encryptedContent.content = ciph.output;\n }\n\n // Part 2: asymmetric encryption for each recipient\n for(var i = 0; i < msg.recipients.length; ++i) {\n var recipient = msg.recipients[i];\n\n // Nothing to do, encryption already done.\n if(recipient.encryptedContent.content !== undefined) {\n continue;\n }\n\n switch(recipient.encryptedContent.algorithm) {\n case forge.pki.oids.rsaEncryption:\n recipient.encryptedContent.content =\n recipient.encryptedContent.key.encrypt(\n msg.encryptedContent.key.data);\n break;\n\n default:\n throw new Error('Unsupported asymmetric cipher, OID ' +\n recipient.encryptedContent.algorithm);\n }\n }\n }\n };\n return msg;\n};\n\n/**\n * Converts a single recipient from an ASN.1 object.\n *\n * @param obj the ASN.1 RecipientInfo.\n *\n * @return the recipient object.\n */\nfunction _recipientFromAsn1(obj) {\n // validate EnvelopedData content block and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.recipientInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 RecipientInfo. ' +\n 'ASN.1 object is not an PKCS#7 RecipientInfo.');\n error.errors = errors;\n throw error;\n }\n\n return {\n version: capture.version.charCodeAt(0),\n issuer: forge.pki.RDNAttributesAsArray(capture.issuer),\n serialNumber: forge.util.createBuffer(capture.serial).toHex(),\n encryptedContent: {\n algorithm: asn1.derToOid(capture.encAlgorithm),\n parameter: capture.encParameter ? capture.encParameter.value : undefined,\n content: capture.encKey\n }\n };\n}\n\n/**\n * Converts a single recipient object to an ASN.1 object.\n *\n * @param obj the recipient object.\n *\n * @return the ASN.1 RecipientInfo.\n */\nfunction _recipientToAsn1(obj) {\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(obj.version).getBytes()),\n // IssuerAndSerialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Name\n forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}),\n // Serial\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(obj.serialNumber))\n ]),\n // KeyEncryptionAlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.encryptedContent.algorithm).getBytes()),\n // Parameter, force NULL, only RSA supported for now.\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // EncryptedKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n obj.encryptedContent.content)\n ]);\n}\n\n/**\n * Map a set of RecipientInfo ASN.1 objects to recipient objects.\n *\n * @param infos an array of ASN.1 representations RecipientInfo (i.e. SET OF).\n *\n * @return an array of recipient objects.\n */\nfunction _recipientsFromAsn1(infos) {\n var ret = [];\n for(var i = 0; i < infos.length; ++i) {\n ret.push(_recipientFromAsn1(infos[i]));\n }\n return ret;\n}\n\n/**\n * Map an array of recipient objects to ASN.1 RecipientInfo objects.\n *\n * @param recipients an array of recipientInfo objects.\n *\n * @return an array of ASN.1 RecipientInfos.\n */\nfunction _recipientsToAsn1(recipients) {\n var ret = [];\n for(var i = 0; i < recipients.length; ++i) {\n ret.push(_recipientToAsn1(recipients[i]));\n }\n return ret;\n}\n\n/**\n * Converts a single signer from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a SignerInfo.\n *\n * @return the signer object.\n */\nfunction _signerFromAsn1(obj) {\n // validate EnvelopedData content block and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.signerInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 SignerInfo. ' +\n 'ASN.1 object is not an PKCS#7 SignerInfo.');\n error.errors = errors;\n throw error;\n }\n\n var rval = {\n version: capture.version.charCodeAt(0),\n issuer: forge.pki.RDNAttributesAsArray(capture.issuer),\n serialNumber: forge.util.createBuffer(capture.serial).toHex(),\n digestAlgorithm: asn1.derToOid(capture.digestAlgorithm),\n signatureAlgorithm: asn1.derToOid(capture.signatureAlgorithm),\n signature: capture.signature,\n authenticatedAttributes: [],\n unauthenticatedAttributes: []\n };\n\n // TODO: convert attributes\n var authenticatedAttributes = capture.authenticatedAttributes || [];\n var unauthenticatedAttributes = capture.unauthenticatedAttributes || [];\n\n return rval;\n}\n\n/**\n * Converts a single signerInfo object to an ASN.1 object.\n *\n * @param obj the signerInfo object.\n *\n * @return the ASN.1 representation of a SignerInfo.\n */\nfunction _signerToAsn1(obj) {\n // SignerInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(obj.version).getBytes()),\n // issuerAndSerialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // name\n forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}),\n // serial\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(obj.serialNumber))\n ]),\n // digestAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.digestAlgorithm).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]);\n\n // authenticatedAttributes (OPTIONAL)\n if(obj.authenticatedAttributesAsn1) {\n // add ASN.1 previously generated during signing\n rval.value.push(obj.authenticatedAttributesAsn1);\n }\n\n // digestEncryptionAlgorithm\n rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.signatureAlgorithm).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n\n // encryptedDigest\n rval.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.signature));\n\n // unauthenticatedAttributes (OPTIONAL)\n if(obj.unauthenticatedAttributes.length > 0) {\n // [1] IMPLICIT\n var attrsAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, []);\n for(var i = 0; i < obj.unauthenticatedAttributes.length; ++i) {\n var attr = obj.unauthenticatedAttributes[i];\n attrsAsn1.values.push(_attributeToAsn1(attr));\n }\n rval.value.push(attrsAsn1);\n }\n\n return rval;\n}\n\n/**\n * Map a set of SignerInfo ASN.1 objects to an array of signer objects.\n *\n * @param signerInfoAsn1s an array of ASN.1 SignerInfos (i.e. SET OF).\n *\n * @return an array of signers objects.\n */\nfunction _signersFromAsn1(signerInfoAsn1s) {\n var ret = [];\n for(var i = 0; i < signerInfoAsn1s.length; ++i) {\n ret.push(_signerFromAsn1(signerInfoAsn1s[i]));\n }\n return ret;\n}\n\n/**\n * Map an array of signer objects to ASN.1 objects.\n *\n * @param signers an array of signer objects.\n *\n * @return an array of ASN.1 SignerInfos.\n */\nfunction _signersToAsn1(signers) {\n var ret = [];\n for(var i = 0; i < signers.length; ++i) {\n ret.push(_signerToAsn1(signers[i]));\n }\n return ret;\n}\n\n/**\n * Convert an attribute object to an ASN.1 Attribute.\n *\n * @param attr the attribute object.\n *\n * @return the ASN.1 Attribute.\n */\nfunction _attributeToAsn1(attr) {\n var value;\n\n // TODO: generalize to support more attributes\n if(attr.type === forge.pki.oids.contentType) {\n value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.value).getBytes());\n } else if(attr.type === forge.pki.oids.messageDigest) {\n value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n attr.value.bytes());\n } else if(attr.type === forge.pki.oids.signingTime) {\n /* Note per RFC 2985: Dates between 1 January 1950 and 31 December 2049\n (inclusive) MUST be encoded as UTCTime. Any dates with year values\n before 1950 or after 2049 MUST be encoded as GeneralizedTime. [Further,]\n UTCTime values MUST be expressed in Greenwich Mean Time (Zulu) and MUST\n include seconds (i.e., times are YYMMDDHHMMSSZ), even where the\n number of seconds is zero. Midnight (GMT) must be represented as\n \"YYMMDD000000Z\". */\n // TODO: make these module-level constants\n var jan_1_1950 = new Date('1950-01-01T00:00:00Z');\n var jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n var date = attr.value;\n if(typeof date === 'string') {\n // try to parse date\n var timestamp = Date.parse(date);\n if(!isNaN(timestamp)) {\n date = new Date(timestamp);\n } else if(date.length === 13) {\n // YYMMDDHHMMSSZ (13 chars for UTCTime)\n date = asn1.utcTimeToDate(date);\n } else {\n // assume generalized time\n date = asn1.generalizedTimeToDate(date);\n }\n }\n\n if(date >= jan_1_1950 && date < jan_1_2050) {\n value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n }\n\n // TODO: expose as common API call\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n value\n ])\n ]);\n}\n\n/**\n * Map messages encrypted content to ASN.1 objects.\n *\n * @param ec The encryptedContent object of the message.\n *\n * @return ASN.1 representation of the encryptedContent object (SEQUENCE).\n */\nfunction _encryptedContentToAsn1(ec) {\n return [\n // ContentType, always Data for the moment\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(forge.pki.oids.data).getBytes()),\n // ContentEncryptionAlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ec.algorithm).getBytes()),\n // Parameters (IV)\n !ec.parameter ?\n undefined :\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n ec.parameter.getBytes())\n ]),\n // [0] EncryptedContent\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n ec.content.getBytes())\n ])\n ];\n}\n\n/**\n * Reads the \"common part\" of an PKCS#7 content block (in ASN.1 format)\n *\n * This function reads the \"common part\" of the PKCS#7 content blocks\n * EncryptedData and EnvelopedData, i.e. version number and symmetrically\n * encrypted content block.\n *\n * The result of the ASN.1 validate and capture process is returned\n * to allow the caller to extract further data, e.g. the list of recipients\n * in case of a EnvelopedData object.\n *\n * @param msg the PKCS#7 object to read the data to.\n * @param obj the ASN.1 representation of the content block.\n * @param validator the ASN.1 structure validator object to use.\n *\n * @return the value map captured by validator object.\n */\nfunction _fromAsn1(msg, obj, validator) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, validator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 message. ' +\n 'ASN.1 object is not a supported PKCS#7 message.');\n error.errors = error;\n throw error;\n }\n\n // Check contentType, so far we only support (raw) Data.\n var contentType = asn1.derToOid(capture.contentType);\n if(contentType !== forge.pki.oids.data) {\n throw new Error('Unsupported PKCS#7 message. ' +\n 'Only wrapped ContentType Data supported.');\n }\n\n if(capture.encryptedContent) {\n var content = '';\n if(forge.util.isArray(capture.encryptedContent)) {\n for(var i = 0; i < capture.encryptedContent.length; ++i) {\n if(capture.encryptedContent[i].type !== asn1.Type.OCTETSTRING) {\n throw new Error('Malformed PKCS#7 message, expecting encrypted ' +\n 'content constructed of only OCTET STRING objects.');\n }\n content += capture.encryptedContent[i].value;\n }\n } else {\n content = capture.encryptedContent;\n }\n msg.encryptedContent = {\n algorithm: asn1.derToOid(capture.encAlgorithm),\n parameter: forge.util.createBuffer(capture.encParameter.value),\n content: forge.util.createBuffer(content)\n };\n }\n\n if(capture.content) {\n var content = '';\n if(forge.util.isArray(capture.content)) {\n for(var i = 0; i < capture.content.length; ++i) {\n if(capture.content[i].type !== asn1.Type.OCTETSTRING) {\n throw new Error('Malformed PKCS#7 message, expecting ' +\n 'content constructed of only OCTET STRING objects.');\n }\n content += capture.content[i].value;\n }\n } else {\n content = capture.content;\n }\n msg.content = forge.util.createBuffer(content);\n }\n\n msg.version = capture.version.charCodeAt(0);\n msg.rawCapture = capture;\n\n return capture;\n}\n\n/**\n * Decrypt the symmetrically encrypted content block of the PKCS#7 message.\n *\n * Decryption is skipped in case the PKCS#7 message object already has a\n * (decrypted) content attribute. The algorithm, key and cipher parameters\n * (probably the iv) are taken from the encryptedContent attribute of the\n * message object.\n *\n * @param The PKCS#7 message object.\n */\nfunction _decryptContent(msg) {\n if(msg.encryptedContent.key === undefined) {\n throw new Error('Symmetric key not available.');\n }\n\n if(msg.content === undefined) {\n var ciph;\n\n switch(msg.encryptedContent.algorithm) {\n case forge.pki.oids['aes128-CBC']:\n case forge.pki.oids['aes192-CBC']:\n case forge.pki.oids['aes256-CBC']:\n ciph = forge.aes.createDecryptionCipher(msg.encryptedContent.key);\n break;\n\n case forge.pki.oids['desCBC']:\n case forge.pki.oids['des-EDE3-CBC']:\n ciph = forge.des.createDecryptionCipher(msg.encryptedContent.key);\n break;\n\n default:\n throw new Error('Unsupported symmetric cipher, OID ' +\n msg.encryptedContent.algorithm);\n }\n ciph.start(msg.encryptedContent.parameter);\n ciph.update(msg.encryptedContent.content);\n\n if(!ciph.finish()) {\n throw new Error('Symmetric decryption failed.');\n }\n\n msg.content = ciph.output;\n }\n}\n","/**\n * Javascript implementation of ASN.1 validators for PKCS#7 v1.5.\n *\n * @author Dave Longley\n * @author Stefan Siegl\n *\n * Copyright (c) 2012-2015 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * The ASN.1 representation of PKCS#7 is as follows\n * (see RFC #2315 for details, http://www.ietf.org/rfc/rfc2315.txt):\n *\n * A PKCS#7 message consists of a ContentInfo on root level, which may\n * contain any number of further ContentInfo nested into it.\n *\n * ContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL\n * }\n *\n * ContentType ::= OBJECT IDENTIFIER\n *\n * EnvelopedData ::= SEQUENCE {\n * version Version,\n * recipientInfos RecipientInfos,\n * encryptedContentInfo EncryptedContentInfo\n * }\n *\n * EncryptedData ::= SEQUENCE {\n * version Version,\n * encryptedContentInfo EncryptedContentInfo\n * }\n *\n * id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)\n * us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }\n *\n * SignedData ::= SEQUENCE {\n * version INTEGER,\n * digestAlgorithms DigestAlgorithmIdentifiers,\n * contentInfo ContentInfo,\n * certificates [0] IMPLICIT Certificates OPTIONAL,\n * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,\n * signerInfos SignerInfos\n * }\n *\n * SignerInfos ::= SET OF SignerInfo\n *\n * SignerInfo ::= SEQUENCE {\n * version Version,\n * issuerAndSerialNumber IssuerAndSerialNumber,\n * digestAlgorithm DigestAlgorithmIdentifier,\n * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,\n * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,\n * encryptedDigest EncryptedDigest,\n * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL\n * }\n *\n * EncryptedDigest ::= OCTET STRING\n *\n * Attributes ::= SET OF Attribute\n *\n * Attribute ::= SEQUENCE {\n * attrType OBJECT IDENTIFIER,\n * attrValues SET OF AttributeValue\n * }\n *\n * AttributeValue ::= ANY\n *\n * Version ::= INTEGER\n *\n * RecipientInfos ::= SET OF RecipientInfo\n *\n * EncryptedContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,\n * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL\n * }\n *\n * ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of AES and DES3, there is only one,\n * the IV.\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * EncryptedContent ::= OCTET STRING\n *\n * RecipientInfo ::= SEQUENCE {\n * version Version,\n * issuerAndSerialNumber IssuerAndSerialNumber,\n * keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,\n * encryptedKey EncryptedKey\n * }\n *\n * IssuerAndSerialNumber ::= SEQUENCE {\n * issuer Name,\n * serialNumber CertificateSerialNumber\n * }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedKey ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./util');\n\n// shortcut for ASN.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for PKCS#7 API\nvar p7v = module.exports = forge.pkcs7asn1 = forge.pkcs7asn1 || {};\nforge.pkcs7 = forge.pkcs7 || {};\nforge.pkcs7.asn1 = p7v;\n\nvar contentInfoValidator = {\n name: 'ContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'ContentInfo.ContentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'ContentInfo.content',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n captureAsn1: 'content'\n }]\n};\np7v.contentInfoValidator = contentInfoValidator;\n\nvar encryptedContentInfoValidator = {\n name: 'EncryptedContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedContentInfo.contentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encAlgorithm'\n }, {\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n captureAsn1: 'encParameter'\n }]\n }, {\n name: 'EncryptedContentInfo.encryptedContent',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n /* The PKCS#7 structure output by OpenSSL somewhat differs from what\n * other implementations do generate.\n *\n * OpenSSL generates a structure like this:\n * SEQUENCE {\n * ...\n * [0]\n * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38\n * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45\n * ...\n * }\n *\n * Whereas other implementations (and this PKCS#7 module) generate:\n * SEQUENCE {\n * ...\n * [0] {\n * OCTET STRING\n * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38\n * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45\n * ...\n * }\n * }\n *\n * In order to support both, we just capture the context specific\n * field here. The OCTET STRING bit is removed below.\n */\n capture: 'encryptedContent',\n captureAsn1: 'encryptedContentAsn1'\n }]\n};\n\np7v.envelopedDataValidator = {\n name: 'EnvelopedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EnvelopedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'EnvelopedData.RecipientInfos',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n captureAsn1: 'recipientInfos'\n }].concat(encryptedContentInfoValidator)\n};\n\np7v.encryptedDataValidator = {\n name: 'EncryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }].concat(encryptedContentInfoValidator)\n};\n\nvar signerValidator = {\n name: 'SignerInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false\n }, {\n name: 'SignerInfo.issuerAndSerialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.issuerAndSerialNumber.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'issuer'\n }, {\n name: 'SignerInfo.issuerAndSerialNumber.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'serial'\n }]\n }, {\n name: 'SignerInfo.digestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.digestAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'digestAlgorithm'\n }, {\n name: 'SignerInfo.digestAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n constructed: false,\n captureAsn1: 'digestParameter',\n optional: true\n }]\n }, {\n name: 'SignerInfo.authenticatedAttributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'authenticatedAttributes'\n }, {\n name: 'SignerInfo.digestEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n capture: 'signatureAlgorithm'\n }, {\n name: 'SignerInfo.encryptedDigest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'signature'\n }, {\n name: 'SignerInfo.unauthenticatedAttributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n capture: 'unauthenticatedAttributes'\n }]\n};\n\np7v.signedDataValidator = {\n name: 'SignedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'SignedData.DigestAlgorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n captureAsn1: 'digestAlgorithms'\n },\n contentInfoValidator,\n {\n name: 'SignedData.Certificates',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n optional: true,\n captureAsn1: 'certificates'\n }, {\n name: 'SignedData.CertificateRevocationLists',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n optional: true,\n captureAsn1: 'crls'\n }, {\n name: 'SignedData.SignerInfos',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n capture: 'signerInfos',\n optional: true,\n value: [signerValidator]\n }]\n};\n\np7v.recipientInfoValidator = {\n name: 'RecipientInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'RecipientInfo.issuerAndSerial',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.issuerAndSerial.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'issuer'\n }, {\n name: 'RecipientInfo.issuerAndSerial.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'serial'\n }]\n }, {\n name: 'RecipientInfo.keyEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.keyEncryptionAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encAlgorithm'\n }, {\n name: 'RecipientInfo.keyEncryptionAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n constructed: false,\n captureAsn1: 'encParameter',\n optional: true\n }]\n }, {\n name: 'RecipientInfo.encryptedKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encKey'\n }]\n};\n","/**\n * Javascript implementation of a basic Public Key Infrastructure, including\n * support for RSA public and private keys.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./oids');\nrequire('./pbe');\nrequire('./pem');\nrequire('./pbkdf2');\nrequire('./pkcs12');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED. Use pem.decode() instead.\n *\n * Converts PEM-formatted data to DER.\n *\n * @param pem the PEM-formatted data.\n *\n * @return the DER-formatted data.\n */\npki.pemToDer = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert PEM to DER; PEM is encrypted.');\n }\n return forge.util.createBuffer(msg.body);\n};\n\n/**\n * Converts an RSA private key from PEM format.\n *\n * @param pem the PEM-formatted private key.\n *\n * @return the private key.\n */\npki.privateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PRIVATE KEY' && msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM ' +\n 'header type is not \"PRIVATE KEY\" or \"RSA PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert private key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.privateKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA private key to PEM format.\n *\n * @param key the private key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted private key.\n */\npki.privateKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PRIVATE KEY',\n body: asn1.toDer(pki.privateKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PrivateKeyInfo to PEM format.\n *\n * @param pki the PrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted private key.\n */\npki.privateKeyInfoToPem = function(pki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'PRIVATE KEY',\n body: asn1.toDer(pki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n","/**\n * Prime number generation API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./jsbn');\nrequire('./random');\n\n(function() {\n\n// forge.prime already defined\nif(forge.prime) {\n module.exports = forge.prime;\n return;\n}\n\n/* PRIME API */\nvar prime = module.exports = forge.prime = forge.prime || {};\n\nvar BigInteger = forge.jsbn.BigInteger;\n\n// primes are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\nvar THIRTY = new BigInteger(null);\nTHIRTY.fromInt(30);\nvar op_or = function(x, y) {return x|y;};\n\n/**\n * Generates a random probable prime with the given number of bits.\n *\n * Alternative algorithms can be specified by name as a string or as an\n * object with custom options like so:\n *\n * {\n * name: 'PRIMEINC',\n * options: {\n * maxBlockTime: ,\n * millerRabinTests: ,\n * workerScript: ,\n * workers: .\n * workLoad: the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * }\n * }\n *\n * @param bits the number of bits for the prime number.\n * @param options the options to use.\n * [algorithm] the algorithm to use (default: 'PRIMEINC').\n * [prng] a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n *\n * @return callback(err, num) called once the operation completes.\n */\nprime.generateProbablePrime = function(bits, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n // default to PRIMEINC algorithm\n var algorithm = options.algorithm || 'PRIMEINC';\n if(typeof algorithm === 'string') {\n algorithm = {name: algorithm};\n }\n algorithm.options = algorithm.options || {};\n\n // create prng with api that matches BigInteger secure random\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n if(algorithm.name === 'PRIMEINC') {\n return primeincFindPrime(bits, rng, algorithm.options, callback);\n }\n\n throw new Error('Invalid prime generation algorithm: ' + algorithm.name);\n};\n\nfunction primeincFindPrime(bits, rng, options, callback) {\n if('workers' in options) {\n return primeincFindPrimeWithWorkers(bits, rng, options, callback);\n }\n return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);\n}\n\nfunction primeincFindPrimeWithoutWorkers(bits, rng, options, callback) {\n // initialize random number\n var num = generateRandom(bits, rng);\n\n /* Note: All primes are of the form 30k+i for i < 30 and gcd(30, i)=1. The\n number we are given is always aligned at 30k + 1. Each time the number is\n determined not to be prime we add to get to the next 'i', eg: if the number\n was at 30k + 1 we add 6. */\n var deltaIdx = 0;\n\n // get required number of MR tests\n var mrTests = getMillerRabinTests(num.bitLength());\n if('millerRabinTests' in options) {\n mrTests = options.millerRabinTests;\n }\n\n // find prime nearest to 'num' for maxBlockTime ms\n // 10 ms gives 5ms of leeway for other calculations before dropping\n // below 60fps (1000/60 == 16.67), but in reality, the number will\n // likely be higher due to an 'atomic' big int modPow\n var maxBlockTime = 10;\n if('maxBlockTime' in options) {\n maxBlockTime = options.maxBlockTime;\n }\n\n _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);\n}\n\nfunction _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) {\n var start = +new Date();\n do {\n // overflow, regenerate random number\n if(num.bitLength() > bits) {\n num = generateRandom(bits, rng);\n }\n // do primality test\n if(num.isProbablePrime(mrTests)) {\n return callback(null, num);\n }\n // get next potential prime\n num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n } while(maxBlockTime < 0 || (+new Date() - start < maxBlockTime));\n\n // keep trying later\n forge.util.setImmediate(function() {\n _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);\n });\n}\n\n// NOTE: This algorithm is indeterminate in nature because workers\n// run in parallel looking at different segments of numbers. Even if this\n// algorithm is run twice with the same input from a predictable RNG, it\n// may produce different outputs.\nfunction primeincFindPrimeWithWorkers(bits, rng, options, callback) {\n // web workers unavailable\n if(typeof Worker === 'undefined') {\n return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);\n }\n\n // initialize random number\n var num = generateRandom(bits, rng);\n\n // use web workers to generate keys\n var numWorkers = options.workers;\n var workLoad = options.workLoad || 100;\n var range = workLoad * 30 / 8;\n var workerScript = options.workerScript || 'forge/prime.worker.js';\n if(numWorkers === -1) {\n return forge.util.estimateCores(function(err, cores) {\n if(err) {\n // default to 2\n cores = 2;\n }\n numWorkers = cores - 1;\n generate();\n });\n }\n generate();\n\n function generate() {\n // require at least 1 worker\n numWorkers = Math.max(1, numWorkers);\n\n // TODO: consider optimizing by starting workers outside getPrime() ...\n // note that in order to clean up they will have to be made internally\n // asynchronous which may actually be slower\n\n // start workers immediately\n var workers = [];\n for(var i = 0; i < numWorkers; ++i) {\n // FIXME: fix path or use blob URLs\n workers[i] = new Worker(workerScript);\n }\n var running = numWorkers;\n\n // listen for requests from workers and assign ranges to find prime\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].addEventListener('message', workerMessage);\n }\n\n /* Note: The distribution of random numbers is unknown. Therefore, each\n web worker is continuously allocated a range of numbers to check for a\n random number until one is found.\n\n Every 30 numbers will be checked just 8 times, because prime numbers\n have the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1 (there are 8 values of i for this)\n\n Therefore, if we want a web worker to run N checks before asking for\n a new range of numbers, each range must contain N*30/8 numbers.\n\n For 100 checks (workLoad), this is a range of 375. */\n\n var found = false;\n function workerMessage(e) {\n // ignore message, prime already found\n if(found) {\n return;\n }\n\n --running;\n var data = e.data;\n if(data.found) {\n // terminate all workers\n for(var i = 0; i < workers.length; ++i) {\n workers[i].terminate();\n }\n found = true;\n return callback(null, new BigInteger(data.prime, 16));\n }\n\n // overflow, regenerate random number\n if(num.bitLength() > bits) {\n num = generateRandom(bits, rng);\n }\n\n // assign new range to check\n var hex = num.toString(16);\n\n // start prime search\n e.target.postMessage({\n hex: hex,\n workLoad: workLoad\n });\n\n num.dAddOffset(range, 0);\n }\n }\n}\n\n/**\n * Generates a random number using the given number of bits and RNG.\n *\n * @param bits the number of bits for the number.\n * @param rng the random number generator to use.\n *\n * @return the random number.\n */\nfunction generateRandom(bits, rng) {\n var num = new BigInteger(bits, rng);\n // force MSB set\n var bits1 = bits - 1;\n if(!num.testBit(bits1)) {\n num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, num);\n }\n // align number on 30k+1 boundary\n num.dAddOffset(31 - num.mod(THIRTY).byteValue(), 0);\n return num;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n})();\n","/**\n * A javascript implementation of a cryptographically-secure\n * Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed\n * here though the use of SHA-256 is not enforced; when generating an\n * a PRNG context, the hashing algorithm and block cipher used for\n * the generator are specified via a plugin.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar _crypto = null;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n !process.versions['node-webkit']) {\n _crypto = require('crypto');\n}\n\n/* PRNG API */\nvar prng = module.exports = forge.prng = forge.prng || {};\n\n/**\n * Creates a new PRNG context.\n *\n * A PRNG plugin must be passed in that will provide:\n *\n * 1. A function that initializes the key and seed of a PRNG context. It\n * will be given a 16 byte key and a 16 byte seed. Any key expansion\n * or transformation of the seed from a byte string into an array of\n * integers (or similar) should be performed.\n * 2. The cryptographic function used by the generator. It takes a key and\n * a seed.\n * 3. A seed increment function. It takes the seed and returns seed + 1.\n * 4. An api to create a message digest.\n *\n * For an example, see random.js.\n *\n * @param plugin the PRNG plugin to use.\n */\nprng.create = function(plugin) {\n var ctx = {\n plugin: plugin,\n key: null,\n seed: null,\n time: null,\n // number of reseeds so far\n reseeds: 0,\n // amount of data generated so far\n generated: 0,\n // no initial key bytes\n keyBytes: ''\n };\n\n // create 32 entropy pools (each is a message digest)\n var md = plugin.md;\n var pools = new Array(32);\n for(var i = 0; i < 32; ++i) {\n pools[i] = md.create();\n }\n ctx.pools = pools;\n\n // entropy pools are written to cyclically, starting at index 0\n ctx.pool = 0;\n\n /**\n * Generates random bytes. The bytes may be generated synchronously or\n * asynchronously. Web workers must use the asynchronous interface or\n * else the behavior is undefined.\n *\n * @param count the number of random bytes to generate.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return count random bytes as a string.\n */\n ctx.generate = function(count, callback) {\n // do synchronously\n if(!callback) {\n return ctx.generateSync(count);\n }\n\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n var b = forge.util.createBuffer();\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generate` call\n ctx.key = null;\n\n generate();\n\n function generate(err) {\n if(err) {\n return callback(err);\n }\n\n // sufficient bytes generated\n if(b.length() >= count) {\n return callback(null, b.getBytes(count));\n }\n\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n // prevent stack overflow\n return forge.util.nextTick(function() {\n _reseed(generate);\n });\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n\n forge.util.setImmediate(generate);\n }\n };\n\n /**\n * Generates random bytes synchronously.\n *\n * @param count the number of random bytes to generate.\n *\n * @return count random bytes as a string.\n */\n ctx.generateSync = function(count) {\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generateSync` call\n ctx.key = null;\n\n var b = forge.util.createBuffer();\n while(b.length() < count) {\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n _reseedSync();\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n }\n\n return b.getBytes(count);\n };\n\n /**\n * Private function that asynchronously reseeds a generator.\n *\n * @param callback(err) called once the operation completes.\n */\n function _reseed(callback) {\n if(ctx.pools[0].messageLength >= 32) {\n _seed();\n return callback();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.seedFile(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n ctx.collect(bytes);\n _seed();\n callback();\n });\n }\n\n /**\n * Private function that synchronously reseeds a generator.\n */\n function _reseedSync() {\n if(ctx.pools[0].messageLength >= 32) {\n return _seed();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.collect(ctx.seedFileSync(needed));\n _seed();\n }\n\n /**\n * Private function that seeds a generator once enough bytes are available.\n */\n function _seed() {\n // update reseed count\n ctx.reseeds = (ctx.reseeds === 0xffffffff) ? 0 : ctx.reseeds + 1;\n\n // goal is to update `key` via:\n // key = hash(key + s)\n // where 's' is all collected entropy from selected pools, then...\n\n // create a plugin-based message digest\n var md = ctx.plugin.md.create();\n\n // consume current key bytes\n md.update(ctx.keyBytes);\n\n // digest the entropy of pools whose index k meet the\n // condition 'n mod 2^k == 0' where n is the number of reseeds\n var _2powK = 1;\n for(var k = 0; k < 32; ++k) {\n if(ctx.reseeds % _2powK === 0) {\n md.update(ctx.pools[k].digest().getBytes());\n ctx.pools[k].start();\n }\n _2powK = _2powK << 1;\n }\n\n // get digest for key bytes\n ctx.keyBytes = md.digest().getBytes();\n\n // paranoid deviation from Fortuna:\n // update `seed` via `seed = hash(key)`\n // instead of initializing to zero once and only\n // ever incrementing it\n md.start();\n md.update(ctx.keyBytes);\n var seedBytes = md.digest().getBytes();\n\n // update state\n ctx.key = ctx.plugin.formatKey(ctx.keyBytes);\n ctx.seed = ctx.plugin.formatSeed(seedBytes);\n ctx.generated = 0;\n }\n\n /**\n * The built-in default seedFile. This seedFile is used when entropy\n * is needed immediately.\n *\n * @param needed the number of bytes that are needed.\n *\n * @return the random bytes.\n */\n function defaultSeedFile(needed) {\n // use window.crypto.getRandomValues strong source of entropy if available\n var getRandomValues = null;\n var globalScope = forge.util.globalScope;\n var _crypto = globalScope.crypto || globalScope.msCrypto;\n if(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n }\n\n var b = forge.util.createBuffer();\n if(getRandomValues) {\n while(b.length() < needed) {\n // max byte length is 65536 before QuotaExceededError is thrown\n // http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues\n var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4);\n var entropy = new Uint32Array(Math.floor(count));\n try {\n getRandomValues(entropy);\n for(var i = 0; i < entropy.length; ++i) {\n b.putInt32(entropy[i]);\n }\n } catch(e) {\n /* only ignore QuotaExceededError */\n if(!(typeof QuotaExceededError !== 'undefined' &&\n e instanceof QuotaExceededError)) {\n throw e;\n }\n }\n }\n }\n\n // be sad and add some weak random data\n if(b.length() < needed) {\n /* Draws from Park-Miller \"minimal standard\" 31 bit PRNG,\n implemented with David G. Carta's optimization: with 32 bit math\n and without division (Public Domain). */\n var hi, lo, next;\n var seed = Math.floor(Math.random() * 0x010000);\n while(b.length() < needed) {\n lo = 16807 * (seed & 0xFFFF);\n hi = 16807 * (seed >> 16);\n lo += (hi & 0x7FFF) << 16;\n lo += hi >> 15;\n lo = (lo & 0x7FFFFFFF) + (lo >> 31);\n seed = lo & 0xFFFFFFFF;\n\n // consume lower 3 bytes of seed\n for(var i = 0; i < 3; ++i) {\n // throw in more pseudo random\n next = seed >>> (i << 3);\n next ^= Math.floor(Math.random() * 0x0100);\n b.putByte(next & 0xFF);\n }\n }\n }\n\n return b.getBytes(needed);\n }\n // initialize seed file APIs\n if(_crypto) {\n // use nodejs async API\n ctx.seedFile = function(needed, callback) {\n _crypto.randomBytes(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n callback(null, bytes.toString());\n });\n };\n // use nodejs sync API\n ctx.seedFileSync = function(needed) {\n return _crypto.randomBytes(needed).toString();\n };\n } else {\n ctx.seedFile = function(needed, callback) {\n try {\n callback(null, defaultSeedFile(needed));\n } catch(e) {\n callback(e);\n }\n };\n ctx.seedFileSync = defaultSeedFile;\n }\n\n /**\n * Adds entropy to a prng ctx's accumulator.\n *\n * @param bytes the bytes of entropy as a string.\n */\n ctx.collect = function(bytes) {\n // iterate over pools distributing entropy cyclically\n var count = bytes.length;\n for(var i = 0; i < count; ++i) {\n ctx.pools[ctx.pool].update(bytes.substr(i, 1));\n ctx.pool = (ctx.pool === 31) ? 0 : ctx.pool + 1;\n }\n };\n\n /**\n * Collects an integer of n bits.\n *\n * @param i the integer entropy.\n * @param n the number of bits in the integer.\n */\n ctx.collectInt = function(i, n) {\n var bytes = '';\n for(var x = 0; x < n; x += 8) {\n bytes += String.fromCharCode((i >> x) & 0xFF);\n }\n ctx.collect(bytes);\n };\n\n /**\n * Registers a Web Worker to receive immediate entropy from the main thread.\n * This method is required until Web Workers can access the native crypto\n * API. This method should be called twice for each created worker, once in\n * the main thread, and once in the worker itself.\n *\n * @param worker the worker to register.\n */\n ctx.registerWorker = function(worker) {\n // worker receives random bytes\n if(worker === self) {\n ctx.seedFile = function(needed, callback) {\n function listener(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n self.removeEventListener('message', listener);\n callback(data.forge.prng.err, data.forge.prng.bytes);\n }\n }\n self.addEventListener('message', listener);\n self.postMessage({forge: {prng: {needed: needed}}});\n };\n } else {\n // main thread sends random bytes upon request\n var listener = function(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n ctx.seedFile(data.forge.prng.needed, function(err, bytes) {\n worker.postMessage({forge: {prng: {err: err, bytes: bytes}}});\n });\n }\n };\n // TODO: do we need to remove the event listener when the worker dies?\n worker.addEventListener('message', listener);\n }\n };\n\n return ctx;\n};\n","/**\n * Javascript implementation of PKCS#1 PSS signature padding.\n *\n * @author Stefan Siegl\n *\n * Copyright (c) 2012 Stefan Siegl \n */\nvar forge = require('./forge');\nrequire('./random');\nrequire('./util');\n\n// shortcut for PSS API\nvar pss = module.exports = forge.pss = forge.pss || {};\n\n/**\n * Creates a PSS signature scheme object.\n *\n * There are several ways to provide a salt for encoding:\n *\n * 1. Specify the saltLength only and the built-in PRNG will generate it.\n * 2. Specify the saltLength and a custom PRNG with 'getBytesSync' defined that\n * will be used.\n * 3. Specify the salt itself as a forge.util.ByteBuffer.\n *\n * @param options the options to use:\n * md the message digest object to use, a forge md instance.\n * mgf the mask generation function to use, a forge mgf instance.\n * [saltLength] the length of the salt in octets.\n * [prng] the pseudo-random number generator to use to produce a salt.\n * [salt] the salt to use when encoding.\n *\n * @return a signature scheme object.\n */\npss.create = function(options) {\n // backwards compatibility w/legacy args: hash, mgf, sLen\n if(arguments.length === 3) {\n options = {\n md: arguments[0],\n mgf: arguments[1],\n saltLength: arguments[2]\n };\n }\n\n var hash = options.md;\n var mgf = options.mgf;\n var hLen = hash.digestLength;\n\n var salt_ = options.salt || null;\n if(typeof salt_ === 'string') {\n // assume binary-encoded string\n salt_ = forge.util.createBuffer(salt_);\n }\n\n var sLen;\n if('saltLength' in options) {\n sLen = options.saltLength;\n } else if(salt_ !== null) {\n sLen = salt_.length();\n } else {\n throw new Error('Salt length not specified or specific salt not given.');\n }\n\n if(salt_ !== null && salt_.length() !== sLen) {\n throw new Error('Given salt length does not match length of given salt.');\n }\n\n var prng = options.prng || forge.random;\n\n var pssobj = {};\n\n /**\n * Encodes a PSS signature.\n *\n * This function implements EMSA-PSS-ENCODE as per RFC 3447, section 9.1.1.\n *\n * @param md the message digest object with the hash to sign.\n * @param modsBits the length of the RSA modulus in bits.\n *\n * @return the encoded message as a binary-encoded string of length\n * ceil((modBits - 1) / 8).\n */\n pssobj.encode = function(md, modBits) {\n var i;\n var emBits = modBits - 1;\n var emLen = Math.ceil(emBits / 8);\n\n /* 2. Let mHash = Hash(M), an octet string of length hLen. */\n var mHash = md.digest().getBytes();\n\n /* 3. If emLen < hLen + sLen + 2, output \"encoding error\" and stop. */\n if(emLen < hLen + sLen + 2) {\n throw new Error('Message is too long to encrypt.');\n }\n\n /* 4. Generate a random octet string salt of length sLen; if sLen = 0,\n * then salt is the empty string. */\n var salt;\n if(salt_ === null) {\n salt = prng.getBytesSync(sLen);\n } else {\n salt = salt_.bytes();\n }\n\n /* 5. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; */\n var m_ = new forge.util.ByteBuffer();\n m_.fillWithByte(0, 8);\n m_.putBytes(mHash);\n m_.putBytes(salt);\n\n /* 6. Let H = Hash(M'), an octet string of length hLen. */\n hash.start();\n hash.update(m_.getBytes());\n var h = hash.digest().getBytes();\n\n /* 7. Generate an octet string PS consisting of emLen - sLen - hLen - 2\n * zero octets. The length of PS may be 0. */\n var ps = new forge.util.ByteBuffer();\n ps.fillWithByte(0, emLen - sLen - hLen - 2);\n\n /* 8. Let DB = PS || 0x01 || salt; DB is an octet string of length\n * emLen - hLen - 1. */\n ps.putByte(0x01);\n ps.putBytes(salt);\n var db = ps.getBytes();\n\n /* 9. Let dbMask = MGF(H, emLen - hLen - 1). */\n var maskLen = emLen - hLen - 1;\n var dbMask = mgf.generate(h, maskLen);\n\n /* 10. Let maskedDB = DB \\xor dbMask. */\n var maskedDB = '';\n for(i = 0; i < maskLen; i++) {\n maskedDB += String.fromCharCode(db.charCodeAt(i) ^ dbMask.charCodeAt(i));\n }\n\n /* 11. Set the leftmost 8emLen - emBits bits of the leftmost octet in\n * maskedDB to zero. */\n var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;\n maskedDB = String.fromCharCode(maskedDB.charCodeAt(0) & ~mask) +\n maskedDB.substr(1);\n\n /* 12. Let EM = maskedDB || H || 0xbc.\n * 13. Output EM. */\n return maskedDB + h + String.fromCharCode(0xbc);\n };\n\n /**\n * Verifies a PSS signature.\n *\n * This function implements EMSA-PSS-VERIFY as per RFC 3447, section 9.1.2.\n *\n * @param mHash the message digest hash, as a binary-encoded string, to\n * compare against the signature.\n * @param em the encoded message, as a binary-encoded string\n * (RSA decryption result).\n * @param modsBits the length of the RSA modulus in bits.\n *\n * @return true if the signature was verified, false if not.\n */\n pssobj.verify = function(mHash, em, modBits) {\n var i;\n var emBits = modBits - 1;\n var emLen = Math.ceil(emBits / 8);\n\n /* c. Convert the message representative m to an encoded message EM\n * of length emLen = ceil((modBits - 1) / 8) octets, where modBits\n * is the length in bits of the RSA modulus n */\n em = em.substr(-emLen);\n\n /* 3. If emLen < hLen + sLen + 2, output \"inconsistent\" and stop. */\n if(emLen < hLen + sLen + 2) {\n throw new Error('Inconsistent parameters to PSS signature verification.');\n }\n\n /* 4. If the rightmost octet of EM does not have hexadecimal value\n * 0xbc, output \"inconsistent\" and stop. */\n if(em.charCodeAt(emLen - 1) !== 0xbc) {\n throw new Error('Encoded message does not end in 0xBC.');\n }\n\n /* 5. Let maskedDB be the leftmost emLen - hLen - 1 octets of EM, and\n * let H be the next hLen octets. */\n var maskLen = emLen - hLen - 1;\n var maskedDB = em.substr(0, maskLen);\n var h = em.substr(maskLen, hLen);\n\n /* 6. If the leftmost 8emLen - emBits bits of the leftmost octet in\n * maskedDB are not all equal to zero, output \"inconsistent\" and stop. */\n var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;\n if((maskedDB.charCodeAt(0) & mask) !== 0) {\n throw new Error('Bits beyond keysize not zero as expected.');\n }\n\n /* 7. Let dbMask = MGF(H, emLen - hLen - 1). */\n var dbMask = mgf.generate(h, maskLen);\n\n /* 8. Let DB = maskedDB \\xor dbMask. */\n var db = '';\n for(i = 0; i < maskLen; i++) {\n db += String.fromCharCode(maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i));\n }\n\n /* 9. Set the leftmost 8emLen - emBits bits of the leftmost octet\n * in DB to zero. */\n db = String.fromCharCode(db.charCodeAt(0) & ~mask) + db.substr(1);\n\n /* 10. If the emLen - hLen - sLen - 2 leftmost octets of DB are not zero\n * or if the octet at position emLen - hLen - sLen - 1 (the leftmost\n * position is \"position 1\") does not have hexadecimal value 0x01,\n * output \"inconsistent\" and stop. */\n var checkLen = emLen - hLen - sLen - 2;\n for(i = 0; i < checkLen; i++) {\n if(db.charCodeAt(i) !== 0x00) {\n throw new Error('Leftmost octets not zero as expected');\n }\n }\n\n if(db.charCodeAt(checkLen) !== 0x01) {\n throw new Error('Inconsistent PSS signature, 0x01 marker not found');\n }\n\n /* 11. Let salt be the last sLen octets of DB. */\n var salt = db.substr(-sLen);\n\n /* 12. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt */\n var m_ = new forge.util.ByteBuffer();\n m_.fillWithByte(0, 8);\n m_.putBytes(mHash);\n m_.putBytes(salt);\n\n /* 13. Let H' = Hash(M'), an octet string of length hLen. */\n hash.start();\n hash.update(m_.getBytes());\n var h_ = hash.digest().getBytes();\n\n /* 14. If H = H', output \"consistent.\" Otherwise, output \"inconsistent.\" */\n return h === h_;\n };\n\n return pssobj;\n};\n","/**\n * An API for getting cryptographically-secure random bytes. The bytes are\n * generated using the Fortuna algorithm devised by Bruce Schneier and\n * Niels Ferguson.\n *\n * Getting strong random bytes is not yet easy to do in javascript. The only\n * truish random entropy that can be collected is from the mouse, keyboard, or\n * from timing with respect to page loads, etc. This generator makes a poor\n * attempt at providing random bytes when those sources haven't yet provided\n * enough entropy to initially seed or to reseed the PRNG.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./sha256');\nrequire('./prng');\nrequire('./util');\n\n(function() {\n\n// forge.random already defined\nif(forge.random && forge.random.getBytes) {\n module.exports = forge.random;\n return;\n}\n\n(function(jQuery) {\n\n// the default prng plugin, uses AES-128\nvar prng_aes = {};\nvar _prng_aes_output = new Array(4);\nvar _prng_aes_buffer = forge.util.createBuffer();\nprng_aes.formatKey = function(key) {\n // convert the key into 32-bit integers\n var tmp = forge.util.createBuffer(key);\n key = new Array(4);\n key[0] = tmp.getInt32();\n key[1] = tmp.getInt32();\n key[2] = tmp.getInt32();\n key[3] = tmp.getInt32();\n\n // return the expanded key\n return forge.aes._expandKey(key, false);\n};\nprng_aes.formatSeed = function(seed) {\n // convert seed into 32-bit integers\n var tmp = forge.util.createBuffer(seed);\n seed = new Array(4);\n seed[0] = tmp.getInt32();\n seed[1] = tmp.getInt32();\n seed[2] = tmp.getInt32();\n seed[3] = tmp.getInt32();\n return seed;\n};\nprng_aes.cipher = function(key, seed) {\n forge.aes._updateBlock(key, seed, _prng_aes_output, false);\n _prng_aes_buffer.putInt32(_prng_aes_output[0]);\n _prng_aes_buffer.putInt32(_prng_aes_output[1]);\n _prng_aes_buffer.putInt32(_prng_aes_output[2]);\n _prng_aes_buffer.putInt32(_prng_aes_output[3]);\n return _prng_aes_buffer.getBytes();\n};\nprng_aes.increment = function(seed) {\n // FIXME: do we care about carry or signed issues?\n ++seed[3];\n return seed;\n};\nprng_aes.md = forge.md.sha256;\n\n/**\n * Creates a new PRNG.\n */\nfunction spawnPrng() {\n var ctx = forge.prng.create(prng_aes);\n\n /**\n * Gets random bytes. If a native secure crypto API is unavailable, this\n * method tries to make the bytes more unpredictable by drawing from data that\n * can be collected from the user of the browser, eg: mouse movement.\n *\n * If a callback is given, this method will be called asynchronously.\n *\n * @param count the number of random bytes to get.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytes = function(count, callback) {\n return ctx.generate(count, callback);\n };\n\n /**\n * Gets random bytes asynchronously. If a native secure crypto API is\n * unavailable, this method tries to make the bytes more unpredictable by\n * drawing from data that can be collected from the user of the browser,\n * eg: mouse movement.\n *\n * @param count the number of random bytes to get.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytesSync = function(count) {\n return ctx.generate(count);\n };\n\n return ctx;\n}\n\n// create default prng context\nvar _ctx = spawnPrng();\n\n// add other sources of entropy only if window.crypto.getRandomValues is not\n// available -- otherwise this source will be automatically used by the prng\nvar getRandomValues = null;\nvar globalScope = forge.util.globalScope;\nvar _crypto = globalScope.crypto || globalScope.msCrypto;\nif(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n}\n\nif(forge.options.usePureJavaScript ||\n (!forge.util.isNodejs && !getRandomValues)) {\n // if this is a web worker, do not use weak entropy, instead register to\n // receive strong entropy asynchronously from the main thread\n if(typeof window === 'undefined' || window.document === undefined) {\n // FIXME:\n }\n\n // get load time entropy\n _ctx.collectInt(+new Date(), 32);\n\n // add some entropy from navigator object\n if(typeof(navigator) !== 'undefined') {\n var _navBytes = '';\n for(var key in navigator) {\n try {\n if(typeof(navigator[key]) == 'string') {\n _navBytes += navigator[key];\n }\n } catch(e) {\n /* Some navigator keys might not be accessible, e.g. the geolocation\n attribute throws an exception if touched in Mozilla chrome://\n context.\n\n Silently ignore this and just don't use this as a source of\n entropy. */\n }\n }\n _ctx.collect(_navBytes);\n _navBytes = null;\n }\n\n // add mouse and keyboard collectors if jquery is available\n if(jQuery) {\n // set up mouse entropy capture\n jQuery().mousemove(function(e) {\n // add mouse coords\n _ctx.collectInt(e.clientX, 16);\n _ctx.collectInt(e.clientY, 16);\n });\n\n // set up keyboard entropy capture\n jQuery().keypress(function(e) {\n _ctx.collectInt(e.charCode, 8);\n });\n }\n}\n\n/* Random API */\nif(!forge.random) {\n forge.random = _ctx;\n} else {\n // extend forge.random with _ctx\n for(var key in _ctx) {\n forge.random[key] = _ctx[key];\n }\n}\n\n// expose spawn PRNG\nforge.random.createInstance = spawnPrng;\n\nmodule.exports = forge.random;\n\n})(typeof(jQuery) !== 'undefined' ? jQuery : null);\n\n})();\n","/**\n * RC2 implementation.\n *\n * @author Stefan Siegl\n *\n * Copyright (c) 2012 Stefan Siegl \n *\n * Information on the RC2 cipher is available from RFC #2268,\n * http://www.ietf.org/rfc/rfc2268.txt\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar piTable = [\n 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d,\n 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2,\n 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32,\n 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82,\n 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc,\n 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26,\n 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03,\n 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7,\n 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a,\n 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec,\n 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39,\n 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31,\n 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9,\n 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9,\n 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e,\n 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad\n];\n\nvar s = [1, 2, 3, 5];\n\n/**\n * Rotate a word left by given number of bits.\n *\n * Bits that are shifted out on the left are put back in on the right\n * hand side.\n *\n * @param word The word to shift left.\n * @param bits The number of bits to shift by.\n * @return The rotated word.\n */\nvar rol = function(word, bits) {\n return ((word << bits) & 0xffff) | ((word & 0xffff) >> (16 - bits));\n};\n\n/**\n * Rotate a word right by given number of bits.\n *\n * Bits that are shifted out on the right are put back in on the left\n * hand side.\n *\n * @param word The word to shift right.\n * @param bits The number of bits to shift by.\n * @return The rotated word.\n */\nvar ror = function(word, bits) {\n return ((word & 0xffff) >> bits) | ((word << (16 - bits)) & 0xffff);\n};\n\n/* RC2 API */\nmodule.exports = forge.rc2 = forge.rc2 || {};\n\n/**\n * Perform RC2 key expansion as per RFC #2268, section 2.\n *\n * @param key variable-length user key (between 1 and 128 bytes)\n * @param effKeyBits number of effective key bits (default: 128)\n * @return the expanded RC2 key (ByteBuffer of 128 bytes)\n */\nforge.rc2.expandKey = function(key, effKeyBits) {\n if(typeof key === 'string') {\n key = forge.util.createBuffer(key);\n }\n effKeyBits = effKeyBits || 128;\n\n /* introduce variables that match the names used in RFC #2268 */\n var L = key;\n var T = key.length();\n var T1 = effKeyBits;\n var T8 = Math.ceil(T1 / 8);\n var TM = 0xff >> (T1 & 0x07);\n var i;\n\n for(i = T; i < 128; i++) {\n L.putByte(piTable[(L.at(i - 1) + L.at(i - T)) & 0xff]);\n }\n\n L.setAt(128 - T8, piTable[L.at(128 - T8) & TM]);\n\n for(i = 127 - T8; i >= 0; i--) {\n L.setAt(i, piTable[L.at(i + 1) ^ L.at(i + T8)]);\n }\n\n return L;\n};\n\n/**\n * Creates a RC2 cipher object.\n *\n * @param key the symmetric key to use (as base for key generation).\n * @param bits the number of effective key bits.\n * @param encrypt false for decryption, true for encryption.\n *\n * @return the cipher.\n */\nvar createCipher = function(key, bits, encrypt) {\n var _finish = false, _input = null, _output = null, _iv = null;\n var mixRound, mashRound;\n var i, j, K = [];\n\n /* Expand key and fill into K[] Array */\n key = forge.rc2.expandKey(key, bits);\n for(i = 0; i < 64; i++) {\n K.push(key.getInt16Le());\n }\n\n if(encrypt) {\n /**\n * Perform one mixing round \"in place\".\n *\n * @param R Array of four words to perform mixing on.\n */\n mixRound = function(R) {\n for(i = 0; i < 4; i++) {\n R[i] += K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +\n ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);\n R[i] = rol(R[i], s[i]);\n j++;\n }\n };\n\n /**\n * Perform one mashing round \"in place\".\n *\n * @param R Array of four words to perform mashing on.\n */\n mashRound = function(R) {\n for(i = 0; i < 4; i++) {\n R[i] += K[R[(i + 3) % 4] & 63];\n }\n };\n } else {\n /**\n * Perform one r-mixing round \"in place\".\n *\n * @param R Array of four words to perform mixing on.\n */\n mixRound = function(R) {\n for(i = 3; i >= 0; i--) {\n R[i] = ror(R[i], s[i]);\n R[i] -= K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +\n ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);\n j--;\n }\n };\n\n /**\n * Perform one r-mashing round \"in place\".\n *\n * @param R Array of four words to perform mashing on.\n */\n mashRound = function(R) {\n for(i = 3; i >= 0; i--) {\n R[i] -= K[R[(i + 3) % 4] & 63];\n }\n };\n }\n\n /**\n * Run the specified cipher execution plan.\n *\n * This function takes four words from the input buffer, applies the IV on\n * it (if requested) and runs the provided execution plan.\n *\n * The plan must be put together in form of a array of arrays. Where the\n * outer one is simply a list of steps to perform and the inner one needs\n * to have two elements: the first one telling how many rounds to perform,\n * the second one telling what to do (i.e. the function to call).\n *\n * @param {Array} plan The plan to execute.\n */\n var runPlan = function(plan) {\n var R = [];\n\n /* Get data from input buffer and fill the four words into R */\n for(i = 0; i < 4; i++) {\n var val = _input.getInt16Le();\n\n if(_iv !== null) {\n if(encrypt) {\n /* We're encrypting, apply the IV first. */\n val ^= _iv.getInt16Le();\n } else {\n /* We're decryption, keep cipher text for next block. */\n _iv.putInt16Le(val);\n }\n }\n\n R.push(val & 0xffff);\n }\n\n /* Reset global \"j\" variable as per spec. */\n j = encrypt ? 0 : 63;\n\n /* Run execution plan. */\n for(var ptr = 0; ptr < plan.length; ptr++) {\n for(var ctr = 0; ctr < plan[ptr][0]; ctr++) {\n plan[ptr][1](R);\n }\n }\n\n /* Write back result to output buffer. */\n for(i = 0; i < 4; i++) {\n if(_iv !== null) {\n if(encrypt) {\n /* We're encrypting in CBC-mode, feed back encrypted bytes into\n IV buffer to carry it forward to next block. */\n _iv.putInt16Le(R[i]);\n } else {\n R[i] ^= _iv.getInt16Le();\n }\n }\n\n _output.putInt16Le(R[i]);\n }\n };\n\n /* Create cipher object */\n var cipher = null;\n cipher = {\n /**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * To use the cipher in CBC mode, iv may be given either as a string\n * of bytes, or as a byte buffer. For ECB mode, give null as iv.\n *\n * @param iv the initialization vector to use, null for ECB mode.\n * @param output the output the buffer to write to, null to create one.\n */\n start: function(iv, output) {\n if(iv) {\n /* CBC mode */\n if(typeof iv === 'string') {\n iv = forge.util.createBuffer(iv);\n }\n }\n\n _finish = false;\n _input = forge.util.createBuffer();\n _output = output || new forge.util.createBuffer();\n _iv = iv;\n\n cipher.output = _output;\n },\n\n /**\n * Updates the next block.\n *\n * @param input the buffer to read from.\n */\n update: function(input) {\n if(!_finish) {\n // not finishing, so fill the input buffer with more input\n _input.putBuffer(input);\n }\n\n while(_input.length() >= 8) {\n runPlan([\n [ 5, mixRound ],\n [ 1, mashRound ],\n [ 6, mixRound ],\n [ 1, mashRound ],\n [ 5, mixRound ]\n ]);\n }\n },\n\n /**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use, null for PKCS#7 padding,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\n finish: function(pad) {\n var rval = true;\n\n if(encrypt) {\n if(pad) {\n rval = pad(8, _input, !encrypt);\n } else {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (_input.length() === 8) ? 8 : (8 - _input.length());\n _input.fillWithByte(padding, padding);\n }\n }\n\n if(rval) {\n // do final update\n _finish = true;\n cipher.update();\n }\n\n if(!encrypt) {\n // check for error: input data not a multiple of block size\n rval = (_input.length() === 0);\n if(rval) {\n if(pad) {\n rval = pad(8, _output, !encrypt);\n } else {\n // ensure padding byte count is valid\n var len = _output.length();\n var count = _output.at(len - 1);\n\n if(count > len) {\n rval = false;\n } else {\n // trim off padding bytes\n _output.truncate(count);\n }\n }\n }\n }\n\n return rval;\n }\n };\n\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the\n * given symmetric key. The output will be stored in the 'output' member\n * of the returned cipher.\n *\n * The key and iv may be given as a string of bytes or a byte buffer.\n * The cipher is initialized to use 128 effective key bits.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n *\n * @return the cipher.\n */\nforge.rc2.startEncrypting = function(key, iv, output) {\n var cipher = forge.rc2.createEncryptionCipher(key, 128);\n cipher.start(iv, output);\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the\n * given symmetric key.\n *\n * The key may be given as a string of bytes or a byte buffer.\n *\n * To start encrypting call start() on the cipher with an iv and optional\n * output buffer.\n *\n * @param key the symmetric key to use.\n *\n * @return the cipher.\n */\nforge.rc2.createEncryptionCipher = function(key, bits) {\n return createCipher(key, bits, true);\n};\n\n/**\n * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the\n * given symmetric key. The output will be stored in the 'output' member\n * of the returned cipher.\n *\n * The key and iv may be given as a string of bytes or a byte buffer.\n * The cipher is initialized to use 128 effective key bits.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n *\n * @return the cipher.\n */\nforge.rc2.startDecrypting = function(key, iv, output) {\n var cipher = forge.rc2.createDecryptionCipher(key, 128);\n cipher.start(iv, output);\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the\n * given symmetric key.\n *\n * The key may be given as a string of bytes or a byte buffer.\n *\n * To start decrypting call start() on the cipher with an iv and optional\n * output buffer.\n *\n * @param key the symmetric key to use.\n *\n * @return the cipher.\n */\nforge.rc2.createDecryptionCipher = function(key, bits) {\n return createCipher(key, bits, false);\n};\n","/**\n * Javascript implementation of basic RSA algorithms.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The only algorithm currently supported for PKI is RSA.\n *\n * An RSA key is often stored in ASN.1 DER format. The SubjectPublicKeyInfo\n * ASN.1 structure is composed of an algorithm of type AlgorithmIdentifier\n * and a subjectPublicKey of type bit string.\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of RSA, there aren't any.\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * For an RSA public key, the subjectPublicKey is:\n *\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n *\n * PrivateKeyInfo ::= SEQUENCE {\n * version Version,\n * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,\n * privateKey PrivateKey,\n * attributes [0] IMPLICIT Attributes OPTIONAL\n * }\n *\n * Version ::= INTEGER\n * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier\n * PrivateKey ::= OCTET STRING\n * Attributes ::= SET OF Attribute\n *\n * An RSA private key as the following structure:\n *\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p-1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER -- (inverse of q) mod p\n * }\n *\n * Version ::= INTEGER\n *\n * The OID for the RSA key algorithm is: 1.2.840.113549.1.1.1\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./jsbn');\nrequire('./oids');\nrequire('./pkcs1');\nrequire('./prime');\nrequire('./random');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\nvar _crypto = forge.util.isNodejs ? require('crypto') : null;\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for util API\nvar util = forge.util;\n\n/*\n * RSA encryption and decryption, see RFC 2313.\n */\nforge.pki = forge.pki || {};\nmodule.exports = forge.pki.rsa = forge.rsa = forge.rsa || {};\nvar pki = forge.pki;\n\n// for finding primes, which are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\n\n// validator for a PrivateKeyInfo structure\nvar privateKeyValidator = {\n // PrivateKeyInfo\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'PrivateKeyInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // privateKeyAlgorithm\n name: 'PrivateKeyInfo.privateKeyAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'privateKeyOid'\n }]\n }, {\n // PrivateKey\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'privateKey'\n }]\n};\n\n// validator for an RSA private key\nvar rsaPrivateKeyValidator = {\n // RSAPrivateKey\n name: 'RSAPrivateKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'RSAPrivateKey.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // modulus (n)\n name: 'RSAPrivateKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPrivateKey.publicExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPublicExponent'\n }, {\n // privateExponent (d)\n name: 'RSAPrivateKey.privateExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrivateExponent'\n }, {\n // prime1 (p)\n name: 'RSAPrivateKey.prime1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime1'\n }, {\n // prime2 (q)\n name: 'RSAPrivateKey.prime2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime2'\n }, {\n // exponent1 (d mod (p-1))\n name: 'RSAPrivateKey.exponent1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent1'\n }, {\n // exponent2 (d mod (q-1))\n name: 'RSAPrivateKey.exponent2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent2'\n }, {\n // coefficient ((inverse of q) mod p)\n name: 'RSAPrivateKey.coefficient',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyCoefficient'\n }]\n};\n\n// validator for an RSA public key\nvar rsaPublicKeyValidator = {\n // RSAPublicKey\n name: 'RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // modulus (n)\n name: 'RSAPublicKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPublicKey.exponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyExponent'\n }]\n};\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator = {\n name: 'SubjectPublicKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'subjectPublicKeyInfo',\n value: [{\n name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'publicKeyOid'\n }]\n }, {\n // subjectPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n value: [{\n // RSAPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'rsaPublicKey'\n }]\n }]\n};\n\n// validator for a DigestInfo structure\nvar digestInfoValidator = {\n name: 'DigestInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'DigestInfo.DigestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'DigestInfo.DigestAlgorithm.algorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'algorithmIdentifier'\n }, {\n // NULL paramters\n name: 'DigestInfo.DigestAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.NULL,\n // captured only to check existence for md2 and md5\n capture: 'parameters',\n optional: true,\n constructed: false\n }]\n }, {\n // digest\n name: 'DigestInfo.digest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'digest'\n }]\n};\n\n/**\n * Wrap digest in DigestInfo object.\n *\n * This function implements EMSA-PKCS1-v1_5-ENCODE as per RFC 3447.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * @param md the message digest object with the hash to sign.\n *\n * @return the encoded message (ready for RSA encrytion)\n */\nvar emsaPkcs1v15encode = function(md) {\n // get the oid for the algorithm\n var oid;\n if(md.algorithm in pki.oids) {\n oid = pki.oids[md.algorithm];\n } else {\n var error = new Error('Unknown message digest algorithm.');\n error.algorithm = md.algorithm;\n throw error;\n }\n var oidBytes = asn1.oidToDer(oid).getBytes();\n\n // create the digest info\n var digestInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var digestAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false, oidBytes));\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.NULL, false, ''));\n var digest = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, md.digest().getBytes());\n digestInfo.value.push(digestAlgorithm);\n digestInfo.value.push(digest);\n\n // encode digest info\n return asn1.toDer(digestInfo).getBytes();\n};\n\n/**\n * Performs x^c mod n (RSA encryption or decryption operation).\n *\n * @param x the number to raise and mod.\n * @param key the key to use.\n * @param pub true if the key is public, false if private.\n *\n * @return the result of x^c mod n.\n */\nvar _modPow = function(x, key, pub) {\n if(pub) {\n return x.modPow(key.e, key.n);\n }\n\n if(!key.p || !key.q) {\n // allow calculation without CRT params (slow)\n return x.modPow(key.d, key.n);\n }\n\n // pre-compute dP, dQ, and qInv if necessary\n if(!key.dP) {\n key.dP = key.d.mod(key.p.subtract(BigInteger.ONE));\n }\n if(!key.dQ) {\n key.dQ = key.d.mod(key.q.subtract(BigInteger.ONE));\n }\n if(!key.qInv) {\n key.qInv = key.q.modInverse(key.p);\n }\n\n /* Chinese remainder theorem (CRT) states:\n\n Suppose n1, n2, ..., nk are positive integers which are pairwise\n coprime (n1 and n2 have no common factors other than 1). For any\n integers x1, x2, ..., xk there exists an integer x solving the\n system of simultaneous congruences (where ~= means modularly\n congruent so a ~= b mod n means a mod n = b mod n):\n\n x ~= x1 mod n1\n x ~= x2 mod n2\n ...\n x ~= xk mod nk\n\n This system of congruences has a single simultaneous solution x\n between 0 and n - 1. Furthermore, each xk solution and x itself\n is congruent modulo the product n = n1*n2*...*nk.\n So x1 mod n = x2 mod n = xk mod n = x mod n.\n\n The single simultaneous solution x can be solved with the following\n equation:\n\n x = sum(xi*ri*si) mod n where ri = n/ni and si = ri^-1 mod ni.\n\n Where x is less than n, xi = x mod ni.\n\n For RSA we are only concerned with k = 2. The modulus n = pq, where\n p and q are coprime. The RSA decryption algorithm is:\n\n y = x^d mod n\n\n Given the above:\n\n x1 = x^d mod p\n r1 = n/p = q\n s1 = q^-1 mod p\n x2 = x^d mod q\n r2 = n/q = p\n s2 = p^-1 mod q\n\n So y = (x1r1s1 + x2r2s2) mod n\n = ((x^d mod p)q(q^-1 mod p) + (x^d mod q)p(p^-1 mod q)) mod n\n\n According to Fermat's Little Theorem, if the modulus P is prime,\n for any integer A not evenly divisible by P, A^(P-1) ~= 1 mod P.\n Since A is not divisible by P it follows that if:\n N ~= M mod (P - 1), then A^N mod P = A^M mod P. Therefore:\n\n A^N mod P = A^(M mod (P - 1)) mod P. (The latter takes less effort\n to calculate). In order to calculate x^d mod p more quickly the\n exponent d mod (p - 1) is stored in the RSA private key (the same\n is done for x^d mod q). These values are referred to as dP and dQ\n respectively. Therefore we now have:\n\n y = ((x^dP mod p)q(q^-1 mod p) + (x^dQ mod q)p(p^-1 mod q)) mod n\n\n Since we'll be reducing x^dP by modulo p (same for q) we can also\n reduce x by p (and q respectively) before hand. Therefore, let\n\n xp = ((x mod p)^dP mod p), and\n xq = ((x mod q)^dQ mod q), yielding:\n\n y = (xp*q*(q^-1 mod p) + xq*p*(p^-1 mod q)) mod n\n\n This can be further reduced to a simple algorithm that only\n requires 1 inverse (the q inverse is used) to be used and stored.\n The algorithm is called Garner's algorithm. If qInv is the\n inverse of q, we simply calculate:\n\n y = (qInv*(xp - xq) mod p) * q + xq\n\n However, there are two further complications. First, we need to\n ensure that xp > xq to prevent signed BigIntegers from being used\n so we add p until this is true (since we will be mod'ing with\n p anyway). Then, there is a known timing attack on algorithms\n using the CRT. To mitigate this risk, \"cryptographic blinding\"\n should be used. This requires simply generating a random number r\n between 0 and n-1 and its inverse and multiplying x by r^e before\n calculating y and then multiplying y by r^-1 afterwards. Note that\n r must be coprime with n (gcd(r, n) === 1) in order to have an\n inverse.\n */\n\n // cryptographic blinding\n var r;\n do {\n r = new BigInteger(\n forge.util.bytesToHex(forge.random.getBytes(key.n.bitLength() / 8)),\n 16);\n } while(r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger.ONE));\n x = x.multiply(r.modPow(key.e, key.n)).mod(key.n);\n\n // calculate xp and xq\n var xp = x.mod(key.p).modPow(key.dP, key.p);\n var xq = x.mod(key.q).modPow(key.dQ, key.q);\n\n // xp must be larger than xq to avoid signed bit usage\n while(xp.compareTo(xq) < 0) {\n xp = xp.add(key.p);\n }\n\n // do last step\n var y = xp.subtract(xq)\n .multiply(key.qInv).mod(key.p)\n .multiply(key.q).add(xq);\n\n // remove effect of random for cryptographic blinding\n y = y.multiply(r.modInverse(key.n)).mod(key.n);\n\n return y;\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'sign' on a private key object or\n * 'encrypt' on a public key object instead.\n *\n * Performs RSA encryption.\n *\n * The parameter bt controls whether to put padding bytes before the\n * message passed in. Set bt to either true or false to disable padding\n * completely (in order to handle e.g. EMSA-PSS encoding seperately before),\n * signaling whether the encryption operation is a public key operation\n * (i.e. encrypting data) or not, i.e. private key operation (data signing).\n *\n * For PKCS#1 v1.5 padding pass in the block type to use, i.e. either 0x01\n * (for signing) or 0x02 (for encryption). The key operation mode (private\n * or public) is derived from this flag in that case).\n *\n * @param m the message to encrypt as a byte string.\n * @param key the RSA key to use.\n * @param bt for PKCS#1 v1.5 padding, the block type to use\n * (0x01 for private key, 0x02 for public),\n * to disable padding: true = public key, false = private key.\n *\n * @return the encrypted bytes as a string.\n */\npki.rsa.encrypt = function(m, key, bt) {\n var pub = bt;\n var eb;\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n if(bt !== false && bt !== true) {\n // legacy, default to PKCS#1 v1.5 padding\n pub = (bt === 0x02);\n eb = _encodePkcs1_v1_5(m, key, bt);\n } else {\n eb = forge.util.createBuffer();\n eb.putBytes(m);\n }\n\n // load encryption block as big integer 'x'\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var x = new BigInteger(eb.toHex(), 16);\n\n // do RSA encryption\n var y = _modPow(x, key, pub);\n\n // convert y into the encrypted data byte string, if y is shorter in\n // bytes than k, then prepend zero bytes to fill up ed\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var yhex = y.toString(16);\n var ed = forge.util.createBuffer();\n var zeros = k - Math.ceil(yhex.length / 2);\n while(zeros > 0) {\n ed.putByte(0x00);\n --zeros;\n }\n ed.putBytes(forge.util.hexToBytes(yhex));\n return ed.getBytes();\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'decrypt' on a private key object or\n * 'verify' on a public key object instead.\n *\n * Performs RSA decryption.\n *\n * The parameter ml controls whether to apply PKCS#1 v1.5 padding\n * or not. Set ml = false to disable padding removal completely\n * (in order to handle e.g. EMSA-PSS later on) and simply pass back\n * the RSA encryption block.\n *\n * @param ed the encrypted data to decrypt in as a byte string.\n * @param key the RSA key to use.\n * @param pub true for a public key operation, false for private.\n * @param ml the message length, if known, false to disable padding.\n *\n * @return the decrypted message as a byte string.\n */\npki.rsa.decrypt = function(ed, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n // error if the length of the encrypted data ED is not k\n if(ed.length !== k) {\n var error = new Error('Encrypted message length is invalid.');\n error.length = ed.length;\n error.expected = k;\n throw error;\n }\n\n // convert encrypted data into a big integer\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var y = new BigInteger(forge.util.createBuffer(ed).toHex(), 16);\n\n // y must be less than the modulus or it wasn't the result of\n // a previous mod operation (encryption) using that modulus\n if(y.compareTo(key.n) >= 0) {\n throw new Error('Encrypted message is invalid.');\n }\n\n // do RSA decryption\n var x = _modPow(y, key, pub);\n\n // create the encryption block, if x is shorter in bytes than k, then\n // prepend zero bytes to fill up eb\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var xhex = x.toString(16);\n var eb = forge.util.createBuffer();\n var zeros = k - Math.ceil(xhex.length / 2);\n while(zeros > 0) {\n eb.putByte(0x00);\n --zeros;\n }\n eb.putBytes(forge.util.hexToBytes(xhex));\n\n if(ml !== false) {\n // legacy, default to PKCS#1 v1.5 padding\n return _decodePkcs1_v1_5(eb.getBytes(), key, pub);\n }\n\n // return message\n return eb.getBytes();\n};\n\n/**\n * Creates an RSA key-pair generation state object. It is used to allow\n * key-generation to be performed in steps. It also allows for a UI to\n * display progress updates.\n *\n * @param bits the size for the private key in bits, defaults to 2048.\n * @param e the public exponent to use, defaults to 65537 (0x10001).\n * @param [options] the options to use.\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n * algorithm the algorithm to use (default: 'PRIMEINC').\n *\n * @return the state object to use to generate the key-pair.\n */\npki.rsa.createKeyPairGenerationState = function(bits, e, options) {\n // TODO: migrate step-based prime generation code to forge.prime\n\n // set default bits\n if(typeof(bits) === 'string') {\n bits = parseInt(bits, 10);\n }\n bits = bits || 2048;\n\n // create prng with api that matches BigInteger secure random\n options = options || {};\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n var algorithm = options.algorithm || 'PRIMEINC';\n\n // create PRIMEINC algorithm state\n var rval;\n if(algorithm === 'PRIMEINC') {\n rval = {\n algorithm: algorithm,\n state: 0,\n bits: bits,\n rng: rng,\n eInt: e || 65537,\n e: new BigInteger(null),\n p: null,\n q: null,\n qBits: bits >> 1,\n pBits: bits - (bits >> 1),\n pqState: 0,\n num: null,\n keys: null\n };\n rval.e.fromInt(rval.eInt);\n } else {\n throw new Error('Invalid key generation algorithm: ' + algorithm);\n }\n\n return rval;\n};\n\n/**\n * Attempts to runs the key-generation algorithm for at most n seconds\n * (approximately) using the given state. When key-generation has completed,\n * the keys will be stored in state.keys.\n *\n * To use this function to update a UI while generating a key or to prevent\n * causing browser lockups/warnings, set \"n\" to a value other than 0. A\n * simple pattern for generating a key and showing a progress indicator is:\n *\n * var state = pki.rsa.createKeyPairGenerationState(2048);\n * var step = function() {\n * // step key-generation, run algorithm for 100 ms, repeat\n * if(!forge.pki.rsa.stepKeyPairGenerationState(state, 100)) {\n * setTimeout(step, 1);\n * } else {\n * // key-generation complete\n * // TODO: turn off progress indicator here\n * // TODO: use the generated key-pair in \"state.keys\"\n * }\n * };\n * // TODO: turn on progress indicator here\n * setTimeout(step, 0);\n *\n * @param state the state to use.\n * @param n the maximum number of milliseconds to run the algorithm for, 0\n * to run the algorithm to completion.\n *\n * @return true if the key-generation completed, false if not.\n */\npki.rsa.stepKeyPairGenerationState = function(state, n) {\n // set default algorithm if not set\n if(!('algorithm' in state)) {\n state.algorithm = 'PRIMEINC';\n }\n\n // TODO: migrate step-based prime generation code to forge.prime\n // TODO: abstract as PRIMEINC algorithm\n\n // do key generation (based on Tom Wu's rsa.js, see jsbn.js license)\n // with some minor optimizations and designed to run in steps\n\n // local state vars\n var THIRTY = new BigInteger(null);\n THIRTY.fromInt(30);\n var deltaIdx = 0;\n var op_or = function(x, y) {return x | y;};\n\n // keep stepping until time limit is reached or done\n var t1 = +new Date();\n var t2;\n var total = 0;\n while(state.keys === null && (n <= 0 || total < n)) {\n // generate p or q\n if(state.state === 0) {\n /* Note: All primes are of the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1, where there are 8 values for i\n\n When we generate a random number, we always align it at 30k + 1. Each\n time the number is determined not to be prime we add to get to the\n next 'i', eg: if the number was at 30k + 1 we add 6. */\n var bits = (state.p === null) ? state.pBits : state.qBits;\n var bits1 = bits - 1;\n\n // get a random number\n if(state.pqState === 0) {\n state.num = new BigInteger(bits, state.rng);\n // force MSB set\n if(!state.num.testBit(bits1)) {\n state.num.bitwiseTo(\n BigInteger.ONE.shiftLeft(bits1), op_or, state.num);\n }\n // align number on 30k+1 boundary\n state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0);\n deltaIdx = 0;\n\n ++state.pqState;\n } else if(state.pqState === 1) {\n // try to make the number a prime\n if(state.num.bitLength() > bits) {\n // overflow, try again\n state.pqState = 0;\n // do primality test\n } else if(state.num.isProbablePrime(\n _getMillerRabinTests(state.num.bitLength()))) {\n ++state.pqState;\n } else {\n // get next potential prime\n state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n }\n } else if(state.pqState === 2) {\n // ensure number is coprime with e\n state.pqState =\n (state.num.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) === 0) ? 3 : 0;\n } else if(state.pqState === 3) {\n // store p or q\n state.pqState = 0;\n if(state.p === null) {\n state.p = state.num;\n } else {\n state.q = state.num;\n }\n\n // advance state if both p and q are ready\n if(state.p !== null && state.q !== null) {\n ++state.state;\n }\n state.num = null;\n }\n } else if(state.state === 1) {\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n state.num = state.p;\n state.p = state.q;\n state.q = state.num;\n }\n ++state.state;\n } else if(state.state === 2) {\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n ++state.state;\n } else if(state.state === 3) {\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) === 0) {\n // phi and e are coprime, advance\n ++state.state;\n } else {\n // phi and e aren't coprime, so generate a new p and q\n state.p = null;\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 4) {\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n\n // ensure n is right number of bits\n if(state.n.bitLength() === state.bits) {\n // success, advance\n ++state.state;\n } else {\n // failed, get new q\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 5) {\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n }\n\n // update timing\n t2 = +new Date();\n total += t2 - t1;\n t1 = t2;\n }\n\n return state.keys !== null;\n};\n\n/**\n * Generates an RSA public-private key pair in a single call.\n *\n * To generate a key-pair in steps (to allow for progress updates and to\n * prevent blocking or warnings in slow browsers) then use the key-pair\n * generation state functions.\n *\n * To generate a key-pair asynchronously (either through web-workers, if\n * available, or by breaking up the work on the main thread), pass a\n * callback function.\n *\n * @param [bits] the size for the private key in bits, defaults to 2048.\n * @param [e] the public exponent to use, defaults to 65537.\n * @param [options] options for key-pair generation, if given then 'bits'\n * and 'e' must *not* be given:\n * bits the size for the private key in bits, (default: 2048).\n * e the public exponent to use, (default: 65537 (0x10001)).\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\". Disables use of native APIs.\n * algorithm the algorithm to use (default: 'PRIMEINC').\n * @param [callback(err, keypair)] called once the operation completes.\n *\n * @return an object with privateKey and publicKey properties.\n */\npki.rsa.generateKeyPair = function(bits, e, options, callback) {\n // (bits), (options), (callback)\n if(arguments.length === 1) {\n if(typeof bits === 'object') {\n options = bits;\n bits = undefined;\n } else if(typeof bits === 'function') {\n callback = bits;\n bits = undefined;\n }\n } else if(arguments.length === 2) {\n // (bits, e), (bits, options), (bits, callback), (options, callback)\n if(typeof bits === 'number') {\n if(typeof e === 'function') {\n callback = e;\n e = undefined;\n } else if(typeof e !== 'number') {\n options = e;\n e = undefined;\n }\n } else {\n options = bits;\n callback = e;\n bits = undefined;\n e = undefined;\n }\n } else if(arguments.length === 3) {\n // (bits, e, options), (bits, e, callback), (bits, options, callback)\n if(typeof e === 'number') {\n if(typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n } else {\n callback = options;\n options = e;\n e = undefined;\n }\n }\n options = options || {};\n if(bits === undefined) {\n bits = options.bits || 2048;\n }\n if(e === undefined) {\n e = options.e || 0x10001;\n }\n\n // use native code if permitted, available, and parameters are acceptable\n if(!forge.options.usePureJavaScript && !options.prng &&\n bits >= 256 && bits <= 16384 && (e === 0x10001 || e === 3)) {\n if(callback) {\n // try native async\n if(_detectNodeCrypto('generateKeyPair')) {\n return _crypto.generateKeyPair('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n }, function(err, pub, priv) {\n if(err) {\n return callback(err);\n }\n callback(null, {\n privateKey: pki.privateKeyFromPem(priv),\n publicKey: pki.publicKeyFromPem(pub)\n });\n });\n }\n if(_detectSubtleCrypto('generateKey') &&\n _detectSubtleCrypto('exportKey')) {\n // use standard native generateKey\n return util.globalScope.crypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify'])\n .then(function(pair) {\n return util.globalScope.crypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n // avoiding catch(function(err) {...}) to support IE <= 8\n }).then(undefined, function(err) {\n callback(err);\n }).then(function(pkcs8) {\n if(pkcs8) {\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n }\n });\n }\n if(_detectSubtleMsCrypto('generateKey') &&\n _detectSubtleMsCrypto('exportKey')) {\n var genOp = util.globalScope.msCrypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify']);\n genOp.oncomplete = function(e) {\n var pair = e.target.result;\n var exportOp = util.globalScope.msCrypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n exportOp.oncomplete = function(e) {\n var pkcs8 = e.target.result;\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n };\n exportOp.onerror = function(err) {\n callback(err);\n };\n };\n genOp.onerror = function(err) {\n callback(err);\n };\n return;\n }\n } else {\n // try native sync\n if(_detectNodeCrypto('generateKeyPairSync')) {\n var keypair = _crypto.generateKeyPairSync('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n });\n return {\n privateKey: pki.privateKeyFromPem(keypair.privateKey),\n publicKey: pki.publicKeyFromPem(keypair.publicKey)\n };\n }\n }\n }\n\n // use JavaScript implementation\n var state = pki.rsa.createKeyPairGenerationState(bits, e, options);\n if(!callback) {\n pki.rsa.stepKeyPairGenerationState(state, 0);\n return state.keys;\n }\n _generateKeyPair(state, options, callback);\n};\n\n/**\n * Sets an RSA public key from BigIntegers modulus and exponent.\n *\n * @param n the modulus.\n * @param e the exponent.\n *\n * @return the public key.\n */\npki.setRsaPublicKey = pki.rsa.setPublicKey = function(n, e) {\n var key = {\n n: n,\n e: e\n };\n\n /**\n * Encrypts the given data with this public key. Newer applications\n * should use the 'RSA-OAEP' decryption scheme, 'RSAES-PKCS1-V1_5' is for\n * legacy applications.\n *\n * @param data the byte string to encrypt.\n * @param scheme the encryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA encryption,\n * an object with an 'encode' property set to a function\n * with the signature 'function(data, key)' that returns\n * a binary-encoded string representing the encoded data.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the encrypted byte string.\n */\n key.encrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {\n encode: function(m, key, pub) {\n return _encodePkcs1_v1_5(m, key, 0x02).getBytes();\n }\n };\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n encode: function(m, key) {\n return forge.pkcs1.encode_rsa_oaep(key, m, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {encode: function(e) {return e;}};\n } else if(typeof scheme === 'string') {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // do scheme-based encoding then rsa encryption\n var e = scheme.encode(data, key, true);\n return pki.rsa.encrypt(e, key, true);\n };\n\n /**\n * Verifies the given signature against the given digest.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5, in which case once RSA-decrypted, the\n * signature is an OCTET STRING that holds a DigestInfo.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * To perform PSS signature verification, provide an instance\n * of Forge PSS object as the scheme parameter.\n *\n * @param digest the message digest hash to compare against the signature,\n * as a binary-encoded string.\n * @param signature the signature to verify, as a binary-encoded string.\n * @param scheme signature verification scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be expected, but\n * PKCS#1 v1.5 padding will still be used.\n * @param options optional verify options\n * _parseAllDigestBytes testing flag to control parsing of all\n * digest bytes. Unsupported and not for general usage.\n * (default: true)\n *\n * @return true if the signature was verified, false if not.\n */\n key.verify = function(digest, signature, scheme, options) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSASSA-PKCS1-V1_5';\n }\n if(options === undefined) {\n options = {\n _parseAllDigestBytes: true\n };\n }\n if(!('_parseAllDigestBytes' in options)) {\n options._parseAllDigestBytes = true;\n }\n\n if(scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n // d is ASN.1 BER-encoded DigestInfo\n var obj = asn1.fromDer(d, {\n parseAllBytes: options._parseAllDigestBytes\n });\n\n // validate DigestInfo\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, digestInfoValidator, capture, errors)) {\n var error = new Error(\n 'ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 ' +\n 'DigestInfo value.');\n error.errors = errors;\n throw error;\n }\n // check hash algorithm identifier\n // see PKCS1-v1-5DigestAlgorithms in RFC 8017\n // FIXME: add support to vaidator for strict value choices\n var oid = asn1.derToOid(capture.algorithmIdentifier);\n if(!(oid === forge.oids.md2 ||\n oid === forge.oids.md5 ||\n oid === forge.oids.sha1 ||\n oid === forge.oids.sha224 ||\n oid === forge.oids.sha256 ||\n oid === forge.oids.sha384 ||\n oid === forge.oids.sha512 ||\n oid === forge.oids['sha512-224'] ||\n oid === forge.oids['sha512-256'])) {\n var error = new Error(\n 'Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.');\n error.oid = oid;\n throw error;\n }\n\n // special check for md2 and md5 that NULL parameters exist\n if(oid === forge.oids.md2 || oid === forge.oids.md5) {\n if(!('parameters' in capture)) {\n throw new Error(\n 'ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 ' +\n 'DigestInfo value. ' +\n 'Missing algorithm identifer NULL parameters.');\n }\n }\n\n // compare the given digest to the decrypted one\n return digest === capture.digest;\n }\n };\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n return digest === d;\n }\n };\n }\n\n // do rsa decryption w/o any decoding, then verify -- which does decoding\n var d = pki.rsa.decrypt(signature, key, true, false);\n return scheme.verify(digest, d, key.n.bitLength());\n };\n\n return key;\n};\n\n/**\n * Sets an RSA private key from BigIntegers modulus, exponent, primes,\n * prime exponents, and modular multiplicative inverse.\n *\n * @param n the modulus.\n * @param e the public exponent.\n * @param d the private exponent ((inverse of e) mod n).\n * @param p the first prime.\n * @param q the second prime.\n * @param dP exponent1 (d mod (p-1)).\n * @param dQ exponent2 (d mod (q-1)).\n * @param qInv ((inverse of q) mod p)\n *\n * @return the private key.\n */\npki.setRsaPrivateKey = pki.rsa.setPrivateKey = function(\n n, e, d, p, q, dP, dQ, qInv) {\n var key = {\n n: n,\n e: e,\n d: d,\n p: p,\n q: q,\n dP: dP,\n dQ: dQ,\n qInv: qInv\n };\n\n /**\n * Decrypts the given data with this private key. The decryption scheme\n * must match the one used to encrypt the data.\n *\n * @param data the byte string to decrypt.\n * @param scheme the decryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA decryption.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the decrypted byte string.\n */\n key.decrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n // do rsa decryption w/o any decoding\n var d = pki.rsa.decrypt(data, key, false, false);\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {decode: _decodePkcs1_v1_5};\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n decode: function(d, key) {\n return forge.pkcs1.decode_rsa_oaep(key, d, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {decode: function(d) {return d;}};\n } else {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // decode according to scheme\n return scheme.decode(d, key, false);\n };\n\n /**\n * Signs the given digest, producing a signature.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5. In order to generate a PSS signature, provide\n * an instance of Forge PSS object as the scheme parameter.\n *\n * @param md the message digest object with the hash to sign.\n * @param scheme the signature scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be used but\n * PKCS#1 v1.5 padding will still be used.\n *\n * @return the signature as a byte string.\n */\n key.sign = function(md, scheme) {\n /* Note: The internal implementation of RSA operations is being\n transitioned away from a PKCS#1 v1.5 hard-coded scheme. Some legacy\n code like the use of an encoding block identifier 'bt' will eventually\n be removed. */\n\n // private key operation\n var bt = false;\n\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n }\n\n if(scheme === undefined || scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {encode: emsaPkcs1v15encode};\n bt = 0x01;\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {encode: function() {return md;}};\n bt = 0x01;\n }\n\n // encode and then encrypt\n var d = scheme.encode(md, key.n.bitLength());\n return pki.rsa.encrypt(d, key, bt);\n };\n\n return key;\n};\n\n/**\n * Wraps an RSAPrivateKey ASN.1 object in an ASN.1 PrivateKeyInfo object.\n *\n * @param rsaKey the ASN.1 RSAPrivateKey.\n *\n * @return the ASN.1 PrivateKeyInfo.\n */\npki.wrapRsaPrivateKey = function(rsaKey) {\n // PrivateKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // privateKeyAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // PrivateKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(rsaKey).getBytes())\n ]);\n};\n\n/**\n * Converts a private key from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a PrivateKeyInfo containing an\n * RSAPrivateKey or an RSAPrivateKey.\n *\n * @return the private key.\n */\npki.privateKeyFromAsn1 = function(obj) {\n // get PrivateKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, privateKeyValidator, capture, errors)) {\n obj = asn1.fromDer(forge.util.createBuffer(capture.privateKey));\n }\n\n // get RSAPrivateKey\n capture = {};\n errors = [];\n if(!asn1.validate(obj, rsaPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read private key. ' +\n 'ASN.1 object does not contain an RSAPrivateKey.');\n error.errors = errors;\n throw error;\n }\n\n // Note: Version is currently ignored.\n // capture.privateKeyVersion\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n, e, d, p, q, dP, dQ, qInv;\n n = forge.util.createBuffer(capture.privateKeyModulus).toHex();\n e = forge.util.createBuffer(capture.privateKeyPublicExponent).toHex();\n d = forge.util.createBuffer(capture.privateKeyPrivateExponent).toHex();\n p = forge.util.createBuffer(capture.privateKeyPrime1).toHex();\n q = forge.util.createBuffer(capture.privateKeyPrime2).toHex();\n dP = forge.util.createBuffer(capture.privateKeyExponent1).toHex();\n dQ = forge.util.createBuffer(capture.privateKeyExponent2).toHex();\n qInv = forge.util.createBuffer(capture.privateKeyCoefficient).toHex();\n\n // set private key\n return pki.setRsaPrivateKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16),\n new BigInteger(d, 16),\n new BigInteger(p, 16),\n new BigInteger(q, 16),\n new BigInteger(dP, 16),\n new BigInteger(dQ, 16),\n new BigInteger(qInv, 16));\n};\n\n/**\n * Converts a private key to an ASN.1 RSAPrivateKey.\n *\n * @param key the private key.\n *\n * @return the ASN.1 representation of an RSAPrivateKey.\n */\npki.privateKeyToAsn1 = pki.privateKeyToRSAPrivateKey = function(key) {\n // RSAPrivateKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0 = only 2 primes, 1 multiple primes)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e)),\n // privateExponent (d)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.d)),\n // privateKeyPrime1 (p)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.p)),\n // privateKeyPrime2 (q)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.q)),\n // privateKeyExponent1 (dP)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dP)),\n // privateKeyExponent2 (dQ)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dQ)),\n // coefficient (qInv)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.qInv))\n ]);\n};\n\n/**\n * Converts a public key from an ASN.1 SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @param obj the asn1 representation of a SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @return the public key.\n */\npki.publicKeyFromAsn1 = function(obj) {\n // get SubjectPublicKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, publicKeyValidator, capture, errors)) {\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n var error = new Error('Cannot read public key. Unknown OID.');\n error.oid = oid;\n throw error;\n }\n obj = capture.rsaPublicKey;\n }\n\n // get RSA params\n errors = [];\n if(!asn1.validate(obj, rsaPublicKeyValidator, capture, errors)) {\n var error = new Error('Cannot read public key. ' +\n 'ASN.1 object does not contain an RSAPublicKey.');\n error.errors = errors;\n throw error;\n }\n\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n = forge.util.createBuffer(capture.publicKeyModulus).toHex();\n var e = forge.util.createBuffer(capture.publicKeyExponent).toHex();\n\n // set public key\n return pki.setRsaPublicKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16));\n};\n\n/**\n * Converts a public key to an ASN.1 SubjectPublicKeyInfo.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a SubjectPublicKeyInfo.\n */\npki.publicKeyToAsn1 = pki.publicKeyToSubjectPublicKeyInfo = function(key) {\n // SubjectPublicKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // subjectPublicKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [\n pki.publicKeyToRSAPublicKey(key)\n ])\n ]);\n};\n\n/**\n * Converts a public key to an ASN.1 RSAPublicKey.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a RSAPublicKey.\n */\npki.publicKeyToRSAPublicKey = function(key) {\n // RSAPublicKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e))\n ]);\n};\n\n/**\n * Encodes a message using PKCS#1 v1.5 padding.\n *\n * @param m the message to encode.\n * @param key the RSA key to use.\n * @param bt the block type to use, i.e. either 0x01 (for signing) or 0x02\n * (for encryption).\n *\n * @return the padded byte buffer.\n */\nfunction _encodePkcs1_v1_5(m, key, bt) {\n var eb = forge.util.createBuffer();\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* use PKCS#1 v1.5 padding */\n if(m.length > (k - 11)) {\n var error = new Error('Message is too long for PKCS#1 v1.5 padding.');\n error.length = m.length;\n error.max = k - 11;\n throw error;\n }\n\n /* A block type BT, a padding string PS, and the data D shall be\n formatted into an octet string EB, the encryption block:\n\n EB = 00 || BT || PS || 00 || D\n\n The block type BT shall be a single octet indicating the structure of\n the encryption block. For this version of the document it shall have\n value 00, 01, or 02. For a private-key operation, the block type\n shall be 00 or 01. For a public-key operation, it shall be 02.\n\n The padding string PS shall consist of k-3-||D|| octets. For block\n type 00, the octets shall have value 00; for block type 01, they\n shall have value FF; and for block type 02, they shall be\n pseudorandomly generated and nonzero. This makes the length of the\n encryption block EB equal to k. */\n\n // build the encryption block\n eb.putByte(0x00);\n eb.putByte(bt);\n\n // create the padding\n var padNum = k - 3 - m.length;\n var padByte;\n // private key op\n if(bt === 0x00 || bt === 0x01) {\n padByte = (bt === 0x00) ? 0x00 : 0xFF;\n for(var i = 0; i < padNum; ++i) {\n eb.putByte(padByte);\n }\n } else {\n // public key op\n // pad with random non-zero values\n while(padNum > 0) {\n var numZeros = 0;\n var padBytes = forge.random.getBytes(padNum);\n for(var i = 0; i < padNum; ++i) {\n padByte = padBytes.charCodeAt(i);\n if(padByte === 0) {\n ++numZeros;\n } else {\n eb.putByte(padByte);\n }\n }\n padNum = numZeros;\n }\n }\n\n // zero followed by message\n eb.putByte(0x00);\n eb.putBytes(m);\n\n return eb;\n}\n\n/**\n * Decodes a message using PKCS#1 v1.5 padding.\n *\n * @param em the message to decode.\n * @param key the RSA key to use.\n * @param pub true if the key is a public key, false if it is private.\n * @param ml the message length, if specified.\n *\n * @return the decoded bytes.\n */\nfunction _decodePkcs1_v1_5(em, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* It is an error if any of the following conditions occurs:\n\n 1. The encryption block EB cannot be parsed unambiguously.\n 2. The padding string PS consists of fewer than eight octets\n or is inconsisent with the block type BT.\n 3. The decryption process is a public-key operation and the block\n type BT is not 00 or 01, or the decryption process is a\n private-key operation and the block type is not 02.\n */\n\n // parse the encryption block\n var eb = forge.util.createBuffer(em);\n var first = eb.getByte();\n var bt = eb.getByte();\n if(first !== 0x00 ||\n (pub && bt !== 0x00 && bt !== 0x01) ||\n (!pub && bt != 0x02) ||\n (pub && bt === 0x00 && typeof(ml) === 'undefined')) {\n throw new Error('Encryption block is invalid.');\n }\n\n var padNum = 0;\n if(bt === 0x00) {\n // check all padding bytes for 0x00\n padNum = k - 3 - ml;\n for(var i = 0; i < padNum; ++i) {\n if(eb.getByte() !== 0x00) {\n throw new Error('Encryption block is invalid.');\n }\n }\n } else if(bt === 0x01) {\n // find the first byte that isn't 0xFF, should be after all padding\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() !== 0xFF) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n } else if(bt === 0x02) {\n // look for 0x00 byte\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() === 0x00) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n }\n\n // zero must be 0x00 and padNum must be (k - 3 - message length)\n var zero = eb.getByte();\n if(zero !== 0x00 || padNum !== (k - 3 - eb.length())) {\n throw new Error('Encryption block is invalid.');\n }\n\n return eb.getBytes();\n}\n\n/**\n * Runs the key-generation algorithm asynchronously, either in the background\n * via Web Workers, or using the main thread and setImmediate.\n *\n * @param state the key-pair generation state.\n * @param [options] options for key-pair generation:\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2, -1 to use estimated cores minus one).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * @param callback(err, keypair) called once the operation completes.\n */\nfunction _generateKeyPair(state, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n var opts = {\n algorithm: {\n name: options.algorithm || 'PRIMEINC',\n options: {\n workers: options.workers || 2,\n workLoad: options.workLoad || 100,\n workerScript: options.workerScript\n }\n }\n };\n if('prng' in options) {\n opts.prng = options.prng;\n }\n\n generate();\n\n function generate() {\n // find p and then q (done in series to simplify)\n getPrime(state.pBits, function(err, num) {\n if(err) {\n return callback(err);\n }\n state.p = num;\n if(state.q !== null) {\n return finish(err, state.q);\n }\n getPrime(state.qBits, finish);\n });\n }\n\n function getPrime(bits, callback) {\n forge.prime.generateProbablePrime(bits, opts, callback);\n }\n\n function finish(err, num) {\n if(err) {\n return callback(err);\n }\n\n // set q\n state.q = num;\n\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n var tmp = state.p;\n state.p = state.q;\n state.q = tmp;\n }\n\n // ensure p is coprime with e\n if(state.p.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.p = null;\n generate();\n return;\n }\n\n // ensure q is coprime with e\n if(state.q.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) !== 0) {\n // phi and e aren't coprime, so generate a new p and q\n state.p = state.q = null;\n generate();\n return;\n }\n\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n if(state.n.bitLength() !== state.bits) {\n // failed, get new q\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n\n callback(null, state.keys);\n }\n}\n\n/**\n * Converts a positive BigInteger into 2's-complement big-endian bytes.\n *\n * @param b the big integer to convert.\n *\n * @return the bytes.\n */\nfunction _bnToBytes(b) {\n // prepend 0x00 if first byte >= 0x80\n var hex = b.toString(16);\n if(hex[0] >= '8') {\n hex = '00' + hex;\n }\n var bytes = forge.util.hexToBytes(hex);\n\n // ensure integer is minimally-encoded\n if(bytes.length > 1 &&\n // leading 0x00 for positive integer\n ((bytes.charCodeAt(0) === 0 &&\n (bytes.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (bytes.charCodeAt(0) === 0xFF &&\n (bytes.charCodeAt(1) & 0x80) === 0x80))) {\n return bytes.substr(1);\n }\n return bytes;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction _getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n/**\n * Performs feature detection on the Node crypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectNodeCrypto(fn) {\n return forge.util.isNodejs && typeof _crypto[fn] === 'function';\n}\n\n/**\n * Performs feature detection on the SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.crypto === 'object' &&\n typeof util.globalScope.crypto.subtle === 'object' &&\n typeof util.globalScope.crypto.subtle[fn] === 'function');\n}\n\n/**\n * Performs feature detection on the deprecated Microsoft Internet Explorer\n * outdated SubtleCrypto interface. This function should only be used after\n * checking for the modern, standard SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleMsCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.msCrypto === 'object' &&\n typeof util.globalScope.msCrypto.subtle === 'object' &&\n typeof util.globalScope.msCrypto.subtle[fn] === 'function');\n}\n\nfunction _intToUint8Array(x) {\n var bytes = forge.util.hexToBytes(x.toString(16));\n var buffer = new Uint8Array(bytes.length);\n for(var i = 0; i < bytes.length; ++i) {\n buffer[i] = bytes.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction _privateKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error(\n 'Unsupported key algorithm \"' + jwk.kty + '\"; algorithm must be \"RSA\".');\n }\n return pki.setRsaPrivateKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e),\n _base64ToBigInt(jwk.d),\n _base64ToBigInt(jwk.p),\n _base64ToBigInt(jwk.q),\n _base64ToBigInt(jwk.dp),\n _base64ToBigInt(jwk.dq),\n _base64ToBigInt(jwk.qi));\n}\n\nfunction _publicKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error('Key algorithm must be \"RSA\".');\n }\n return pki.setRsaPublicKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e));\n}\n\nfunction _base64ToBigInt(b64) {\n return new BigInteger(forge.util.bytesToHex(forge.util.decode64(b64)), 16);\n}\n","/**\n * Secure Hash Algorithm with 160-bit digest (SHA-1) implementation.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha1 = module.exports = forge.sha1 = forge.sha1 || {};\nforge.md.sha1 = forge.md.algorithms.sha1 = sha1;\n\n/**\n * Creates a SHA-1 message digest object.\n *\n * @return a message digest object.\n */\nsha1.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // SHA-1 state contains five 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(80);\n\n // message digest object\n var md = {\n algorithm: 'sha1',\n blockLength: 64,\n digestLength: 20,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x67452301,\n h1: 0xEFCDAB89,\n h2: 0x98BADCFE,\n h3: 0x10325476,\n h4: 0xC3D2E1F0\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-1 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3,\n h4: _state.h4\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32(s2.h0);\n rval.putInt32(s2.h1);\n rval.putInt32(s2.h2);\n rval.putInt32(s2.h3);\n rval.putInt32(s2.h4);\n return rval;\n };\n\n return md;\n};\n\n// sha-1 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-1 state with the given byte buffer.\n *\n * @param s the SHA-1 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t, a, b, c, d, e, f, i;\n var len = bytes.length();\n while(len >= 64) {\n // the w array will be populated with sixteen 32-bit big-endian words\n // and then extended into 80 32-bit words according to SHA-1 algorithm\n // and for 32-79 using Max Locktyukhin's optimization\n\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n e = s.h4;\n\n // round 1\n for(i = 0; i < 16; ++i) {\n t = bytes.getInt32();\n w[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for(; i < 20; ++i) {\n t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);\n t = (t << 1) | (t >>> 31);\n w[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 2\n for(; i < 32; ++i) {\n t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);\n t = (t << 1) | (t >>> 31);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for(; i < 40; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 3\n for(; i < 60; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = (b & c) | (d & (b ^ c));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x8F1BBCDC + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 4\n for(; i < 80; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0xCA62C1D6 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n s.h4 = (s.h4 + e) | 0;\n\n len -= 64;\n }\n}\n","/**\n * Secure Hash Algorithm with 256-bit digest (SHA-256) implementation.\n *\n * See FIPS 180-2 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha256 = module.exports = forge.sha256 = forge.sha256 || {};\nforge.md.sha256 = forge.md.algorithms.sha256 = sha256;\n\n/**\n * Creates a SHA-256 message digest object.\n *\n * @return a message digest object.\n */\nsha256.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // SHA-256 state contains eight 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(64);\n\n // message digest object\n var md = {\n algorithm: 'sha256',\n blockLength: 64,\n digestLength: 32,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x6A09E667,\n h1: 0xBB67AE85,\n h2: 0x3C6EF372,\n h3: 0xA54FF53A,\n h4: 0x510E527F,\n h5: 0x9B05688C,\n h6: 0x1F83D9AB,\n h7: 0x5BE0CD19\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-256 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3,\n h4: _state.h4,\n h5: _state.h5,\n h6: _state.h6,\n h7: _state.h7\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32(s2.h0);\n rval.putInt32(s2.h1);\n rval.putInt32(s2.h2);\n rval.putInt32(s2.h3);\n rval.putInt32(s2.h4);\n rval.putInt32(s2.h5);\n rval.putInt32(s2.h6);\n rval.putInt32(s2.h7);\n return rval;\n };\n\n return md;\n};\n\n// sha-256 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // create K table for SHA-256\n _k = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-256 state with the given byte buffer.\n *\n * @param s the SHA-256 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t1, t2, s0, s1, ch, maj, i, a, b, c, d, e, f, g, h;\n var len = bytes.length();\n while(len >= 64) {\n // the w array will be populated with sixteen 32-bit big-endian words\n // and then extended into 64 32-bit words according to SHA-256\n for(i = 0; i < 16; ++i) {\n w[i] = bytes.getInt32();\n }\n for(; i < 64; ++i) {\n // XOR word 2 words ago rot right 17, rot right 19, shft right 10\n t1 = w[i - 2];\n t1 =\n ((t1 >>> 17) | (t1 << 15)) ^\n ((t1 >>> 19) | (t1 << 13)) ^\n (t1 >>> 10);\n // XOR word 15 words ago rot right 7, rot right 18, shft right 3\n t2 = w[i - 15];\n t2 =\n ((t2 >>> 7) | (t2 << 25)) ^\n ((t2 >>> 18) | (t2 << 14)) ^\n (t2 >>> 3);\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^32\n w[i] = (t1 + w[i - 7] + t2 + w[i - 16]) | 0;\n }\n\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n e = s.h4;\n f = s.h5;\n g = s.h6;\n h = s.h7;\n\n // round function\n for(i = 0; i < 64; ++i) {\n // Sum1(e)\n s1 =\n ((e >>> 6) | (e << 26)) ^\n ((e >>> 11) | (e << 21)) ^\n ((e >>> 25) | (e << 7));\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch = g ^ (e & (f ^ g));\n // Sum0(a)\n s0 =\n ((a >>> 2) | (a << 30)) ^\n ((a >>> 13) | (a << 19)) ^\n ((a >>> 22) | (a << 10));\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj = (a & b) | (c & (a ^ b));\n\n // main algorithm\n t1 = h + s1 + ch + _k[i] + w[i];\n t2 = s0 + maj;\n h = g;\n g = f;\n f = e;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n // can't truncate with `| 0`\n e = (d + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n // can't truncate with `| 0`\n a = (t1 + t2) >>> 0;\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n s.h4 = (s.h4 + e) | 0;\n s.h5 = (s.h5 + f) | 0;\n s.h6 = (s.h6 + g) | 0;\n s.h7 = (s.h7 + h) | 0;\n len -= 64;\n }\n}\n","/**\n * Secure Hash Algorithm with a 1024-bit block size implementation.\n *\n * This includes: SHA-512, SHA-384, SHA-512/224, and SHA-512/256. For\n * SHA-256 (block size 512 bits), see sha256.js.\n *\n * See FIPS 180-4 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha512 = module.exports = forge.sha512 = forge.sha512 || {};\n\n// SHA-512\nforge.md.sha512 = forge.md.algorithms.sha512 = sha512;\n\n// SHA-384\nvar sha384 = forge.sha384 = forge.sha512.sha384 = forge.sha512.sha384 || {};\nsha384.create = function() {\n return sha512.create('SHA-384');\n};\nforge.md.sha384 = forge.md.algorithms.sha384 = sha384;\n\n// SHA-512/256\nforge.sha512.sha256 = forge.sha512.sha256 || {\n create: function() {\n return sha512.create('SHA-512/256');\n }\n};\nforge.md['sha512/256'] = forge.md.algorithms['sha512/256'] =\n forge.sha512.sha256;\n\n// SHA-512/224\nforge.sha512.sha224 = forge.sha512.sha224 || {\n create: function() {\n return sha512.create('SHA-512/224');\n }\n};\nforge.md['sha512/224'] = forge.md.algorithms['sha512/224'] =\n forge.sha512.sha224;\n\n/**\n * Creates a SHA-2 message digest object.\n *\n * @param algorithm the algorithm to use (SHA-512, SHA-384, SHA-512/224,\n * SHA-512/256).\n *\n * @return a message digest object.\n */\nsha512.create = function(algorithm) {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n if(typeof algorithm === 'undefined') {\n algorithm = 'SHA-512';\n }\n\n if(!(algorithm in _states)) {\n throw new Error('Invalid SHA-512 algorithm: ' + algorithm);\n }\n\n // SHA-512 state contains eight 64-bit integers (each as two 32-bit ints)\n var _state = _states[algorithm];\n var _h = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for 64-bit word storage\n var _w = new Array(80);\n for(var wi = 0; wi < 80; ++wi) {\n _w[wi] = new Array(2);\n }\n\n // determine digest length by algorithm name (default)\n var digestLength = 64;\n switch(algorithm) {\n case 'SHA-384':\n digestLength = 48;\n break;\n case 'SHA-512/256':\n digestLength = 32;\n break;\n case 'SHA-512/224':\n digestLength = 28;\n break;\n }\n\n // message digest object\n var md = {\n // SHA-512 => sha512\n algorithm: algorithm.replace('-', '').toLowerCase(),\n blockLength: 128,\n digestLength: digestLength,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 16\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength128 for backwards-compatibility)\n md.fullMessageLength = md.messageLength128 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _h = new Array(_state.length);\n for(var i = 0; i < _state.length; ++i) {\n _h[i] = _state[i].slice(0);\n }\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_h, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-512 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 896 mod 1024. In other words,\n the data to be digested must be a multiple of 1024 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 16 bytes (128\n bits), that means that the last segment of the data must have 112 bytes\n (896 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 896 mod 1024 because\n 1024 - 128 = 896.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 896 mod 1024, then 1024 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var h = new Array(_h.length);\n for(var i = 0; i < _h.length; ++i) {\n h[i] = _h[i].slice(0);\n }\n _update(h, _w, finalBlock);\n var rval = forge.util.createBuffer();\n var hlen;\n if(algorithm === 'SHA-512') {\n hlen = h.length;\n } else if(algorithm === 'SHA-384') {\n hlen = h.length - 2;\n } else {\n hlen = h.length - 4;\n }\n for(var i = 0; i < hlen; ++i) {\n rval.putInt32(h[i][0]);\n if(i !== hlen - 1 || algorithm !== 'SHA-512/224') {\n rval.putInt32(h[i][1]);\n }\n }\n return rval;\n };\n\n return md;\n};\n\n// sha-512 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n// initial hash states\nvar _states = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 128);\n\n // create K table for SHA-512\n _k = [\n [0x428a2f98, 0xd728ae22], [0x71374491, 0x23ef65cd],\n [0xb5c0fbcf, 0xec4d3b2f], [0xe9b5dba5, 0x8189dbbc],\n [0x3956c25b, 0xf348b538], [0x59f111f1, 0xb605d019],\n [0x923f82a4, 0xaf194f9b], [0xab1c5ed5, 0xda6d8118],\n [0xd807aa98, 0xa3030242], [0x12835b01, 0x45706fbe],\n [0x243185be, 0x4ee4b28c], [0x550c7dc3, 0xd5ffb4e2],\n [0x72be5d74, 0xf27b896f], [0x80deb1fe, 0x3b1696b1],\n [0x9bdc06a7, 0x25c71235], [0xc19bf174, 0xcf692694],\n [0xe49b69c1, 0x9ef14ad2], [0xefbe4786, 0x384f25e3],\n [0x0fc19dc6, 0x8b8cd5b5], [0x240ca1cc, 0x77ac9c65],\n [0x2de92c6f, 0x592b0275], [0x4a7484aa, 0x6ea6e483],\n [0x5cb0a9dc, 0xbd41fbd4], [0x76f988da, 0x831153b5],\n [0x983e5152, 0xee66dfab], [0xa831c66d, 0x2db43210],\n [0xb00327c8, 0x98fb213f], [0xbf597fc7, 0xbeef0ee4],\n [0xc6e00bf3, 0x3da88fc2], [0xd5a79147, 0x930aa725],\n [0x06ca6351, 0xe003826f], [0x14292967, 0x0a0e6e70],\n [0x27b70a85, 0x46d22ffc], [0x2e1b2138, 0x5c26c926],\n [0x4d2c6dfc, 0x5ac42aed], [0x53380d13, 0x9d95b3df],\n [0x650a7354, 0x8baf63de], [0x766a0abb, 0x3c77b2a8],\n [0x81c2c92e, 0x47edaee6], [0x92722c85, 0x1482353b],\n [0xa2bfe8a1, 0x4cf10364], [0xa81a664b, 0xbc423001],\n [0xc24b8b70, 0xd0f89791], [0xc76c51a3, 0x0654be30],\n [0xd192e819, 0xd6ef5218], [0xd6990624, 0x5565a910],\n [0xf40e3585, 0x5771202a], [0x106aa070, 0x32bbd1b8],\n [0x19a4c116, 0xb8d2d0c8], [0x1e376c08, 0x5141ab53],\n [0x2748774c, 0xdf8eeb99], [0x34b0bcb5, 0xe19b48a8],\n [0x391c0cb3, 0xc5c95a63], [0x4ed8aa4a, 0xe3418acb],\n [0x5b9cca4f, 0x7763e373], [0x682e6ff3, 0xd6b2b8a3],\n [0x748f82ee, 0x5defb2fc], [0x78a5636f, 0x43172f60],\n [0x84c87814, 0xa1f0ab72], [0x8cc70208, 0x1a6439ec],\n [0x90befffa, 0x23631e28], [0xa4506ceb, 0xde82bde9],\n [0xbef9a3f7, 0xb2c67915], [0xc67178f2, 0xe372532b],\n [0xca273ece, 0xea26619c], [0xd186b8c7, 0x21c0c207],\n [0xeada7dd6, 0xcde0eb1e], [0xf57d4f7f, 0xee6ed178],\n [0x06f067aa, 0x72176fba], [0x0a637dc5, 0xa2c898a6],\n [0x113f9804, 0xbef90dae], [0x1b710b35, 0x131c471b],\n [0x28db77f5, 0x23047d84], [0x32caab7b, 0x40c72493],\n [0x3c9ebe0a, 0x15c9bebc], [0x431d67c4, 0x9c100d4c],\n [0x4cc5d4be, 0xcb3e42b6], [0x597f299c, 0xfc657e2a],\n [0x5fcb6fab, 0x3ad6faec], [0x6c44198c, 0x4a475817]\n ];\n\n // initial hash states\n _states = {};\n _states['SHA-512'] = [\n [0x6a09e667, 0xf3bcc908],\n [0xbb67ae85, 0x84caa73b],\n [0x3c6ef372, 0xfe94f82b],\n [0xa54ff53a, 0x5f1d36f1],\n [0x510e527f, 0xade682d1],\n [0x9b05688c, 0x2b3e6c1f],\n [0x1f83d9ab, 0xfb41bd6b],\n [0x5be0cd19, 0x137e2179]\n ];\n _states['SHA-384'] = [\n [0xcbbb9d5d, 0xc1059ed8],\n [0x629a292a, 0x367cd507],\n [0x9159015a, 0x3070dd17],\n [0x152fecd8, 0xf70e5939],\n [0x67332667, 0xffc00b31],\n [0x8eb44a87, 0x68581511],\n [0xdb0c2e0d, 0x64f98fa7],\n [0x47b5481d, 0xbefa4fa4]\n ];\n _states['SHA-512/256'] = [\n [0x22312194, 0xFC2BF72C],\n [0x9F555FA3, 0xC84C64C2],\n [0x2393B86B, 0x6F53B151],\n [0x96387719, 0x5940EABD],\n [0x96283EE2, 0xA88EFFE3],\n [0xBE5E1E25, 0x53863992],\n [0x2B0199FC, 0x2C85B8AA],\n [0x0EB72DDC, 0x81C52CA2]\n ];\n _states['SHA-512/224'] = [\n [0x8C3D37C8, 0x19544DA2],\n [0x73E19966, 0x89DCD4D6],\n [0x1DFAB7AE, 0x32FF9C82],\n [0x679DD514, 0x582F9FCF],\n [0x0F6D2B69, 0x7BD44DA8],\n [0x77E36F73, 0x04C48942],\n [0x3F9D85A8, 0x6A1D36C8],\n [0x1112E6AD, 0x91D692A1]\n ];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-512 state with the given byte buffer.\n *\n * @param s the SHA-512 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (128 byte) chunks\n var t1_hi, t1_lo;\n var t2_hi, t2_lo;\n var s0_hi, s0_lo;\n var s1_hi, s1_lo;\n var ch_hi, ch_lo;\n var maj_hi, maj_lo;\n var a_hi, a_lo;\n var b_hi, b_lo;\n var c_hi, c_lo;\n var d_hi, d_lo;\n var e_hi, e_lo;\n var f_hi, f_lo;\n var g_hi, g_lo;\n var h_hi, h_lo;\n var i, hi, lo, w2, w7, w15, w16;\n var len = bytes.length();\n while(len >= 128) {\n // the w array will be populated with sixteen 64-bit big-endian words\n // and then extended into 64 64-bit words according to SHA-512\n for(i = 0; i < 16; ++i) {\n w[i][0] = bytes.getInt32() >>> 0;\n w[i][1] = bytes.getInt32() >>> 0;\n }\n for(; i < 80; ++i) {\n // for word 2 words ago: ROTR 19(x) ^ ROTR 61(x) ^ SHR 6(x)\n w2 = w[i - 2];\n hi = w2[0];\n lo = w2[1];\n\n // high bits\n t1_hi = (\n ((hi >>> 19) | (lo << 13)) ^ // ROTR 19\n ((lo >>> 29) | (hi << 3)) ^ // ROTR 61/(swap + ROTR 29)\n (hi >>> 6)) >>> 0; // SHR 6\n // low bits\n t1_lo = (\n ((hi << 13) | (lo >>> 19)) ^ // ROTR 19\n ((lo << 3) | (hi >>> 29)) ^ // ROTR 61/(swap + ROTR 29)\n ((hi << 26) | (lo >>> 6))) >>> 0; // SHR 6\n\n // for word 15 words ago: ROTR 1(x) ^ ROTR 8(x) ^ SHR 7(x)\n w15 = w[i - 15];\n hi = w15[0];\n lo = w15[1];\n\n // high bits\n t2_hi = (\n ((hi >>> 1) | (lo << 31)) ^ // ROTR 1\n ((hi >>> 8) | (lo << 24)) ^ // ROTR 8\n (hi >>> 7)) >>> 0; // SHR 7\n // low bits\n t2_lo = (\n ((hi << 31) | (lo >>> 1)) ^ // ROTR 1\n ((hi << 24) | (lo >>> 8)) ^ // ROTR 8\n ((hi << 25) | (lo >>> 7))) >>> 0; // SHR 7\n\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^64 (carry lo overflow)\n w7 = w[i - 7];\n w16 = w[i - 16];\n lo = (t1_lo + w7[1] + t2_lo + w16[1]);\n w[i][0] = (t1_hi + w7[0] + t2_hi + w16[0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n w[i][1] = lo >>> 0;\n }\n\n // initialize hash value for this chunk\n a_hi = s[0][0];\n a_lo = s[0][1];\n b_hi = s[1][0];\n b_lo = s[1][1];\n c_hi = s[2][0];\n c_lo = s[2][1];\n d_hi = s[3][0];\n d_lo = s[3][1];\n e_hi = s[4][0];\n e_lo = s[4][1];\n f_hi = s[5][0];\n f_lo = s[5][1];\n g_hi = s[6][0];\n g_lo = s[6][1];\n h_hi = s[7][0];\n h_lo = s[7][1];\n\n // round function\n for(i = 0; i < 80; ++i) {\n // Sum1(e) = ROTR 14(e) ^ ROTR 18(e) ^ ROTR 41(e)\n s1_hi = (\n ((e_hi >>> 14) | (e_lo << 18)) ^ // ROTR 14\n ((e_hi >>> 18) | (e_lo << 14)) ^ // ROTR 18\n ((e_lo >>> 9) | (e_hi << 23))) >>> 0; // ROTR 41/(swap + ROTR 9)\n s1_lo = (\n ((e_hi << 18) | (e_lo >>> 14)) ^ // ROTR 14\n ((e_hi << 14) | (e_lo >>> 18)) ^ // ROTR 18\n ((e_lo << 23) | (e_hi >>> 9))) >>> 0; // ROTR 41/(swap + ROTR 9)\n\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch_hi = (g_hi ^ (e_hi & (f_hi ^ g_hi))) >>> 0;\n ch_lo = (g_lo ^ (e_lo & (f_lo ^ g_lo))) >>> 0;\n\n // Sum0(a) = ROTR 28(a) ^ ROTR 34(a) ^ ROTR 39(a)\n s0_hi = (\n ((a_hi >>> 28) | (a_lo << 4)) ^ // ROTR 28\n ((a_lo >>> 2) | (a_hi << 30)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo >>> 7) | (a_hi << 25))) >>> 0; // ROTR 39/(swap + ROTR 7)\n s0_lo = (\n ((a_hi << 4) | (a_lo >>> 28)) ^ // ROTR 28\n ((a_lo << 30) | (a_hi >>> 2)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo << 25) | (a_hi >>> 7))) >>> 0; // ROTR 39/(swap + ROTR 7)\n\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj_hi = ((a_hi & b_hi) | (c_hi & (a_hi ^ b_hi))) >>> 0;\n maj_lo = ((a_lo & b_lo) | (c_lo & (a_lo ^ b_lo))) >>> 0;\n\n // main algorithm\n // t1 = (h + s1 + ch + _k[i] + _w[i]) modulo 2^64 (carry lo overflow)\n lo = (h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]);\n t1_hi = (h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n t1_lo = lo >>> 0;\n\n // t2 = s0 + maj modulo 2^64 (carry lo overflow)\n lo = s0_lo + maj_lo;\n t2_hi = (s0_hi + maj_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n t2_lo = lo >>> 0;\n\n h_hi = g_hi;\n h_lo = g_lo;\n\n g_hi = f_hi;\n g_lo = f_lo;\n\n f_hi = e_hi;\n f_lo = e_lo;\n\n // e = (d + t1) modulo 2^64 (carry lo overflow)\n lo = d_lo + t1_lo;\n e_hi = (d_hi + t1_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n e_lo = lo >>> 0;\n\n d_hi = c_hi;\n d_lo = c_lo;\n\n c_hi = b_hi;\n c_lo = b_lo;\n\n b_hi = a_hi;\n b_lo = a_lo;\n\n // a = (t1 + t2) modulo 2^64 (carry lo overflow)\n lo = t1_lo + t2_lo;\n a_hi = (t1_hi + t2_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n a_lo = lo >>> 0;\n }\n\n // update hash state (additional modulo 2^64)\n lo = s[0][1] + a_lo;\n s[0][0] = (s[0][0] + a_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[0][1] = lo >>> 0;\n\n lo = s[1][1] + b_lo;\n s[1][0] = (s[1][0] + b_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[1][1] = lo >>> 0;\n\n lo = s[2][1] + c_lo;\n s[2][0] = (s[2][0] + c_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[2][1] = lo >>> 0;\n\n lo = s[3][1] + d_lo;\n s[3][0] = (s[3][0] + d_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[3][1] = lo >>> 0;\n\n lo = s[4][1] + e_lo;\n s[4][0] = (s[4][0] + e_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[4][1] = lo >>> 0;\n\n lo = s[5][1] + f_lo;\n s[5][0] = (s[5][0] + f_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[5][1] = lo >>> 0;\n\n lo = s[6][1] + g_lo;\n s[6][0] = (s[6][0] + g_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[6][1] = lo >>> 0;\n\n lo = s[7][1] + h_lo;\n s[7][0] = (s[7][0] + h_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[7][1] = lo >>> 0;\n\n len -= 128;\n }\n}\n","/**\n * Utility functions for web applications.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2018 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nvar baseN = require('./baseN');\n\n/* Utilities API */\nvar util = module.exports = forge.util = forge.util || {};\n\n// define setImmediate and nextTick\n(function() {\n // use native nextTick (unless we're in webpack)\n // webpack (or better node-libs-browser polyfill) sets process.browser.\n // this way we can detect webpack properly\n if(typeof process !== 'undefined' && process.nextTick && !process.browser) {\n util.nextTick = process.nextTick;\n if(typeof setImmediate === 'function') {\n util.setImmediate = setImmediate;\n } else {\n // polyfill setImmediate with nextTick, older versions of node\n // (those w/o setImmediate) won't totally starve IO\n util.setImmediate = util.nextTick;\n }\n return;\n }\n\n // polyfill nextTick with native setImmediate\n if(typeof setImmediate === 'function') {\n util.setImmediate = function() { return setImmediate.apply(undefined, arguments); };\n util.nextTick = function(callback) {\n return setImmediate(callback);\n };\n return;\n }\n\n /* Note: A polyfill upgrade pattern is used here to allow combining\n polyfills. For example, MutationObserver is fast, but blocks UI updates,\n so it needs to allow UI updates periodically, so it falls back on\n postMessage or setTimeout. */\n\n // polyfill with setTimeout\n util.setImmediate = function(callback) {\n setTimeout(callback, 0);\n };\n\n // upgrade polyfill to use postMessage\n if(typeof window !== 'undefined' &&\n typeof window.postMessage === 'function') {\n var msg = 'forge.setImmediate';\n var callbacks = [];\n util.setImmediate = function(callback) {\n callbacks.push(callback);\n // only send message when one hasn't been sent in\n // the current turn of the event loop\n if(callbacks.length === 1) {\n window.postMessage(msg, '*');\n }\n };\n function handler(event) {\n if(event.source === window && event.data === msg) {\n event.stopPropagation();\n var copy = callbacks.slice();\n callbacks.length = 0;\n copy.forEach(function(callback) {\n callback();\n });\n }\n }\n window.addEventListener('message', handler, true);\n }\n\n // upgrade polyfill to use MutationObserver\n if(typeof MutationObserver !== 'undefined') {\n // polyfill with MutationObserver\n var now = Date.now();\n var attr = true;\n var div = document.createElement('div');\n var callbacks = [];\n new MutationObserver(function() {\n var copy = callbacks.slice();\n callbacks.length = 0;\n copy.forEach(function(callback) {\n callback();\n });\n }).observe(div, {attributes: true});\n var oldSetImmediate = util.setImmediate;\n util.setImmediate = function(callback) {\n if(Date.now() - now > 15) {\n now = Date.now();\n oldSetImmediate(callback);\n } else {\n callbacks.push(callback);\n // only trigger observer when it hasn't been triggered in\n // the current turn of the event loop\n if(callbacks.length === 1) {\n div.setAttribute('a', attr = !attr);\n }\n }\n };\n }\n\n util.nextTick = util.setImmediate;\n})();\n\n// check if running under Node.js\nutil.isNodejs =\n typeof process !== 'undefined' && process.versions && process.versions.node;\n\n\n// 'self' will also work in Web Workers (instance of WorkerGlobalScope) while\n// it will point to `window` in the main thread.\n// To remain compatible with older browsers, we fall back to 'window' if 'self'\n// is not available.\nutil.globalScope = (function() {\n if(util.isNodejs) {\n return global;\n }\n\n return typeof self === 'undefined' ? window : self;\n})();\n\n// define isArray\nutil.isArray = Array.isArray || function(x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n};\n\n// define isArrayBuffer\nutil.isArrayBuffer = function(x) {\n return typeof ArrayBuffer !== 'undefined' && x instanceof ArrayBuffer;\n};\n\n// define isArrayBufferView\nutil.isArrayBufferView = function(x) {\n return x && util.isArrayBuffer(x.buffer) && x.byteLength !== undefined;\n};\n\n/**\n * Ensure a bits param is 8, 16, 24, or 32. Used to validate input for\n * algorithms where bit manipulation, JavaScript limitations, and/or algorithm\n * design only allow for byte operations of a limited size.\n *\n * @param n number of bits.\n *\n * Throw Error if n invalid.\n */\nfunction _checkBitsParam(n) {\n if(!(n === 8 || n === 16 || n === 24 || n === 32)) {\n throw new Error('Only 8, 16, 24, or 32 bits supported: ' + n);\n }\n}\n\n// TODO: set ByteBuffer to best available backing\nutil.ByteBuffer = ByteStringBuffer;\n\n/** Buffer w/BinaryString backing */\n\n/**\n * Constructor for a binary string backed byte buffer.\n *\n * @param [b] the bytes to wrap (either encoded as string, one byte per\n * character, or as an ArrayBuffer or Typed Array).\n */\nfunction ByteStringBuffer(b) {\n // TODO: update to match DataBuffer API\n\n // the data in this buffer\n this.data = '';\n // the pointer for reading from this buffer\n this.read = 0;\n\n if(typeof b === 'string') {\n this.data = b;\n } else if(util.isArrayBuffer(b) || util.isArrayBufferView(b)) {\n if(typeof Buffer !== 'undefined' && b instanceof Buffer) {\n this.data = b.toString('binary');\n } else {\n // convert native buffer to forge buffer\n // FIXME: support native buffers internally instead\n var arr = new Uint8Array(b);\n try {\n this.data = String.fromCharCode.apply(null, arr);\n } catch(e) {\n for(var i = 0; i < arr.length; ++i) {\n this.putByte(arr[i]);\n }\n }\n }\n } else if(b instanceof ByteStringBuffer ||\n (typeof b === 'object' && typeof b.data === 'string' &&\n typeof b.read === 'number')) {\n // copy existing buffer\n this.data = b.data;\n this.read = b.read;\n }\n\n // used for v8 optimization\n this._constructedStringLength = 0;\n}\nutil.ByteStringBuffer = ByteStringBuffer;\n\n/* Note: This is an optimization for V8-based browsers. When V8 concatenates\n a string, the strings are only joined logically using a \"cons string\" or\n \"constructed/concatenated string\". These containers keep references to one\n another and can result in very large memory usage. For example, if a 2MB\n string is constructed by concatenating 4 bytes together at a time, the\n memory usage will be ~44MB; so ~22x increase. The strings are only joined\n together when an operation requiring their joining takes place, such as\n substr(). This function is called when adding data to this buffer to ensure\n these types of strings are periodically joined to reduce the memory\n footprint. */\nvar _MAX_CONSTRUCTED_STRING_LENGTH = 4096;\nutil.ByteStringBuffer.prototype._optimizeConstructedString = function(x) {\n this._constructedStringLength += x;\n if(this._constructedStringLength > _MAX_CONSTRUCTED_STRING_LENGTH) {\n // this substr() should cause the constructed string to join\n this.data.substr(0, 1);\n this._constructedStringLength = 0;\n }\n};\n\n/**\n * Gets the number of bytes in this buffer.\n *\n * @return the number of bytes in this buffer.\n */\nutil.ByteStringBuffer.prototype.length = function() {\n return this.data.length - this.read;\n};\n\n/**\n * Gets whether or not this buffer is empty.\n *\n * @return true if this buffer is empty, false if not.\n */\nutil.ByteStringBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\n/**\n * Puts a byte in this buffer.\n *\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putByte = function(b) {\n return this.putBytes(String.fromCharCode(b));\n};\n\n/**\n * Puts a byte in this buffer N times.\n *\n * @param b the byte to put.\n * @param n the number of bytes of value b to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.fillWithByte = function(b, n) {\n b = String.fromCharCode(b);\n var d = this.data;\n while(n > 0) {\n if(n & 1) {\n d += b;\n }\n n >>>= 1;\n if(n > 0) {\n b += b;\n }\n }\n this.data = d;\n this._optimizeConstructedString(n);\n return this;\n};\n\n/**\n * Puts bytes in this buffer.\n *\n * @param bytes the bytes (as a binary encoded string) to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putBytes = function(bytes) {\n this.data += bytes;\n this._optimizeConstructedString(bytes.length);\n return this;\n};\n\n/**\n * Puts a UTF-16 encoded string into this buffer.\n *\n * @param str the string to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putString = function(str) {\n return this.putBytes(util.encodeUtf8(str));\n};\n\n/**\n * Puts a 16-bit integer in this buffer in big-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt16 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 24-bit integer in this buffer in big-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt24 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 32-bit integer in this buffer in big-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt32 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 24 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 16-bit integer in this buffer in little-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt16Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF));\n};\n\n/**\n * Puts a 24-bit integer in this buffer in little-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt24Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF));\n};\n\n/**\n * Puts a 32-bit integer in this buffer in little-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt32Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 24 & 0xFF));\n};\n\n/**\n * Puts an n-bit integer in this buffer in big-endian order.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt = function(i, n) {\n _checkBitsParam(n);\n var bytes = '';\n do {\n n -= 8;\n bytes += String.fromCharCode((i >> n) & 0xFF);\n } while(n > 0);\n return this.putBytes(bytes);\n};\n\n/**\n * Puts a signed n-bit integer in this buffer in big-endian order. Two's\n * complement representation is used.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putSignedInt = function(i, n) {\n // putInt checks n\n if(i < 0) {\n i += 2 << (n - 1);\n }\n return this.putInt(i, n);\n};\n\n/**\n * Puts the given buffer into this buffer.\n *\n * @param buffer the buffer to put into this one.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putBuffer = function(buffer) {\n return this.putBytes(buffer.getBytes());\n};\n\n/**\n * Gets a byte from this buffer and advances the read pointer by 1.\n *\n * @return the byte.\n */\nutil.ByteStringBuffer.prototype.getByte = function() {\n return this.data.charCodeAt(this.read++);\n};\n\n/**\n * Gets a uint16 from this buffer in big-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.ByteStringBuffer.prototype.getInt16 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 8 ^\n this.data.charCodeAt(this.read + 1));\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in big-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.ByteStringBuffer.prototype.getInt24 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 16 ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2));\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in big-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.ByteStringBuffer.prototype.getInt32 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 24 ^\n this.data.charCodeAt(this.read + 1) << 16 ^\n this.data.charCodeAt(this.read + 2) << 8 ^\n this.data.charCodeAt(this.read + 3));\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets a uint16 from this buffer in little-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.ByteStringBuffer.prototype.getInt16Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in little-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.ByteStringBuffer.prototype.getInt24Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2) << 16);\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in little-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.ByteStringBuffer.prototype.getInt32Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2) << 16 ^\n this.data.charCodeAt(this.read + 3) << 24);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets an n-bit integer from this buffer in big-endian order and advances the\n * read pointer by ceil(n/8).\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.ByteStringBuffer.prototype.getInt = function(n) {\n _checkBitsParam(n);\n var rval = 0;\n do {\n // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.\n rval = (rval << 8) + this.data.charCodeAt(this.read++);\n n -= 8;\n } while(n > 0);\n return rval;\n};\n\n/**\n * Gets a signed n-bit integer from this buffer in big-endian order, using\n * two's complement, and advances the read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.ByteStringBuffer.prototype.getSignedInt = function(n) {\n // getInt checks n\n var x = this.getInt(n);\n var max = 2 << (n - 2);\n if(x >= max) {\n x -= max << 1;\n }\n return x;\n};\n\n/**\n * Reads bytes out as a binary encoded string and clears them from the\n * buffer. Note that the resulting string is binary encoded (in node.js this\n * encoding is referred to as `binary`, it is *not* `utf8`).\n *\n * @param count the number of bytes to read, undefined or null for all.\n *\n * @return a binary encoded string of bytes.\n */\nutil.ByteStringBuffer.prototype.getBytes = function(count) {\n var rval;\n if(count) {\n // read count bytes\n count = Math.min(this.length(), count);\n rval = this.data.slice(this.read, this.read + count);\n this.read += count;\n } else if(count === 0) {\n rval = '';\n } else {\n // read all bytes, optimize to only copy when needed\n rval = (this.read === 0) ? this.data : this.data.slice(this.read);\n this.clear();\n }\n return rval;\n};\n\n/**\n * Gets a binary encoded string of the bytes from this buffer without\n * modifying the read pointer.\n *\n * @param count the number of bytes to get, omit to get all.\n *\n * @return a string full of binary encoded characters.\n */\nutil.ByteStringBuffer.prototype.bytes = function(count) {\n return (typeof(count) === 'undefined' ?\n this.data.slice(this.read) :\n this.data.slice(this.read, this.read + count));\n};\n\n/**\n * Gets a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n *\n * @return the byte.\n */\nutil.ByteStringBuffer.prototype.at = function(i) {\n return this.data.charCodeAt(this.read + i);\n};\n\n/**\n * Puts a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.setAt = function(i, b) {\n this.data = this.data.substr(0, this.read + i) +\n String.fromCharCode(b) +\n this.data.substr(this.read + i + 1);\n return this;\n};\n\n/**\n * Gets the last byte without modifying the read pointer.\n *\n * @return the last byte.\n */\nutil.ByteStringBuffer.prototype.last = function() {\n return this.data.charCodeAt(this.data.length - 1);\n};\n\n/**\n * Creates a copy of this buffer.\n *\n * @return the copy.\n */\nutil.ByteStringBuffer.prototype.copy = function() {\n var c = util.createBuffer(this.data);\n c.read = this.read;\n return c;\n};\n\n/**\n * Compacts this buffer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.compact = function() {\n if(this.read > 0) {\n this.data = this.data.slice(this.read);\n this.read = 0;\n }\n return this;\n};\n\n/**\n * Clears this buffer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.clear = function() {\n this.data = '';\n this.read = 0;\n return this;\n};\n\n/**\n * Shortens this buffer by triming bytes off of the end of this buffer.\n *\n * @param count the number of bytes to trim off.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.truncate = function(count) {\n var len = Math.max(0, this.length() - count);\n this.data = this.data.substr(this.read, len);\n this.read = 0;\n return this;\n};\n\n/**\n * Converts this buffer to a hexadecimal string.\n *\n * @return a hexadecimal string.\n */\nutil.ByteStringBuffer.prototype.toHex = function() {\n var rval = '';\n for(var i = this.read; i < this.data.length; ++i) {\n var b = this.data.charCodeAt(i);\n if(b < 16) {\n rval += '0';\n }\n rval += b.toString(16);\n }\n return rval;\n};\n\n/**\n * Converts this buffer to a UTF-16 string (standard JavaScript string).\n *\n * @return a UTF-16 string.\n */\nutil.ByteStringBuffer.prototype.toString = function() {\n return util.decodeUtf8(this.bytes());\n};\n\n/** End Buffer w/BinaryString backing */\n\n/** Buffer w/UInt8Array backing */\n\n/**\n * FIXME: Experimental. Do not use yet.\n *\n * Constructor for an ArrayBuffer-backed byte buffer.\n *\n * The buffer may be constructed from a string, an ArrayBuffer, DataView, or a\n * TypedArray.\n *\n * If a string is given, its encoding should be provided as an option,\n * otherwise it will default to 'binary'. A 'binary' string is encoded such\n * that each character is one byte in length and size.\n *\n * If an ArrayBuffer, DataView, or TypedArray is given, it will be used\n * *directly* without any copying. Note that, if a write to the buffer requires\n * more space, the buffer will allocate a new backing ArrayBuffer to\n * accommodate. The starting read and write offsets for the buffer may be\n * given as options.\n *\n * @param [b] the initial bytes for this buffer.\n * @param options the options to use:\n * [readOffset] the starting read offset to use (default: 0).\n * [writeOffset] the starting write offset to use (default: the\n * length of the first parameter).\n * [growSize] the minimum amount, in bytes, to grow the buffer by to\n * accommodate writes (default: 1024).\n * [encoding] the encoding ('binary', 'utf8', 'utf16', 'hex') for the\n * first parameter, if it is a string (default: 'binary').\n */\nfunction DataBuffer(b, options) {\n // default options\n options = options || {};\n\n // pointers for read from/write to buffer\n this.read = options.readOffset || 0;\n this.growSize = options.growSize || 1024;\n\n var isArrayBuffer = util.isArrayBuffer(b);\n var isArrayBufferView = util.isArrayBufferView(b);\n if(isArrayBuffer || isArrayBufferView) {\n // use ArrayBuffer directly\n if(isArrayBuffer) {\n this.data = new DataView(b);\n } else {\n // TODO: adjust read/write offset based on the type of view\n // or specify that this must be done in the options ... that the\n // offsets are byte-based\n this.data = new DataView(b.buffer, b.byteOffset, b.byteLength);\n }\n this.write = ('writeOffset' in options ?\n options.writeOffset : this.data.byteLength);\n return;\n }\n\n // initialize to empty array buffer and add any given bytes using putBytes\n this.data = new DataView(new ArrayBuffer(0));\n this.write = 0;\n\n if(b !== null && b !== undefined) {\n this.putBytes(b);\n }\n\n if('writeOffset' in options) {\n this.write = options.writeOffset;\n }\n}\nutil.DataBuffer = DataBuffer;\n\n/**\n * Gets the number of bytes in this buffer.\n *\n * @return the number of bytes in this buffer.\n */\nutil.DataBuffer.prototype.length = function() {\n return this.write - this.read;\n};\n\n/**\n * Gets whether or not this buffer is empty.\n *\n * @return true if this buffer is empty, false if not.\n */\nutil.DataBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\n/**\n * Ensures this buffer has enough empty space to accommodate the given number\n * of bytes. An optional parameter may be given that indicates a minimum\n * amount to grow the buffer if necessary. If the parameter is not given,\n * the buffer will be grown by some previously-specified default amount\n * or heuristic.\n *\n * @param amount the number of bytes to accommodate.\n * @param [growSize] the minimum amount, in bytes, to grow the buffer by if\n * necessary.\n */\nutil.DataBuffer.prototype.accommodate = function(amount, growSize) {\n if(this.length() >= amount) {\n return this;\n }\n growSize = Math.max(growSize || this.growSize, amount);\n\n // grow buffer\n var src = new Uint8Array(\n this.data.buffer, this.data.byteOffset, this.data.byteLength);\n var dst = new Uint8Array(this.length() + growSize);\n dst.set(src);\n this.data = new DataView(dst.buffer);\n\n return this;\n};\n\n/**\n * Puts a byte in this buffer.\n *\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putByte = function(b) {\n this.accommodate(1);\n this.data.setUint8(this.write++, b);\n return this;\n};\n\n/**\n * Puts a byte in this buffer N times.\n *\n * @param b the byte to put.\n * @param n the number of bytes of value b to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.fillWithByte = function(b, n) {\n this.accommodate(n);\n for(var i = 0; i < n; ++i) {\n this.data.setUint8(b);\n }\n return this;\n};\n\n/**\n * Puts bytes in this buffer. The bytes may be given as a string, an\n * ArrayBuffer, a DataView, or a TypedArray.\n *\n * @param bytes the bytes to put.\n * @param [encoding] the encoding for the first parameter ('binary', 'utf8',\n * 'utf16', 'hex'), if it is a string (default: 'binary').\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putBytes = function(bytes, encoding) {\n if(util.isArrayBufferView(bytes)) {\n var src = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n var len = src.byteLength - src.byteOffset;\n this.accommodate(len);\n var dst = new Uint8Array(this.data.buffer, this.write);\n dst.set(src);\n this.write += len;\n return this;\n }\n\n if(util.isArrayBuffer(bytes)) {\n var src = new Uint8Array(bytes);\n this.accommodate(src.byteLength);\n var dst = new Uint8Array(this.data.buffer);\n dst.set(src, this.write);\n this.write += src.byteLength;\n return this;\n }\n\n // bytes is a util.DataBuffer or equivalent\n if(bytes instanceof util.DataBuffer ||\n (typeof bytes === 'object' &&\n typeof bytes.read === 'number' && typeof bytes.write === 'number' &&\n util.isArrayBufferView(bytes.data))) {\n var src = new Uint8Array(bytes.data.byteLength, bytes.read, bytes.length());\n this.accommodate(src.byteLength);\n var dst = new Uint8Array(bytes.data.byteLength, this.write);\n dst.set(src);\n this.write += src.byteLength;\n return this;\n }\n\n if(bytes instanceof util.ByteStringBuffer) {\n // copy binary string and process as the same as a string parameter below\n bytes = bytes.data;\n encoding = 'binary';\n }\n\n // string conversion\n encoding = encoding || 'binary';\n if(typeof bytes === 'string') {\n var view;\n\n // decode from string\n if(encoding === 'hex') {\n this.accommodate(Math.ceil(bytes.length / 2));\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.hex.decode(bytes, view, this.write);\n return this;\n }\n if(encoding === 'base64') {\n this.accommodate(Math.ceil(bytes.length / 4) * 3);\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.base64.decode(bytes, view, this.write);\n return this;\n }\n\n // encode text as UTF-8 bytes\n if(encoding === 'utf8') {\n // encode as UTF-8 then decode string as raw binary\n bytes = util.encodeUtf8(bytes);\n encoding = 'binary';\n }\n\n // decode string as raw binary\n if(encoding === 'binary' || encoding === 'raw') {\n // one byte per character\n this.accommodate(bytes.length);\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.raw.decode(view);\n return this;\n }\n\n // encode text as UTF-16 bytes\n if(encoding === 'utf16') {\n // two bytes per character\n this.accommodate(bytes.length * 2);\n view = new Uint16Array(this.data.buffer, this.write);\n this.write += util.text.utf16.encode(view);\n return this;\n }\n\n throw new Error('Invalid encoding: ' + encoding);\n }\n\n throw Error('Invalid parameter: ' + bytes);\n};\n\n/**\n * Puts the given buffer into this buffer.\n *\n * @param buffer the buffer to put into this one.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putBuffer = function(buffer) {\n this.putBytes(buffer);\n buffer.clear();\n return this;\n};\n\n/**\n * Puts a string into this buffer.\n *\n * @param str the string to put.\n * @param [encoding] the encoding for the string (default: 'utf16').\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putString = function(str) {\n return this.putBytes(str, 'utf16');\n};\n\n/**\n * Puts a 16-bit integer in this buffer in big-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt16 = function(i) {\n this.accommodate(2);\n this.data.setInt16(this.write, i);\n this.write += 2;\n return this;\n};\n\n/**\n * Puts a 24-bit integer in this buffer in big-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt24 = function(i) {\n this.accommodate(3);\n this.data.setInt16(this.write, i >> 8 & 0xFFFF);\n this.data.setInt8(this.write, i >> 16 & 0xFF);\n this.write += 3;\n return this;\n};\n\n/**\n * Puts a 32-bit integer in this buffer in big-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt32 = function(i) {\n this.accommodate(4);\n this.data.setInt32(this.write, i);\n this.write += 4;\n return this;\n};\n\n/**\n * Puts a 16-bit integer in this buffer in little-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt16Le = function(i) {\n this.accommodate(2);\n this.data.setInt16(this.write, i, true);\n this.write += 2;\n return this;\n};\n\n/**\n * Puts a 24-bit integer in this buffer in little-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt24Le = function(i) {\n this.accommodate(3);\n this.data.setInt8(this.write, i >> 16 & 0xFF);\n this.data.setInt16(this.write, i >> 8 & 0xFFFF, true);\n this.write += 3;\n return this;\n};\n\n/**\n * Puts a 32-bit integer in this buffer in little-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt32Le = function(i) {\n this.accommodate(4);\n this.data.setInt32(this.write, i, true);\n this.write += 4;\n return this;\n};\n\n/**\n * Puts an n-bit integer in this buffer in big-endian order.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt = function(i, n) {\n _checkBitsParam(n);\n this.accommodate(n / 8);\n do {\n n -= 8;\n this.data.setInt8(this.write++, (i >> n) & 0xFF);\n } while(n > 0);\n return this;\n};\n\n/**\n * Puts a signed n-bit integer in this buffer in big-endian order. Two's\n * complement representation is used.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putSignedInt = function(i, n) {\n _checkBitsParam(n);\n this.accommodate(n / 8);\n if(i < 0) {\n i += 2 << (n - 1);\n }\n return this.putInt(i, n);\n};\n\n/**\n * Gets a byte from this buffer and advances the read pointer by 1.\n *\n * @return the byte.\n */\nutil.DataBuffer.prototype.getByte = function() {\n return this.data.getInt8(this.read++);\n};\n\n/**\n * Gets a uint16 from this buffer in big-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.DataBuffer.prototype.getInt16 = function() {\n var rval = this.data.getInt16(this.read);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in big-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.DataBuffer.prototype.getInt24 = function() {\n var rval = (\n this.data.getInt16(this.read) << 8 ^\n this.data.getInt8(this.read + 2));\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in big-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.DataBuffer.prototype.getInt32 = function() {\n var rval = this.data.getInt32(this.read);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets a uint16 from this buffer in little-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.DataBuffer.prototype.getInt16Le = function() {\n var rval = this.data.getInt16(this.read, true);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in little-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.DataBuffer.prototype.getInt24Le = function() {\n var rval = (\n this.data.getInt8(this.read) ^\n this.data.getInt16(this.read + 1, true) << 8);\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in little-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.DataBuffer.prototype.getInt32Le = function() {\n var rval = this.data.getInt32(this.read, true);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets an n-bit integer from this buffer in big-endian order and advances the\n * read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.DataBuffer.prototype.getInt = function(n) {\n _checkBitsParam(n);\n var rval = 0;\n do {\n // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.\n rval = (rval << 8) + this.data.getInt8(this.read++);\n n -= 8;\n } while(n > 0);\n return rval;\n};\n\n/**\n * Gets a signed n-bit integer from this buffer in big-endian order, using\n * two's complement, and advances the read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.DataBuffer.prototype.getSignedInt = function(n) {\n // getInt checks n\n var x = this.getInt(n);\n var max = 2 << (n - 2);\n if(x >= max) {\n x -= max << 1;\n }\n return x;\n};\n\n/**\n * Reads bytes out as a binary encoded string and clears them from the\n * buffer.\n *\n * @param count the number of bytes to read, undefined or null for all.\n *\n * @return a binary encoded string of bytes.\n */\nutil.DataBuffer.prototype.getBytes = function(count) {\n // TODO: deprecate this method, it is poorly named and\n // this.toString('binary') replaces it\n // add a toTypedArray()/toArrayBuffer() function\n var rval;\n if(count) {\n // read count bytes\n count = Math.min(this.length(), count);\n rval = this.data.slice(this.read, this.read + count);\n this.read += count;\n } else if(count === 0) {\n rval = '';\n } else {\n // read all bytes, optimize to only copy when needed\n rval = (this.read === 0) ? this.data : this.data.slice(this.read);\n this.clear();\n }\n return rval;\n};\n\n/**\n * Gets a binary encoded string of the bytes from this buffer without\n * modifying the read pointer.\n *\n * @param count the number of bytes to get, omit to get all.\n *\n * @return a string full of binary encoded characters.\n */\nutil.DataBuffer.prototype.bytes = function(count) {\n // TODO: deprecate this method, it is poorly named, add \"getString()\"\n return (typeof(count) === 'undefined' ?\n this.data.slice(this.read) :\n this.data.slice(this.read, this.read + count));\n};\n\n/**\n * Gets a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n *\n * @return the byte.\n */\nutil.DataBuffer.prototype.at = function(i) {\n return this.data.getUint8(this.read + i);\n};\n\n/**\n * Puts a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.setAt = function(i, b) {\n this.data.setUint8(i, b);\n return this;\n};\n\n/**\n * Gets the last byte without modifying the read pointer.\n *\n * @return the last byte.\n */\nutil.DataBuffer.prototype.last = function() {\n return this.data.getUint8(this.write - 1);\n};\n\n/**\n * Creates a copy of this buffer.\n *\n * @return the copy.\n */\nutil.DataBuffer.prototype.copy = function() {\n return new util.DataBuffer(this);\n};\n\n/**\n * Compacts this buffer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.compact = function() {\n if(this.read > 0) {\n var src = new Uint8Array(this.data.buffer, this.read);\n var dst = new Uint8Array(src.byteLength);\n dst.set(src);\n this.data = new DataView(dst);\n this.write -= this.read;\n this.read = 0;\n }\n return this;\n};\n\n/**\n * Clears this buffer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.clear = function() {\n this.data = new DataView(new ArrayBuffer(0));\n this.read = this.write = 0;\n return this;\n};\n\n/**\n * Shortens this buffer by triming bytes off of the end of this buffer.\n *\n * @param count the number of bytes to trim off.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.truncate = function(count) {\n this.write = Math.max(0, this.length() - count);\n this.read = Math.min(this.read, this.write);\n return this;\n};\n\n/**\n * Converts this buffer to a hexadecimal string.\n *\n * @return a hexadecimal string.\n */\nutil.DataBuffer.prototype.toHex = function() {\n var rval = '';\n for(var i = this.read; i < this.data.byteLength; ++i) {\n var b = this.data.getUint8(i);\n if(b < 16) {\n rval += '0';\n }\n rval += b.toString(16);\n }\n return rval;\n};\n\n/**\n * Converts this buffer to a string, using the given encoding. If no\n * encoding is given, 'utf8' (UTF-8) is used.\n *\n * @param [encoding] the encoding to use: 'binary', 'utf8', 'utf16', 'hex',\n * 'base64' (default: 'utf8').\n *\n * @return a string representation of the bytes in this buffer.\n */\nutil.DataBuffer.prototype.toString = function(encoding) {\n var view = new Uint8Array(this.data, this.read, this.length());\n encoding = encoding || 'utf8';\n\n // encode to string\n if(encoding === 'binary' || encoding === 'raw') {\n return util.binary.raw.encode(view);\n }\n if(encoding === 'hex') {\n return util.binary.hex.encode(view);\n }\n if(encoding === 'base64') {\n return util.binary.base64.encode(view);\n }\n\n // decode to text\n if(encoding === 'utf8') {\n return util.text.utf8.decode(view);\n }\n if(encoding === 'utf16') {\n return util.text.utf16.decode(view);\n }\n\n throw new Error('Invalid encoding: ' + encoding);\n};\n\n/** End Buffer w/UInt8Array backing */\n\n/**\n * Creates a buffer that stores bytes. A value may be given to populate the\n * buffer with data. This value can either be string of encoded bytes or a\n * regular string of characters. When passing a string of binary encoded\n * bytes, the encoding `raw` should be given. This is also the default. When\n * passing a string of characters, the encoding `utf8` should be given.\n *\n * @param [input] a string with encoded bytes to store in the buffer.\n * @param [encoding] (default: 'raw', other: 'utf8').\n */\nutil.createBuffer = function(input, encoding) {\n // TODO: deprecate, use new ByteBuffer() instead\n encoding = encoding || 'raw';\n if(input !== undefined && encoding === 'utf8') {\n input = util.encodeUtf8(input);\n }\n return new util.ByteBuffer(input);\n};\n\n/**\n * Fills a string with a particular value. If you want the string to be a byte\n * string, pass in String.fromCharCode(theByte).\n *\n * @param c the character to fill the string with, use String.fromCharCode\n * to fill the string with a byte value.\n * @param n the number of characters of value c to fill with.\n *\n * @return the filled string.\n */\nutil.fillString = function(c, n) {\n var s = '';\n while(n > 0) {\n if(n & 1) {\n s += c;\n }\n n >>>= 1;\n if(n > 0) {\n c += c;\n }\n }\n return s;\n};\n\n/**\n * Performs a per byte XOR between two byte strings and returns the result as a\n * string of bytes.\n *\n * @param s1 first string of bytes.\n * @param s2 second string of bytes.\n * @param n the number of bytes to XOR.\n *\n * @return the XOR'd result.\n */\nutil.xorBytes = function(s1, s2, n) {\n var s3 = '';\n var b = '';\n var t = '';\n var i = 0;\n var c = 0;\n for(; n > 0; --n, ++i) {\n b = s1.charCodeAt(i) ^ s2.charCodeAt(i);\n if(c >= 10) {\n s3 += t;\n t = '';\n c = 0;\n }\n t += String.fromCharCode(b);\n ++c;\n }\n s3 += t;\n return s3;\n};\n\n/**\n * Converts a hex string into a 'binary' encoded string of bytes.\n *\n * @param hex the hexadecimal string to convert.\n *\n * @return the binary-encoded string of bytes.\n */\nutil.hexToBytes = function(hex) {\n // TODO: deprecate: \"Deprecated. Use util.binary.hex.decode instead.\"\n var rval = '';\n var i = 0;\n if(hex.length & 1 == 1) {\n // odd number of characters, convert first character alone\n i = 1;\n rval += String.fromCharCode(parseInt(hex[0], 16));\n }\n // convert 2 characters (1 byte) at a time\n for(; i < hex.length; i += 2) {\n rval += String.fromCharCode(parseInt(hex.substr(i, 2), 16));\n }\n return rval;\n};\n\n/**\n * Converts a 'binary' encoded string of bytes to hex.\n *\n * @param bytes the byte string to convert.\n *\n * @return the string of hexadecimal characters.\n */\nutil.bytesToHex = function(bytes) {\n // TODO: deprecate: \"Deprecated. Use util.binary.hex.encode instead.\"\n return util.createBuffer(bytes).toHex();\n};\n\n/**\n * Converts an 32-bit integer to 4-big-endian byte string.\n *\n * @param i the integer.\n *\n * @return the byte string.\n */\nutil.int32ToBytes = function(i) {\n return (\n String.fromCharCode(i >> 24 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n// base64 characters, reverse mapping\nvar _base64 =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nvar _base64Idx = [\n/*43 -43 = 0*/\n/*'+', 1, 2, 3,'/' */\n 62, -1, -1, -1, 63,\n\n/*'0','1','2','3','4','5','6','7','8','9' */\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,\n\n/*15, 16, 17,'=', 19, 20, 21 */\n -1, -1, -1, 64, -1, -1, -1,\n\n/*65 - 43 = 22*/\n/*'A','B','C','D','E','F','G','H','I','J','K','L','M', */\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n\n/*'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' */\n 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n\n/*91 - 43 = 48 */\n/*48, 49, 50, 51, 52, 53 */\n -1, -1, -1, -1, -1, -1,\n\n/*97 - 43 = 54*/\n/*'a','b','c','d','e','f','g','h','i','j','k','l','m' */\n 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n\n/*'n','o','p','q','r','s','t','u','v','w','x','y','z' */\n 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\n];\n\n// base58 characters (Bitcoin alphabet)\nvar _base58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\n/**\n * Base64 encodes a 'binary' encoded string of bytes.\n *\n * @param input the binary encoded string of bytes to base64-encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the base64-encoded output.\n */\nutil.encode64 = function(input, maxline) {\n // TODO: deprecate: \"Deprecated. Use util.binary.base64.encode instead.\"\n var line = '';\n var output = '';\n var chr1, chr2, chr3;\n var i = 0;\n while(i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n\n // encode 4 character group\n line += _base64.charAt(chr1 >> 2);\n line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));\n if(isNaN(chr2)) {\n line += '==';\n } else {\n line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));\n line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);\n }\n\n if(maxline && line.length > maxline) {\n output += line.substr(0, maxline) + '\\r\\n';\n line = line.substr(maxline);\n }\n }\n output += line;\n return output;\n};\n\n/**\n * Base64 decodes a string into a 'binary' encoded string of bytes.\n *\n * @param input the base64-encoded input.\n *\n * @return the binary encoded string.\n */\nutil.decode64 = function(input) {\n // TODO: deprecate: \"Deprecated. Use util.binary.base64.decode instead.\"\n\n // remove all non-base64 characters\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n var output = '';\n var enc1, enc2, enc3, enc4;\n var i = 0;\n\n while(i < input.length) {\n enc1 = _base64Idx[input.charCodeAt(i++) - 43];\n enc2 = _base64Idx[input.charCodeAt(i++) - 43];\n enc3 = _base64Idx[input.charCodeAt(i++) - 43];\n enc4 = _base64Idx[input.charCodeAt(i++) - 43];\n\n output += String.fromCharCode((enc1 << 2) | (enc2 >> 4));\n if(enc3 !== 64) {\n // decoded at least 2 bytes\n output += String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2));\n if(enc4 !== 64) {\n // decoded 3 bytes\n output += String.fromCharCode(((enc3 & 3) << 6) | enc4);\n }\n }\n }\n\n return output;\n};\n\n/**\n * Encodes the given string of characters (a standard JavaScript\n * string) as a binary encoded string where the bytes represent\n * a UTF-8 encoded string of characters. Non-ASCII characters will be\n * encoded as multiple bytes according to UTF-8.\n *\n * @param str a standard string of characters to encode.\n *\n * @return the binary encoded string.\n */\nutil.encodeUtf8 = function(str) {\n return unescape(encodeURIComponent(str));\n};\n\n/**\n * Decodes a binary encoded string that contains bytes that\n * represent a UTF-8 encoded string of characters -- into a\n * string of characters (a standard JavaScript string).\n *\n * @param str the binary encoded string to decode.\n *\n * @return the resulting standard string of characters.\n */\nutil.decodeUtf8 = function(str) {\n return decodeURIComponent(escape(str));\n};\n\n// binary encoding/decoding tools\n// FIXME: Experimental. Do not use yet.\nutil.binary = {\n raw: {},\n hex: {},\n base64: {},\n base58: {},\n baseN : {\n encode: baseN.encode,\n decode: baseN.decode\n }\n};\n\n/**\n * Encodes a Uint8Array as a binary-encoded string. This encoding uses\n * a value between 0 and 255 for each character.\n *\n * @param bytes the Uint8Array to encode.\n *\n * @return the binary-encoded string.\n */\nutil.binary.raw.encode = function(bytes) {\n return String.fromCharCode.apply(null, bytes);\n};\n\n/**\n * Decodes a binary-encoded string to a Uint8Array. This encoding uses\n * a value between 0 and 255 for each character.\n *\n * @param str the binary-encoded string to decode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.raw.decode = function(str, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length);\n }\n offset = offset || 0;\n var j = offset;\n for(var i = 0; i < str.length; ++i) {\n out[j++] = str.charCodeAt(i);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Encodes a 'binary' string, ArrayBuffer, DataView, TypedArray, or\n * ByteBuffer as a string of hexadecimal characters.\n *\n * @param bytes the bytes to convert.\n *\n * @return the string of hexadecimal characters.\n */\nutil.binary.hex.encode = util.bytesToHex;\n\n/**\n * Decodes a hex-encoded string to a Uint8Array.\n *\n * @param hex the hexadecimal string to convert.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.hex.decode = function(hex, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(Math.ceil(hex.length / 2));\n }\n offset = offset || 0;\n var i = 0, j = offset;\n if(hex.length & 1) {\n // odd number of characters, convert first character alone\n i = 1;\n out[j++] = parseInt(hex[0], 16);\n }\n // convert 2 characters (1 byte) at a time\n for(; i < hex.length; i += 2) {\n out[j++] = parseInt(hex.substr(i, 2), 16);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Base64-encodes a Uint8Array.\n *\n * @param input the Uint8Array to encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the base64-encoded output string.\n */\nutil.binary.base64.encode = function(input, maxline) {\n var line = '';\n var output = '';\n var chr1, chr2, chr3;\n var i = 0;\n while(i < input.byteLength) {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n // encode 4 character group\n line += _base64.charAt(chr1 >> 2);\n line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));\n if(isNaN(chr2)) {\n line += '==';\n } else {\n line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));\n line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);\n }\n\n if(maxline && line.length > maxline) {\n output += line.substr(0, maxline) + '\\r\\n';\n line = line.substr(maxline);\n }\n }\n output += line;\n return output;\n};\n\n/**\n * Decodes a base64-encoded string to a Uint8Array.\n *\n * @param input the base64-encoded input string.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.base64.decode = function(input, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(Math.ceil(input.length / 4) * 3);\n }\n\n // remove all non-base64 characters\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n offset = offset || 0;\n var enc1, enc2, enc3, enc4;\n var i = 0, j = offset;\n\n while(i < input.length) {\n enc1 = _base64Idx[input.charCodeAt(i++) - 43];\n enc2 = _base64Idx[input.charCodeAt(i++) - 43];\n enc3 = _base64Idx[input.charCodeAt(i++) - 43];\n enc4 = _base64Idx[input.charCodeAt(i++) - 43];\n\n out[j++] = (enc1 << 2) | (enc2 >> 4);\n if(enc3 !== 64) {\n // decoded at least 2 bytes\n out[j++] = ((enc2 & 15) << 4) | (enc3 >> 2);\n if(enc4 !== 64) {\n // decoded 3 bytes\n out[j++] = ((enc3 & 3) << 6) | enc4;\n }\n }\n }\n\n // make sure result is the exact decoded length\n return output ? (j - offset) : out.subarray(0, j);\n};\n\n// add support for base58 encoding/decoding with Bitcoin alphabet\nutil.binary.base58.encode = function(input, maxline) {\n return util.binary.baseN.encode(input, _base58, maxline);\n};\nutil.binary.base58.decode = function(input, maxline) {\n return util.binary.baseN.decode(input, _base58, maxline);\n};\n\n// text encoding/decoding tools\n// FIXME: Experimental. Do not use yet.\nutil.text = {\n utf8: {},\n utf16: {}\n};\n\n/**\n * Encodes the given string as UTF-8 in a Uint8Array.\n *\n * @param str the string to encode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.text.utf8.encode = function(str, output, offset) {\n str = util.encodeUtf8(str);\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length);\n }\n offset = offset || 0;\n var j = offset;\n for(var i = 0; i < str.length; ++i) {\n out[j++] = str.charCodeAt(i);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Decodes the UTF-8 contents from a Uint8Array.\n *\n * @param bytes the Uint8Array to decode.\n *\n * @return the resulting string.\n */\nutil.text.utf8.decode = function(bytes) {\n return util.decodeUtf8(String.fromCharCode.apply(null, bytes));\n};\n\n/**\n * Encodes the given string as UTF-16 in a Uint8Array.\n *\n * @param str the string to encode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.text.utf16.encode = function(str, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length * 2);\n }\n var view = new Uint16Array(out.buffer);\n offset = offset || 0;\n var j = offset;\n var k = offset;\n for(var i = 0; i < str.length; ++i) {\n view[k++] = str.charCodeAt(i);\n j += 2;\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Decodes the UTF-16 contents from a Uint8Array.\n *\n * @param bytes the Uint8Array to decode.\n *\n * @return the resulting string.\n */\nutil.text.utf16.decode = function(bytes) {\n return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));\n};\n\n/**\n * Deflates the given data using a flash interface.\n *\n * @param api the flash interface.\n * @param bytes the data.\n * @param raw true to return only raw deflate data, false to include zlib\n * header and trailer.\n *\n * @return the deflated data as a string.\n */\nutil.deflate = function(api, bytes, raw) {\n bytes = util.decode64(api.deflate(util.encode64(bytes)).rval);\n\n // strip zlib header and trailer if necessary\n if(raw) {\n // zlib header is 2 bytes (CMF,FLG) where FLG indicates that\n // there is a 4-byte DICT (alder-32) block before the data if\n // its 5th bit is set\n var start = 2;\n var flg = bytes.charCodeAt(1);\n if(flg & 0x20) {\n start = 6;\n }\n // zlib trailer is 4 bytes of adler-32\n bytes = bytes.substring(start, bytes.length - 4);\n }\n\n return bytes;\n};\n\n/**\n * Inflates the given data using a flash interface.\n *\n * @param api the flash interface.\n * @param bytes the data.\n * @param raw true if the incoming data has no zlib header or trailer and is\n * raw DEFLATE data.\n *\n * @return the inflated data as a string, null on error.\n */\nutil.inflate = function(api, bytes, raw) {\n // TODO: add zlib header and trailer if necessary/possible\n var rval = api.inflate(util.encode64(bytes)).rval;\n return (rval === null) ? null : util.decode64(rval);\n};\n\n/**\n * Sets a storage object.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param obj the storage object, null to remove.\n */\nvar _setStorageObject = function(api, id, obj) {\n if(!api) {\n throw new Error('WebStorage not available.');\n }\n\n var rval;\n if(obj === null) {\n rval = api.removeItem(id);\n } else {\n // json-encode and base64-encode object\n obj = util.encode64(JSON.stringify(obj));\n rval = api.setItem(id, obj);\n }\n\n // handle potential flash error\n if(typeof(rval) !== 'undefined' && rval.rval !== true) {\n var error = new Error(rval.error.message);\n error.id = rval.error.id;\n error.name = rval.error.name;\n throw error;\n }\n};\n\n/**\n * Gets a storage object.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n *\n * @return the storage object entry or null if none exists.\n */\nvar _getStorageObject = function(api, id) {\n if(!api) {\n throw new Error('WebStorage not available.');\n }\n\n // get the existing entry\n var rval = api.getItem(id);\n\n /* Note: We check api.init because we can't do (api == localStorage)\n on IE because of \"Class doesn't support Automation\" exception. Only\n the flash api has an init method so this works too, but we need a\n better solution in the future. */\n\n // flash returns item wrapped in an object, handle special case\n if(api.init) {\n if(rval.rval === null) {\n if(rval.error) {\n var error = new Error(rval.error.message);\n error.id = rval.error.id;\n error.name = rval.error.name;\n throw error;\n }\n // no error, but also no item\n rval = null;\n } else {\n rval = rval.rval;\n }\n }\n\n // handle decoding\n if(rval !== null) {\n // base64-decode and json-decode data\n rval = JSON.parse(util.decode64(rval));\n }\n\n return rval;\n};\n\n/**\n * Stores an item in local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param data the data for the item (any javascript object/primitive).\n */\nvar _setItem = function(api, id, key, data) {\n // get storage object\n var obj = _getStorageObject(api, id);\n if(obj === null) {\n // create a new storage object\n obj = {};\n }\n // update key\n obj[key] = data;\n\n // set storage object\n _setStorageObject(api, id, obj);\n};\n\n/**\n * Gets an item from local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n *\n * @return the item.\n */\nvar _getItem = function(api, id, key) {\n // get storage object\n var rval = _getStorageObject(api, id);\n if(rval !== null) {\n // return data at key\n rval = (key in rval) ? rval[key] : null;\n }\n\n return rval;\n};\n\n/**\n * Removes an item from local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n */\nvar _removeItem = function(api, id, key) {\n // get storage object\n var obj = _getStorageObject(api, id);\n if(obj !== null && key in obj) {\n // remove key\n delete obj[key];\n\n // see if entry has no keys remaining\n var empty = true;\n for(var prop in obj) {\n empty = false;\n break;\n }\n if(empty) {\n // remove entry entirely if no keys are left\n obj = null;\n }\n\n // set storage object\n _setStorageObject(api, id, obj);\n }\n};\n\n/**\n * Clears the local disk storage identified by the given ID.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n */\nvar _clearItems = function(api, id) {\n _setStorageObject(api, id, null);\n};\n\n/**\n * Calls a storage function.\n *\n * @param func the function to call.\n * @param args the arguments for the function.\n * @param location the location argument.\n *\n * @return the return value from the function.\n */\nvar _callStorageFunction = function(func, args, location) {\n var rval = null;\n\n // default storage types\n if(typeof(location) === 'undefined') {\n location = ['web', 'flash'];\n }\n\n // apply storage types in order of preference\n var type;\n var done = false;\n var exception = null;\n for(var idx in location) {\n type = location[idx];\n try {\n if(type === 'flash' || type === 'both') {\n if(args[0] === null) {\n throw new Error('Flash local storage not available.');\n }\n rval = func.apply(this, args);\n done = (type === 'flash');\n }\n if(type === 'web' || type === 'both') {\n args[0] = localStorage;\n rval = func.apply(this, args);\n done = true;\n }\n } catch(ex) {\n exception = ex;\n }\n if(done) {\n break;\n }\n }\n\n if(!done) {\n throw exception;\n }\n\n return rval;\n};\n\n/**\n * Stores an item on local disk.\n *\n * The available types of local storage include 'flash', 'web', and 'both'.\n *\n * The type 'flash' refers to flash local storage (SharedObject). In order\n * to use flash local storage, the 'api' parameter must be valid. The type\n * 'web' refers to WebStorage, if supported by the browser. The type 'both'\n * refers to storing using both 'flash' and 'web', not just one or the\n * other.\n *\n * The location array should list the storage types to use in order of\n * preference:\n *\n * ['flash']: flash only storage\n * ['web']: web only storage\n * ['both']: try to store in both\n * ['flash','web']: store in flash first, but if not available, 'web'\n * ['web','flash']: store in web first, but if not available, 'flash'\n *\n * The location array defaults to: ['web', 'flash']\n *\n * @param api the flash interface, null to use only WebStorage.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param data the data for the item (any javascript object/primitive).\n * @param location an array with the preferred types of storage to use.\n */\nutil.setItem = function(api, id, key, data, location) {\n _callStorageFunction(_setItem, arguments, location);\n};\n\n/**\n * Gets an item on local disk.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface, null to use only WebStorage.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param location an array with the preferred types of storage to use.\n *\n * @return the item.\n */\nutil.getItem = function(api, id, key, location) {\n return _callStorageFunction(_getItem, arguments, location);\n};\n\n/**\n * Removes an item on local disk.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param location an array with the preferred types of storage to use.\n */\nutil.removeItem = function(api, id, key, location) {\n _callStorageFunction(_removeItem, arguments, location);\n};\n\n/**\n * Clears the local disk storage identified by the given ID.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface if flash is available.\n * @param id the storage ID to use.\n * @param location an array with the preferred types of storage to use.\n */\nutil.clearItems = function(api, id, location) {\n _callStorageFunction(_clearItems, arguments, location);\n};\n\n/**\n * Check if an object is empty.\n *\n * Taken from:\n * http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json/679937#679937\n *\n * @param object the object to check.\n */\nutil.isEmpty = function(obj) {\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Format with simple printf-style interpolation.\n *\n * %%: literal '%'\n * %s,%o: convert next argument into a string.\n *\n * @param format the string to format.\n * @param ... arguments to interpolate into the format string.\n */\nutil.format = function(format) {\n var re = /%./g;\n // current match\n var match;\n // current part\n var part;\n // current arg index\n var argi = 0;\n // collected parts to recombine later\n var parts = [];\n // last index found\n var last = 0;\n // loop while matches remain\n while((match = re.exec(format))) {\n part = format.substring(last, re.lastIndex - 2);\n // don't add empty strings (ie, parts between %s%s)\n if(part.length > 0) {\n parts.push(part);\n }\n last = re.lastIndex;\n // switch on % code\n var code = match[0][1];\n switch(code) {\n case 's':\n case 'o':\n // check if enough arguments were given\n if(argi < arguments.length) {\n parts.push(arguments[argi++ + 1]);\n } else {\n parts.push('');\n }\n break;\n // FIXME: do proper formating for numbers, etc\n //case 'f':\n //case 'd':\n case '%':\n parts.push('%');\n break;\n default:\n parts.push('<%' + code + '?>');\n }\n }\n // add trailing part of format string\n parts.push(format.substring(last));\n return parts.join('');\n};\n\n/**\n * Formats a number.\n *\n * http://snipplr.com/view/5945/javascript-numberformat--ported-from-php/\n */\nutil.formatNumber = function(number, decimals, dec_point, thousands_sep) {\n // http://kevin.vanzonneveld.net\n // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + bugfix by: Michael White (http://crestidg.com)\n // + bugfix by: Benjamin Lupton\n // + bugfix by: Allan Jensen (http://www.winternet.no)\n // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n // * example 1: number_format(1234.5678, 2, '.', '');\n // * returns 1: 1234.57\n\n var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;\n var d = dec_point === undefined ? ',' : dec_point;\n var t = thousands_sep === undefined ?\n '.' : thousands_sep, s = n < 0 ? '-' : '';\n var i = parseInt((n = Math.abs(+n || 0).toFixed(c)), 10) + '';\n var j = (i.length > 3) ? i.length % 3 : 0;\n return s + (j ? i.substr(0, j) + t : '') +\n i.substr(j).replace(/(\\d{3})(?=\\d)/g, '$1' + t) +\n (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');\n};\n\n/**\n * Formats a byte size.\n *\n * http://snipplr.com/view/5949/format-humanize-file-byte-size-presentation-in-javascript/\n */\nutil.formatSize = function(size) {\n if(size >= 1073741824) {\n size = util.formatNumber(size / 1073741824, 2, '.', '') + ' GiB';\n } else if(size >= 1048576) {\n size = util.formatNumber(size / 1048576, 2, '.', '') + ' MiB';\n } else if(size >= 1024) {\n size = util.formatNumber(size / 1024, 0) + ' KiB';\n } else {\n size = util.formatNumber(size, 0) + ' bytes';\n }\n return size;\n};\n\n/**\n * Converts an IPv4 or IPv6 string representation into bytes (in network order).\n *\n * @param ip the IPv4 or IPv6 address to convert.\n *\n * @return the 4-byte IPv6 or 16-byte IPv6 address or null if the address can't\n * be parsed.\n */\nutil.bytesFromIP = function(ip) {\n if(ip.indexOf('.') !== -1) {\n return util.bytesFromIPv4(ip);\n }\n if(ip.indexOf(':') !== -1) {\n return util.bytesFromIPv6(ip);\n }\n return null;\n};\n\n/**\n * Converts an IPv4 string representation into bytes (in network order).\n *\n * @param ip the IPv4 address to convert.\n *\n * @return the 4-byte address or null if the address can't be parsed.\n */\nutil.bytesFromIPv4 = function(ip) {\n ip = ip.split('.');\n if(ip.length !== 4) {\n return null;\n }\n var b = util.createBuffer();\n for(var i = 0; i < ip.length; ++i) {\n var num = parseInt(ip[i], 10);\n if(isNaN(num)) {\n return null;\n }\n b.putByte(num);\n }\n return b.getBytes();\n};\n\n/**\n * Converts an IPv6 string representation into bytes (in network order).\n *\n * @param ip the IPv6 address to convert.\n *\n * @return the 16-byte address or null if the address can't be parsed.\n */\nutil.bytesFromIPv6 = function(ip) {\n var blanks = 0;\n ip = ip.split(':').filter(function(e) {\n if(e.length === 0) ++blanks;\n return true;\n });\n var zeros = (8 - ip.length + blanks) * 2;\n var b = util.createBuffer();\n for(var i = 0; i < 8; ++i) {\n if(!ip[i] || ip[i].length === 0) {\n b.fillWithByte(0, zeros);\n zeros = 0;\n continue;\n }\n var bytes = util.hexToBytes(ip[i]);\n if(bytes.length < 2) {\n b.putByte(0);\n }\n b.putBytes(bytes);\n }\n return b.getBytes();\n};\n\n/**\n * Converts 4-bytes into an IPv4 string representation or 16-bytes into\n * an IPv6 string representation. The bytes must be in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv4 or IPv6 string representation if 4 or 16 bytes,\n * respectively, are given, otherwise null.\n */\nutil.bytesToIP = function(bytes) {\n if(bytes.length === 4) {\n return util.bytesToIPv4(bytes);\n }\n if(bytes.length === 16) {\n return util.bytesToIPv6(bytes);\n }\n return null;\n};\n\n/**\n * Converts 4-bytes into an IPv4 string representation. The bytes must be\n * in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv4 string representation or null for an invalid # of bytes.\n */\nutil.bytesToIPv4 = function(bytes) {\n if(bytes.length !== 4) {\n return null;\n }\n var ip = [];\n for(var i = 0; i < bytes.length; ++i) {\n ip.push(bytes.charCodeAt(i));\n }\n return ip.join('.');\n};\n\n/**\n * Converts 16-bytes into an IPv16 string representation. The bytes must be\n * in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv16 string representation or null for an invalid # of bytes.\n */\nutil.bytesToIPv6 = function(bytes) {\n if(bytes.length !== 16) {\n return null;\n }\n var ip = [];\n var zeroGroups = [];\n var zeroMaxGroup = 0;\n for(var i = 0; i < bytes.length; i += 2) {\n var hex = util.bytesToHex(bytes[i] + bytes[i + 1]);\n // canonicalize zero representation\n while(hex[0] === '0' && hex !== '0') {\n hex = hex.substr(1);\n }\n if(hex === '0') {\n var last = zeroGroups[zeroGroups.length - 1];\n var idx = ip.length;\n if(!last || idx !== last.end + 1) {\n zeroGroups.push({start: idx, end: idx});\n } else {\n last.end = idx;\n if((last.end - last.start) >\n (zeroGroups[zeroMaxGroup].end - zeroGroups[zeroMaxGroup].start)) {\n zeroMaxGroup = zeroGroups.length - 1;\n }\n }\n }\n ip.push(hex);\n }\n if(zeroGroups.length > 0) {\n var group = zeroGroups[zeroMaxGroup];\n // only shorten group of length > 0\n if(group.end - group.start > 0) {\n ip.splice(group.start, group.end - group.start + 1, '');\n if(group.start === 0) {\n ip.unshift('');\n }\n if(group.end === 7) {\n ip.push('');\n }\n }\n }\n return ip.join(':');\n};\n\n/**\n * Estimates the number of processes that can be run concurrently. If\n * creating Web Workers, keep in mind that the main JavaScript process needs\n * its own core.\n *\n * @param options the options to use:\n * update true to force an update (not use the cached value).\n * @param callback(err, max) called once the operation completes.\n */\nutil.estimateCores = function(options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n if('cores' in util && !options.update) {\n return callback(null, util.cores);\n }\n if(typeof navigator !== 'undefined' &&\n 'hardwareConcurrency' in navigator &&\n navigator.hardwareConcurrency > 0) {\n util.cores = navigator.hardwareConcurrency;\n return callback(null, util.cores);\n }\n if(typeof Worker === 'undefined') {\n // workers not available\n util.cores = 1;\n return callback(null, util.cores);\n }\n if(typeof Blob === 'undefined') {\n // can't estimate, default to 2\n util.cores = 2;\n return callback(null, util.cores);\n }\n\n // create worker concurrency estimation code as blob\n var blobUrl = URL.createObjectURL(new Blob(['(',\n function() {\n self.addEventListener('message', function(e) {\n // run worker for 4 ms\n var st = Date.now();\n var et = st + 4;\n while(Date.now() < et);\n self.postMessage({st: st, et: et});\n });\n }.toString(),\n ')()'], {type: 'application/javascript'}));\n\n // take 5 samples using 16 workers\n sample([], 5, 16);\n\n function sample(max, samples, numWorkers) {\n if(samples === 0) {\n // get overlap average\n var avg = Math.floor(max.reduce(function(avg, x) {\n return avg + x;\n }, 0) / max.length);\n util.cores = Math.max(1, avg);\n URL.revokeObjectURL(blobUrl);\n return callback(null, util.cores);\n }\n map(numWorkers, function(err, results) {\n max.push(reduce(numWorkers, results));\n sample(max, samples - 1, numWorkers);\n });\n }\n\n function map(numWorkers, callback) {\n var workers = [];\n var results = [];\n for(var i = 0; i < numWorkers; ++i) {\n var worker = new Worker(blobUrl);\n worker.addEventListener('message', function(e) {\n results.push(e.data);\n if(results.length === numWorkers) {\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].terminate();\n }\n callback(null, results);\n }\n });\n workers.push(worker);\n }\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].postMessage(i);\n }\n }\n\n function reduce(numWorkers, results) {\n // find overlapping time windows\n var overlaps = [];\n for(var n = 0; n < numWorkers; ++n) {\n var r1 = results[n];\n var overlap = overlaps[n] = [];\n for(var i = 0; i < numWorkers; ++i) {\n if(n === i) {\n continue;\n }\n var r2 = results[i];\n if((r1.st > r2.st && r1.st < r2.et) ||\n (r2.st > r1.st && r2.st < r1.et)) {\n overlap.push(i);\n }\n }\n }\n // get maximum overlaps ... don't include overlapping worker itself\n // as the main JS process was also being scheduled during the work and\n // would have to be subtracted from the estimate anyway\n return overlaps.reduce(function(max, overlap) {\n return Math.max(max, overlap.length);\n }, 0);\n }\n};\n","/**\n * Javascript implementation of X.509 and related components (such as\n * Certification Signing Requests) of a Public Key Infrastructure.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The ASN.1 representation of an X.509v3 certificate is as follows\n * (see RFC 2459):\n *\n * Certificate ::= SEQUENCE {\n * tbsCertificate TBSCertificate,\n * signatureAlgorithm AlgorithmIdentifier,\n * signatureValue BIT STRING\n * }\n *\n * TBSCertificate ::= SEQUENCE {\n * version [0] EXPLICIT Version DEFAULT v1,\n * serialNumber CertificateSerialNumber,\n * signature AlgorithmIdentifier,\n * issuer Name,\n * validity Validity,\n * subject Name,\n * subjectPublicKeyInfo SubjectPublicKeyInfo,\n * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * extensions [3] EXPLICIT Extensions OPTIONAL\n * -- If present, version shall be v3\n * }\n *\n * Version ::= INTEGER { v1(0), v2(1), v3(2) }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * Name ::= CHOICE {\n * // only one possible choice for now\n * RDNSequence\n * }\n *\n * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName\n *\n * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue\n *\n * AttributeTypeAndValue ::= SEQUENCE {\n * type AttributeType,\n * value AttributeValue\n * }\n * AttributeType ::= OBJECT IDENTIFIER\n * AttributeValue ::= ANY DEFINED BY AttributeType\n *\n * Validity ::= SEQUENCE {\n * notBefore Time,\n * notAfter Time\n * }\n *\n * Time ::= CHOICE {\n * utcTime UTCTime,\n * generalTime GeneralizedTime\n * }\n *\n * UniqueIdentifier ::= BIT STRING\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension\n *\n * Extension ::= SEQUENCE {\n * extnID OBJECT IDENTIFIER,\n * critical BOOLEAN DEFAULT FALSE,\n * extnValue OCTET STRING\n * }\n *\n * The only key algorithm currently supported for PKI is RSA.\n *\n * RSASSA-PSS signatures are described in RFC 3447 and RFC 4055.\n *\n * PKCS#10 v1.7 describes certificate signing requests:\n *\n * CertificationRequestInfo:\n *\n * CertificationRequestInfo ::= SEQUENCE {\n * version INTEGER { v1(0) } (v1,...),\n * subject Name,\n * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},\n * attributes [0] Attributes{{ CRIAttributes }}\n * }\n *\n * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}\n *\n * CRIAttributes ATTRIBUTE ::= {\n * ... -- add any locally defined attributes here -- }\n *\n * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {\n * type ATTRIBUTE.&id({IOSet}),\n * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})\n * }\n *\n * CertificationRequest ::= SEQUENCE {\n * certificationRequestInfo CertificationRequestInfo,\n * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},\n * signature BIT STRING\n * }\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./mgf');\nrequire('./oids');\nrequire('./pem');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\nvar oids = pki.oids;\n\n// short name OID mappings\nvar _shortNames = {};\n_shortNames['CN'] = oids['commonName'];\n_shortNames['commonName'] = 'CN';\n_shortNames['C'] = oids['countryName'];\n_shortNames['countryName'] = 'C';\n_shortNames['L'] = oids['localityName'];\n_shortNames['localityName'] = 'L';\n_shortNames['ST'] = oids['stateOrProvinceName'];\n_shortNames['stateOrProvinceName'] = 'ST';\n_shortNames['O'] = oids['organizationName'];\n_shortNames['organizationName'] = 'O';\n_shortNames['OU'] = oids['organizationalUnitName'];\n_shortNames['organizationalUnitName'] = 'OU';\n_shortNames['E'] = oids['emailAddress'];\n_shortNames['emailAddress'] = 'E';\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator;\n\n// validator for an X.509v3 certificate\nvar x509CertificateValidator = {\n name: 'Certificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'tbsCertificate',\n value: [{\n name: 'Certificate.TBSCertificate.version',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.version.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certVersion'\n }]\n }, {\n name: 'Certificate.TBSCertificate.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certSerialNumber'\n }, {\n name: 'Certificate.TBSCertificate.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate.signature.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certinfoSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certinfoSignatureParams'\n }]\n }, {\n name: 'Certificate.TBSCertificate.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certIssuer'\n }, {\n name: 'Certificate.TBSCertificate.validity',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n // Note: UTC and generalized times may both appear so the capture\n // names are based on their detected order, the names used below\n // are only for the common case, which validity time really means\n // \"notBefore\" and which means \"notAfter\" will be determined by order\n value: [{\n // notBefore (Time) (UTC time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity1UTCTime'\n }, {\n // notBefore (Time) (generalized time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity2GeneralizedTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity3UTCTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity4GeneralizedTime'\n }]\n }, {\n // Name (subject) (RDNSequence)\n name: 'Certificate.TBSCertificate.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n // issuerUniqueID (optional)\n name: 'Certificate.TBSCertificate.issuerUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.issuerUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certIssuerUniqueId'\n }]\n }, {\n // subjectUniqueID (optional)\n name: 'Certificate.TBSCertificate.subjectUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.subjectUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certSubjectUniqueId'\n }]\n }, {\n // Extensions (optional)\n name: 'Certificate.TBSCertificate.extensions',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n constructed: true,\n captureAsn1: 'certExtensions',\n optional: true\n }]\n }, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'Certificate.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'Certificate.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certSignatureParams'\n }]\n }, {\n // SignatureValue\n name: 'Certificate.signatureValue',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'certSignature'\n }]\n};\n\nvar rsassaPssParameterValidator = {\n name: 'rsapss',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'hashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }, {\n name: 'rsapss.maskGenAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenOid'\n }, {\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenHashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }]\n }, {\n name: 'rsapss.saltLength',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n optional: true,\n value: [{\n name: 'rsapss.saltLength.saltLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'saltLength'\n }]\n }, {\n name: 'rsapss.trailerField',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n optional: true,\n value: [{\n name: 'rsapss.trailer.trailer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'trailer'\n }]\n }]\n};\n\n// validator for a CertificationRequestInfo structure\nvar certificationRequestInfoValidator = {\n name: 'CertificationRequestInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfo',\n value: [{\n name: 'CertificationRequestInfo.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certificationRequestInfoVersion'\n }, {\n // Name (subject) (RDNSequence)\n name: 'CertificationRequestInfo.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfoSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'certificationRequestInfoAttributes',\n value: [{\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertificationRequestInfo.attributes.type',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false\n }, {\n name: 'CertificationRequestInfo.attributes.value',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true\n }]\n }]\n }]\n};\n\n// validator for a CertificationRequest structure\nvar certificationRequestValidator = {\n name: 'CertificationRequest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'csr',\n value: [\n certificationRequestInfoValidator, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'CertificationRequest.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'CertificationRequest.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'csrSignatureOid'\n }, {\n name: 'CertificationRequest.signatureAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'csrSignatureParams'\n }]\n }, {\n // signature\n name: 'CertificationRequest.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'csrSignature'\n }\n ]\n};\n\n/**\n * Converts an RDNSequence of ASN.1 DER-encoded RelativeDistinguishedName\n * sets into an array with objects that have type and value properties.\n *\n * @param rdn the RDNSequence to convert.\n * @param md a message digest to append type and value to if provided.\n */\npki.RDNAttributesAsArray = function(rdn, md) {\n var rval = [];\n\n // each value in 'rdn' in is a SET of RelativeDistinguishedName\n var set, attr, obj;\n for(var si = 0; si < rdn.value.length; ++si) {\n // get the RelativeDistinguishedName set\n set = rdn.value[si];\n\n // each value in the SET is an AttributeTypeAndValue sequence\n // containing first a type (an OID) and second a value (defined by\n // the OID)\n for(var i = 0; i < set.value.length; ++i) {\n obj = {};\n attr = set.value[i];\n obj.type = asn1.derToOid(attr.value[0].value);\n obj.value = attr.value[1].value;\n obj.valueTagClass = attr.value[1].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n if(md) {\n md.update(obj.type);\n md.update(obj.value);\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Converts ASN.1 CRIAttributes into an array with objects that have type and\n * value properties.\n *\n * @param attributes the CRIAttributes to convert.\n */\npki.CRIAttributesAsArray = function(attributes) {\n var rval = [];\n\n // each value in 'attributes' in is a SEQUENCE with an OID and a SET\n for(var si = 0; si < attributes.length; ++si) {\n // get the attribute sequence\n var seq = attributes[si];\n\n // each value in the SEQUENCE containing first a type (an OID) and\n // second a set of values (defined by the OID)\n var type = asn1.derToOid(seq.value[0].value);\n var values = seq.value[1].value;\n for(var vi = 0; vi < values.length; ++vi) {\n var obj = {};\n obj.type = type;\n obj.value = values[vi].value;\n obj.valueTagClass = values[vi].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n // parse extensions\n if(obj.type === oids.extensionRequest) {\n obj.extensions = [];\n for(var ei = 0; ei < obj.value.length; ++ei) {\n obj.extensions.push(pki.certificateExtensionFromAsn1(obj.value[ei]));\n }\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Gets an issuer or subject attribute from its name, type, or short name.\n *\n * @param obj the issuer or subject object.\n * @param options a short name string or an object with:\n * shortName the short name for the attribute.\n * name the name for the attribute.\n * type the type for the attribute.\n *\n * @return the attribute.\n */\nfunction _getAttribute(obj, options) {\n if(typeof options === 'string') {\n options = {shortName: options};\n }\n\n var rval = null;\n var attr;\n for(var i = 0; rval === null && i < obj.attributes.length; ++i) {\n attr = obj.attributes[i];\n if(options.type && options.type === attr.type) {\n rval = attr;\n } else if(options.name && options.name === attr.name) {\n rval = attr;\n } else if(options.shortName && options.shortName === attr.shortName) {\n rval = attr;\n }\n }\n return rval;\n}\n\n/**\n * Converts signature parameters from ASN.1 structure.\n *\n * Currently only RSASSA-PSS supported. The PKCS#1 v1.5 signature scheme had\n * no parameters.\n *\n * RSASSA-PSS-params ::= SEQUENCE {\n * hashAlgorithm [0] HashAlgorithm DEFAULT\n * sha1Identifier,\n * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT\n * mgf1SHA1Identifier,\n * saltLength [2] INTEGER DEFAULT 20,\n * trailerField [3] INTEGER DEFAULT 1\n * }\n *\n * HashAlgorithm ::= AlgorithmIdentifier\n *\n * MaskGenAlgorithm ::= AlgorithmIdentifier\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * @param oid The OID specifying the signature algorithm\n * @param obj The ASN.1 structure holding the parameters\n * @param fillDefaults Whether to use return default values where omitted\n * @return signature parameter object\n */\nvar _readSignatureParameters = function(oid, obj, fillDefaults) {\n var params = {};\n\n if(oid !== oids['RSASSA-PSS']) {\n return params;\n }\n\n if(fillDefaults) {\n params = {\n hash: {\n algorithmOid: oids['sha1']\n },\n mgf: {\n algorithmOid: oids['mgf1'],\n hash: {\n algorithmOid: oids['sha1']\n }\n },\n saltLength: 20\n };\n }\n\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, rsassaPssParameterValidator, capture, errors)) {\n var error = new Error('Cannot read RSASSA-PSS parameter block.');\n error.errors = errors;\n throw error;\n }\n\n if(capture.hashOid !== undefined) {\n params.hash = params.hash || {};\n params.hash.algorithmOid = asn1.derToOid(capture.hashOid);\n }\n\n if(capture.maskGenOid !== undefined) {\n params.mgf = params.mgf || {};\n params.mgf.algorithmOid = asn1.derToOid(capture.maskGenOid);\n params.mgf.hash = params.mgf.hash || {};\n params.mgf.hash.algorithmOid = asn1.derToOid(capture.maskGenHashOid);\n }\n\n if(capture.saltLength !== undefined) {\n params.saltLength = capture.saltLength.charCodeAt(0);\n }\n\n return params;\n};\n\n/**\n * Create signature digest for OID.\n *\n * @param options\n * signatureOid: the OID specifying the signature algorithm.\n * type: a human readable type for error messages\n * @return a created md instance. throws if unknown oid.\n */\nvar _createSignatureDigest = function(options) {\n switch(oids[options.signatureOid]) {\n case 'sha1WithRSAEncryption':\n // deprecated alias\n case 'sha1WithRSASignature':\n return forge.md.sha1.create();\n case 'md5WithRSAEncryption':\n return forge.md.md5.create();\n case 'sha256WithRSAEncryption':\n return forge.md.sha256.create();\n case 'sha384WithRSAEncryption':\n return forge.md.sha384.create();\n case 'sha512WithRSAEncryption':\n return forge.md.sha512.create();\n case 'RSASSA-PSS':\n return forge.md.sha256.create();\n default:\n var error = new Error(\n 'Could not compute ' + options.type + ' digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = options.signatureOid;\n throw error;\n }\n};\n\n/**\n * Verify signature on certificate or CSR.\n *\n * @param options:\n * certificate the certificate or CSR to verify.\n * md the signature digest.\n * signature the signature\n * @return a created md instance. throws if unknown oid.\n */\nvar _verifySignature = function(options) {\n var cert = options.certificate;\n var scheme;\n\n switch(cert.signatureOid) {\n case oids.sha1WithRSAEncryption:\n // deprecated alias\n case oids.sha1WithRSASignature:\n /* use PKCS#1 v1.5 padding scheme */\n break;\n case oids['RSASSA-PSS']:\n var hash, mgf;\n\n /* initialize mgf */\n hash = oids[cert.signatureParameters.mgf.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported MGF hash function.');\n error.oid = cert.signatureParameters.mgf.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n mgf = oids[cert.signatureParameters.mgf.algorithmOid];\n if(mgf === undefined || forge.mgf[mgf] === undefined) {\n var error = new Error('Unsupported MGF function.');\n error.oid = cert.signatureParameters.mgf.algorithmOid;\n error.name = mgf;\n throw error;\n }\n\n mgf = forge.mgf[mgf].create(forge.md[hash].create());\n\n /* initialize hash function */\n hash = oids[cert.signatureParameters.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported RSASSA-PSS hash function.');\n error.oid = cert.signatureParameters.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n scheme = forge.pss.create(\n forge.md[hash].create(), mgf, cert.signatureParameters.saltLength\n );\n break;\n }\n\n // verify signature on cert using public key\n return cert.publicKey.verify(\n options.md.digest().getBytes(), options.signature, scheme\n );\n};\n\n/**\n * Converts an X.509 certificate from PEM format.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. This will scan the TBSCertificate part of the ASN.1\n * object while it is converted so it doesn't need to be converted back\n * to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certificate.\n */\npki.certificateFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE' &&\n msg.type !== 'X509 CERTIFICATE' &&\n msg.type !== 'TRUSTED CERTIFICATE') {\n var error = new Error(\n 'Could not convert certificate from PEM; PEM header type ' +\n 'is not \"CERTIFICATE\", \"X509 CERTIFICATE\", or \"TRUSTED CERTIFICATE\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error(\n 'Could not convert certificate from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificateFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts an X.509 certificate to PEM format.\n *\n * @param cert the certificate.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certificate.\n */\npki.certificateToPem = function(cert, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE',\n body: asn1.toDer(pki.certificateToAsn1(cert)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key from PEM format.\n *\n * @param pem the PEM-formatted public key.\n *\n * @return the public key.\n */\npki.publicKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PUBLIC KEY' && msg.type !== 'RSA PUBLIC KEY') {\n var error = new Error('Could not convert public key from PEM; PEM header ' +\n 'type is not \"PUBLIC KEY\" or \"RSA PUBLIC KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert public key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.publicKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA public key to PEM format (using a SubjectPublicKeyInfo).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key to PEM format (using an RSAPublicKey).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToRSAPublicKeyPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Gets a fingerprint for the given public key.\n *\n * @param options the options to use.\n * [md] the message digest object to use (defaults to forge.md.sha1).\n * [type] the type of fingerprint, such as 'RSAPublicKey',\n * 'SubjectPublicKeyInfo' (defaults to 'RSAPublicKey').\n * [encoding] an alternative output encoding, such as 'hex'\n * (defaults to none, outputs a byte buffer).\n * [delimiter] the delimiter to use between bytes for 'hex' encoded\n * output, eg: ':' (defaults to none).\n *\n * @return the fingerprint as a byte buffer or other encoding based on options.\n */\npki.getPublicKeyFingerprint = function(key, options) {\n options = options || {};\n var md = options.md || forge.md.sha1.create();\n var type = options.type || 'RSAPublicKey';\n\n var bytes;\n switch(type) {\n case 'RSAPublicKey':\n bytes = asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes();\n break;\n case 'SubjectPublicKeyInfo':\n bytes = asn1.toDer(pki.publicKeyToAsn1(key)).getBytes();\n break;\n default:\n throw new Error('Unknown fingerprint type \"' + options.type + '\".');\n }\n\n // hash public key bytes\n md.start();\n md.update(bytes);\n var digest = md.digest();\n if(options.encoding === 'hex') {\n var hex = digest.toHex();\n if(options.delimiter) {\n return hex.match(/.{2}/g).join(options.delimiter);\n }\n return hex;\n } else if(options.encoding === 'binary') {\n return digest.getBytes();\n } else if(options.encoding) {\n throw new Error('Unknown encoding \"' + options.encoding + '\".');\n }\n return digest;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from PEM format.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. This will scan the CertificationRequestInfo part of\n * the ASN.1 object while it is converted so it doesn't need to be converted\n * back to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE REQUEST') {\n var error = new Error('Could not convert certification request from PEM; ' +\n 'PEM header type is not \"CERTIFICATE REQUEST\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert certification request from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificationRequestFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) to PEM format.\n *\n * @param csr the certification request.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certification request.\n */\npki.certificationRequestToPem = function(csr, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE REQUEST',\n body: asn1.toDer(pki.certificationRequestToAsn1(csr)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Creates an empty X.509v3 RSA certificate.\n *\n * @return the certificate.\n */\npki.createCertificate = function() {\n var cert = {};\n cert.version = 0x02;\n cert.serialNumber = '00';\n cert.signatureOid = null;\n cert.signature = null;\n cert.siginfo = {};\n cert.siginfo.algorithmOid = null;\n cert.validity = {};\n cert.validity.notBefore = new Date();\n cert.validity.notAfter = new Date();\n\n cert.issuer = {};\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = [];\n cert.issuer.hash = null;\n\n cert.subject = {};\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = [];\n cert.subject.hash = null;\n\n cert.extensions = [];\n cert.publicKey = null;\n cert.md = null;\n\n /**\n * Sets the subject of this certificate.\n *\n * @param attrs the array of subject attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setSubject = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.subject.attributes = attrs;\n delete cert.subject.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.subject.uniqueId = uniqueId;\n }\n cert.subject.hash = null;\n };\n\n /**\n * Sets the issuer of this certificate.\n *\n * @param attrs the array of issuer attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setIssuer = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.issuer.attributes = attrs;\n delete cert.issuer.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.issuer.uniqueId = uniqueId;\n }\n cert.issuer.hash = null;\n };\n\n /**\n * Sets the extensions of this certificate.\n *\n * @param exts the array of extensions to use.\n */\n cert.setExtensions = function(exts) {\n for(var i = 0; i < exts.length; ++i) {\n _fillMissingExtensionFields(exts[i], {cert: cert});\n }\n // set new extensions\n cert.extensions = exts;\n };\n\n /**\n * Gets an extension by its name or id.\n *\n * @param options the name to use or an object with:\n * name the name to use.\n * id the id to use.\n *\n * @return the extension or null if not found.\n */\n cert.getExtension = function(options) {\n if(typeof options === 'string') {\n options = {name: options};\n }\n\n var rval = null;\n var ext;\n for(var i = 0; rval === null && i < cert.extensions.length; ++i) {\n ext = cert.extensions[i];\n if(options.id && ext.id === options.id) {\n rval = ext;\n } else if(options.name && ext.name === options.name) {\n rval = ext;\n }\n }\n return rval;\n };\n\n /**\n * Signs this certificate using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n cert.sign = function(key, md) {\n // TODO: get signature OID from private key\n cert.md = md || forge.md.sha1.create();\n var algorithmOid = oids[cert.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = cert.md.algorithm;\n throw error;\n }\n cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid;\n\n // get TBSCertificate, convert to DER\n cert.tbsCertificate = pki.getTBSCertificate(cert);\n var bytes = asn1.toDer(cert.tbsCertificate);\n\n // digest and sign\n cert.md.update(bytes.getBytes());\n cert.signature = key.sign(cert.md);\n };\n\n /**\n * Attempts verify the signature on the passed certificate using this\n * certificate's public key.\n *\n * @param child the certificate to verify.\n *\n * @return true if verified, false if not.\n */\n cert.verify = function(child) {\n var rval = false;\n\n if(!cert.issued(child)) {\n var issuer = child.issuer;\n var subject = cert.subject;\n var error = new Error(\n 'The parent certificate did not issue the given child ' +\n 'certificate; the child certificate\\'s issuer does not match the ' +\n 'parent\\'s subject.');\n error.expectedIssuer = subject.attributes;\n error.actualIssuer = issuer.attributes;\n throw error;\n }\n\n var md = child.md;\n if(md === null) {\n // create digest for OID signature types\n md = _createSignatureDigest({\n signatureOid: child.signatureOid,\n type: 'certificate'\n });\n\n // produce DER formatted TBSCertificate and digest it\n var tbsCertificate = child.tbsCertificate || pki.getTBSCertificate(child);\n var bytes = asn1.toDer(tbsCertificate);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n rval = _verifySignature({\n certificate: cert, md: md, signature: child.signature\n });\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's issuer matches the passed\n * certificate's subject. Note that no signature check is performed.\n *\n * @param parent the certificate to check.\n *\n * @return true if this certificate's issuer matches the passed certificate's\n * subject.\n */\n cert.isIssuer = function(parent) {\n var rval = false;\n\n var i = cert.issuer;\n var s = parent.subject;\n\n // compare hashes if present\n if(i.hash && s.hash) {\n rval = (i.hash === s.hash);\n } else if(i.attributes.length === s.attributes.length) {\n // all attributes are the same so issuer matches subject\n rval = true;\n var iattr, sattr;\n for(var n = 0; rval && n < i.attributes.length; ++n) {\n iattr = i.attributes[n];\n sattr = s.attributes[n];\n if(iattr.type !== sattr.type || iattr.value !== sattr.value) {\n // attribute mismatch\n rval = false;\n }\n }\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's subject matches the issuer of the\n * given certificate). Note that not signature check is performed.\n *\n * @param child the certificate to check.\n *\n * @return true if this certificate's subject matches the passed\n * certificate's issuer.\n */\n cert.issued = function(child) {\n return child.isIssuer(cert);\n };\n\n /**\n * Generates the subjectKeyIdentifier for this certificate as byte buffer.\n *\n * @return the subjectKeyIdentifier for this certificate as byte buffer.\n */\n cert.generateSubjectKeyIdentifier = function() {\n /* See: 4.2.1.2 section of the the RFC3280, keyIdentifier is either:\n\n (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the\n value of the BIT STRING subjectPublicKey (excluding the tag,\n length, and number of unused bits).\n\n (2) The keyIdentifier is composed of a four bit type field with\n the value 0100 followed by the least significant 60 bits of the\n SHA-1 hash of the value of the BIT STRING subjectPublicKey\n (excluding the tag, length, and number of unused bit string bits).\n */\n\n // skipping the tag, length, and number of unused bits is the same\n // as just using the RSAPublicKey (for RSA keys, which are the\n // only ones supported)\n return pki.getPublicKeyFingerprint(cert.publicKey, {type: 'RSAPublicKey'});\n };\n\n /**\n * Verifies the subjectKeyIdentifier extension value for this certificate\n * against its public key. If no extension is found, false will be\n * returned.\n *\n * @return true if verified, false if not.\n */\n cert.verifySubjectKeyIdentifier = function() {\n var oid = oids['subjectKeyIdentifier'];\n for(var i = 0; i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.id === oid) {\n var ski = cert.generateSubjectKeyIdentifier().getBytes();\n return (forge.util.hexToBytes(ext.subjectKeyIdentifier) === ski);\n }\n }\n return false;\n };\n\n return cert;\n};\n\n/**\n * Converts an X.509v3 RSA certificate from an ASN.1 object.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the TBSCertificate part of the ASN.1\n * object needs to be scanned before the cert object is created.\n *\n * @param obj the asn1 representation of an X.509v3 RSA certificate.\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certificate.\n */\npki.certificateFromAsn1 = function(obj, computeHash) {\n // validate certificate and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, x509CertificateValidator, capture, errors)) {\n var error = new Error('Cannot read X.509 certificate. ' +\n 'ASN.1 object is not an X509v3 Certificate.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certificate\n var cert = pki.createCertificate();\n cert.version = capture.certVersion ?\n capture.certVersion.charCodeAt(0) : 0;\n var serial = forge.util.createBuffer(capture.certSerialNumber);\n cert.serialNumber = serial.toHex();\n cert.signatureOid = forge.asn1.derToOid(capture.certSignatureOid);\n cert.signatureParameters = _readSignatureParameters(\n cert.signatureOid, capture.certSignatureParams, true);\n cert.siginfo.algorithmOid = forge.asn1.derToOid(capture.certinfoSignatureOid);\n cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid,\n capture.certinfoSignatureParams, false);\n cert.signature = capture.certSignature;\n\n var validity = [];\n if(capture.certValidity1UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity1UTCTime));\n }\n if(capture.certValidity2GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity2GeneralizedTime));\n }\n if(capture.certValidity3UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity3UTCTime));\n }\n if(capture.certValidity4GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity4GeneralizedTime));\n }\n if(validity.length > 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; more ' +\n 'than two times were provided in the certificate.');\n }\n if(validity.length < 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; they ' +\n 'were not provided as either UTCTime or GeneralizedTime.');\n }\n cert.validity.notBefore = validity[0];\n cert.validity.notAfter = validity[1];\n\n // keep TBSCertificate to preserve signature when exporting\n cert.tbsCertificate = capture.tbsCertificate;\n\n if(computeHash) {\n // create digest for OID signature type\n cert.md = _createSignatureDigest({\n signatureOid: cert.signatureOid,\n type: 'certificate'\n });\n\n // produce DER formatted TBSCertificate and digest it\n var bytes = asn1.toDer(cert.tbsCertificate);\n cert.md.update(bytes.getBytes());\n }\n\n // handle issuer, build issuer message digest\n var imd = forge.md.sha1.create();\n var ibytes = asn1.toDer(capture.certIssuer);\n imd.update(ibytes.getBytes());\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = pki.RDNAttributesAsArray(capture.certIssuer);\n if(capture.certIssuerUniqueId) {\n cert.issuer.uniqueId = capture.certIssuerUniqueId;\n }\n cert.issuer.hash = imd.digest().toHex();\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n var sbytes = asn1.toDer(capture.certSubject);\n smd.update(sbytes.getBytes());\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = pki.RDNAttributesAsArray(capture.certSubject);\n if(capture.certSubjectUniqueId) {\n cert.subject.uniqueId = capture.certSubjectUniqueId;\n }\n cert.subject.hash = smd.digest().toHex();\n\n // handle extensions\n if(capture.certExtensions) {\n cert.extensions = pki.certificateExtensionsFromAsn1(capture.certExtensions);\n } else {\n cert.extensions = [];\n }\n\n // convert RSA public key from ASN.1\n cert.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n return cert;\n};\n\n/**\n * Converts an ASN.1 extensions object (with extension sequences as its\n * values) into an array of extension objects with types and values.\n *\n * Supported extensions:\n *\n * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }\n * KeyUsage ::= BIT STRING {\n * digitalSignature (0),\n * nonRepudiation (1),\n * keyEncipherment (2),\n * dataEncipherment (3),\n * keyAgreement (4),\n * keyCertSign (5),\n * cRLSign (6),\n * encipherOnly (7),\n * decipherOnly (8)\n * }\n *\n * id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }\n * BasicConstraints ::= SEQUENCE {\n * cA BOOLEAN DEFAULT FALSE,\n * pathLenConstraint INTEGER (0..MAX) OPTIONAL\n * }\n *\n * subjectAltName EXTENSION ::= {\n * SYNTAX GeneralNames\n * IDENTIFIED BY id-ce-subjectAltName\n * }\n *\n * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName\n *\n * GeneralName ::= CHOICE {\n * otherName [0] INSTANCE OF OTHER-NAME,\n * rfc822Name [1] IA5String,\n * dNSName [2] IA5String,\n * x400Address [3] ORAddress,\n * directoryName [4] Name,\n * ediPartyName [5] EDIPartyName,\n * uniformResourceIdentifier [6] IA5String,\n * IPAddress [7] OCTET STRING,\n * registeredID [8] OBJECT IDENTIFIER\n * }\n *\n * OTHER-NAME ::= TYPE-IDENTIFIER\n *\n * EDIPartyName ::= SEQUENCE {\n * nameAssigner [0] DirectoryString {ub-name} OPTIONAL,\n * partyName [1] DirectoryString {ub-name}\n * }\n *\n * @param exts the extensions ASN.1 with extension sequences to parse.\n *\n * @return the array.\n */\npki.certificateExtensionsFromAsn1 = function(exts) {\n var rval = [];\n for(var i = 0; i < exts.value.length; ++i) {\n // get extension sequence\n var extseq = exts.value[i];\n for(var ei = 0; ei < extseq.value.length; ++ei) {\n rval.push(pki.certificateExtensionFromAsn1(extseq.value[ei]));\n }\n }\n\n return rval;\n};\n\n/**\n * Parses a single certificate extension from ASN.1.\n *\n * @param ext the extension in ASN.1 format.\n *\n * @return the parsed extension as an object.\n */\npki.certificateExtensionFromAsn1 = function(ext) {\n // an extension has:\n // [0] extnID OBJECT IDENTIFIER\n // [1] critical BOOLEAN DEFAULT FALSE\n // [2] extnValue OCTET STRING\n var e = {};\n e.id = asn1.derToOid(ext.value[0].value);\n e.critical = false;\n if(ext.value[1].type === asn1.Type.BOOLEAN) {\n e.critical = (ext.value[1].value.charCodeAt(0) !== 0x00);\n e.value = ext.value[2].value;\n } else {\n e.value = ext.value[1].value;\n }\n // if the oid is known, get its name\n if(e.id in oids) {\n e.name = oids[e.id];\n\n // handle key usage\n if(e.name === 'keyUsage') {\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n var b3 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0;\n }\n // set flags\n e.digitalSignature = (b2 & 0x80) === 0x80;\n e.nonRepudiation = (b2 & 0x40) === 0x40;\n e.keyEncipherment = (b2 & 0x20) === 0x20;\n e.dataEncipherment = (b2 & 0x10) === 0x10;\n e.keyAgreement = (b2 & 0x08) === 0x08;\n e.keyCertSign = (b2 & 0x04) === 0x04;\n e.cRLSign = (b2 & 0x02) === 0x02;\n e.encipherOnly = (b2 & 0x01) === 0x01;\n e.decipherOnly = (b3 & 0x80) === 0x80;\n } else if(e.name === 'basicConstraints') {\n // handle basic constraints\n // get value as SEQUENCE\n var ev = asn1.fromDer(e.value);\n // get cA BOOLEAN flag (defaults to false)\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.BOOLEAN) {\n e.cA = (ev.value[0].value.charCodeAt(0) !== 0x00);\n } else {\n e.cA = false;\n }\n // get path length constraint\n var value = null;\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.INTEGER) {\n value = ev.value[0].value;\n } else if(ev.value.length > 1) {\n value = ev.value[1].value;\n }\n if(value !== null) {\n e.pathLenConstraint = asn1.derToInteger(value);\n }\n } else if(e.name === 'extKeyUsage') {\n // handle extKeyUsage\n // value is a SEQUENCE of OIDs\n var ev = asn1.fromDer(e.value);\n for(var vi = 0; vi < ev.value.length; ++vi) {\n var oid = asn1.derToOid(ev.value[vi].value);\n if(oid in oids) {\n e[oids[oid]] = true;\n } else {\n e[oid] = true;\n }\n }\n } else if(e.name === 'nsCertType') {\n // handle nsCertType\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n }\n // set flags\n e.client = (b2 & 0x80) === 0x80;\n e.server = (b2 & 0x40) === 0x40;\n e.email = (b2 & 0x20) === 0x20;\n e.objsign = (b2 & 0x10) === 0x10;\n e.reserved = (b2 & 0x08) === 0x08;\n e.sslCA = (b2 & 0x04) === 0x04;\n e.emailCA = (b2 & 0x02) === 0x02;\n e.objCA = (b2 & 0x01) === 0x01;\n } else if(\n e.name === 'subjectAltName' ||\n e.name === 'issuerAltName') {\n // handle subjectAltName/issuerAltName\n e.altNames = [];\n\n // ev is a SYNTAX SEQUENCE\n var gn;\n var ev = asn1.fromDer(e.value);\n for(var n = 0; n < ev.value.length; ++n) {\n // get GeneralName\n gn = ev.value[n];\n\n var altName = {\n type: gn.type,\n value: gn.value\n };\n e.altNames.push(altName);\n\n // Note: Support for types 1,2,6,7,8\n switch(gn.type) {\n // rfc822Name\n case 1:\n // dNSName\n case 2:\n // uniformResourceIdentifier (URI)\n case 6:\n break;\n // IPAddress\n case 7:\n // convert to IPv4/IPv6 string representation\n altName.ip = forge.util.bytesToIP(gn.value);\n break;\n // registeredID\n case 8:\n altName.oid = asn1.derToOid(gn.value);\n break;\n default:\n // unsupported\n }\n }\n } else if(e.name === 'subjectKeyIdentifier') {\n // value is an OCTETSTRING w/the hash of the key-type specific\n // public key structure (eg: RSAPublicKey)\n var ev = asn1.fromDer(e.value);\n e.subjectKeyIdentifier = forge.util.bytesToHex(ev.value);\n }\n }\n return e;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from an ASN.1 object.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the CertificationRequestInfo part of the\n * ASN.1 object needs to be scanned before the csr object is created.\n *\n * @param obj the asn1 representation of a PKCS#10 certification request (CSR).\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromAsn1 = function(obj, computeHash) {\n // validate certification request and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, certificationRequestValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#10 certificate request. ' +\n 'ASN.1 object is not a PKCS#10 CertificationRequest.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certification request\n var csr = pki.createCertificationRequest();\n csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0;\n csr.signatureOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.signatureParameters = _readSignatureParameters(\n csr.signatureOid, capture.csrSignatureParams, true);\n csr.siginfo.algorithmOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.siginfo.parameters = _readSignatureParameters(\n csr.siginfo.algorithmOid, capture.csrSignatureParams, false);\n csr.signature = capture.csrSignature;\n\n // keep CertificationRequestInfo to preserve signature when exporting\n csr.certificationRequestInfo = capture.certificationRequestInfo;\n\n if(computeHash) {\n // create digest for OID signature type\n csr.md = _createSignatureDigest({\n signatureOid: csr.signatureOid,\n type: 'certification request'\n });\n\n // produce DER formatted CertificationRequestInfo and digest it\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n csr.md.update(bytes.getBytes());\n }\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = pki.RDNAttributesAsArray(\n capture.certificationRequestInfoSubject, smd);\n csr.subject.hash = smd.digest().toHex();\n\n // convert RSA public key from ASN.1\n csr.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n // convert attributes from ASN.1\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.attributes = pki.CRIAttributesAsArray(\n capture.certificationRequestInfoAttributes || []);\n\n return csr;\n};\n\n/**\n * Creates an empty certification request (a CSR or certificate signing\n * request). Once created, its public key and attributes can be set and then\n * it can be signed.\n *\n * @return the empty certification request.\n */\npki.createCertificationRequest = function() {\n var csr = {};\n csr.version = 0x00;\n csr.signatureOid = null;\n csr.signature = null;\n csr.siginfo = {};\n csr.siginfo.algorithmOid = null;\n\n csr.subject = {};\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = [];\n csr.subject.hash = null;\n\n csr.publicKey = null;\n csr.attributes = [];\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.md = null;\n\n /**\n * Sets the subject of this certification request.\n *\n * @param attrs the array of subject attributes to use.\n */\n csr.setSubject = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.subject.attributes = attrs;\n csr.subject.hash = null;\n };\n\n /**\n * Sets the attributes of this certification request.\n *\n * @param attrs the array of attributes to use.\n */\n csr.setAttributes = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.attributes = attrs;\n };\n\n /**\n * Signs this certification request using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n csr.sign = function(key, md) {\n // TODO: get signature OID from private key\n csr.md = md || forge.md.sha1.create();\n var algorithmOid = oids[csr.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certification request digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = csr.md.algorithm;\n throw error;\n }\n csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid;\n\n // get CertificationRequestInfo, convert to DER\n csr.certificationRequestInfo = pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n\n // digest and sign\n csr.md.update(bytes.getBytes());\n csr.signature = key.sign(csr.md);\n };\n\n /**\n * Attempts verify the signature on the passed certification request using\n * its public key.\n *\n * A CSR that has been exported to a file in PEM format can be verified using\n * OpenSSL using this command:\n *\n * openssl req -in -verify -noout -text\n *\n * @return true if verified, false if not.\n */\n csr.verify = function() {\n var rval = false;\n\n var md = csr.md;\n if(md === null) {\n md = _createSignatureDigest({\n signatureOid: csr.signatureOid,\n type: 'certification request'\n });\n\n // produce DER formatted CertificationRequestInfo and digest it\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(cri);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n rval = _verifySignature({\n certificate: csr, md: md, signature: csr.signature\n });\n }\n\n return rval;\n };\n\n return csr;\n};\n\n/**\n * Converts an X.509 subject or issuer to an ASN.1 RDNSequence.\n *\n * @param obj the subject or issuer (distinguished name).\n *\n * @return the ASN.1 RDNSequence.\n */\nfunction _dnToAsn1(obj) {\n // create an empty RDNSequence\n var rval = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // iterate over attributes\n var attr, set;\n var attrs = obj.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.PRINTABLESTRING;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n // FIXME: handle more encodings\n }\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n set = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n // AttributeValue\n asn1.create(asn1.Class.UNIVERSAL, valueTagClass, false, value)\n ])\n ]);\n rval.value.push(set);\n }\n\n return rval;\n}\n\n/**\n * Gets all printable attributes (typically of an issuer or subject) in a\n * simplified JSON format for display.\n *\n * @param attrs the attributes.\n *\n * @return the JSON for display.\n */\nfunction _getAttributesAsJson(attrs) {\n var rval = {};\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n if(attr.shortName && (\n attr.valueTagClass === asn1.Type.UTF8 ||\n attr.valueTagClass === asn1.Type.PRINTABLESTRING ||\n attr.valueTagClass === asn1.Type.IA5STRING)) {\n var value = attr.value;\n if(attr.valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(attr.value);\n }\n if(!(attr.shortName in rval)) {\n rval[attr.shortName] = value;\n } else if(forge.util.isArray(rval[attr.shortName])) {\n rval[attr.shortName].push(value);\n } else {\n rval[attr.shortName] = [rval[attr.shortName], value];\n }\n }\n }\n return rval;\n}\n\n/**\n * Fills in missing fields in attributes.\n *\n * @param attrs the attributes to fill missing fields in.\n */\nfunction _fillMissingFields(attrs) {\n var attr;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n\n // populate missing name\n if(typeof attr.name === 'undefined') {\n if(attr.type && attr.type in pki.oids) {\n attr.name = pki.oids[attr.type];\n } else if(attr.shortName && attr.shortName in _shortNames) {\n attr.name = pki.oids[_shortNames[attr.shortName]];\n }\n }\n\n // populate missing type (OID)\n if(typeof attr.type === 'undefined') {\n if(attr.name && attr.name in pki.oids) {\n attr.type = pki.oids[attr.name];\n } else {\n var error = new Error('Attribute type not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n\n // populate missing shortname\n if(typeof attr.shortName === 'undefined') {\n if(attr.name && attr.name in _shortNames) {\n attr.shortName = _shortNames[attr.name];\n }\n }\n\n // convert extensions to value\n if(attr.type === oids.extensionRequest) {\n attr.valueConstructed = true;\n attr.valueTagClass = asn1.Type.SEQUENCE;\n if(!attr.value && attr.extensions) {\n attr.value = [];\n for(var ei = 0; ei < attr.extensions.length; ++ei) {\n attr.value.push(pki.certificateExtensionToAsn1(\n _fillMissingExtensionFields(attr.extensions[ei])));\n }\n }\n }\n\n if(typeof attr.value === 'undefined') {\n var error = new Error('Attribute value not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n}\n\n/**\n * Fills in missing fields in certificate extensions.\n *\n * @param e the extension.\n * @param [options] the options to use.\n * [cert] the certificate the extensions are for.\n *\n * @return the extension.\n */\nfunction _fillMissingExtensionFields(e, options) {\n options = options || {};\n\n // populate missing name\n if(typeof e.name === 'undefined') {\n if(e.id && e.id in pki.oids) {\n e.name = pki.oids[e.id];\n }\n }\n\n // populate missing id\n if(typeof e.id === 'undefined') {\n if(e.name && e.name in pki.oids) {\n e.id = pki.oids[e.name];\n } else {\n var error = new Error('Extension ID not specified.');\n error.extension = e;\n throw error;\n }\n }\n\n if(typeof e.value !== 'undefined') {\n return e;\n }\n\n // handle missing value:\n\n // value is a BIT STRING\n if(e.name === 'keyUsage') {\n // build flags\n var unused = 0;\n var b2 = 0x00;\n var b3 = 0x00;\n if(e.digitalSignature) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.nonRepudiation) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.keyEncipherment) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.dataEncipherment) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.keyAgreement) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.keyCertSign) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.cRLSign) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.encipherOnly) {\n b2 |= 0x01;\n unused = 0;\n }\n if(e.decipherOnly) {\n b3 |= 0x80;\n unused = 7;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b3 !== 0) {\n value += String.fromCharCode(b2) + String.fromCharCode(b3);\n } else if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'basicConstraints') {\n // basicConstraints is a SEQUENCE\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n // cA BOOLEAN flag defaults to false\n if(e.cA) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n if('pathLenConstraint' in e) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(e.pathLenConstraint).getBytes()));\n }\n } else if(e.name === 'extKeyUsage') {\n // extKeyUsage is a SEQUENCE of OIDs\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n for(var key in e) {\n if(e[key] !== true) {\n continue;\n }\n // key is name in OID map\n if(key in oids) {\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(oids[key]).getBytes()));\n } else if(key.indexOf('.') !== -1) {\n // assume key is an OID\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(key).getBytes()));\n }\n }\n } else if(e.name === 'nsCertType') {\n // nsCertType is a BIT STRING\n // build flags\n var unused = 0;\n var b2 = 0x00;\n\n if(e.client) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.server) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.email) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.objsign) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.reserved) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.sslCA) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.emailCA) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.objCA) {\n b2 |= 0x01;\n unused = 0;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'subjectAltName' || e.name === 'issuerAltName') {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n e.value.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n } else if(e.name === 'nsComment' && options.cert) {\n // sanity check value is ASCII (req'd) and not too big\n if(!(/^[\\x00-\\x7F]*$/.test(e.comment)) ||\n (e.comment.length < 1) || (e.comment.length > 128)) {\n throw new Error('Invalid \"nsComment\" content.');\n }\n // IA5STRING opaque comment\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.IA5STRING, false, e.comment);\n } else if(e.name === 'subjectKeyIdentifier' && options.cert) {\n var ski = options.cert.generateSubjectKeyIdentifier();\n e.subjectKeyIdentifier = ski.toHex();\n // OCTETSTRING w/digest\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ski.getBytes());\n } else if(e.name === 'authorityKeyIdentifier' && options.cert) {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n if(e.keyIdentifier) {\n var keyIdentifier = (e.keyIdentifier === true ?\n options.cert.generateSubjectKeyIdentifier().getBytes() :\n e.keyIdentifier);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier));\n }\n\n if(e.authorityCertIssuer) {\n var authorityCertIssuer = [\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 4, true, [\n _dnToAsn1(e.authorityCertIssuer === true ?\n options.cert.issuer : e.authorityCertIssuer)\n ])\n ];\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer));\n }\n\n if(e.serialNumber) {\n var serialNumber = forge.util.hexToBytes(e.serialNumber === true ?\n options.cert.serialNumber : e.serialNumber);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, false, serialNumber));\n }\n } else if(e.name === 'cRLDistributionPoints') {\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n // Create sub SEQUENCE of DistributionPointName\n var subSeq = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // Create fullName CHOICE\n var fullNameGeneralNames = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n fullNameGeneralNames.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n\n // Add to the parent SEQUENCE\n subSeq.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames]));\n seq.push(subSeq);\n }\n\n // ensure value has been defined by now\n if(typeof e.value === 'undefined') {\n var error = new Error('Extension value not specified.');\n error.extension = e;\n throw error;\n }\n\n return e;\n}\n\n/**\n * Convert signature parameters object to ASN.1\n *\n * @param {String} oid Signature algorithm OID\n * @param params The signature parametrs object\n * @return ASN.1 object representing signature parameters\n */\nfunction _signatureParametersToAsn1(oid, params) {\n switch(oid) {\n case oids['RSASSA-PSS']:\n var parts = [];\n\n if(params.hash.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]));\n }\n\n if(params.mgf.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ])\n ]));\n }\n\n if(params.saltLength !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(params.saltLength).getBytes())\n ]));\n }\n\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, parts);\n\n default:\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '');\n }\n}\n\n/**\n * Converts a certification request's attributes to an ASN.1 set of\n * CRIAttributes.\n *\n * @param csr certification request.\n *\n * @return the ASN.1 set of CRIAttributes.\n */\nfunction _CRIAttributesToAsn1(csr) {\n // create an empty context-specific container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // no attributes, return empty container\n if(csr.attributes.length === 0) {\n return rval;\n }\n\n // each attribute has a sequence with a type and a set of values\n var attrs = csr.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.UTF8;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n }\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n var valueConstructed = false;\n if('valueConstructed' in attr) {\n valueConstructed = attr.valueConstructed;\n }\n // FIXME: handle more encodings\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n asn1.create(\n asn1.Class.UNIVERSAL, valueTagClass, valueConstructed, value)\n ])\n ]);\n rval.value.push(seq);\n }\n\n return rval;\n}\n\nvar jan_1_1950 = new Date('1950-01-01T00:00:00Z');\nvar jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n\n/**\n * Converts a Date object to ASN.1\n * Handles the different format before and after 1st January 2050\n *\n * @param date date object.\n *\n * @return the ASN.1 object representing the date.\n */\nfunction _dateToAsn1(date) {\n if(date >= jan_1_1950 && date < jan_1_2050) {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n}\n\n/**\n * Gets the ASN.1 TBSCertificate part of an X.509v3 certificate.\n *\n * @param cert the certificate.\n *\n * @return the asn1 TBSCertificate.\n */\npki.getTBSCertificate = function(cert) {\n // TBSCertificate\n var notBefore = _dateToAsn1(cert.validity.notBefore);\n var notAfter = _dateToAsn1(cert.validity.notAfter);\n var tbs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // integer\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(cert.version).getBytes())\n ]),\n // serialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(cert.serialNumber)),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.siginfo.algorithmOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(\n cert.siginfo.algorithmOid, cert.siginfo.parameters)\n ]),\n // issuer\n _dnToAsn1(cert.issuer),\n // validity\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n notBefore,\n notAfter\n ]),\n // subject\n _dnToAsn1(cert.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(cert.publicKey)\n ]);\n\n if(cert.issuer.uniqueId) {\n // issuerUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.issuer.uniqueId\n )\n ])\n );\n }\n if(cert.subject.uniqueId) {\n // subjectUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.subject.uniqueId\n )\n ])\n );\n }\n\n if(cert.extensions.length > 0) {\n // extensions (optional)\n tbs.value.push(pki.certificateExtensionsToAsn1(cert.extensions));\n }\n\n return tbs;\n};\n\n/**\n * Gets the ASN.1 CertificationRequestInfo part of a\n * PKCS#10 CertificationRequest.\n *\n * @param csr the certification request.\n *\n * @return the asn1 CertificationRequestInfo.\n */\npki.getCertificationRequestInfo = function(csr) {\n // CertificationRequestInfo\n var cri = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(csr.version).getBytes()),\n // subject\n _dnToAsn1(csr.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(csr.publicKey),\n // attributes\n _CRIAttributesToAsn1(csr)\n ]);\n\n return cri;\n};\n\n/**\n * Converts a DistinguishedName (subject or issuer) to an ASN.1 object.\n *\n * @param dn the DistinguishedName.\n *\n * @return the asn1 representation of a DistinguishedName.\n */\npki.distinguishedNameToAsn1 = function(dn) {\n return _dnToAsn1(dn);\n};\n\n/**\n * Converts an X.509v3 RSA certificate to an ASN.1 object.\n *\n * @param cert the certificate.\n *\n * @return the asn1 representation of an X.509v3 RSA certificate.\n */\npki.certificateToAsn1 = function(cert) {\n // prefer cached TBSCertificate over generating one\n var tbsCertificate = cert.tbsCertificate || pki.getTBSCertificate(cert);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // TBSCertificate\n tbsCertificate,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters)\n ]),\n // SignatureValue\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + cert.signature)\n ]);\n};\n\n/**\n * Converts X.509v3 certificate extensions to ASN.1.\n *\n * @param exts the extensions to convert.\n *\n * @return the extensions in ASN.1 format.\n */\npki.certificateExtensionsToAsn1 = function(exts) {\n // create top-level extension container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 3, true, []);\n\n // create extension sequence (stores a sequence for each extension)\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n rval.value.push(seq);\n\n for(var i = 0; i < exts.length; ++i) {\n seq.value.push(pki.certificateExtensionToAsn1(exts[i]));\n }\n\n return rval;\n};\n\n/**\n * Converts a single certificate extension to ASN.1.\n *\n * @param ext the extension to convert.\n *\n * @return the extension in ASN.1 format.\n */\npki.certificateExtensionToAsn1 = function(ext) {\n // create a sequence for each extension\n var extseq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // extnID (OID)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ext.id).getBytes()));\n\n // critical defaults to false\n if(ext.critical) {\n // critical BOOLEAN DEFAULT FALSE\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n\n var value = ext.value;\n if(typeof ext.value !== 'string') {\n // value is asn.1\n value = asn1.toDer(value).getBytes();\n }\n\n // extnValue (OCTET STRING)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value));\n\n return extseq;\n};\n\n/**\n * Converts a PKCS#10 certification request to an ASN.1 object.\n *\n * @param csr the certification request.\n *\n * @return the asn1 representation of a certification request.\n */\npki.certificationRequestToAsn1 = function(csr) {\n // prefer cached CertificationRequestInfo over generating one\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // CertificationRequestInfo\n cri,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(csr.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters)\n ]),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + csr.signature)\n ]);\n};\n\n/**\n * Creates a CA store.\n *\n * @param certs an optional array of certificate objects or PEM-formatted\n * certificate strings to add to the CA store.\n *\n * @return the CA store.\n */\npki.createCaStore = function(certs) {\n // create CA store\n var caStore = {\n // stored certificates\n certs: {}\n };\n\n /**\n * Gets the certificate that issued the passed certificate or its\n * 'parent'.\n *\n * @param cert the certificate to get the parent for.\n *\n * @return the parent certificate or null if none was found.\n */\n caStore.getIssuer = function(cert) {\n var rval = getBySubject(cert.issuer);\n\n // see if there are multiple matches\n /*if(forge.util.isArray(rval)) {\n // TODO: resolve multiple matches by checking\n // authorityKey/subjectKey/issuerUniqueID/other identifiers, etc.\n // FIXME: or alternatively do authority key mapping\n // if possible (X.509v1 certs can't work?)\n throw new Error('Resolving multiple issuer matches not implemented yet.');\n }*/\n\n return rval;\n };\n\n /**\n * Adds a trusted certificate to the store.\n *\n * @param cert the certificate to add as a trusted certificate (either a\n * pki.certificate object or a PEM-formatted certificate).\n */\n caStore.addCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n ensureSubjectHasHash(cert.subject);\n\n if(!caStore.hasCertificate(cert)) { // avoid duplicate certificates in store\n if(cert.subject.hash in caStore.certs) {\n // subject hash already exists, append to array\n var tmp = caStore.certs[cert.subject.hash];\n if(!forge.util.isArray(tmp)) {\n tmp = [tmp];\n }\n tmp.push(cert);\n caStore.certs[cert.subject.hash] = tmp;\n } else {\n caStore.certs[cert.subject.hash] = cert;\n }\n }\n };\n\n /**\n * Checks to see if the given certificate is in the store.\n *\n * @param cert the certificate to check (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return true if the certificate is in the store, false if not.\n */\n caStore.hasCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n var match = getBySubject(cert.subject);\n if(!match) {\n return false;\n }\n if(!forge.util.isArray(match)) {\n match = [match];\n }\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Lists all of the certificates kept in the store.\n *\n * @return an array of all of the pki.certificate objects in the store.\n */\n caStore.listAllCertificates = function() {\n var certList = [];\n\n for(var hash in caStore.certs) {\n if(caStore.certs.hasOwnProperty(hash)) {\n var value = caStore.certs[hash];\n if(!forge.util.isArray(value)) {\n certList.push(value);\n } else {\n for(var i = 0; i < value.length; ++i) {\n certList.push(value[i]);\n }\n }\n }\n }\n\n return certList;\n };\n\n /**\n * Removes a certificate from the store.\n *\n * @param cert the certificate to remove (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return the certificate that was removed or null if the certificate\n * wasn't in store.\n */\n caStore.removeCertificate = function(cert) {\n var result;\n\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n ensureSubjectHasHash(cert.subject);\n if(!caStore.hasCertificate(cert)) {\n return null;\n }\n\n var match = getBySubject(cert.subject);\n\n if(!forge.util.isArray(match)) {\n result = caStore.certs[cert.subject.hash];\n delete caStore.certs[cert.subject.hash];\n return result;\n }\n\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n result = match[i];\n match.splice(i, 1);\n }\n }\n if(match.length === 0) {\n delete caStore.certs[cert.subject.hash];\n }\n\n return result;\n };\n\n function getBySubject(subject) {\n ensureSubjectHasHash(subject);\n return caStore.certs[subject.hash] || null;\n }\n\n function ensureSubjectHasHash(subject) {\n // produce subject hash if it doesn't exist\n if(!subject.hash) {\n var md = forge.md.sha1.create();\n subject.attributes = pki.RDNAttributesAsArray(_dnToAsn1(subject), md);\n subject.hash = md.digest().toHex();\n }\n }\n\n // auto-add passed in certs\n if(certs) {\n // parse PEM-formatted certificates as necessary\n for(var i = 0; i < certs.length; ++i) {\n var cert = certs[i];\n caStore.addCertificate(cert);\n }\n }\n\n return caStore;\n};\n\n/**\n * Certificate verification errors, based on TLS.\n */\npki.certificateError = {\n bad_certificate: 'forge.pki.BadCertificate',\n unsupported_certificate: 'forge.pki.UnsupportedCertificate',\n certificate_revoked: 'forge.pki.CertificateRevoked',\n certificate_expired: 'forge.pki.CertificateExpired',\n certificate_unknown: 'forge.pki.CertificateUnknown',\n unknown_ca: 'forge.pki.UnknownCertificateAuthority'\n};\n\n/**\n * Verifies a certificate chain against the given Certificate Authority store\n * with an optional custom verify callback.\n *\n * @param caStore a certificate store to verify against.\n * @param chain the certificate chain to verify, with the root or highest\n * authority at the end (an array of certificates).\n * @param options a callback to be called for every certificate in the chain or\n * an object with:\n * verify a callback to be called for every certificate in the\n * chain\n * validityCheckDate the date against which the certificate\n * validity period should be checked. Pass null to not check\n * the validity period. By default, the current date is used.\n *\n * The verify callback has the following signature:\n *\n * verified - Set to true if certificate was verified, otherwise the\n * pki.certificateError for why the certificate failed.\n * depth - The current index in the chain, where 0 is the end point's cert.\n * certs - The certificate chain, *NOTE* an empty chain indicates an anonymous\n * end point.\n *\n * The function returns true on success and on failure either the appropriate\n * pki.certificateError or an object with 'error' set to the appropriate\n * pki.certificateError and 'message' set to a custom error message.\n *\n * @return true if successful, error thrown if not.\n */\npki.verifyCertificateChain = function(caStore, chain, options) {\n /* From: RFC3280 - Internet X.509 Public Key Infrastructure Certificate\n Section 6: Certification Path Validation\n See inline parentheticals related to this particular implementation.\n\n The primary goal of path validation is to verify the binding between\n a subject distinguished name or a subject alternative name and subject\n public key, as represented in the end entity certificate, based on the\n public key of the trust anchor. This requires obtaining a sequence of\n certificates that support that binding. That sequence should be provided\n in the passed 'chain'. The trust anchor should be in the given CA\n store. The 'end entity' certificate is the certificate provided by the\n end point (typically a server) and is the first in the chain.\n\n To meet this goal, the path validation process verifies, among other\n things, that a prospective certification path (a sequence of n\n certificates or a 'chain') satisfies the following conditions:\n\n (a) for all x in {1, ..., n-1}, the subject of certificate x is\n the issuer of certificate x+1;\n\n (b) certificate 1 is issued by the trust anchor;\n\n (c) certificate n is the certificate to be validated; and\n\n (d) for all x in {1, ..., n}, the certificate was valid at the\n time in question.\n\n Note that here 'n' is index 0 in the chain and 1 is the last certificate\n in the chain and it must be signed by a certificate in the connection's\n CA store.\n\n The path validation process also determines the set of certificate\n policies that are valid for this path, based on the certificate policies\n extension, policy mapping extension, policy constraints extension, and\n inhibit any-policy extension.\n\n Note: Policy mapping extension not supported (Not Required).\n\n Note: If the certificate has an unsupported critical extension, then it\n must be rejected.\n\n Note: A certificate is self-issued if the DNs that appear in the subject\n and issuer fields are identical and are not empty.\n\n The path validation algorithm assumes the following seven inputs are\n provided to the path processing logic. What this specific implementation\n will use is provided parenthetically:\n\n (a) a prospective certification path of length n (the 'chain')\n (b) the current date/time: ('now').\n (c) user-initial-policy-set: A set of certificate policy identifiers\n naming the policies that are acceptable to the certificate user.\n The user-initial-policy-set contains the special value any-policy\n if the user is not concerned about certificate policy\n (Not implemented. Any policy is accepted).\n (d) trust anchor information, describing a CA that serves as a trust\n anchor for the certification path. The trust anchor information\n includes:\n\n (1) the trusted issuer name,\n (2) the trusted public key algorithm,\n (3) the trusted public key, and\n (4) optionally, the trusted public key parameters associated\n with the public key.\n\n (Trust anchors are provided via certificates in the CA store).\n\n The trust anchor information may be provided to the path processing\n procedure in the form of a self-signed certificate. The trusted anchor\n information is trusted because it was delivered to the path processing\n procedure by some trustworthy out-of-band procedure. If the trusted\n public key algorithm requires parameters, then the parameters are\n provided along with the trusted public key (No parameters used in this\n implementation).\n\n (e) initial-policy-mapping-inhibit, which indicates if policy mapping is\n allowed in the certification path.\n (Not implemented, no policy checking)\n\n (f) initial-explicit-policy, which indicates if the path must be valid\n for at least one of the certificate policies in the user-initial-\n policy-set.\n (Not implemented, no policy checking)\n\n (g) initial-any-policy-inhibit, which indicates whether the\n anyPolicy OID should be processed if it is included in a\n certificate.\n (Not implemented, so any policy is valid provided that it is\n not marked as critical) */\n\n /* Basic Path Processing:\n\n For each certificate in the 'chain', the following is checked:\n\n 1. The certificate validity period includes the current time.\n 2. The certificate was signed by its parent (where the parent is either\n the next in the chain or from the CA store). Allow processing to\n continue to the next step if no parent is found but the certificate is\n in the CA store.\n 3. TODO: The certificate has not been revoked.\n 4. The certificate issuer name matches the parent's subject name.\n 5. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is within one of the permitted subtrees of X.500 distinguished names\n and that each of the alternative names in the subjectAltName extension\n (critical or non-critical) is within one of the permitted subtrees for\n that name type.\n 6. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is not within one of the excluded subtrees for X.500 distinguished\n names and none of the subjectAltName extension names are excluded for\n that name type.\n 7. The other steps in the algorithm for basic path processing involve\n handling the policy extension which is not presently supported in this\n implementation. Instead, if a critical policy extension is found, the\n certificate is rejected as not supported.\n 8. If the certificate is not the first or if its the only certificate in\n the chain (having no parent from the CA store or is self-signed) and it\n has a critical key usage extension, verify that the keyCertSign bit is\n set. If the key usage extension exists, verify that the basic\n constraints extension exists. If the basic constraints extension exists,\n verify that the cA flag is set. If pathLenConstraint is set, ensure that\n the number of certificates that precede in the chain (come earlier\n in the chain as implemented below), excluding the very first in the\n chain (typically the end-entity one), isn't greater than the\n pathLenConstraint. This constraint limits the number of intermediate\n CAs that may appear below a CA before only end-entity certificates\n may be issued. */\n\n // if a verify callback is passed as the third parameter, package it within\n // the options object. This is to support a legacy function signature that\n // expected the verify callback as the third parameter.\n if(typeof options === 'function') {\n options = {verify: options};\n }\n options = options || {};\n\n // copy cert chain references to another array to protect against changes\n // in verify callback\n chain = chain.slice(0);\n var certs = chain.slice(0);\n\n var validityCheckDate = options.validityCheckDate;\n // if no validityCheckDate is specified, default to the current date. Make\n // sure to maintain the value null because it indicates that the validity\n // period should not be checked.\n if(typeof validityCheckDate === 'undefined') {\n validityCheckDate = new Date();\n }\n\n // verify each cert in the chain using its parent, where the parent\n // is either the next in the chain or from the CA store\n var first = true;\n var error = null;\n var depth = 0;\n do {\n var cert = chain.shift();\n var parent = null;\n var selfSigned = false;\n\n if(validityCheckDate) {\n // 1. check valid time\n if(validityCheckDate < cert.validity.notBefore ||\n validityCheckDate > cert.validity.notAfter) {\n error = {\n message: 'Certificate is not valid yet or has expired.',\n error: pki.certificateError.certificate_expired,\n notBefore: cert.validity.notBefore,\n notAfter: cert.validity.notAfter,\n // TODO: we might want to reconsider renaming 'now' to\n // 'validityCheckDate' should this API be changed in the future.\n now: validityCheckDate\n };\n }\n }\n\n // 2. verify with parent from chain or CA store\n if(error === null) {\n parent = chain[0] || caStore.getIssuer(cert);\n if(parent === null) {\n // check for self-signed cert\n if(cert.isIssuer(cert)) {\n selfSigned = true;\n parent = cert;\n }\n }\n\n if(parent) {\n // FIXME: current CA store implementation might have multiple\n // certificates where the issuer can't be determined from the\n // certificate (happens rarely with, eg: old certificates) so normalize\n // by always putting parents into an array\n // TODO: there's may be an extreme degenerate case currently uncovered\n // where an old intermediate certificate seems to have a matching parent\n // but none of the parents actually verify ... but the intermediate\n // is in the CA and it should pass this check; needs investigation\n var parents = parent;\n if(!forge.util.isArray(parents)) {\n parents = [parents];\n }\n\n // try to verify with each possible parent (typically only one)\n var verified = false;\n while(!verified && parents.length > 0) {\n parent = parents.shift();\n try {\n verified = parent.verify(cert);\n } catch(ex) {\n // failure to verify, don't care why, try next one\n }\n }\n\n if(!verified) {\n error = {\n message: 'Certificate signature is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n\n if(error === null && (!parent || selfSigned) &&\n !caStore.hasCertificate(cert)) {\n // no parent issuer and certificate itself is not trusted\n error = {\n message: 'Certificate is not trusted.',\n error: pki.certificateError.unknown_ca\n };\n }\n }\n\n // TODO: 3. check revoked\n\n // 4. check for matching issuer/subject\n if(error === null && parent && !cert.isIssuer(parent)) {\n // parent is not issuer\n error = {\n message: 'Certificate issuer is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // 5. TODO: check names with permitted names tree\n\n // 6. TODO: check names against excluded names tree\n\n // 7. check for unsupported critical extensions\n if(error === null) {\n // supported extensions\n var se = {\n keyUsage: true,\n basicConstraints: true\n };\n for(var i = 0; error === null && i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.critical && !(ext.name in se)) {\n error = {\n message:\n 'Certificate has an unsupported critical extension.',\n error: pki.certificateError.unsupported_certificate\n };\n }\n }\n }\n\n // 8. check for CA if cert is not first or is the only certificate\n // remaining in chain with no parent or is self-signed\n if(error === null &&\n (!first || (chain.length === 0 && (!parent || selfSigned)))) {\n // first check keyUsage extension and then basic constraints\n var bcExt = cert.getExtension('basicConstraints');\n var keyUsageExt = cert.getExtension('keyUsage');\n if(keyUsageExt !== null) {\n // keyCertSign must be true and there must be a basic\n // constraints extension\n if(!keyUsageExt.keyCertSign || bcExt === null) {\n // bad certificate\n error = {\n message:\n 'Certificate keyUsage or basicConstraints conflict ' +\n 'or indicate that the certificate is not a CA. ' +\n 'If the certificate is the only one in the chain or ' +\n 'isn\\'t the first then the certificate must be a ' +\n 'valid CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n // basic constraints cA flag must be set\n if(error === null && bcExt !== null && !bcExt.cA) {\n // bad certificate\n error = {\n message:\n 'Certificate basicConstraints indicates the certificate ' +\n 'is not a CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n // if error is not null and keyUsage is available, then we know it\n // has keyCertSign and there is a basic constraints extension too,\n // which means we can check pathLenConstraint (if it exists)\n if(error === null && keyUsageExt !== null &&\n 'pathLenConstraint' in bcExt) {\n // pathLen is the maximum # of intermediate CA certs that can be\n // found between the current certificate and the end-entity (depth 0)\n // certificate; this number does not include the end-entity (depth 0,\n // last in the chain) even if it happens to be a CA certificate itself\n var pathLen = depth - 1;\n if(pathLen > bcExt.pathLenConstraint) {\n // pathLenConstraint violated, bad certificate\n error = {\n message:\n 'Certificate basicConstraints pathLenConstraint violated.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n }\n\n // call application callback\n var vfd = (error === null) ? true : error.error;\n var ret = options.verify ? options.verify(vfd, depth, certs) : vfd;\n if(ret === true) {\n // clear any set error\n error = null;\n } else {\n // if passed basic tests, set default message and alert\n if(vfd === true) {\n error = {\n message: 'The application rejected the certificate.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // check for custom error info\n if(ret || ret === 0) {\n // set custom message and error\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.error) {\n error.error = ret.error;\n }\n } else if(typeof ret === 'string') {\n // set custom error\n error.error = ret;\n }\n }\n\n // throw error\n throw error;\n }\n\n // no longer first cert in chain\n first = false;\n ++depth;\n } while(chain.length > 0);\n\n return true;\n};\n","/*!\n * algorithms/aes-cbc-hmac-sha2.js - AES-CBC-HMAC-SHA2 Composited Encryption\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar helpers = require(\"./helpers.js\"),\n HMAC = require(\"./hmac.js\"),\n sha = require(\"./sha.js\"),\n forge = require(\"../deps/forge.js\"),\n DataBuffer = require(\"../util/databuffer.js\"),\n util = require(\"../util\");\n\nfunction checkIv(iv) {\n if (16 !== iv.length) {\n throw new Error(\"invalid iv\");\n }\n}\n\nfunction commonCbcEncryptFN(size) {\n // ### 'fallback' implementation -- uses forge\n var fallback = function(encKey, pdata, iv) {\n try {\n checkIv(iv);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var promise = Promise.resolve();\n\n promise = promise.then(function() {\n var cipher = forge.cipher.createCipher(\"AES-CBC\", new DataBuffer(encKey));\n cipher.start({\n iv: new DataBuffer(iv)\n });\n\n // TODO: chunk data\n cipher.update(new DataBuffer(pdata));\n if (!cipher.finish()) {\n return Promise.reject(new Error(\"encryption failed\"));\n }\n\n var cdata = Buffer.from(cipher.output.bytes(), \"binary\");\n return cdata;\n });\n\n return promise;\n };\n\n // ### WebCryptoAPI implementation\n // TODO: cache CryptoKey sooner\n var webcrypto = function(encKey, pdata, iv) {\n try {\n checkIv(iv);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var promise = Promise.resolve();\n\n promise = promise.then(function() {\n var alg = {\n name: \"AES-CBC\"\n };\n return helpers.subtleCrypto.importKey(\"raw\", encKey, alg, true, [\"encrypt\"]);\n });\n promise = promise.then(function(key) {\n var alg = {\n name: \"AES-CBC\",\n iv: iv\n };\n return helpers.subtleCrypto.encrypt(alg, key, pdata);\n });\n promise = promise.then(function(cdata) {\n cdata = Buffer.from(cdata);\n return cdata;\n });\n\n return promise;\n };\n\n // ### NodeJS implementation\n var nodejs = function(encKey, pdata, iv) {\n try {\n checkIv(iv);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var promise = Promise.resolve(pdata);\n\n promise = promise.then(function(pdata) {\n var name = \"AES-\" + size + \"-CBC\";\n var cipher = helpers.nodeCrypto.createCipheriv(name, encKey, iv);\n var cdata = Buffer.concat([\n cipher.update(pdata),\n cipher.final()\n ]);\n return cdata;\n });\n\n return promise;\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction commonCbcDecryptFN(size) {\n // ### 'fallback' implementation -- uses forge\n var fallback = function(encKey, cdata, iv) {\n // validate inputs\n try {\n checkIv(iv);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var promise = Promise.resolve();\n\n promise = promise.then(function() {\n var cipher = forge.cipher.createDecipher(\"AES-CBC\", new DataBuffer(encKey));\n cipher.start({\n iv: new DataBuffer(iv)\n });\n\n // TODO: chunk data\n cipher.update(new DataBuffer(cdata));\n if (!cipher.finish()) {\n return Promise.reject(new Error(\"encryption failed\"));\n }\n\n var pdata = Buffer.from(cipher.output.bytes(), \"binary\");\n return pdata;\n });\n\n return promise;\n };\n\n // ### WebCryptoAPI implementation\n // TODO: cache CryptoKey sooner\n var webcrypto = function(encKey, cdata, iv) {\n // validate inputs\n try {\n checkIv(iv);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var promise = Promise.resolve();\n\n promise = promise.then(function() {\n var alg = {\n name: \"AES-CBC\"\n };\n return helpers.subtleCrypto.importKey(\"raw\", encKey, alg, true, [\"decrypt\"]);\n });\n promise = promise.then(function(key) {\n var alg = {\n name: \"AES-CBC\",\n iv: iv\n };\n return helpers.subtleCrypto.decrypt(alg, key, cdata);\n });\n promise = promise.then(function(pdata) {\n pdata = Buffer.from(pdata);\n return pdata;\n });\n\n return promise;\n };\n\n // ### NodeJS implementation\n var nodejs = function(encKey, cdata, iv) {\n // validate inputs\n try {\n checkIv(iv);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var promise = Promise.resolve();\n\n promise = promise.then(function() {\n var name = \"AES-\" + size + \"-CBC\";\n var cipher = helpers.nodeCrypto.createDecipheriv(name, encKey, iv);\n var pdata = Buffer.concat([\n cipher.update(cdata),\n cipher.final()\n ]);\n return pdata;\n });\n\n return promise;\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction checkKey(key, size) {\n if ((size << 1) !== (key.length << 3)) {\n throw new Error(\"invalid encryption key size\");\n }\n}\n\nfunction cbcHmacEncryptFN(size) {\n var commonEncrypt = commonCbcEncryptFN(size);\n return function(key, pdata, props) {\n // validate inputs\n try {\n checkKey(key, size);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var eKey = key.slice(size / 8),\n iKey = key.slice(0, size / 8),\n iv = props.iv || Buffer.alloc(0),\n adata = props.aad || props.adata || Buffer.alloc(0);\n\n // STEP 1 -- Encrypt\n var promise = commonEncrypt(eKey, pdata, iv);\n\n // STEP 2 -- MAC\n promise = promise.then(function(cdata){\n var mdata = Buffer.concat([\n adata,\n iv,\n cdata,\n helpers.int64ToBuffer(adata.length * 8)\n ]);\n\n var promise;\n promise = HMAC[\"HS\" + (size * 2)].sign(iKey, mdata, {\n length: size\n });\n promise = promise.then(function(result) {\n // TODO: move slice to hmac.js\n var tag = result.mac.slice(0, size / 8);\n return {\n data: cdata,\n tag: tag\n };\n });\n return promise;\n });\n\n return promise;\n };\n}\n\nfunction cbcHmacDecryptFN(size) {\n var commonDecrypt = commonCbcDecryptFN(size);\n\n return function(key, cdata, props) {\n // validate inputs\n try {\n checkKey(key, size);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var eKey = key.slice(size / 8),\n iKey = key.slice(0, size / 8),\n iv = props.iv || Buffer.alloc(0),\n adata = props.aad || props.adata || Buffer.alloc(0),\n tag = props.tag || props.mac || Buffer.alloc(0);\n\n var promise = Promise.resolve();\n\n // STEP 1 -- MAC\n promise = promise.then(function() {\n var promise;\n // construct MAC input\n var mdata = Buffer.concat([\n adata,\n iv,\n cdata,\n helpers.int64ToBuffer(adata.length * 8)\n ]);\n promise = HMAC[\"HS\" + (size * 2)].verify(iKey, mdata, tag, {\n length: size\n });\n promise = promise.then(function() {\n return cdata;\n }, function() {\n // failure -- invalid tag error\n throw new Error(\"mac check failed\");\n });\n return promise;\n });\n\n // STEP 2 -- Decrypt\n promise = promise.then(function(){\n return commonDecrypt(eKey, cdata, iv);\n });\n\n return promise;\n };\n}\n\nvar EncryptionLabel = Buffer.from(\"Encryption\", \"utf8\");\nvar IntegrityLabel = Buffer.from(\"Integrity\", \"utf8\");\nvar DotLabel = Buffer.from(\".\", \"utf8\");\n\nfunction generateCek(masterKey, alg, epu, epv) {\n var masterSize = masterKey.length * 8;\n var cekSize = masterSize / 2;\n var promise = Promise.resolve();\n\n promise = promise.then(function(){\n var input = Buffer.concat([\n helpers.int32ToBuffer(1),\n masterKey,\n helpers.int32ToBuffer(cekSize),\n Buffer.from(alg, \"utf8\"),\n epu,\n epv,\n EncryptionLabel\n ]);\n\n return input;\n });\n\n promise = promise.then( function(input) {\n return sha[\"SHA-\" + masterSize].digest(input).then(function(digest) {\n return digest.slice(0, cekSize / 8);\n });\n });\n promise = Promise.resolve(promise);\n\n return promise;\n}\n\nfunction generateCik(masterKey, alg, epu, epv) {\n var masterSize = masterKey.length * 8;\n var cikSize = masterSize;\n var promise = Promise.resolve();\n\n promise = promise.then(function(){\n var input = Buffer.concat([\n helpers.int32ToBuffer(1),\n masterKey,\n helpers.int32ToBuffer(cikSize),\n Buffer.from(alg, \"utf8\"),\n epu,\n epv,\n IntegrityLabel\n ]);\n\n return input;\n });\n\n promise = promise.then( function(input) {\n return sha[\"SHA-\" + masterSize].digest(input).then(function(digest) {\n return digest.slice(0, cikSize / 8);\n });\n });\n promise = Promise.resolve(promise);\n\n return promise;\n}\n\nfunction concatKdfCbcHmacEncryptFN(size, alg) {\n var commonEncrypt = commonCbcEncryptFN(size);\n\n return function(key, pdata, props) {\n var epu = props.epu || helpers.int32ToBuffer(0),\n epv = props.epv || helpers.int32ToBuffer(0),\n iv = props.iv || Buffer.alloc(0),\n adata = props.aad || props.adata || Buffer.alloc(0),\n kdata = props.kdata || Buffer.alloc(0);\n\n // Pre Step 1 -- Generate Keys\n var promises = [\n generateCek(key, alg, epu, epv),\n generateCik(key, alg, epu, epv)\n ];\n\n var cek,\n cik;\n var promise = Promise.all(promises).then(function(keys) {\n cek = keys[0];\n cik = keys[1];\n });\n\n // STEP 1 -- Encrypt\n promise = promise.then(function(){\n return commonEncrypt(cek, pdata, iv);\n });\n\n // STEP 2 -- Mac\n promise = promise.then(function(cdata){\n var mdata = Buffer.concat([\n adata,\n DotLabel,\n Buffer.from(kdata),\n DotLabel,\n Buffer.from(util.base64url.encode(iv), \"utf8\"),\n DotLabel,\n Buffer.from(util.base64url.encode(cdata), \"utf8\")\n ]);\n return Promise.all([\n Promise.resolve(cdata),\n HMAC[\"HS\" + (size * 2)].sign(cik, mdata, { length: size })\n ]);\n });\n promise = promise.then(function(result){\n return {\n data: result[0],\n tag: result[1].mac\n };\n });\n\n return promise;\n };\n}\n\nfunction concatKdfCbcHmacDecryptFN(size, alg) {\n var commonDecrypt = commonCbcDecryptFN(size);\n\n return function(key, cdata, props) {\n var epu = props.epu || helpers.int32ToBuffer(0),\n epv = props.epv || helpers.int32ToBuffer(0),\n iv = props.iv || Buffer.alloc(0),\n adata = props.aad || props.adata || Buffer.alloc(0),\n kdata = props.kdata || Buffer.alloc(0),\n tag = props.tag || props.mac || Buffer.alloc(0);\n\n // Pre Step 1 -- Generate Keys\n var promises = [\n generateCek(key, alg, epu, epv),\n generateCik(key, alg, epu, epv)\n ];\n\n var cek,\n cik;\n var promise = Promise.all(promises).then(function(keys){\n cek = keys[0];\n cik = keys[1];\n });\n\n\n // STEP 1 -- MAC\n promise = promise.then(function() {\n // construct MAC input\n var mdata = Buffer.concat([\n adata,\n DotLabel,\n Buffer.from(kdata),\n DotLabel,\n Buffer.from(util.base64url.encode(iv), \"utf8\"),\n DotLabel,\n Buffer.from(util.base64url.encode(cdata), \"utf8\")\n ]);\n\n try {\n return HMAC[\"HS\" + (size * 2)].verify(cik, mdata, tag, {\n loose: false\n });\n } catch (e) {\n throw new Error(\"mac check failed\");\n }\n });\n\n // STEP 2 -- Decrypt\n promise = promise.then(function(){\n return commonDecrypt(cek, cdata, iv);\n });\n\n return promise;\n };\n}\n\n// ### Public API\n// * [name].encrypt\n// * [name].decrypt\nvar aesCbcHmacSha2 = {};\n[\n \"A128CBC-HS256\",\n \"A192CBC-HS384\",\n \"A256CBC-HS512\"\n].forEach(function(alg) {\n var size = parseInt(/A(\\d+)CBC-HS(\\d+)?/g.exec(alg)[1]);\n aesCbcHmacSha2[alg] = {\n encrypt: cbcHmacEncryptFN(size),\n decrypt: cbcHmacDecryptFN(size)\n };\n});\n\n[\n \"A128CBC+HS256\",\n \"A192CBC+HS384\",\n \"A256CBC+HS512\"\n].forEach(function(alg) {\n var size = parseInt(/A(\\d+)CBC\\+HS(\\d+)?/g.exec(alg)[1]);\n aesCbcHmacSha2[alg] = {\n encrypt: concatKdfCbcHmacEncryptFN(size, alg),\n decrypt: concatKdfCbcHmacDecryptFN(size, alg)\n };\n});\n\nmodule.exports = aesCbcHmacSha2;\n","/*!\n * algorithms/aes-gcm.js - AES-GCM Encryption and Key-Wrapping\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar helpers = require(\"./helpers.js\"),\n util = require(\"../util\"),\n CONSTANTS = require(\"./constants.js\"),\n GCM = require(\"../deps/ciphermodes/gcm\");\n\nfunction gcmEncryptFN(size, wrap) {\n function commonChecks(key, iv) {\n if (size !== (key.length << 3)) {\n throw new Error(\"invalid key size\");\n }\n if (!iv && !wrap) {\n throw new Error(\"invalid iv\");\n }\n if (iv && 12 !== iv.length) {\n throw new Error(\"invalid iv\");\n }\n }\n\n function prepareResults(results) {\n if (wrap) {\n var iv = util.base64url.encode(results.iv);\n var tag = util.base64url.encode(results.tag);\n\n results = {\n data: results.data,\n header: {\n iv: iv,\n tag: tag\n }\n };\n }\n\n return results;\n }\n\n // ### 'fallback' implementation -- uses forge\n var fallback = function(key, pdata, props) {\n var iv = props.iv,\n adata = props.aad || props.adata || Buffer.alloc(0),\n cipher,\n cdata;\n\n // validate inputs\n try {\n commonChecks(key, iv, adata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n iv = iv || util.randomBytes(12);\n\n // setup cipher\n cipher = GCM.createCipher({\n key: key,\n iv: iv,\n additionalData: adata\n });\n // ciphertext is the same length as plaintext\n cdata = Buffer.alloc(pdata.length);\n\n var promise = new Promise(function(resolve, reject) {\n var amt = CONSTANTS.CHUNK_SIZE,\n clen = 0,\n poff = 0;\n\n (function doChunk() {\n var plen = Math.min(amt, pdata.length - poff);\n clen += cipher.update(pdata,\n poff,\n plen,\n cdata,\n clen);\n poff += plen;\n if (pdata.length > poff) {\n setTimeout(doChunk, 0);\n return;\n }\n\n // finish it\n clen += cipher.finish(cdata, clen);\n if (clen !== pdata.length) {\n reject(new Error(\"encryption failed\"));\n return;\n }\n\n // resolve with output\n var tag = cipher.tag;\n resolve(prepareResults({\n data: cdata,\n iv: iv,\n tag: tag\n }));\n })();\n });\n\n return promise;\n };\n\n // ### WebCryptoAPI implementation\n // TODO: cache CryptoKey sooner\n var webcrypto = function(key, pdata, props) {\n var iv = props.iv,\n adata = props.aad || props.adata || Buffer.alloc(0);\n\n try {\n commonChecks(key, iv, adata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n iv = iv || util.randomBytes(12);\n\n var alg = {\n name: \"AES-GCM\"\n };\n var promise;\n promise = helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"encrypt\"]);\n promise = promise.then(function(key) {\n alg.iv = iv;\n alg.tagLength = 128;\n if (adata.length) {\n alg.additionalData = adata;\n }\n\n return helpers.subtleCrypto.encrypt(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n var tagStart = result.byteLength - 16;\n\n var tag = result.slice(tagStart);\n tag = Buffer.from(tag);\n\n var cdata = result.slice(0, tagStart);\n cdata = Buffer.from(cdata);\n\n return prepareResults({\n data: cdata,\n iv: iv,\n tag: tag\n });\n });\n\n return promise;\n };\n\n // ### NodeJS implementation\n var nodejs = function(key, pdata, props) {\n var iv = props.iv,\n adata = props.aad || props.adata || Buffer.alloc(0);\n\n try {\n commonChecks(key, iv, adata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n iv = iv || util.randomBytes(12);\n\n var alg = \"aes-\" + (key.length * 8) + \"-gcm\";\n var cipher;\n try {\n cipher = helpers.nodeCrypto.createCipheriv(alg, key, iv);\n } catch (err) {\n throw new Error(\"unsupported algorithm: \" + alg);\n }\n if (\"function\" !== typeof cipher.setAAD) {\n throw new Error(\"unsupported algorithm: \" + alg);\n }\n if (adata.length) {\n cipher.setAAD(adata);\n }\n\n var cdata = Buffer.concat([\n cipher.update(pdata),\n cipher.final()\n ]);\n var tag = cipher.getAuthTag();\n\n return prepareResults({\n data: cdata,\n iv: iv,\n tag: tag\n });\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction gcmDecryptFN(size) {\n function commonChecks(key, iv, tag) {\n if (size !== (key.length << 3)) {\n throw new Error(\"invalid key size\");\n }\n if (12 !== iv.length) {\n throw new Error(\"invalid iv\");\n }\n if (16 !== tag.length) {\n throw new Error(\"invalid tag length\");\n }\n }\n\n // ### fallback implementation -- uses forge\n var fallback = function(key, cdata, props) {\n var adata = props.aad || props.adata || Buffer.alloc(0),\n iv = props.iv || Buffer.alloc(0),\n tag = props.tag || props.mac || Buffer.alloc(0),\n cipher,\n pdata;\n\n // validate inputs\n try {\n commonChecks(key, iv, tag);\n } catch (err) {\n return Promise.reject(err);\n }\n\n // setup cipher\n cipher = GCM.createDecipher({\n key: key,\n iv: iv,\n additionalData: adata,\n tag: tag\n });\n // plaintext is the same length as ciphertext\n pdata = Buffer.alloc(cdata.length);\n\n var promise = new Promise(function(resolve, reject) {\n var amt = CONSTANTS.CHUNK_SIZE,\n plen = 0,\n coff = 0;\n\n (function doChunk() {\n var clen = Math.min(amt, cdata.length - coff);\n plen += cipher.update(cdata,\n coff,\n clen,\n pdata,\n plen);\n coff += clen;\n if (cdata.length > coff) {\n setTimeout(doChunk, 0);\n return;\n }\n\n try {\n plen += cipher.finish(pdata, plen);\n } catch (err) {\n reject(new Error(\"decryption failed\"));\n return;\n }\n\n if (plen !== cdata.length) {\n reject(new Error(\"decryption failed\"));\n return;\n }\n\n // resolve with output\n resolve(pdata);\n })();\n });\n\n return promise;\n };\n\n // ### WebCryptoAPI implementation\n // TODO: cache CryptoKey sooner\n var webcrypto = function(key, cdata, props) {\n var adata = props.aad || props.adata || Buffer.alloc(0),\n iv = props.iv || Buffer.alloc(0),\n tag = props.tag || props.mac || Buffer.alloc(0);\n\n // validate inputs\n try {\n commonChecks(key, iv, tag);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var alg = {\n name: \"AES-GCM\"\n };\n var promise;\n promise = helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"decrypt\"]);\n promise = promise.then(function(key) {\n alg.iv = iv;\n alg.tagLength = 128;\n if (adata.length) {\n alg.additionalData = adata;\n }\n\n // concatenate cdata and tag\n cdata = Buffer.concat([cdata, tag], cdata.length + tag.length);\n\n return helpers.subtleCrypto.decrypt(alg, key, cdata);\n });\n promise = promise.then(function(pdata) {\n pdata = Buffer.from(pdata);\n return pdata;\n });\n\n return promise;\n };\n\n var nodejs = function(key, cdata, props) {\n var adata = props.aad || props.adata || Buffer.alloc(0),\n iv = props.iv || Buffer.alloc(0),\n tag = props.tag || props.mac || Buffer.alloc(0);\n\n // validate inputs\n try {\n commonChecks(key, iv, tag);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var alg = \"aes-\" + (key.length * 8) + \"-gcm\";\n var cipher;\n try {\n cipher = helpers.nodeCrypto.createDecipheriv(alg, key, iv);\n } catch(err) {\n throw new Error(\"unsupported algorithm: \" + alg);\n }\n if (\"function\" !== typeof cipher.setAAD) {\n throw new Error(\"unsupported algorithm: \" + alg);\n }\n cipher.setAuthTag(tag);\n if (adata.length) {\n cipher.setAAD(adata);\n }\n\n try {\n var pdata = Buffer.concat([\n cipher.update(cdata),\n cipher.final()\n ]);\n\n return pdata;\n } catch (err) {\n throw new Error(\"decryption failed\");\n }\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// ### Public API\n// * [name].encrypt\n// * [name].decrypt\nvar aesGcm = {};\n[\n \"A128GCM\",\n \"A192GCM\",\n \"A256GCM\",\n \"A128GCMKW\",\n \"A192GCMKW\",\n \"A256GCMKW\"\n].forEach(function(alg) {\n var parts = /A(\\d+)GCM(KW)?/g.exec(alg);\n var size = parseInt(parts[1]);\n var wrap = (parts[2] === \"KW\");\n aesGcm[alg] = {\n encrypt: gcmEncryptFN(size, wrap),\n decrypt: gcmDecryptFN(size, wrap)\n };\n});\n\nmodule.exports = aesGcm;\n","/*!\n * algorithms/aes-kw.js - AES-KW Key-Wrapping\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar helpers = require(\"./helpers.js\"),\n forge = require(\"../deps/forge.js\"),\n DataBuffer = require(\"../util/databuffer.js\");\n\nvar A0 = Buffer.from(\"a6a6a6a6a6a6a6a6\", \"hex\");\n\n// ### helpers\nfunction xor(a, b) {\n var len = Math.max(a.length, b.length);\n var result = Buffer.alloc(len);\n for (var idx = 0; len > idx; idx++) {\n result[idx] = (a[idx] || 0) ^ (b[idx] || 0);\n }\n return result;\n}\n\nfunction split(input, size) {\n var output = [];\n for (var idx = 0; input.length > idx; idx += size) {\n output.push(input.slice(idx, idx + size));\n }\n return output;\n}\n\nfunction longToBigEndian(input) {\n var hi = Math.floor(input / 4294967296),\n lo = input % 4294967296;\n var output = Buffer.alloc(8);\n output[0] = 0xff & (hi >>> 24);\n output[1] = 0xff & (hi >>> 16);\n output[2] = 0xff & (hi >>> 8);\n output[3] = 0xff & (hi >>> 0);\n output[4] = 0xff & (lo >>> 24);\n output[5] = 0xff & (lo >>> 16);\n output[6] = 0xff & (lo >>> 8);\n output[7] = 0xff & (lo >>> 0);\n return output;\n}\n\nfunction kwEncryptFN(size) {\n function commonChecks(key, data) {\n if (size !== (key.length << 3)) {\n throw new Error(\"invalid key size\");\n }\n if (0 < data.length && 0 !== (data.length % 8)) {\n throw new Error(\"invalid data length\");\n }\n }\n\n // ### 'fallback' implementation -- uses forge\n var fallback = function(key, pdata) {\n try {\n commonChecks(key, pdata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n // setup cipher\n var cipher = forge.cipher.createCipher(\"AES\", new DataBuffer(key));\n\n // split input into chunks\n var R = split(pdata, 8);\n var A,\n B,\n count;\n A = A0;\n for (var jdx = 0; 6 > jdx; jdx++) {\n for (var idx = 0; R.length > idx; idx++) {\n count = (R.length * jdx) + idx + 1;\n B = Buffer.concat([A, R[idx]]);\n cipher.start();\n cipher.update(new DataBuffer(B));\n cipher.finish();\n B = Buffer.from(cipher.output.bytes(), \"binary\");\n\n A = xor(B.slice(0, 8),\n longToBigEndian(count));\n R[idx] = B.slice(8, 16);\n }\n }\n R = [A].concat(R);\n var cdata = Buffer.concat(R);\n return Promise.resolve({\n data: cdata\n });\n };\n // ### WebCryptoAPI implementation\n var webcrypto = function(key, pdata) {\n try {\n commonChecks(key, pdata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var alg = {\n name: \"AES-KW\"\n };\n var promise = [\n helpers.subtleCrypto.importKey(\"raw\", pdata, { name: \"HMAC\", hash: \"SHA-256\" }, true, [\"sign\"]),\n helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"wrapKey\"])\n ];\n promise = Promise.all(promise);\n promise = promise.then(function(keys) {\n return helpers.subtleCrypto.wrapKey(\"raw\",\n keys[0], // key\n keys[1], // wrappingKey\n alg);\n });\n promise = promise.then(function(result) {\n result = Buffer.from(result);\n\n return {\n data: result\n };\n });\n return promise;\n };\n var node = function(key, pdata) {\n try {\n commonChecks(key, pdata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n // split input into chunks\n var R = split(pdata, 8),\n iv = Buffer.alloc(16);\n var A,\n B,\n count;\n A = A0;\n for (var jdx = 0; 6 > jdx; jdx++) {\n for (var idx = 0; R.length > idx; idx++) {\n count = (R.length * jdx) + idx + 1;\n B = Buffer.concat([A, R[idx]]);\n var cipher = helpers.nodeCrypto.createCipheriv(\"AES\" + size, key, iv);\n B = cipher.update(B);\n\n A = xor(B.slice(0, 8),\n longToBigEndian(count));\n R[idx] = B.slice(8, 16);\n }\n }\n R = [A].concat(R);\n var cdata = Buffer.concat(R);\n return Promise.resolve({\n data: cdata\n });\n };\n\n return helpers.setupFallback(node, webcrypto, fallback);\n}\nfunction kwDecryptFN(size) {\n function commonChecks(key, data) {\n if (size !== (key.length << 3)) {\n throw new Error(\"invalid key size\");\n }\n if (0 < (data.length - 8) && 0 !== (data.length % 8)) {\n throw new Error(\"invalid data length\");\n }\n }\n\n // ### 'fallback' implementation -- uses forge\n var fallback = function(key, cdata) {\n try {\n commonChecks(key, cdata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n // setup cipher\n var cipher = forge.cipher.createDecipher(\"AES\", new DataBuffer(key));\n\n // prepare inputs\n var R = split(cdata, 8),\n A,\n B,\n count;\n A = R[0];\n R = R.slice(1);\n for (var jdx = 5; 0 <= jdx; --jdx) {\n for (var idx = R.length - 1; 0 <= idx; --idx) {\n count = (R.length * jdx) + idx + 1;\n B = xor(A,\n longToBigEndian(count));\n B = Buffer.concat([B, R[idx]]);\n cipher.start();\n cipher.update(new DataBuffer(B));\n cipher.finish();\n B = Buffer.from(cipher.output.bytes(), \"binary\");\n\n A = B.slice(0, 8);\n R[idx] = B.slice(8, 16);\n }\n }\n if (A.toString() !== A0.toString()) {\n return Promise.reject(new Error(\"decryption failed\"));\n }\n var pdata = Buffer.concat(R);\n return Promise.resolve(pdata);\n };\n // ### WebCryptoAPI implementation\n var webcrypto = function(key, cdata) {\n try {\n commonChecks(key, cdata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var alg = {\n name: \"AES-KW\"\n };\n var promise = helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"unwrapKey\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.unwrapKey(\"raw\", cdata, key, alg, {name: \"HMAC\", hash: \"SHA-256\"}, true, [\"sign\"]);\n });\n promise = promise.then(function(result) {\n // unwrapped CryptoKey -- extract raw\n return helpers.subtleCrypto.exportKey(\"raw\", result);\n });\n promise = promise.then(function(result) {\n result = Buffer.from(result);\n return result;\n });\n return promise;\n };\n var node = function(key, cdata) {\n try {\n commonChecks(key, cdata);\n } catch (err) {\n return Promise.reject(err);\n }\n\n // prepare inputs\n var R = split(cdata, 8),\n iv = Buffer.alloc(16),\n A,\n B,\n count;\n A = R[0];\n R = R.slice(1);\n for (var jdx = 5; 0 <= jdx; --jdx) {\n for (var idx = R.length - 1; 0 <= idx; --idx) {\n count = (R.length * jdx) + idx + 1;\n B = xor(A,\n longToBigEndian(count));\n B = Buffer.concat([B, R[idx], iv]);\n var cipher = helpers.nodeCrypto.createDecipheriv(\"AES\" + size, key, iv);\n B = cipher.update(B);\n\n A = B.slice(0, 8);\n R[idx] = B.slice(8, 16);\n }\n }\n if (A.toString() !== A0.toString()) {\n return Promise.reject(new Error(\"decryption failed\"));\n }\n var pdata = Buffer.concat(R);\n return Promise.resolve(pdata);\n };\n\n return helpers.setupFallback(node, webcrypto, fallback);\n}\n\n// ### Public API\n// * [name].encrypt\n// * [name].decrypt\nvar aesKw = {};\n[\n \"A128KW\",\n \"A192KW\",\n \"A256KW\"\n].forEach(function(alg) {\n var size = parseInt(/A(\\d+)KW/g.exec(alg)[1]);\n aesKw[alg] = {\n encrypt: kwEncryptFN(size),\n decrypt: kwDecryptFN(size)\n };\n});\n\nmodule.exports = aesKw;\n","/*!\n * algorithms/concat.js - Concat Key Derivation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar CONSTANTS = require(\"./constants.js\"),\n sha = require(\"./sha.js\");\n\nfunction concatDeriveFn(name) {\n name = name.replace(\"CONCAT-\", \"\");\n\n // NOTE: no nodejs/webcrypto/fallback model, since ConcatKDF is\n // implemented using the SHA algorithms\n\n var fn = function(key, props) {\n props = props || {};\n\n var keyLen = props.length,\n hashLen = CONSTANTS.HASHLENGTH[name];\n if (!keyLen) {\n return Promise.reject(new Error(\"invalid key length\"));\n }\n\n // setup otherInfo\n if (!props.otherInfo) {\n return Promise.reject(new Error(\"invalid otherInfo\"));\n }\n var otherInfo = props.otherInfo;\n\n var op = sha[name].digest;\n var N = Math.ceil(keyLen / hashLen),\n idx = 0,\n okm = [];\n function step() {\n if (N === idx++) {\n return Buffer.concat(okm).slice(0, keyLen);\n }\n\n var T = Buffer.alloc(4 + key.length + otherInfo.length);\n T.writeUInt32BE(idx, 0);\n key.copy(T, 4);\n otherInfo.copy(T, 4 + key.length);\n return op(T).then(function(result) {\n okm.push(result);\n return step();\n });\n }\n\n return step();\n };\n\n return fn;\n}\n\n// Public API\n// * [name].derive\nvar concat = {};\n[\n \"CONCAT-SHA-1\",\n \"CONCAT-SHA-256\",\n \"CONCAT-SHA-384\",\n \"CONCAT-SHA-512\"\n].forEach(function(name) {\n concat[name] = {\n derive: concatDeriveFn(name)\n };\n});\n\nmodule.exports = concat;\n","/*!\n * algorithms/constants.js - Constants used in Cryptographic Algorithms\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nmodule.exports = {\n CHUNK_SIZE: 1024,\n HASHLENGTH: {\n \"SHA-1\": 160,\n \"SHA-256\": 256,\n \"SHA-384\": 384,\n \"SHA-512\": 512\n },\n ENCLENGTH: {\n \"AES-128-CBC\": 128,\n \"AES-192-CBC\": 192,\n \"AES-256-CBC\": 256,\n \"AES-128-KW\": 128,\n \"AES-192-KW\": 192,\n \"AES-256-KW\": 256\n },\n KEYLENGTH: {\n \"A128CBC-HS256\": 256,\n \"A192CBC-HS384\": 384,\n \"A256CBC-HS512\": 512,\n \"A128CBC+HS256\": 256,\n \"A192CBC+HS384\": 384,\n \"A256CBC+HS512\": 512,\n \"A128GCM\": 128,\n \"A192GCM\": 192,\n \"A256GCM\": 256,\n \"A128KW\": 128,\n \"A192KW\": 192,\n \"A256KW\": 256,\n \"ECDH-ES+A128KW\": 128,\n \"ECDH-ES+A192KW\": 192,\n \"ECDH-ES+A256KW\": 256\n },\n NONCELENGTH: {\n \"A128CBC-HS256\": 128,\n \"A192CBC-HS384\": 128,\n \"A256CBC-HS512\": 128,\n \"A128CBC+HS256\": 128,\n \"A192CBC+HS384\": 128,\n \"A256CBC+HS512\": 128,\n \"A128GCM\": 96,\n \"A192GCM\": 96,\n \"A256GCM\": 96\n }\n};\n","/*!\n * algorithms/dir.js - Direct key mode\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nfunction dirEncryptFN(key) {\n // NOTE: pdata unused\n // NOTE: props unused\n return Promise.resolve({\n data: key,\n once: true,\n direct: true\n });\n}\nfunction dirDecryptFN(key) {\n // NOTE: pdata unused\n // NOTE: props unused\n return Promise.resolve(key);\n}\n\n// ### Public API\n// * [name].encrypt\n// * [name].decrypt\nvar direct = {\n dir: {\n encrypt: dirEncryptFN,\n decrypt: dirDecryptFN\n }\n};\n\nmodule.exports = direct;\n","/*!\n * algorithms/ec-util.js - Elliptic Curve Utility Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar clone = require(\"lodash/clone\"),\n ecc = require(\"../deps/ecc\"),\n forge = require(\"../deps/forge.js\"),\n util = require(\"../util\");\n\nvar EC_KEYSIZES = {\n \"P-256\": 256,\n \"P-384\": 384,\n \"P-521\": 521\n};\n\nfunction convertToForge(key, isPublic) {\n var parts = isPublic ?\n [\"x\", \"y\"] :\n [\"d\"];\n parts = parts.map(function(f) {\n return new forge.jsbn.BigInteger(key[f].toString(\"hex\"), 16);\n });\n // prefix with curve\n parts = [key.crv].concat(parts);\n var fn = isPublic ?\n ecc.asPublicKey :\n ecc.asPrivateKey;\n return fn.apply(ecc, parts);\n}\n\nfunction convertToJWK(key, isPublic) {\n var result = clone(key);\n var parts = isPublic ?\n [\"x\", \"y\"] :\n [\"x\", \"y\", \"d\"];\n parts.forEach(function(f) {\n result[f] = util.base64url.encode(result[f]);\n });\n\n // remove potentially troublesome properties\n delete result.key_ops;\n delete result.use;\n delete result.alg;\n\n if (isPublic) {\n delete result.d;\n }\n\n return result;\n}\n\nfunction convertToObj(key, isPublic) {\n var result = clone(key);\n var parts = isPublic ?\n [\"x\", \"y\"] :\n [\"d\"];\n parts.forEach(function(f) {\n // assume string if base64url-encoded\n result[f] = util.asBuffer(result[f], \"base64url\");\n });\n\n return result;\n}\n\nvar UNCOMPRESSED = Buffer.from([0x04]);\nfunction convertToBuffer(key, isPublic) {\n key = convertToObj(key, isPublic);\n var result = isPublic ?\n Buffer.concat([UNCOMPRESSED, key.x, key.y]) :\n key.d;\n return result;\n}\n\nfunction curveSize(crv) {\n return EC_KEYSIZES[crv || \"\"] || NaN;\n}\n\nfunction curveNameToOid(crv) {\n switch (crv) {\n case \"P-256\":\n return \"1.2.840.10045.3.1.7\";\n case \"P-384\":\n return \"1.3.132.0.34\";\n case \"P-521\":\n return \"1.3.132.0.35\";\n default:\n return null;\n }\n}\n\nvar EC_OID = \"1.2.840.10045.2.1\";\nfunction convertToPEM(key, isPrivate) {\n // curveName to OID\n var oid = key.crv;\n oid = curveNameToOid(oid);\n oid = forge.asn1.oidToDer(oid);\n // key as bytes\n var type,\n pub,\n asn1;\n if (isPrivate) {\n type = \"EC PRIVATE KEY\";\n pub = Buffer.concat([\n Buffer.from([0x00, 0x04]),\n key.x,\n key.y\n ]).toString(\"binary\");\n key = key.d.toString(\"binary\");\n asn1 = forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.SEQUENCE, true, [\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.INTEGER, false, \"\\u0001\"),\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.OCTETSTRING, false, key),\n forge.asn1.create(forge.asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.OID, false, oid.bytes())\n ]),\n forge.asn1.create(forge.asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.BITSTRING, false, pub)\n ])\n ]);\n } else {\n type = \"PUBLIC KEY\";\n key = Buffer.concat([\n Buffer.from([0x00, 0x04]),\n key.x,\n key.y\n ]).toString(\"binary\");\n asn1 = forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.SEQUENCE, true, [\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.SEQUENCE, true, [\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.OID, false, forge.asn1.oidToDer(EC_OID).bytes()),\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.OID, false, oid.bytes())\n ]),\n forge.asn1.create(forge.asn1.Class.UNIVERSAL, forge.asn1.Type.BITSTRING, false, key)\n ]);\n }\n asn1 = forge.asn1.toDer(asn1).bytes();\n var pem = forge.pem.encode({\n type: type,\n body: asn1\n });\n return pem;\n}\n\n// Inspired by teifip/node-webtokens/blob/master/lib/ecdsa.js\nvar ERR_MSG = \"Could not extract parameters from DER signature\";\nfunction derToConcat(signature, size) {\n var offset = 0;\n if (signature[offset++] !== 0x30) {\n throw new Error(ERR_MSG);\n }\n var seqLength = signature[offset++];\n if (seqLength === 0x81) {\n seqLength = signature[offset++];\n }\n if (seqLength > signature.length - offset) {\n throw new Error(ERR_MSG);\n }\n if (signature[offset++] !== 0x02) {\n throw new Error(ERR_MSG);\n }\n var rLength = signature[offset++];\n if (rLength > signature.length - offset - 2) {\n throw new Error(ERR_MSG);\n }\n if (rLength > size + 1) {\n throw new Error(ERR_MSG);\n }\n var rOffset = offset;\n offset += rLength;\n if (signature[offset++] !== 0x02) {\n throw new Error(ERR_MSG);\n }\n var sLength = signature[offset++];\n if (sLength !== signature.length - offset) {\n throw new Error(ERR_MSG);\n }\n if (sLength > size + 1) {\n throw new Error(ERR_MSG);\n }\n var sOffset = offset;\n offset += sLength;\n if (offset !== signature.length) {\n throw new Error(ERR_MSG);\n }\n var rPadding = size - rLength;\n var sPadding = size - sLength;\n var dst = Buffer.alloc(rPadding + rLength + sPadding + sLength);\n for (offset = 0; offset < rPadding; ++offset) {\n dst[offset] = 0;\n }\n var rPad = Math.max(-rPadding, 0);\n signature.copy(dst, offset, rOffset + rPad, rOffset + rLength);\n offset = size;\n for (var o = offset; offset < o + sPadding; ++offset) {\n dst[offset] = 0;\n }\n var sPad = Math.max(-sPadding, 0);\n signature.copy(dst, offset, sOffset + sPad, sOffset + sLength);\n return dst;\n}\n\nfunction countPadding(buf, start, stop) {\n var padding = 0;\n while (start + padding < stop && buf[start + padding] === 0) {\n ++padding;\n }\n var needsSign = buf[start + padding] >= 0x80;\n if (needsSign) {\n --padding;\n }\n return padding;\n}\n\nfunction concatToDer(signature, size) {\n var rPadding = countPadding(signature, 0, size);\n var sPadding = countPadding(signature, size, signature.length);\n var rLength = size - rPadding;\n var sLength = size - sPadding;\n var rsBytes = rLength + sLength + 4;\n var shortLength = rsBytes < 0x80;\n var dst = Buffer.alloc((shortLength ? 2 : 3) + rsBytes);\n var offset = 0;\n dst[offset++] = 0x30;\n if (shortLength) {\n dst[offset++] = rsBytes;\n } else {\n dst[offset++] = 0x81;\n dst[offset++] = rsBytes & 0xFF;\n }\n dst[offset++] = 0x02;\n dst[offset++] = rLength;\n if (rPadding < 0) {\n dst[offset++] = 0;\n offset += signature.copy(dst, offset, 0, size);\n } else {\n offset += signature.copy(dst, offset, rPadding, size);\n }\n dst[offset++] = 0x02;\n dst[offset++] = sLength;\n if (sPadding < 0) {\n dst[offset++] = 0;\n signature.copy(dst, offset, size);\n } else {\n signature.copy(dst, offset, size + sPadding);\n }\n return dst;\n}\n\nmodule.exports = {\n convertToForge: convertToForge,\n convertToJWK: convertToJWK,\n convertToObj: convertToObj,\n convertToBuffer: convertToBuffer,\n curveSize: curveSize,\n derToConcat: derToConcat,\n concatToDer: concatToDer,\n convertToPEM: convertToPEM,\n EC_OID: EC_OID\n};\n","/*!\n * algorithms/ecdh.js - Elliptic Curve Diffie-Hellman algorithms\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar merge = require(\"../util/merge\"),\n util = require(\"../util\"),\n ecUtil = require(\"./ec-util.js\"),\n hkdf = require(\"./hkdf.js\"),\n concat = require(\"./concat.js\"),\n aesKw = require(\"./aes-kw.js\"),\n helpers = require(\"./helpers.js\"),\n CONSTANTS = require(\"./constants.js\");\n\nvar clone = require(\"lodash/clone\");\nvar omit = require(\"lodash/omit\");\nvar pick = require(\"lodash/pick\");\n\nfunction idealHash(curve) {\n switch (curve) {\n case \"P-256\":\n return \"SHA-256\";\n case \"P-384\":\n return \"SHA-384\";\n case \"P-521\":\n return \"SHA-512\";\n default:\n throw new Error(\"unsupported curve: \" + curve);\n }\n}\n\n// ### Exported\nvar ecdh = module.exports = {};\n\n// ### Derivation algorithms\n// ### \"raw\" ECDH\nfunction ecdhDeriveFn() {\n var alg = {\n name: \"ECDH\"\n };\n\n var validatePublic = function(pk, form) {\n var pubKey = pk && ecUtil.convertToForge(pk, true);\n if (!pubKey || !pubKey.isValid()) {\n return Promise.reject(new Error(\"invalid EC public key\"));\n }\n\n switch (form) {\n case \"jwk\":\n pubKey = ecUtil.convertToJWK(pk, true);\n break;\n case \"buffer\":\n pubKey = ecUtil.convertToBuffer(pk, true);\n break;\n }\n return Promise.resolve(pubKey);\n }\n\n // ### fallback implementation -- uses ecc + forge\n var fallback = function(key, props) {\n props = props || {};\n var keyLen = props.length || 0;\n // assume {key} is privateKey\n // assume {props.public} is publicKey\n var privKey = ecUtil.convertToForge(key, false);\n\n var p = validatePublic(props.public, \"forge\");\n p = p.then(function(pubKey) {\n // {pubKey} is \"forge\"\n\n var secret = privKey.computeSecret(pubKey);\n if (keyLen) {\n // truncate to requested key length\n if (secret.length < keyLen) {\n return Promise.reject(new Error(\"key length too large: \" + keyLen));\n }\n secret = secret.slice(0, keyLen);\n }\n\n return secret;\n });\n return p;\n };\n\n // ### WebCryptoAPI implementation\n // TODO: cache CryptoKey sooner\n var webcrypto = function(key, props) {\n key = key || {};\n props = props || {};\n\n var keyLen = props.length || 0,\n algParams = merge(clone(alg), {\n namedCurve: key.crv\n });\n\n // assume {key} is privateKey\n if (!keyLen) {\n // calculate key length from private key size\n keyLen = key.d.length;\n }\n var privKey = ecUtil.convertToJWK(key, false);\n privKey = helpers.subtleCrypto.importKey(\"jwk\",\n privKey,\n algParams,\n false,\n [ \"deriveBits\" ]);\n\n // assume {props.public} is publicKey\n var pubKey = validatePublic(props.public, \"jwk\");\n pubKey = pubKey.then(function(pubKey) {\n // {pubKey} is \"jwk\"\n return helpers.subtleCrypto.importKey(\"jwk\",\n pubKey,\n algParams,\n false,\n []);\n });\n\n var p = Promise.all([privKey, pubKey]);\n p = p.then(function(keypair) {\n var privKey = keypair[0],\n pubKey = keypair[1];\n\n var algParams = merge(clone(alg), {\n public: pubKey\n });\n return helpers.subtleCrypto.deriveBits(algParams, privKey, keyLen * 8);\n });\n p = p.then(function(result) {\n result = Buffer.from(result);\n return result;\n });\n return p;\n };\n\n var nodejs = function(key, props) {\n if (\"function\" !== typeof helpers.nodeCrypto.createECDH) {\n throw new Error(\"unsupported algorithm: ECDH\");\n }\n\n props = props || {};\n var keyLen = props.length || 0;\n var curve;\n switch (key.crv) {\n case \"P-256\":\n curve = \"prime256v1\";\n break;\n case \"P-384\":\n curve = \"secp384r1\";\n break;\n case \"P-521\":\n curve = \"secp521r1\";\n break;\n default:\n return Promise.reject(new Error(\"invalid curve: \" + curve));\n }\n\n // assume {key} is privateKey\n // assume {props.public} is publicKey\n var privKey = ecUtil.convertToBuffer(key, false);\n\n var p = validatePublic(props.public, \"buffer\");\n p = p.then(function(pubKey) {\n // {pubKey} is \"buffer\"\n var ecdh = helpers.nodeCrypto.createECDH(curve);\n // dummy call so computeSecret doesn't fail\n // ecdh.generateKeys();\n ecdh.setPrivateKey(privKey);\n var secret = ecdh.computeSecret(pubKey);\n if (keyLen) {\n if (secret.length < keyLen) {\n return Promise.reject(new Error(\"key length too large: \" + keyLen));\n }\n secret = secret.slice(0, keyLen);\n }\n return secret;\n });\n return p;\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction ecdhConcatDeriveFn() {\n // NOTE: no nodejs/webcrypto/fallback model, since this algorithm is\n // implemented using other primitives\n\n var fn = function(key, props) {\n props = props || {};\n\n var hash;\n try {\n hash = props.hash || idealHash(key.crv);\n if (!hash) {\n throw new Error(\"invalid hash: \" + hash);\n }\n hash.toUpperCase();\n } catch (ex) {\n return Promise.reject(ex);\n }\n\n var params = [\"public\"];\n // derive shared secret\n // NOTE: whitelist items from {props} for ECDH\n var promise = ecdh.ECDH.derive(key, pick(props, params));\n // expand\n promise = promise.then(function(shared) {\n // NOTE: blacklist items from {props} for ECDH\n return concat[\"CONCAT-\" + hash].derive(shared, omit(props, params));\n });\n return promise;\n };\n\n return fn;\n}\n\nfunction ecdhHkdfDeriveFn() {\n // NOTE: no nodejs/webcrypto/fallback model, since this algorithm is\n // implemented using other primitives\n\n var fn = function(key, props) {\n props = props || {};\n\n var hash;\n try {\n hash = props.hash || idealHash(key.crv);\n if (!hash) {\n throw new Error(\"invalid hash: \" + hash);\n }\n hash.toUpperCase();\n } catch (ex) {\n return Promise.reject(ex);\n }\n\n var params = [\"public\"];\n // derive shared secret\n // NOTE: whitelist items from {props} for ECDH\n var promise = ecdh.ECDH.derive(key, pick(props, params));\n // extract-and-expand\n promise = promise.then(function(shared) {\n // NOTE: blacklist items from {props} for ECDH\n return hkdf[\"HKDF-\" + hash].derive(shared, omit(props, params));\n });\n return promise;\n };\n\n return fn;\n}\n\n// ### Wrap/Unwrap algorithms\nfunction doEcdhesCommonDerive(privKey, pubKey, props) {\n function prependLen(input) {\n return Buffer.concat([\n helpers.int32ToBuffer(input.length),\n input\n ]);\n }\n\n var algId = props.algorithm || \"\",\n keyLen = CONSTANTS.KEYLENGTH[algId],\n apu = util.asBuffer(props.apu || \"\", \"base64url\"),\n apv = util.asBuffer(props.apv || \"\", \"base64url\");\n var otherInfo = Buffer.concat([\n prependLen(Buffer.from(algId, \"utf8\")),\n prependLen(apu),\n prependLen(apv),\n helpers.int32ToBuffer(keyLen)\n ]);\n\n var params = {\n public: pubKey,\n length: keyLen / 8,\n hash: \"SHA-256\",\n otherInfo: otherInfo\n };\n return ecdh[\"ECDH-CONCAT\"].derive(privKey, params);\n}\n\nfunction ecdhesDirEncryptFn() {\n // NOTE: no nodejs/webcrypto/fallback model, since this algorithm is\n // implemented using other primitives\n var fn = function(key, pdata, props) {\n props = props || {};\n\n // {props.epk} is private\n if (!props.epk || !props.epk.d) {\n return Promise.reject(new Error(\"missing ephemeral private key\"));\n }\n var epk = ecUtil.convertToObj(props.epk, false);\n\n // {key} is public\n if (!key || !key.x || !key.y) {\n return Promise.reject(new Error(\"missing static public key\"));\n }\n var spk = ecUtil.convertToObj(key, true);\n\n // derive ECDH shared\n var promise = doEcdhesCommonDerive(epk, spk, {\n algorithm: props.enc,\n apu: props.apu,\n apv: props.apv\n });\n promise = promise.then(function(shared) {\n return {\n data: shared,\n once: true,\n direct: true\n };\n });\n return promise;\n };\n\n return fn;\n}\nfunction ecdhesDirDecryptFn() {\n // NOTE: no nodejs/webcrypto/fallback model, since this algorithm is\n // implemented using other primitives\n var fn = function(key, cdata, props) {\n props = props || {};\n\n // {props.epk} is public\n if (!props.epk || !props.epk.x || !props.epk.y) {\n return Promise.reject(new Error(\"missing ephemeral public key\"));\n }\n var epk = ecUtil.convertToObj(props.epk, true);\n\n // {key} is private\n if (!key || !key.d) {\n return Promise.reject(new Error(\"missing static private key\"));\n }\n var spk = ecUtil.convertToObj(key, false);\n\n // derive ECDH shared\n var promise = doEcdhesCommonDerive(spk, epk, {\n algorithm: props.enc,\n apu: props.apu,\n apv: props.apv\n });\n promise = promise.then(function(shared) {\n return shared;\n });\n return promise;\n };\n\n return fn;\n}\n\nfunction ecdhesKwEncryptFn(wrap) {\n // NOTE: no nodejs/webcrypto/fallback model, since this algorithm is\n // implemented using other primitives\n var fn = function(key, pdata, props) {\n props = props || {};\n\n // {props.epk} is private\n if (!props.epk || !props.epk.d) {\n return Promise.reject(new Error(\"missing ephemeral private key\"));\n }\n var epk = ecUtil.convertToObj(props.epk, false);\n\n // {key} is public\n if (!key || !key.x || !key.y) {\n return Promise.reject(new Error(\"missing static public key\"));\n }\n var spk = ecUtil.convertToObj(key, true);\n\n // derive ECDH shared\n var promise = doEcdhesCommonDerive(epk, spk, {\n algorithm: props.alg,\n apu: props.apu,\n apv: props.apv\n });\n promise = promise.then(function(shared) {\n // wrap provided key with ECDH shared\n return wrap(shared, pdata);\n });\n return promise;\n };\n\n return fn;\n}\n\nfunction ecdhesKwDecryptFn(unwrap) {\n // NOTE: no nodejs/webcrypto/fallback model, since this algorithm is\n // implemented using other primitives\n var fn = function(key, cdata, props) {\n props = props || {};\n\n // {props.epk} is public\n if (!props.epk || !props.epk.x || !props.epk.y) {\n return Promise.reject(new Error(\"missing ephemeral public key\"));\n }\n var epk = ecUtil.convertToObj(props.epk, true);\n\n // {key} is private\n if (!key || !key.d) {\n return Promise.reject(new Error(\"missing static private key\"));\n }\n var spk = ecUtil.convertToObj(key, false);\n\n // derive ECDH shared\n var promise = doEcdhesCommonDerive(spk, epk, {\n algorithm: props.alg,\n apu: props.apu,\n apv: props.apv\n });\n promise = promise.then(function(shared) {\n // unwrap provided key with ECDH shared\n return unwrap(shared, cdata);\n });\n return promise;\n };\n\n return fn;\n}\n\n// ### Public API\n// * [name].derive\n[\n \"ECDH\",\n \"ECDH-HKDF\",\n \"ECDH-CONCAT\"\n].forEach(function(name) {\n var kdf = /^ECDH(?:-(\\w+))?$/g.exec(name || \"\")[1];\n var op = ecdh[name] = ecdh[name] || {};\n switch (kdf || \"\") {\n case \"CONCAT\":\n op.derive = ecdhConcatDeriveFn();\n break;\n case \"HKDF\":\n op.derive = ecdhHkdfDeriveFn();\n break;\n case \"\":\n op.derive = ecdhDeriveFn();\n break;\n default:\n op.derive = null;\n }\n});\n\n// * [name].encrypt\n// * [name].decrypt\n[\n \"ECDH-ES\",\n \"ECDH-ES+A128KW\",\n \"ECDH-ES+A192KW\",\n \"ECDH-ES+A256KW\"\n].forEach(function(name) {\n var kw = /^ECDH-ES(?:\\+(.+))?/g.exec(name || \"\")[1];\n var op = ecdh[name] = ecdh[name] || {};\n if (!kw) {\n op.encrypt = ecdhesDirEncryptFn();\n op.decrypt = ecdhesDirDecryptFn();\n } else {\n kw = aesKw[kw];\n if (kw) {\n op.encrypt = ecdhesKwEncryptFn(kw.encrypt);\n op.decrypt = ecdhesKwDecryptFn(kw.decrypt);\n } else {\n op.ecrypt = op.decrypt = null;\n }\n }\n});\n//*/\n","/*!\n * algorithms/ecdsa.js - Elliptic Curve Digitial Signature Algorithms\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar ecUtil = require(\"./ec-util.js\"),\n helpers = require(\"./helpers.js\"),\n sha = require(\"./sha.js\");\n\nfunction idealCurve(hash) {\n switch (hash) {\n case \"SHA-256\":\n return \"P-256\";\n case \"SHA-384\":\n return \"P-384\";\n case \"SHA-512\":\n return \"P-521\";\n default:\n throw new Error(\"unsupported hash: \" + hash);\n }\n}\n\nfunction ecdsaSignFN(hash) {\n var curve = idealCurve(hash);\n\n // ### Fallback implementation -- uses forge\n var fallback = function(key, pdata /*, props */) {\n if (curve !== key.crv) {\n return Promise.reject(new Error(\"invalid curve\"));\n }\n var pk = ecUtil.convertToForge(key, false);\n\n var promise;\n // generate hash\n promise = sha[hash].digest(pdata);\n // sign hash\n promise = promise.then(function(result) {\n result = pk.sign(result);\n result = Buffer.concat([result.r, result.s]);\n return {\n data: pdata,\n mac: result\n };\n });\n return promise;\n };\n\n // ### WebCrypto API implementation\n var webcrypto = function(key, pdata /*, props */) {\n if (curve !== key.crv) {\n return Promise.reject(new Error(\"invalid curve\"));\n }\n var pk = ecUtil.convertToJWK(key, false);\n\n var promise;\n var alg = {\n name: \"ECDSA\",\n namedCurve: pk.crv,\n hash: {\n name: hash\n }\n };\n promise = helpers.subtleCrypto.importKey(\"jwk\",\n pk,\n alg,\n true,\n [ \"sign\" ]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.sign(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n result = Buffer.from(result);\n return {\n data: pdata,\n mac: result\n };\n });\n return promise;\n };\n\n var nodejs;\n var nodeHash = hash.toLowerCase().replace(\"-\", \"\");\n if (helpers.nodeCrypto && helpers.nodeCrypto.getHashes().indexOf(nodeHash) > -1) {\n nodejs = function(key, pdata) {\n if (curve !== key.crv) {\n return Promise.reject(new Error(\"invalid curve\"));\n }\n\n var promise;\n promise = Promise.resolve(helpers.nodeCrypto.createSign(nodeHash));\n promise = promise.then(function (sign) {\n sign.update(pdata);\n return sign;\n });\n\n var size;\n\n switch (nodeHash.slice(-3)) {\n case \"384\":\n size = 48;\n break;\n case \"512\":\n size = 66;\n break;\n default:\n size = 32;\n }\n\n promise = promise.then(function (sign) {\n return ecUtil.derToConcat(sign.sign(ecUtil.convertToPEM(key, true)), size);\n });\n\n promise = promise.then(function (result) {\n return {\n data: pdata,\n mac: result\n };\n });\n\n return promise;\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction ecdsaVerifyFN(hash) {\n var curve = idealCurve(hash);\n\n // ### Fallback implementation -- uses forge\n var fallback = function(key, pdata, mac /*, props */) {\n if (curve !== key.crv) {\n return Promise.reject(new Error(\"invalid curve\"));\n }\n var pk = ecUtil.convertToForge(key, true);\n\n var promise;\n // generate hash\n promise = sha[hash].digest(pdata);\n // verify hash\n promise = promise.then(function(result) {\n var len = mac.length / 2;\n var rs = {\n r: mac.slice(0, len),\n s: mac.slice(len)\n };\n if (!pk.verify(result, rs)) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n });\n return promise;\n };\n\n // ### WebCrypto API implementation\n var webcrypto = function(key, pdata, mac /* , props */) {\n if (curve !== key.crv) {\n return Promise.reject(new Error(\"invalid curve\"));\n }\n var pk = ecUtil.convertToJWK(key, true);\n\n var promise;\n var alg = {\n name: \"ECDSA\",\n namedCurve: pk.crv,\n hash: {\n name: hash\n }\n };\n promise = helpers.subtleCrypto.importKey(\"jwk\",\n pk,\n alg,\n true,\n [\"verify\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.verify(alg, key, mac, pdata);\n });\n promise = promise.then(function(result) {\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n });\n return promise;\n };\n\n var nodejs;\n var nodeHash = hash.toLowerCase().replace(\"-\", \"\");\n if (helpers.nodeCrypto && helpers.nodeCrypto.getHashes().indexOf(nodeHash) > -1) {\n nodejs = function(key, pdata, mac /* , props */) {\n if (curve !== key.crv) {\n return Promise.reject(new Error(\"invalid curve\"));\n }\n\n var size;\n switch (nodeHash.slice(-3)) {\n case \"384\":\n size = 48;\n break;\n case \"512\":\n size = 66;\n break;\n default:\n size = 32;\n }\n\n var promise;\n promise = Promise.resolve(helpers.nodeCrypto.createVerify(nodeHash));\n promise = promise.then(function (verify) {\n verify.update(pdata);\n verify.end();\n return verify.verify(ecUtil.convertToPEM(key, false), ecUtil.concatToDer(mac, size));\n });\n promise = promise.then(function (result) {\n if (!result) {\n throw new Error(\"verification failed\");\n }\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n });\n\n return promise;\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// ### Public API\nvar ecdsa = {};\n\n// * [name].sign\n// * [name].verify\n[\n \"ES256\",\n \"ES384\",\n \"ES512\"\n].forEach(function(name) {\n var hash = name.replace(/ES(\\d+)/g, function(m, size) {\n return \"SHA-\" + size;\n });\n ecdsa[name] = {\n sign: ecdsaSignFN(hash),\n verify: ecdsaVerifyFN(hash)\n };\n});\n\nmodule.exports = ecdsa;\n","/*!\n * algorithms/helpers.js - Internal functions and fields used in Cryptographic\n * Algorithms\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nif (typeof Promise === \"undefined\") {\n require(\"es6-promise\").polyfill();\n}\n\n// ###\nexports.int32ToBuffer = function(v, b) {\n b = b || Buffer.alloc(4);\n b[0] = (v >>> 24) & 0xff;\n b[1] = (v >>> 16) & 0xff;\n b[2] = (v >>> 8) & 0xff;\n b[3] = v & 0xff;\n return b;\n};\n\nvar MAX_INT32 = Math.pow(2, 32);\nexports.int64ToBuffer = function(v, b) {\n b = b || Buffer.alloc(8);\n var hi = Math.floor(v / MAX_INT32),\n lo = v % MAX_INT32;\n hi = exports.int32ToBuffer(hi);\n lo = exports.int32ToBuffer(lo);\n b = Buffer.concat([hi, lo]);\n return b;\n};\n\n// ### crypto and DOMException in browsers ###\n/* global crypto:false, DOMException:false */\n\nfunction getCryptoSubtle() {\n if (\"undefined\" !== typeof crypto) {\n if (\"undefined\" !== typeof crypto.subtle) {\n return crypto.subtle;\n }\n }\n\n return undefined;\n}\nfunction getCryptoNodeJS() {\n var crypto;\n try {\n crypto = require(\"crypto\");\n } catch (err) {\n return undefined;\n }\n\n if (!Object.keys(crypto).length) {\n // treat empty the same as missing\n return undefined;\n }\n\n return crypto;\n}\n\nvar supported = {};\nObject.defineProperty(exports, \"subtleCrypto\", {\n get: function() {\n var result;\n\n if (\"subtleCrypto\" in supported) {\n result = supported.subtleCrypto;\n } else {\n result = supported.subtleCrypto = getCryptoSubtle();\n }\n\n return result;\n },\n enumerable: true\n});\nObject.defineProperty(exports, \"nodeCrypto\", {\n get: function() {\n var result;\n\n if (\"nodeCrypto\" in supported) {\n result = supported.nodeCrypto;\n } else {\n result = supported.nodeCrypto = getCryptoNodeJS();\n }\n\n return result;\n },\n enumerable: true\n});\n\nexports.setupFallback = function(nodejs, webcrypto, fallback) {\n var impl;\n\n if (nodejs && exports.nodeCrypto) {\n impl = function main() {\n var args = arguments,\n promise;\n\n function check(err) {\n if (0 === err.message.indexOf(\"unsupported algorithm:\")) {\n impl = fallback;\n return impl.apply(null, args);\n }\n\n return Promise.reject(err);\n }\n\n try {\n promise = Promise.resolve(nodejs.apply(null, args));\n } catch(err) {\n promise = check(err);\n }\n\n return promise;\n };\n } else if (webcrypto && exports.subtleCrypto) {\n impl = function main() {\n var args = arguments,\n promise;\n\n function check(err) {\n if (err.code === DOMException.NOT_SUPPORTED_ERR ||\n // Firefox rejects some operations erroneously complaining about inputs\n err.message === \"Only ArrayBuffer and ArrayBufferView objects can be passed as CryptoOperationData\" ||\n // MS Edge rejects with not an Error\n !(err instanceof Error)) {\n // not actually supported -- always use fallback\n impl = fallback;\n return impl.apply(null, args);\n }\n\n return Promise.reject(err);\n }\n\n try {\n promise = webcrypto.apply(null, args);\n promise = promise.catch(check);\n } catch(err) {\n promise = check(err);\n }\n\n return promise;\n };\n } else {\n impl = fallback;\n }\n\n return impl;\n};\n","/*!\n * algorithms/hkdf.js - HMAC-based Extract-and-Expand Key Derivation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar CONSTANTS = require(\"./constants.js\"),\n hmac = require(\"./hmac.js\");\n\nfunction hkdfDeriveFn(name) {\n var hash = name.replace(\"HKDF-\", \"\"),\n op = name.replace(\"HKDF-SHA-\", \"HS\");\n\n // NOTE: no nodejs/webcrypto/fallback model, since this HKDF is\n // implemented using the HMAC algorithms\n\n var fn = function(key, props) {\n var hashLen = CONSTANTS.HASHLENGTH[hash] / 8;\n\n if (\"string\" === typeof op) {\n op = hmac[op].sign;\n }\n\n // prepare options\n props = props || {};\n var salt = props.salt;\n if (!salt || 0 === salt.length) {\n salt = Buffer.alloc(hashLen);\n }\n var info = props.info || Buffer.alloc(0);\n var keyLen = props.length || hashLen;\n\n var promise;\n\n // Setup Expansion\n var N = Math.ceil(keyLen / hashLen),\n okm = [],\n idx = 0;\n function expand(key, T) {\n if (N === idx++) {\n return Buffer.concat(okm).slice(0, keyLen);\n }\n\n if (!T) {\n T = Buffer.alloc(0);\n }\n T = Buffer.concat([T, info, Buffer.from([idx])]);\n T = op(key, T);\n T = T.then(function(result) {\n T = result.mac;\n okm.push(T);\n\n return expand(key, T);\n });\n return T;\n }\n\n // Step 1: Extract\n promise = op(salt, key, { length: salt.length * 8 });\n promise = promise.then(function(result) {\n // Step 2: Expand\n return expand(result.mac);\n });\n\n return promise;\n };\n\n return fn;\n}\n\n// Public API\n// * [name].derive\nvar hkdf = {};\n[\n \"HKDF-SHA-1\",\n \"HKDF-SHA-256\",\n \"HKDF-SHA-384\",\n \"HKDF-SHA-512\"\n].forEach(function(name) {\n hkdf[name] = {\n derive: hkdfDeriveFn(name)\n };\n});\n\nmodule.exports = hkdf;\n","/*!\n * algorithms/hmac.js - HMAC-based \"signatures\"\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar CONSTANTS = require(\"./constants\"),\n forge = require(\"../deps/forge.js\"),\n DataBuffer = require(\"../util/databuffer.js\"),\n helpers = require(\"./helpers.js\");\n\nfunction hmacSignFN(name) {\n var md = name.replace(\"HS\", \"SHA\").toLowerCase(),\n hash = name.replace(\"HS\", \"SHA-\");\n\n function checkKeyLength(len, key) {\n len = (len || CONSTANTS.HASHLENGTH[hash]) / 8;\n if (len > key.length) {\n return Promise.reject(new Error(\"invalid key length\"));\n }\n\n return Promise.resolve(key);\n }\n\n // ### Fallback Implementation -- uses forge\n var fallback = function(key, pdata, props) {\n props = props || {};\n var promise;\n promise = checkKeyLength(props.length, key);\n promise = promise.then(function() {\n var sig = forge.hmac.create();\n sig.start(md, key.toString(\"binary\"));\n sig.update(pdata.toString(\"binary\"));\n sig = Buffer.from(sig.digest().bytes(), \"binary\");\n\n return {\n data: pdata,\n mac: sig\n }\n });\n return promise;\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto = function(key, pdata, props) {\n props = props || {};\n\n var alg = {\n name: \"HMAC\",\n hash: {\n name: hash\n }\n };\n var promise;\n promise = checkKeyLength(props.length, key);\n promise = promise.then(function() {\n return helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"sign\"]);\n });\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.sign(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n var sig = Buffer.from(result);\n return {\n data: pdata,\n mac: sig\n };\n });\n\n return promise;\n };\n\n // ### NodeJS implementation\n var nodejs = function(key, pdata, props) {\n props = props || {};\n\n var promise;\n promise = checkKeyLength(props.length, key);\n promise = promise.then(function() {\n var hmac = helpers.nodeCrypto.createHmac(md, key);\n hmac.update(pdata);\n\n var sig = hmac.digest();\n return {\n data: pdata,\n mac: sig\n };\n });\n return promise;\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction hmacVerifyFN(name) {\n var md = name.replace(\"HS\", \"SHA\").toLowerCase(),\n hash = name.replace(\"HS\", \"SHA-\");\n\n function compare(len, expected, actual) {\n len = (len || CONSTANTS.HASHLENGTH[hash]) / 8;\n var valid = true;\n for (var idx = 0; len > idx; idx++) {\n valid = valid && (expected[idx] === actual[idx]);\n }\n return valid;\n }\n\n // ### Fallback Implementation -- uses forge\n var fallback = function(key, pdata, mac, props) {\n props = props || {};\n\n var vrfy = forge.hmac.create();\n vrfy.start(md, new DataBuffer(key));\n vrfy.update(pdata.toString(\"binary\"));\n vrfy = Buffer.from(vrfy.digest().bytes(), \"binary\");\n\n if (compare(props.length, mac, vrfy)) {\n return Promise.resolve({\n data: pdata,\n mac: mac,\n valid: true\n });\n } else {\n return Promise.reject(new Error(\"verification failed\"));\n }\n };\n\n var webcrypto = function(key, pdata, mac, props) {\n props = props || {};\n\n var alg = {\n name: \"HMAC\",\n hash: {\n name: hash\n }\n };\n var promise;\n if (props.length) {\n promise = helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"sign\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.sign(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n var sig = Buffer.from(result);\n return compare(props.length, mac, sig);\n });\n } else {\n promise = helpers.subtleCrypto.importKey(\"raw\", key, alg, true, [\"verify\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.verify(alg, key, mac, pdata);\n });\n }\n promise = promise.then(function(result) {\n if (!result) {\n return Promise.reject(new Error(\"verifaction failed\"));\n }\n\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n });\n\n return promise;\n };\n\n var nodejs = function(key, pdata, mac, props) {\n props = props || {};\n\n var hmac = helpers.nodeCrypto.createHmac(md, key);\n hmac.update(pdata);\n\n var sig = hmac.digest();\n if (!compare(props.length, mac, sig)) {\n throw new Error(\"verification failed\");\n }\n return {\n data: pdata,\n mac: sig,\n valid: true\n };\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// ### Public API\n// * [name].sign\n// * [name].verify\nvar hmac = {};\n[\n \"HS1\",\n \"HS256\",\n \"HS384\",\n \"HS512\"\n].forEach(function(alg) {\n hmac[alg] = {\n sign: hmacSignFN(alg),\n verify: hmacVerifyFN(alg)\n };\n});\n\nmodule.exports = hmac;\n","/*!\n * algorithms/index.js - Cryptographic Algorithms Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\n// setup implementations\nvar implementations = [\n require(\"./aes-cbc-hmac-sha2.js\"),\n require(\"./aes-gcm.js\"),\n require(\"./aes-kw.js\"),\n require(\"./concat.js\"),\n require(\"./dir.js\"),\n require(\"./ecdh.js\"),\n require(\"./ecdsa.js\"),\n require(\"./hkdf.js\"),\n require(\"./hmac.js\"),\n require(\"./pbes2.js\"),\n require(\"./rsaes.js\"),\n require(\"./rsassa.js\"),\n require(\"./sha.js\")\n];\n\nvar ALGS_DIGEST = {};\nvar ALGS_DERIVE = {};\nvar ALGS_SIGN = {},\n ALGS_VRFY = {};\nvar ALGS_ENC = {},\n ALGS_DEC = {};\n\nimplementations.forEach(function(mod) {\n Object.keys(mod).forEach(function(alg) {\n var op = mod[alg];\n\n if (\"function\" === typeof op.encrypt) {\n ALGS_ENC[alg] = op.encrypt;\n }\n if (\"function\" === typeof op.decrypt) {\n ALGS_DEC[alg] = op.decrypt;\n }\n if (\"function\" === typeof op.sign) {\n ALGS_SIGN[alg] = op.sign;\n }\n if (\"function\" === typeof op.verify) {\n ALGS_VRFY[alg] = op.verify;\n }\n if (\"function\" === typeof op.digest) {\n ALGS_DIGEST[alg] = op.digest;\n }\n if (\"function\" === typeof op.derive) {\n ALGS_DERIVE[alg] = op.derive;\n }\n });\n});\n\n// public API\nexports.digest = function(alg, data, props) {\n var op = ALGS_DIGEST[alg];\n if (!op) {\n return Promise.reject(new Error(\"unsupported algorithm: \" + alg));\n }\n\n return op(data, props);\n};\n\nexports.derive = function(alg, key, props) {\n var op = ALGS_DERIVE[alg];\n if (!op) {\n return Promise.reject(new Error(\"unsupported algorithm: \" + alg));\n }\n\n return op(key, props);\n};\n\nexports.sign = function(alg, key, pdata, props) {\n var op = ALGS_SIGN[alg];\n if (!op) {\n return Promise.reject(new Error(\"unsupported algorithm: \" + alg));\n }\n\n return op(key, pdata, props || {});\n};\n\nexports.verify = function(alg, key, pdata, mac, props) {\n var op = ALGS_VRFY[alg];\n if (!op) {\n return Promise.reject(new Error(\"unsupported algorithm: \" + alg));\n }\n\n return op(key, pdata, mac, props || {});\n};\n\nexports.encrypt = function(alg, key, pdata, props) {\n var op = ALGS_ENC[alg];\n if (!op) {\n return Promise.reject(new Error(\"unsupported algorithm: \" + alg));\n }\n\n return op(key, pdata, props || {});\n};\n\nexports.decrypt = function(alg, key, cdata, props) {\n var op = ALGS_DEC[alg];\n if (!op) {\n return Promise.reject(new Error(\"unsupported algorithm: \" + alg));\n }\n\n return op(key, cdata, props || {});\n};\n","/*!\n * algorithms/pbes2.js - Password-Based Encryption (v2) Algorithms\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\"),\n merge = require(\"../util/merge.js\"),\n util = require(\"../util\"),\n helpers = require(\"./helpers.js\"),\n CONSTANTS = require(\"./constants.js\"),\n KW = require(\"./aes-kw.js\");\n\nvar NULL_BUFFER = Buffer.from([0]);\nvar DEFAULT_ITERATIONS = 8192;\nvar DEFAULT_SALT_LENGTH = 16;\n\nfunction fixSalt(hmac, kw, salt) {\n var alg = \"PBES2-\" + hmac + \"+\" + kw;\n var output = [\n Buffer.from(alg, \"utf8\"),\n NULL_BUFFER,\n salt\n ];\n return Buffer.concat(output);\n}\n\nfunction pbkdf2Fn(hash) {\n function prepareProps(props) {\n props = props || {};\n var keyLen = props.length || 0;\n var salt = util.asBuffer(props.salt || Buffer.alloc(0), \"base64u4l\"),\n itrs = props.iterations || 0;\n\n if (0 >= keyLen) {\n throw new Error(\"invalid key length\");\n }\n if (0 >= itrs) {\n throw new Error(\"invalid iteration count\");\n }\n\n props.length = keyLen;\n props.salt = salt;\n props.iterations = itrs;\n\n return props;\n }\n\n var fallback = function(key, props) {\n try {\n props = prepareProps(props);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var keyLen = props.length,\n salt = props.salt,\n itrs = props.iterations;\n\n var promise = new Promise(function(resolve, reject) {\n var md = forge.md[hash.replace(\"-\", \"\").toLowerCase()].create();\n var cb = function(err, dk) {\n if (err) {\n reject(err);\n } else {\n dk = Buffer.from(dk, \"binary\");\n resolve(dk);\n }\n };\n\n forge.pkcs5.pbkdf2(key.toString(\"binary\"),\n salt.toString(\"binary\"),\n itrs,\n keyLen,\n md,\n cb);\n });\n return promise;\n };\n var webcrypto = function(key, props) {\n try {\n props = prepareProps(props);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var keyLen = props.length,\n salt = props.salt,\n itrs = props.iterations;\n\n var promise = Promise.resolve(key);\n promise = promise.then(function(keyval) {\n return helpers.subtleCrypto.importKey(\"raw\", keyval, \"PBKDF2\", false, [\"deriveBits\"]);\n });\n promise = promise.then(function(key) {\n var mainAlgo = {\n name: \"PBKDF2\",\n salt: new Uint8Array(salt),\n iterations: itrs,\n hash: hash\n };\n\n return helpers.subtleCrypto.deriveBits(mainAlgo, key, keyLen * 8);\n });\n promise = promise.then(function(result) {\n return util.asBuffer(result);\n });\n return promise;\n };\n var nodejs = function(key, props) {\n if (6 > helpers.nodeCrypto.pbkdf2.length) {\n throw new Error(\"unsupported algorithm: PBKDF2-\" + hash);\n }\n\n try {\n props = prepareProps(props);\n } catch (err) {\n return Promise.reject(err);\n }\n\n var keyLen = props.length,\n salt = props.salt,\n itrs = props.iterations;\n\n var md = hash.replace(\"-\", \"\");\n var promise = new Promise(function(resolve, reject) {\n function cb(err, dk) {\n if (err) {\n reject(err);\n } else {\n resolve(dk);\n }\n }\n helpers.nodeCrypto.pbkdf2(key, salt, itrs, keyLen, md, cb);\n });\n return promise;\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction pbes2EncryptFN(hmac, kw) {\n var deriveAlg = \"PBKDF2-\" + hmac.replace(\"HS\", \"SHA-\");\n var keyLen = CONSTANTS.KEYLENGTH[kw] / 8;\n\n return function(key, pdata, props) {\n props = props || {};\n\n var salt = util.asBuffer(props.p2s || Buffer.alloc(0), \"base64url\"),\n itrs = props.p2c || DEFAULT_ITERATIONS;\n\n if (0 >= itrs) {\n throw new Error(\"invalid iteration count\");\n }\n if (0 === salt.length) {\n salt = util.randomBytes(DEFAULT_SALT_LENGTH);\n } else if (8 > salt.length) {\n throw new Error(\"salt too small\");\n }\n var header = {\n p2s: util.base64url.encode(salt),\n p2c: itrs\n };\n salt = fixSalt(hmac, kw, salt);\n props = merge(props, {\n salt: salt,\n iterations: itrs,\n length: keyLen\n });\n\n var promise = Promise.resolve(key);\n // STEP 1: derive shared key\n promise = promise.then(function (key) {\n return pbes2[deriveAlg].derive(key, props);\n });\n // STEP 2: encrypt cek\n promise = promise.then(function (dk) {\n return KW[kw].encrypt(dk, pdata);\n });\n // STEP 3: (re-)apply headers\n promise = promise.then(function (results) {\n results.header = merge(results.header || {}, header);\n return results;\n });\n\n return promise;\n };\n}\n\nfunction pbes2DecryptFN(hmac, kw) {\n var deriveAlg = \"PBKDF2-\" + hmac.replace(\"HS\", \"SHA-\");\n var keyLen = CONSTANTS.KEYLENGTH[kw] / 8;\n\n return function(key, cdata, props) {\n props = props || {};\n\n var salt = util.asBuffer(props.p2s || Buffer.alloc(0), \"base64url\"),\n itrs = props.p2c || 0;\n\n if (0 >= itrs) {\n return Promise.reject(new Error(\"invalid iteration count\"));\n }\n\n if (8 > salt.length) {\n return Promise.reject(new Error(\"salt too small\"));\n }\n salt = fixSalt(hmac, kw, salt);\n props = merge(props, {\n salt: salt,\n iterations: itrs,\n length: keyLen\n });\n\n var promise = Promise.resolve(key);\n\n // STEP 1: derived shared key\n promise = promise.then(function(key) {\n return pbes2[deriveAlg].derive(key, props);\n });\n // STEP 2: decrypt cek\n promise = promise.then(function(dk) {\n return KW[kw].decrypt(dk, cdata);\n });\n\n return promise;\n };\n}\n\n// ### Public API\nvar pbes2 = {};\n\n// * [name].derive\n[\n \"PBKDF2-SHA-256\",\n \"PBKDF2-SHA-384\",\n \"PBKDF2-SHA-512\"\n].forEach(function(alg) {\n var hash = alg.replace(\"PBKDF2-\", \"\");\n pbes2[alg] = {\n derive: pbkdf2Fn(hash)\n };\n});\n\n// [name].encrypt\n// [name].decrypt\n[\n \"PBES2-HS256+A128KW\",\n \"PBES2-HS384+A192KW\",\n \"PBES2-HS512+A256KW\"\n].forEach(function(alg) {\n var parts = /PBES2-(HS\\d+)\\+(A\\d+KW)/g.exec(alg);\n var hmac = parts[1],\n kw = parts[2];\n pbes2[alg] = {\n encrypt: pbes2EncryptFN(hmac, kw),\n decrypt: pbes2DecryptFN(hmac, kw)\n };\n});\n\nmodule.exports = pbes2;\n","/*!\n * algorithms/rsa-util.js - RSA Utility Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar clone = require(\"lodash/clone\"),\n forge = require(\"../deps/forge.js\"),\n util = require(\"../util\");\n\n// ### RSA-specific Helpers\nfunction convertToForge(key, isPublic) {\n var parts = isPublic ?\n [\"n\", \"e\"] :\n [\"n\", \"e\", \"d\", \"p\", \"q\", \"dp\", \"dq\", \"qi\"];\n parts = parts.map(function(f) {\n return new forge.jsbn.BigInteger(key[f].toString(\"hex\"), 16);\n });\n\n var fn = isPublic ?\n forge.pki.rsa.setPublicKey :\n forge.pki.rsa.setPrivateKey;\n return fn.apply(forge.pki.rsa, parts);\n}\n\nfunction convertToJWK(key, isPublic) {\n var result = clone(key);\n var parts = isPublic ?\n [\"n\", \"e\"] :\n [\"n\", \"e\", \"d\", \"p\", \"q\", \"dp\", \"dq\", \"qi\"];\n parts.forEach(function(f) {\n result[f] = util.base64url.encode(result[f]);\n });\n\n // remove potentially troublesome properties\n delete result.key_ops;\n delete result.use;\n delete result.alg;\n\n if (isPublic) {\n delete result.d;\n delete result.p;\n delete result.q;\n delete result.dp;\n delete result.dq;\n delete result.qi;\n }\n\n return result;\n}\n\nfunction convertToPem(key, isPublic) {\n var cacheKey = isPublic ? \"__cachedPublicPem\" : \"__cachedPrivatePem\";\n if (key[cacheKey]) {\n return key[cacheKey];\n }\n\n var value;\n if (isPublic) {\n value = forge.pki.publicKeyToPem(convertToForge(key, isPublic));\n } else {\n value = forge.pki.privateKeyToPem(convertToForge(key, isPublic));\n }\n\n Object.defineProperty(key, cacheKey, { value: value });\n return value;\n}\n\nmodule.exports = {\n convertToForge: convertToForge,\n convertToJWK: convertToJWK,\n convertToPem: convertToPem\n};\n","/*!\n * algorithms/rsaes.js - RSA Signatures\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\"),\n helpers = require(\"./helpers.js\"),\n DataBuffer = require(\"../util/databuffer.js\"),\n rsaUtil = require(\"./rsa-util.js\");\n\nvar nodeSupport = {\n \"RSA-OAEP\": \"RSA_PKCS1_OAEP_PADDING\",\n RSA1_5: \"RSA_PKCS1_PADDING\"\n};\n\nfunction nodeSupportCheck(name) {\n return helpers.nodeCrypto && helpers.nodeCrypto.constants && Object.keys(nodeSupport).indexOf(name) !== -1;\n}\n\n// ### RSAES-PKCS1-v1_5\n\n// ### RSAES-OAEP\nfunction rsaesEncryptFn(name) {\n var alg = {\n name: name\n };\n\n if (\"RSA-OAEP-256\" === name) {\n alg.name = \"RSA-OAEP\";\n alg.hash = {\n name: \"SHA-256\"\n };\n } else if (\"RSA-OAEP\" === name) {\n alg.hash = {\n name: \"SHA-1\"\n };\n } else {\n alg.name = \"RSAES-PKCS1-v1_5\";\n }\n\n // ### Fallback Implementation -- uses forge\n var fallback = function(key, pdata) {\n // convert pdata to byte string\n pdata = new DataBuffer(pdata).bytes();\n\n // encrypt it\n var pki = rsaUtil.convertToForge(key, true),\n params = {};\n if (\"RSA-OAEP\" === alg.name) {\n params.md = alg.hash.name.toLowerCase().replace(/-/g, \"\");\n params.md = forge.md[params.md].create();\n }\n var cdata = pki.encrypt(pdata, alg.name.toUpperCase(), params);\n\n // convert cdata to Buffer\n cdata = new DataBuffer(cdata).native();\n\n return Promise.resolve({\n data: cdata\n });\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto;\n if (\"RSAES-PKCS1-v1_5\" !== alg.name) {\n webcrypto = function(key, pdata) {\n key = rsaUtil.convertToJWK(key, true);\n var promise;\n promise = helpers.subtleCrypto.importKey(\"jwk\", key, alg, true, [\"encrypt\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.encrypt(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n var cdata = Buffer.from(result);\n return {\n data: cdata\n };\n });\n\n return promise;\n };\n } else {\n webcrypto = null;\n }\n\n var nodejs;\n if (nodeSupportCheck(name)) {\n nodejs = function (key, pdata) {\n key = rsaUtil.convertToPem(key, true);\n\n var cdata = helpers.nodeCrypto.publicEncrypt({\n key: key,\n padding: helpers.nodeCrypto.constants[nodeSupport[name]]\n }, pdata);\n\n return {\n data: cdata\n };\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction rsaesDecryptFn(name) {\n var alg = {\n name: name\n };\n\n if (\"RSA-OAEP-256\" === name) {\n alg.name = \"RSA-OAEP\";\n alg.hash = {\n name: \"SHA-256\"\n };\n } else if (\"RSA-OAEP\" === name) {\n alg.hash = {\n name: \"SHA-1\"\n };\n } else {\n alg.name = \"RSAES-PKCS1-v1_5\";\n }\n\n // ### Fallback Implementation -- uses forge\n var fallback = function(key, cdata) {\n // convert cdata to byte string\n cdata = new DataBuffer(cdata).bytes();\n\n // decrypt it\n var pki = rsaUtil.convertToForge(key, false),\n params = {};\n if (\"RSA-OAEP\" === alg.name) {\n params.md = alg.hash.name.toLowerCase().replace(/-/g, \"\");\n params.md = forge.md[params.md].create();\n }\n var pdata = pki.decrypt(cdata, alg.name.toUpperCase(), params);\n\n // convert pdata to Buffer\n pdata = new DataBuffer(pdata).native();\n\n return Promise.resolve(pdata);\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto;\n if (\"RSAES-PKCS1-v1_5\" !== alg.name) {\n webcrypto = function(key, pdata) {\n key = rsaUtil.convertToJWK(key, false);\n var promise;\n promise = helpers.subtleCrypto.importKey(\"jwk\", key, alg, true, [\"decrypt\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.decrypt(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n var pdata = Buffer.from(result);\n return pdata;\n });\n\n return promise;\n };\n } else {\n webcrypto = null;\n }\n\n var nodejs;\n if (nodeSupportCheck(name)) { // node ^6.12.0 || >= 8.0.0\n nodejs = function(key, pdata) {\n key = rsaUtil.convertToPem(key, false);\n return helpers.nodeCrypto.privateDecrypt({\n key: key,\n padding: helpers.nodeCrypto.constants[nodeSupport[name]]\n }, pdata);\n };\n } else if (helpers.nodeCrypto && name === \"RSA-OAEP\") { // node (>= 6.0.0 && < 6.12.0) || ^7.0.0\n nodejs = function(key, pdata) {\n key = rsaUtil.convertToPem(key, false);\n return helpers.nodeCrypto.privateDecrypt(key, pdata);\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// ### Public API\n// * [name].encrypt\n// * [name].decrypt\nvar rsaes = {};\n[\n \"RSA-OAEP\",\n \"RSA-OAEP-256\",\n \"RSA1_5\"\n].forEach(function(name) {\n rsaes[name] = {\n encrypt: rsaesEncryptFn(name),\n decrypt: rsaesDecryptFn(name)\n };\n});\n\nmodule.exports = rsaes;\n","/*!\n * algorithms/rsassa.js - RSA Signatures\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\"),\n CONSTANTS = require(\"./constants\"),\n helpers = require(\"./helpers.js\"),\n rsaUtil = require(\"./rsa-util.js\");\n\nfunction nodePSSsupport() {\n return helpers.nodeCrypto && helpers.nodeCrypto.constants && helpers.nodeCrypto.constants.RSA_PSS_SALTLEN_DIGEST;\n}\n\n// ### RSASSA-PKCS1-v1_5\n\nfunction rsassaV15SignFn(name) {\n var md = name.replace(\"RS\", \"SHA\").toLowerCase(),\n hash = name.replace(\"RS\", \"SHA-\");\n\n var alg = {\n name: \"RSASSA-PKCS1-V1_5\",\n hash: {\n name: hash\n }\n };\n\n // ### Fallback Implementation -- uses forge\n var fallback = function(key, pdata) {\n // create the digest\n var digest = forge.md[md].create();\n digest.start();\n digest.update(pdata);\n\n // sign it\n var pki = rsaUtil.convertToForge(key, false);\n var sig = pki.sign(digest, \"RSASSA-PKCS1-V1_5\");\n sig = Buffer.from(sig, \"binary\");\n\n return Promise.resolve({\n data: pdata,\n mac: sig\n });\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto = function(key, pdata) {\n key = rsaUtil.convertToJWK(key, false);\n var promise;\n promise = helpers.subtleCrypto.importKey(\"jwk\", key, alg, true, [\"sign\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.sign(alg, key, pdata);\n });\n promise = promise.then(function(result) {\n var sig = Buffer.from(result);\n return {\n data: pdata,\n mac: sig\n };\n });\n\n return promise;\n };\n\n var nodejs;\n var nodeHash = \"RSA-\" + hash.replace(\"-\", \"\");\n if (helpers.nodeCrypto && helpers.nodeCrypto.getHashes().indexOf(nodeHash) > -1) {\n nodejs = function(key, pdata) {\n var sign = helpers.nodeCrypto.createSign(nodeHash);\n sign.update(pdata);\n\n return {\n data: pdata,\n mac: sign.sign(rsaUtil.convertToPem(key, false))\n };\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction rsassaV15VerifyFn(name) {\n var md = name.replace(\"RS\", \"SHA\").toLowerCase(),\n hash = name.replace(\"RS\", \"SHA-\");\n var alg = {\n name: \"RSASSA-PKCS1-V1_5\",\n hash: {\n name: hash\n }\n };\n\n // ### Fallback implementation -- uses forge\n var fallback = function(key, pdata, mac) {\n // create the digest\n var digest = forge.md[md].create();\n digest.start();\n digest.update(pdata);\n digest = digest.digest().bytes();\n\n // verify it\n var pki = rsaUtil.convertToForge(key, true);\n var sig = mac.toString(\"binary\");\n var result = pki.verify(digest, sig, \"RSASSA-PKCS1-V1_5\");\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n return Promise.resolve({\n data: pdata,\n mac: mac,\n valid: true\n });\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto = function(key, pdata, mac) {\n key = rsaUtil.convertToJWK(key, true);\n var promise;\n promise = helpers.subtleCrypto.importKey(\"jwk\", key, alg, true, [\"verify\"]);\n promise = promise.then(function(key) {\n return helpers.subtleCrypto.verify(alg, key, mac, pdata);\n });\n promise = promise.then(function(result) {\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n });\n\n return promise;\n };\n\n var nodejs;\n if (helpers.nodeCrypto && helpers.nodeCrypto.getHashes().indexOf(md) > -1) {\n nodejs = function(key, pdata, mac) {\n var verify = helpers.nodeCrypto.createVerify(md);\n verify.update(pdata);\n verify.end();\n var result = verify.verify(rsaUtil.convertToPem(key, true), mac);\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// ### RSA-PSS\nfunction rsassaPssSignFn(name) {\n var md = name.replace(\"PS\", \"SHA\").toLowerCase(),\n hash = name.replace(\"PS\", \"SHA-\");\n\n var alg = {\n name: \"RSA-PSS\",\n hash: {\n name: hash\n },\n saltLength: CONSTANTS.HASHLENGTH[hash] / 8\n };\n\n // ### Fallback implementation -- uses forge\n var fallback = function (key, pdata) {\n // create the digest\n var digest = forge.md[md].create();\n digest.start();\n digest.update(pdata);\n\n // setup padding\n var pss = forge.pss.create({\n md: forge.md[md].create(),\n mgf: forge.mgf.mgf1.create(forge.md[md].create()),\n saltLength: CONSTANTS.HASHLENGTH[hash] / 8\n });\n\n // sign it\n var pki = rsaUtil.convertToForge(key, false);\n var sig = pki.sign(digest, pss);\n sig = Buffer.from(sig, \"binary\");\n\n return Promise.resolve({\n data: pdata,\n mac: sig\n });\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto = function(key, pdata) {\n key = rsaUtil.convertToJWK(key, false);\n var promise;\n promise = helpers.subtleCrypto.importKey(\"jwk\", key, alg, true, [\"sign\"]);\n promise = promise.then(function (key) {\n return helpers.subtleCrypto.sign(alg, key, pdata);\n });\n promise = promise.then(function (result) {\n var sig = Buffer.from(result);\n return {\n data: pdata,\n mac: sig\n };\n });\n\n return promise;\n };\n\n var nodejs;\n var nodeHash = \"RSA-\" + hash.replace(\"-\", \"\");\n if (nodePSSsupport()) {\n nodejs = function(key, pdata) {\n var sign = helpers.nodeCrypto.createSign(nodeHash);\n sign.update(pdata);\n\n var sig = sign.sign({\n key: rsaUtil.convertToPem(key, false),\n padding: helpers.nodeCrypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: helpers.nodeCrypto.constants.RSA_PSS_SALTLEN_DIGEST\n });\n\n return {\n data: pdata,\n mac: sig\n };\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\nfunction rsassaPssVerifyFn(name) {\n var md = name.replace(\"PS\", \"SHA\").toLowerCase(),\n hash = name.replace(\"PS\", \"SHA-\");\n\n var alg = {\n name: \"RSA-PSS\",\n hash: {\n name: hash\n },\n saltLength: CONSTANTS.HASHLENGTH[hash] / 8\n };\n\n // ### Fallback implementation -- uses forge\n var fallback = function (key, pdata, mac) {\n // create the digest\n var digest = forge.md[md].create();\n digest.start();\n digest.update(pdata);\n digest = digest.digest().bytes();\n\n // setup padding\n var pss = forge.pss.create({\n md: forge.md[md].create(),\n mgf: forge.mgf.mgf1.create(forge.md[md].create()),\n saltLength: CONSTANTS.HASHLENGTH[hash] / 8\n });\n\n // verify it\n var pki = rsaUtil.convertToForge(key, true);\n var sig = mac.toString(\"binary\");\n var result = pki.verify(digest, sig, pss);\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n return Promise.resolve({\n data: pdata,\n mac: mac,\n valid: true\n });\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto = function(key, pdata, mac) {\n key = rsaUtil.convertToJWK(key, true);\n var promise;\n promise = helpers.subtleCrypto.importKey(\"jwk\", key, alg, true, [\"verify\"]);\n promise = promise.then(function (key) {\n return helpers.subtleCrypto.verify(alg, key, mac, pdata);\n });\n promise = promise.then(function (result) {\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n });\n\n return promise;\n };\n\n var nodejs;\n if (nodePSSsupport()) {\n nodejs = function(key, pdata, mac) {\n var verify = helpers.nodeCrypto.createVerify(md);\n verify.update(pdata);\n verify.end();\n var result = verify.verify({\n key: rsaUtil.convertToPem(key, true),\n padding: helpers.nodeCrypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: helpers.nodeCrypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, mac);\n if (!result) {\n return Promise.reject(new Error(\"verification failed\"));\n }\n\n return {\n data: pdata,\n mac: mac,\n valid: true\n };\n };\n }\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// ### Public API\n// * [name].sign\n// * [name].verify\nvar rsassa = {};\n[\n \"PS256\",\n \"PS384\",\n \"PS512\"\n].forEach(function(name) {\n rsassa[name] = {\n sign: rsassaPssSignFn(name),\n verify: rsassaPssVerifyFn(name)\n };\n});\n\n[\n \"RS256\",\n \"RS384\",\n \"RS512\"\n].forEach(function(name) {\n rsassa[name] = {\n sign: rsassaV15SignFn(name),\n verify: rsassaV15VerifyFn(name)\n };\n});\n\nmodule.exports = rsassa;\n","/*!\n * algorithms/sha.js - Cryptographic Secure Hash Algorithms, versions 1 and 2\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\"),\n helpers = require(\"./helpers.js\");\n\nfunction hashDigestFN(hash) {\n var md = hash.replace(\"SHA-\", \"SHA\").toLowerCase();\n\n var alg = {\n name: hash\n };\n\n // ### Fallback Implementation -- uses forge\n var fallback = function(pdata /* props */) {\n var digest = forge.md[md].create();\n digest.update(pdata.toString(\"binary\"));\n digest = Buffer.from(digest.digest().bytes(), \"binary\");\n\n return Promise.resolve(digest);\n };\n\n // ### WebCryptoAPI Implementation\n var webcrypto = function(pdata /* props */) {\n var promise;\n promise = helpers.subtleCrypto.digest(alg, pdata);\n promise = promise.then(function(result) {\n result = Buffer.from(result);\n return result;\n });\n return promise;\n };\n\n // ### nodejs Implementation\n var nodejs = function(pdata /* props */) {\n var digest = helpers.nodeCrypto.createHash(md);\n digest.update(pdata);\n return digest.digest();\n };\n\n return helpers.setupFallback(nodejs, webcrypto, fallback);\n}\n\n// Public API\n// * [name].digest\nvar sha = {};\n[\n \"SHA-1\",\n \"SHA-256\",\n \"SHA-384\",\n \"SHA-512\"\n].forEach(function(name) {\n sha[name] = {\n digest: hashDigestFN(name)\n };\n});\n\nmodule.exports = sha;\n","/*!\n * deps/ciphermodes/gcm/helpers.js - AES-GCM Helper Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar Long = require(\"long\"),\n fill = require(\"lodash/fill\"),\n pack = require(\"../pack.js\");\n\nvar E1 = 0xe1000000,\n E1B = 0xe1,\n E1L = new Long(E1 >> 8);\n\nfunction generateLookup() {\n var lookup = [];\n\n for (var c = 0; c < 256; ++c) {\n var v = 0;\n for (var i = 7; i >= 0; --i) {\n if ((c & (1 << i)) !== 0) {\n v ^= (E1 >>> (7 - i));\n }\n }\n lookup.push(v);\n }\n\n return lookup;\n}\n\nvar helpers = module.exports = {\n // ### Constants\n E1: E1,\n E1B: E1B,\n E1L: E1L,\n LOOKUP: generateLookup(),\n\n // ### Array Helpers\n arrayCopy: function(src, srcPos, dest, destPos, length) {\n // Start by checking for negatives since arrays in JS auto-expand\n if (srcPos < 0 || destPos < 0 || length < 0) {\n throw new TypeError(\"Invalid input.\");\n }\n\n if (dest instanceof Uint8Array) {\n // Check for overflow if dest is a typed-array\n if (destPos >= dest.length || (destPos + length) > dest.length) {\n throw new TypeError(\"Invalid input.\");\n }\n\n if (srcPos !== 0 || length < src.length) {\n if (src instanceof Uint8Array) {\n src = src.subarray(srcPos, srcPos + length);\n } else {\n src = src.slice(srcPos, srcPos + length);\n }\n }\n\n dest.set(src, destPos);\n } else {\n for (var i = 0; i < length; ++i) {\n dest[destPos + i] = src[srcPos + i];\n }\n }\n },\n arrayEqual: function(a1, a2) {\n a1 = a1 || [];\n a2 = a2 || [];\n\n var len = Math.min(a1.length, a2.length),\n result = (a1.length === a2.length);\n\n for (var idx = 0; idx < len; idx++) {\n result = result &&\n (\"undefined\" !== typeof a1[idx]) &&\n (\"undefined\" !== typeof a2[idx]) &&\n (a1[idx] === a2[idx]);\n }\n\n return result;\n },\n\n // ### Conversions\n asBytes: function(x, z) {\n switch (arguments.length) {\n case 1:\n z = Buffer.alloc(16);\n pack.intToBigEndian(x, z, 0);\n return z;\n case 2:\n pack.intToBigEndian(x, z, 0);\n break;\n default:\n throw new TypeError(\"Expected 1 or 2 arguments.\");\n }\n },\n asInts: function(x, z) {\n switch (arguments.length) {\n case 1:\n z = [];\n fill(z, 0, 0, 4);\n pack.bigEndianToInt(x, 0, z);\n return z;\n case 2:\n pack.bigEndianToInt(x, 0, z);\n break;\n default:\n throw new TypeError(\"Expected 1 or 2 arguments.\");\n }\n },\n oneAsInts: function() {\n var tmp = [];\n for (var c = 0; c < 4; ++c) {\n tmp.push(1 << 31);\n }\n return tmp;\n },\n\n // ## Bit-wise\n shiftRight: function(x, z) {\n var b, c;\n switch (arguments.length) {\n case 1:\n b = x[0];\n x[0] = b >>> 1;\n c = b << 31;\n b = x[1];\n x[1] = (b >>> 1) | c;\n c = b << 31;\n b = x[2];\n x[2] = (b >>> 1) | c;\n c = b << 31;\n b = x[3];\n x[3] = (b >>> 1) | c;\n return (b << 31) & 0xffffffff;\n case 2:\n b = x[0];\n z[0] = b >>> 1;\n c = b << 31;\n b = x[1];\n z[1] = (b >>> 1) | c;\n c = b << 31;\n b = x[2];\n z[2] = (b >>> 1) | c;\n c = b << 31;\n b = x[3];\n z[3] = (b >>> 1) | c;\n return (b << 31) & 0xffffffff;\n default:\n throw new TypeError(\"Expected 1 or 2 arguments.\");\n }\n },\n shiftRightN: function(x, n, z) {\n var nInv, b, c;\n switch (arguments.length) {\n case 2:\n b = x[0];\n nInv = 32 - n;\n x[0] = b >>> n;\n c = b << nInv;\n b = x[1];\n x[1] = (b >>> n) | c;\n c = b << nInv;\n b = x[2];\n x[2] = (b >>> n) | c;\n c = b << nInv;\n b = x[3];\n x[3] = (b >>> n) | c;\n return b << nInv;\n case 3:\n b = x[0];\n nInv = 32 - n;\n z[0] = b >>> n;\n c = b << nInv;\n b = x[1];\n z[1] = (b >>> n) | c;\n c = b << nInv;\n b = x[2];\n z[2] = (b >>> n) | c;\n c = b << nInv;\n b = x[3];\n z[3] = (b >>> n) | c;\n return b << nInv;\n default:\n throw new TypeError(\"Expected 2 or 3 arguments.\");\n }\n },\n xor: function(x, y, z) {\n switch (arguments.length) {\n case 2:\n x[0] ^= y[0];\n x[1] ^= y[1];\n x[2] ^= y[2];\n x[3] ^= y[3];\n break;\n case 3:\n z[0] = x[0] ^ y[0];\n z[1] = x[1] ^ y[1];\n z[2] = x[2] ^ y[2];\n z[3] = x[3] ^ y[3];\n break;\n default:\n throw new TypeError(\"Expected 2 or 3 arguments.\");\n }\n },\n\n multiply: function(x, y) {\n var r0 = x.slice();\n var r1 = [];\n\n for (var i = 0; i < 4; ++i) {\n var bits = y[i];\n for (var j = 31; j >= 0; --j) {\n if ((bits & (1 << j)) !== 0) {\n helpers.xor(r1, r0);\n }\n\n if (helpers.shiftRight(r0) !== 0) {\n r0[0] ^= helpers.E1;\n }\n }\n }\n\n helpers.arrayCopy(r1, 0, x, 0, 4);\n },\n multiplyP: function(x, y) {\n switch (arguments.length) {\n case 1:\n if (helpers.shiftRight(x) !== 0) {\n x[0] ^= helpers.E1;\n }\n break;\n case 2:\n if (helpers.shiftRight(x, y) !== 0) {\n y[0] ^= helpers.E1;\n }\n break;\n default:\n throw new TypeError(\"Expected 1 or 2 arguments.\");\n }\n },\n multiplyP8: function(x, y) {\n var c;\n switch (arguments.length) {\n case 1:\n c = helpers.shiftRightN(x, 8);\n x[0] ^= helpers.LOOKUP[c >>> 24];\n break;\n case 2:\n c = helpers.shiftRightN(x, 8, y);\n y[0] ^= helpers.LOOKUP[c >>> 24];\n break;\n default:\n throw new TypeError(\"Expected 1 or 2 arguments.\");\n }\n }\n};\n","/*!\n * deps/ciphermodes/gcm/index.js - AES-GCM implementation Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar Long = require(\"long\"),\n forge = require(\"../../../deps/forge.js\"),\n multipliers = require(\"./multipliers.js\"),\n helpers = require(\"./helpers.js\"),\n pack = require(\"../pack.js\"),\n DataBuffer = require(\"../../../util/databuffer.js\"),\n cipherHelpers = require(\"../helpers.js\");\n\nvar BLOCK_SIZE = 16;\n\n// ### GCM Mode\n// ### Constructor\nfunction Gcm(options) {\n options = options || {};\n\n this.name = \"GCM\";\n this.cipher = options.cipher;\n this.blockSize = this.blockSize || 16;\n}\n\n// ### exports\nmodule.exports = {\n createCipher: function(options) {\n var alg = new forge.aes.Algorithm(\"AES-GCM\", Gcm);\n alg.initialize({\n key: new DataBuffer(options.key)\n });\n alg.mode.start(options);\n\n return alg.mode;\n },\n createDecipher: function(options) {\n var alg = new forge.aes.Algorithm(\"AES-GCM\", Gcm);\n alg.initialize({\n key: new DataBuffer(options.key)\n });\n alg.mode._decrypt = true;\n alg.mode.start(options);\n\n return alg.mode;\n }\n};\n\n// ### Public API\nGcm.prototype.start = function(options) {\n this.tag = null;\n\n options = options || {};\n\n if (!(\"iv\" in options)) {\n throw new Error(\"Gcm needs ParametersWithIV or AEADParameters\");\n }\n this.nonce = options.iv;\n if (this.nonce == null || this.nonce.length < 1) {\n throw new Error(\"IV must be at least 1 byte\");\n }\n\n // TODO: variable tagLength?\n this.tagLength = 16;\n\n // TODO: validate tag\n if (\"tag\" in options) {\n this.tag = Buffer.from(options.tag);\n }\n\n var bufLength = !this._decrypt ?\n this.blockSize :\n (this.blockSize + this.tagLength);\n this.bufBlock = Buffer.alloc(bufLength);\n\n var multiplier = options.multiplier;\n if (multiplier == null) {\n multiplier = new (multipliers[\"8k\"])();\n }\n this.multiplier = multiplier;\n\n this.H = this.zeroBlock();\n cipherHelpers.encrypt(this.cipher, this.H, 0, this.H, 0);\n\n // GcmMultiplier tables don\"t change unless the key changes\n // (and are expensive to init)\n this.multiplier.init(this.H);\n this.exp = null;\n\n this.J0 = this.zeroBlock();\n\n if (this.nonce.length === 12) {\n this.nonce.copy(this.J0, 0, 0, this.nonce.length);\n this.J0[this.blockSize - 1] = 0x01;\n } else {\n this.gHASH(this.J0, this.nonce, this.nonce.length);\n var X = this.zeroBlock();\n pack.longToBigEndian(new Long(this.nonce.length).\n multiply(8), X, 8);\n this.gHASHBlock(this.J0, X);\n }\n\n this.S = this.zeroBlock();\n this.SAt = this.zeroBlock();\n this.SAtPre = this.zeroBlock();\n this.atBlock = this.zeroBlock();\n this.atBlockPos = 0;\n this.atLength = Long.ZERO;\n this.atLengthPre = Long.ZERO;\n this.counter = Buffer.from(this.J0);\n this.bufOff = 0;\n this.totalLength = Long.ZERO;\n\n if (\"additionalData\" in options) {\n this.processAADBytes(options.additionalData, 0, options.additionalData.length);\n }\n};\n\nGcm.prototype.update = function(inV, inOff, len, out, outOff) {\n var resultLen = 0;\n\n while (len > 0) {\n var inLen = Math.min(len, this.bufBlock.length - this.bufOff);\n inV.copy(this.bufBlock, this.bufOff, inOff, inOff + inLen);\n len -= inLen;\n inOff += inLen;\n this.bufOff += inLen;\n if (this.bufOff === this.bufBlock.length) {\n this.outputBlock(out, outOff + resultLen);\n resultLen += this.blockSize;\n }\n }\n\n return resultLen;\n};\nGcm.prototype.finish = function(out, outOff) {\n var resultLen = 0;\n\n if (this._decrypt) {\n // append tag\n resultLen += this.update(this.tag, 0, this.tag.length, out, outOff);\n }\n\n if (this.totalLength.isZero()) {\n this.initCipher();\n }\n\n var extra = this.bufOff;\n if (this._decrypt) {\n if (extra < this.tagLength) {\n throw new Error(\"data too short\");\n }\n extra -= this.tagLength;\n }\n\n if (extra > 0) {\n this.gCTRPartial(this.bufBlock, 0, extra, out, outOff + resultLen);\n resultLen += extra;\n }\n\n this.atLength = this.atLength.add(this.atBlockPos);\n\n // Final gHASH\n var X = this.zeroBlock();\n pack.longToBigEndian(this.atLength.multiply(8),\n X,\n 0);\n pack.longToBigEndian(this.totalLength.multiply(8),\n X,\n 8);\n\n this.gHASHBlock(this.S, X);\n\n // TODO Fix this if tagLength becomes configurable\n // T = MSBt(GCTRk(J0,S))\n var tag = Buffer.alloc(this.blockSize);\n cipherHelpers.encrypt(this.cipher, this.J0, 0, tag, 0);\n this.xor(tag, this.S);\n\n if (this._decrypt) {\n if (!helpers.arrayEqual(this.tag, tag)) {\n throw new Error(\"mac check in Gcm failed\");\n }\n } else {\n // We place into tag our calculated value for T\n this.tag = Buffer.alloc(this.tagLength);\n tag.copy(this.tag, 0, 0, this.tagLength);\n }\n\n return resultLen;\n};\n\n// ### \"Internal\" Helper Functions\nGcm.prototype.initCipher = function() {\n if (this.atLength.greaterThan(Long.ZERO)) {\n this.SAt.copy(this.SAtPre, 0, 0, this.blockSize);\n this.atLengthPre = this.atLength.add(Long.ZERO);\n }\n\n // Finish hash for partial AAD block\n if (this.atBlockPos > 0) {\n this.gHASHPartial(this.SAtPre, this.atBlock, 0, this.atBlockPos);\n this.atLengthPre = this.atLengthPre.add(this.atBlockPos);\n }\n\n if (this.atLengthPre.greaterThan(Long.ZERO)) {\n this.SAtPre.copy(this.S, 0, 0, this.blockSize);\n }\n};\n\nGcm.prototype.outputBlock = function(output, offset) {\n if (this.totalLength.isZero()) {\n this.initCipher();\n }\n this.gCTRBlock(this.bufBlock, output, offset);\n if (!this._decrypt) {\n this.bufOff = 0;\n } else {\n this.bufBlock.copy(this.bufBlock, 0, this.blockSize, this.blockSize + this.tagLength);\n this.bufOff = this.tagLength;\n }\n};\n\nGcm.prototype.processAADBytes = function(inV, inOff, len) {\n for (var i = 0; i < len; ++i) {\n this.atBlock[this.atBlockPos] = inV[inOff + i];\n if (++this.atBlockPos === this.blockSize) {\n // Hash each block as it fills\n this.gHASHBlock(this.SAt, this.atBlock);\n this.atBlockPos = 0;\n this.atLength = this.atLength.add(this.blockSize);\n }\n }\n};\n\nGcm.prototype.getNextCounterBlock = function() {\n for (var i = 15; i >= 12; --i) {\n var b = ((this.counter[i] + 1) & 0xff);\n this.counter[i] = b;\n\n if (b !== 0) {\n break;\n }\n }\n\n // encrypt counter\n var outb = Buffer.alloc(this.blockSize);\n cipherHelpers.encrypt(this.cipher, this.counter, 0, outb, 0);\n\n return outb;\n};\n\nGcm.prototype.gCTRBlock = function(block, out, outOff) {\n var tmp = this.getNextCounterBlock();\n\n this.xor(tmp, block);\n tmp.copy(out, outOff, 0, this.blockSize);\n\n this.gHASHBlock(this.S, !this._decrypt ? tmp : block);\n\n this.totalLength = this.totalLength.add(this.blockSize);\n};\nGcm.prototype.gCTRPartial = function(buf, off, len, out, outOff) {\n var tmp = this.getNextCounterBlock();\n\n this.xor(tmp, buf, off, len);\n tmp.copy(out, outOff, 0, len);\n\n this.gHASHPartial(this.S, !this._decrypt ? tmp : buf, 0, len);\n\n this.totalLength = this.totalLength.add(len);\n};\n\nGcm.prototype.gHASHBlock = function(Y, b) {\n this.xor(Y, b);\n this.multiplier.multiplyH(Y);\n};\nGcm.prototype.gHASHPartial = function(Y, b, off, len) {\n this.xor(Y, b, off, len);\n this.multiplier.multiplyH(Y);\n};\n\nGcm.prototype.xor = function(block, val, off, len) {\n switch (arguments.length) {\n case 2:\n for (var i = 15; i >= 0; --i) {\n block[i] ^= val[i];\n }\n break;\n case 4:\n while (len-- > 0) {\n block[len] ^= val[off + len];\n }\n break;\n default:\n throw new TypeError(\"Expected 2 or 4 arguments.\");\n }\n\n return block;\n};\n\nGcm.prototype.zeroBlock = function() {\n var block = Buffer.alloc(BLOCK_SIZE);\n return block;\n};\n","/*!\n * deps/ciphermodes/gcm/multipliers.js - AES-GCM Multipliers\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar helpers = require(\"./helpers.js\"),\n pack = require(\"../pack.js\");\n\n\n// ### 8K Table Multiplier\nfunction Gcm8KMultiplier() {\n this.H = [];\n this.M = null;\n}\n\nGcm8KMultiplier.prototype.init = function(H) {\n var i, j, k;\n if (this.M == null) {\n // sc: I realize this UGLY...\n //M = new int[32][16][4];\n this.M = [];\n for (i = 0; i < 32; ++i) {\n this.M[i] = [];\n for (j = 0; j < 16; ++j) {\n this.M[i][j] = [];\n for (k = 0; k < 4; ++k) {\n this.M[i][j][k] = 0;\n }\n }\n }\n } else if (helpers.arrayEqual(this.H, H)) {\n return;\n }\n\n this.H = H.slice();\n\n // M[0][0] is ZEROES;\n // M[1][0] is ZEROES;\n helpers.asInts(H, this.M[1][8]);\n\n for (j = 4; j >= 1; j >>= 1) {\n helpers.multiplyP(this.M[1][j + j], this.M[1][j]);\n }\n helpers.multiplyP(this.M[1][1], this.M[0][8]);\n\n for (j = 4; j >= 1; j >>= 1) {\n helpers.multiplyP(this.M[0][j + j], this.M[0][j]);\n }\n\n i = 0;\n for (;;) {\n for (j = 2; j < 16; j += j) {\n for (k = 1; k < j; ++k) {\n helpers.xor(this.M[i][j], this.M[i][k], this.M[i][j + k]);\n }\n }\n\n if (++i === 32) {\n return;\n }\n\n if (i > 1) {\n // M[i][0] is ZEROES;\n for (j = 8; j > 0; j >>= 1) {\n helpers.multiplyP8(this.M[i - 2][j], this.M[i][j]);\n }\n }\n }\n};\nGcm8KMultiplier.prototype.multiplyH = function(x) {\n var z = [];\n for (var i = 15; i >= 0; --i) {\n var m = this.M[i + i][x[i] & 0x0f];\n z[0] ^= m[0];\n z[1] ^= m[1];\n z[2] ^= m[2];\n z[3] ^= m[3];\n m = this.M[i + i + 1][(x[i] & 0xf0) >>> 4];\n z[0] ^= m[0];\n z[1] ^= m[1];\n z[2] ^= m[2];\n z[3] ^= m[3];\n }\n\n pack.intToBigEndian(z, x, 0);\n};\n\n\nmodule.exports = {\n \"8k\": Gcm8KMultiplier\n};\n","/*!\n * deps/ciphermodes/helpers.js - Cipher Helper Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar pack = require(\"./pack.js\");\n\nfunction doEncrypt(cipher, inb, inOff, outb, outOff) {\n var input = new Array(4),\n output = new Array(4);\n\n pack.bigEndianToInt(inb, inOff, input);\n cipher.encrypt(input, output);\n pack.intToBigEndian(output, outb, outOff);\n}\n\nmodule.exports = {\n encrypt: doEncrypt\n};\n","/*!\n * deps/ciphermodes/pack.js - Pack/Unpack Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar Long = require(\"long\");\n\nvar pack = module.exports = {\n intToBigEndian: function(n, bs, off) {\n if (typeof n === \"number\") {\n switch (arguments.length) {\n case 1:\n bs = Buffer.alloc(4);\n pack.intToBigEndian(n, bs, 0);\n break;\n case 3:\n bs[off] = 0xff & (n >>> 24);\n bs[++off] = 0xff & (n >>> 16);\n bs[++off] = 0xff & (n >>> 8);\n bs[++off] = 0xff & (n);\n break;\n default:\n throw new TypeError(\"Expected 1 or 3 arguments.\");\n }\n } else {\n switch (arguments.length) {\n case 1:\n bs = Buffer.alloc(4 * n.length);\n pack.intToBigEndian(n, bs, 0);\n break;\n case 3:\n for (var i = 0; i < n.length; ++i) {\n pack.intToBigEndian(n[i], bs, off);\n off += 4;\n }\n break;\n default:\n throw new TypeError(\"Expected 1 or 3 arguments.\");\n }\n }\n\n return bs;\n },\n longToBigEndian: function(n, bs, off) {\n if (!Array.isArray(n)) {\n // Single\n switch (arguments.length) {\n case 1:\n bs = Buffer.alloc(8);\n pack.longToBigEndian(n, bs, 0);\n break;\n case 3:\n var lo = n.low,\n hi = n.high;\n pack.intToBigEndian(hi, bs, off);\n pack.intToBigEndian(lo, bs, off + 4);\n break;\n default:\n throw new TypeError(\"Expected 1 or 3 arguments.\");\n }\n } else {\n // Array\n switch (arguments.length) {\n case 1:\n bs = Buffer.alloc(8 * n.length);\n pack.longToBigEndian(n, bs, 0);\n break;\n case 3:\n for (var i = 0; i < n.length; ++i) {\n pack.longToBigEndian(n[i], bs, off);\n off += 8;\n }\n break;\n default:\n throw new TypeError(\"Expected 1 or 3 arguments.\");\n }\n }\n\n return bs;\n },\n\n bigEndianToInt: function(bs, off, ns) {\n switch (arguments.length) {\n case 2:\n var n = bs[off] << 24;\n n |= (bs[++off] & 0xff) << 16;\n n |= (bs[++off] & 0xff) << 8;\n n |= (bs[++off] & 0xff);\n return n;\n case 3:\n for (var i = 0; i < ns.length; ++i) {\n ns[i] = pack.bigEndianToInt(bs, off);\n off += 4;\n }\n break;\n default:\n throw new TypeError(\"Expected 2 or 3 arguments.\");\n }\n },\n bigEndianToLong: function(bs, off, ns) {\n switch (arguments.length) {\n case 2:\n var hi = pack.bigEndianToInt(bs, off);\n var lo = pack.bigEndianToInt(bs, off + 4);\n var num = new Long(lo, hi);\n return num;\n case 3:\n for (var i = 0; i < ns.length; ++i) {\n ns[i] = pack.bigEndianToLong(bs, off);\n off += 8;\n }\n break;\n default:\n throw new TypeError(\"Expected 2 or 3 arguments.\");\n }\n }\n};\n","/**\n * deps/ecc/curves.js - Elliptic Curve NIST/SECG/X9.62 Parameters\n * Original Copyright (c) 2003-2005 Tom Wu.\n * Modifications Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n *\n * Ported from Tom Wu, which is ported from BouncyCastle\n * Modified to reuse existing external NPM modules, restricted to the\n * NIST//SECG/X9.62 prime curves only, and formatted to match project\n * coding styles.\n */\n\"use strict\";\n\n// Named EC curves\n\nvar BigInteger = require(\"../../deps/forge\").jsbn.BigInteger,\n ec = require(\"./math.js\");\n\n// ----------------\n// X9ECParameters\n\n// constructor\nfunction X9ECParameters(curve, g, n, h) {\n this.curve = curve;\n this.g = g;\n this.n = n;\n this.h = h;\n}\n\nfunction x9getCurve() {\n return this.curve;\n}\n\nfunction x9getG() {\n return this.g;\n}\n\nfunction x9getN() {\n return this.n;\n}\n\nfunction x9getH() {\n return this.h;\n}\n\nX9ECParameters.prototype.getCurve = x9getCurve;\nX9ECParameters.prototype.getG = x9getG;\nX9ECParameters.prototype.getN = x9getN;\nX9ECParameters.prototype.getH = x9getH;\n\n// ----------------\n// SECNamedCurves\n\nfunction fromHex(s) { return new BigInteger(s, 16); }\n\nfunction secp256r1() {\n // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1\n var p = fromHex(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\");\n var a = fromHex(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\");\n var b = fromHex(\"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\");\n var n = fromHex(\"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\");\n var h = BigInteger.ONE;\n var curve = new ec.ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\"\n + \"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp384r1() {\n // p = 2^384 - 2^128 - 2^96 + 2^32 - 1\n var p = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF\");\n var a = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC\");\n var b = fromHex(\"B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF\");\n var n = fromHex(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973\");\n var h = BigInteger.ONE;\n var curve = new ec.ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7\"\n + \"3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F\");\n return new X9ECParameters(curve, G, n, h);\n}\n\nfunction secp521r1() {\n // p = 2^521 - 1\n var p = fromHex(\"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\");\n var a = fromHex(\"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC\");\n var b = fromHex(\"0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00\");\n var n = fromHex(\"01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409\");\n var h = BigInteger.ONE;\n var curve = new ec.ECCurveFp(p, a, b);\n var G = curve.decodePointHex(\"04\"\n + \"00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66\"\n + \"011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650\");\n return new X9ECParameters(curve, G, n, h);\n}\n\n// ----------------\n// Public API\n\nvar CURVES = module.exports = {\n \"secp256r1\": secp256r1(),\n \"secp384r1\": secp384r1(),\n \"secp521r1\": secp521r1()\n};\n\n// also export NIST names\nCURVES[\"P-256\"] = CURVES.secp256r1;\nCURVES[\"P-384\"] = CURVES.secp384r1;\nCURVES[\"P-521\"] = CURVES.secp521r1;\n","/**\n * deps/ecc/index.js - Elliptic Curve Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../../deps/forge\"),\n BigInteger = forge.jsbn.BigInteger,\n ec = require(\"./math.js\"),\n CURVES = require(\"./curves.js\");\n\n// ### Helpers\nfunction hex2bn(s) {\n return new BigInteger(s, 16);\n}\n\nfunction bn2bin(bn, len) {\n if (!len) {\n len = Math.ceil(bn.bitLength() / 8);\n }\n len = len * 2;\n\n var hex = bn.toString(16);\n // truncate-left if too large\n hex = hex.substring(Math.max(hex.length - len, 0));\n // pad-left if too small\n while (len > hex.length) {\n hex = \"0\" + hex;\n }\n\n return Buffer.from(hex, \"hex\");\n}\nfunction bin2bn(s) {\n if (\"string\" === typeof s) {\n s = Buffer.from(s, \"binary\");\n }\n return hex2bn(s.toString(\"hex\"));\n}\n\nfunction keySizeBytes(params) {\n return Math.ceil(params.getN().bitLength() / 8);\n}\n\nfunction namedCurve(curve) {\n var params = CURVES[curve];\n if (!params) {\n throw new TypeError(\"unsupported named curve: \" + curve);\n }\n\n return params;\n}\n\nfunction normalizeEcdsa(params, md) {\n var log2n = params.getN().bitLength(),\n mdLen = md.length * 8;\n\n var e = bin2bn(md);\n if (log2n < mdLen) {\n e = e.shiftRight(mdLen - log2n);\n }\n\n return e;\n}\n\n// ### EC Public Key\n\n/**\n *\n * @param {String} curve The named curve\n * @param {BigInteger} x The X coordinate\n * @param {BigInteger} y The Y coordinate\n */\nfunction ECPublicKey(curve, x, y) {\n var params = namedCurve(curve),\n c = params.getCurve();\n var key = new ec.ECPointFp(c,\n c.fromBigInteger(x),\n c.fromBigInteger(y));\n\n this.curve = curve;\n this.params = params;\n this.point = key;\n\n var size = keySizeBytes(params);\n this.x = bn2bin(x, size);\n this.y = bn2bin(y, size);\n}\n\n// basics\nECPublicKey.prototype.isValid = function() {\n return this.params.curve.contains(this.point);\n}\n\n// ECDSA\nECPublicKey.prototype.verify = function(md, sig) {\n var N = this.params.getN(),\n G = this.params.getG();\n\n // prepare and validate (r, s)\n var r = bin2bn(sig.r),\n s = bin2bn(sig.s);\n if (r.compareTo(BigInteger.ONE) < 0 || r.compareTo(N) >= 0) {\n return false;\n }\n if (s.compareTo(BigInteger.ONE) < 0 || r.compareTo(N) >= 0) {\n return false;\n }\n\n // normalize input\n var e = normalizeEcdsa(this.params, md);\n // verify (r, s)\n var w = s.modInverse(N),\n u1 = e.multiply(w).mod(N),\n u2 = r.multiply(w).mod(N);\n\n var v = G.multiplyTwo(u1, this.point, u2).getX().toBigInteger();\n v = v.mod(N);\n\n return v.equals(r);\n};\n\n// ### EC Private Key\n\n/**\n * @param {String} curve The named curve\n * @param {Buffer} key The private key value\n */\nfunction ECPrivateKey(curve, key) {\n var params = namedCurve(curve);\n this.curve = curve;\n this.params = params;\n\n var size = keySizeBytes(params);\n this.d = bn2bin(key, size);\n}\n\nECPrivateKey.prototype.toPublicKey = function() {\n var d = bin2bn(this.d);\n var P = this.params.getG().multiply(d);\n return new ECPublicKey(this.curve,\n P.getX().toBigInteger(),\n P.getY().toBigInteger());\n};\n\n// ECDSA\nECPrivateKey.prototype.sign = function(md) {\n var keysize = keySizeBytes(this.params),\n N = this.params.getN(),\n G = this.params.getG(),\n e = normalizeEcdsa(this.params, md),\n d = bin2bn(this.d);\n\n var r, s;\n var k, x1, z;\n do {\n do {\n // determine random nonce\n do {\n k = bin2bn(forge.random.getBytes(keysize));\n } while (k.equals(BigInteger.ZERO) || k.compareTo(N) >= 0);\n // (x1, y1) = k * G\n x1 = G.multiply(k).getX().toBigInteger();\n // r = x1 mod N\n r = x1.mod(N);\n } while (r.equals(BigInteger.ZERO));\n // s = (k^-1 * (e + r * d)) mod N\n z = d.multiply(r);\n z = e.add(z);\n s = k.modInverse(N).multiply(z).mod(N);\n } while (s.equals(BigInteger.ONE));\n\n // convert (r, s) to bytes\n var len = keySizeBytes(this.params);\n r = bn2bin(r, len);\n s = bn2bin(s, len);\n\n return {\n r: r,\n s: s\n };\n};\n\n// basics\nECPrivateKey.prototype.isValid = function() {\n var d = bin2bn(this.d),\n n1 = this.params.getN().subtract(BigInteger.ONE);\n\n return (d.compareTo(BigInteger.ONE) >= 0) &&\n (d.compareTo(n1) < 0);\n}\n\n// ECDH\nECPrivateKey.prototype.computeSecret = function(pubkey) {\n var d = bin2bn(this.d);\n var S = pubkey.point.multiply(d).getX().toBigInteger();\n S = bn2bin(S, keySizeBytes(this.params));\n return S;\n};\n\n// ### Public API\nexports.generateKeyPair = function(curve) {\n var params = namedCurve(curve),\n n = params.getN();\n\n // generate random within range [1, N-1)\n var r = forge.random.getBytes(keySizeBytes(params));\n r = bin2bn(r);\n\n var n1 = n.subtract(BigInteger.ONE);\n var d = r.mod(n1).add(BigInteger.ONE);\n\n var privkey = new ECPrivateKey(curve, d),\n pubkey = privkey.toPublicKey();\n\n return {\n \"private\": privkey,\n \"public\": pubkey\n };\n};\n\nexports.asPublicKey = function(curve, x, y) {\n if (\"string\" === typeof x) {\n x = hex2bn(x);\n } else if (Buffer.isBuffer(x)) {\n x = bin2bn(x);\n }\n\n if (\"string\" === typeof y) {\n y = hex2bn(y);\n } else if (Buffer.isBuffer(y)) {\n y = bin2bn(y);\n }\n\n var pubkey = new ECPublicKey(curve, x, y);\n return pubkey;\n};\nexports.asPrivateKey = function(curve, d) {\n // Elaborate way to get to a Buffer from a (String|Buffer|BigInteger)\n if (\"string\" === typeof d) {\n d = hex2bn(d);\n } else if (Buffer.isBuffer(d)) {\n d = bin2bn(d);\n }\n\n var privkey = new ECPrivateKey(curve, d);\n return privkey;\n};\n","/**\n * deps/ecc/math.js - Elliptic Curve Math\n * Original Copyright (c) 2003-2005 Tom Wu.\n * Modifications Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n *\n * Ported from Tom Wu, which is ported from BouncyCastle\n * Modified to reuse existing external NPM modules, restricted to the\n * NIST//SECG/X9.62 prime curves only, and formatted to match project\n * coding styles.\n */\n\"use strict\";\n\n// Basic Javascript Elliptic Curve implementation\n// Ported loosely from BouncyCastle's Java EC code\n// Only Fp curves implemented for now\n\nvar BigInteger = require(\"../../deps/forge\").jsbn.BigInteger;\n\n// ----------------\n// Helpers\n\nfunction nbi() {\n return new BigInteger(null);\n}\n\n// ----------------\n// Barrett modular reduction\n\n// constructor\nfunction Barrett(m) {\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2*m.t,this.r2);\n this.mu = this.r2.divide(m);\n this.m = m;\n}\n\nfunction barrettConvert(x) {\n if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\n else if(x.compareTo(this.m) < 0) return x;\n else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n}\n\nfunction barrettRevert(x) { return x; }\n\n// x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\n if (x.s < 0) { throw Error(\"Barrett reduction on negative input\"); }\n x.drShiftTo(this.m.t-1,this.r2);\n if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\n this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\n this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\n while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\n x.subTo(this.r2,x);\n while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = x^2 mod m; x != r\nfunction barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = x*y mod m; x,y != r\nfunction barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n// ----------------\n// ECFieldElementFp\n\n// constructor\nfunction ECFieldElementFp(q, x) {\n this.x = x;\n // TODO if(x.compareTo(q) >= 0) error\n this.p = q;\n}\n\nfunction feFpEquals(other) {\n if (other === this) {\n return true;\n }\n return (this.p.equals(other.p) && this.x.equals(other.x));\n}\n\nfunction feFpToBigInteger() {\n return this.x;\n}\n\nfunction feFpNegate() {\n return new ECFieldElementFp(this.p, this.x.negate().mod(this.p));\n}\n\nfunction feFpAdd(b) {\n return new ECFieldElementFp(this.p, this.x.add(b.toBigInteger()).mod(this.p));\n}\n\nfunction feFpSubtract(b) {\n return new ECFieldElementFp(this.p, this.x.subtract(b.toBigInteger()).mod(this.p));\n}\n\nfunction feFpMultiply(b) {\n return new ECFieldElementFp(this.p, this.x.multiply(b.toBigInteger()).mod(this.p));\n}\n\nfunction feFpSquare() {\n return new ECFieldElementFp(this.p, this.x.pow(2).mod(this.p));\n}\n\nfunction feFpDivide(b) {\n return new ECFieldElementFp(this.p, this.x.multiply(b.toBigInteger().modInverse(this.p)).mod(this.p));\n}\n\nECFieldElementFp.prototype.equals = feFpEquals;\nECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;\nECFieldElementFp.prototype.negate = feFpNegate;\nECFieldElementFp.prototype.add = feFpAdd;\nECFieldElementFp.prototype.subtract = feFpSubtract;\nECFieldElementFp.prototype.multiply = feFpMultiply;\nECFieldElementFp.prototype.square = feFpSquare;\nECFieldElementFp.prototype.divide = feFpDivide;\n\n// ----------------\n// ECPointFp\n\n// constructor\nfunction ECPointFp(curve, x, y, z) {\n this.curve = curve;\n this.x = x;\n this.y = y;\n // Projective coordinates: either zinv == null or z * zinv == 1\n // z and zinv are just BigIntegers, not fieldElements\n if (!z) {\n this.z = BigInteger.ONE;\n } else {\n this.z = z;\n }\n this.zinv = null;\n //TODO: compression flag\n}\n\nfunction pointFpGetX() {\n if(!this.zinv) {\n this.zinv = this.z.modInverse(this.curve.p);\n }\n var r = this.x.toBigInteger().multiply(this.zinv);\n this.curve.reduce(r);\n return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpGetY() {\n if(!this.zinv) {\n this.zinv = this.z.modInverse(this.curve.p);\n }\n var r = this.y.toBigInteger().multiply(this.zinv);\n this.curve.reduce(r);\n return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpEquals(other) {\n if (other === this) {\n return true;\n }\n if (this.isInfinity()) {\n return other.isInfinity();\n }\n if (other.isInfinity()) {\n return this.isInfinity();\n }\n var u, v;\n // u = Y2 * Z1 - Y1 * Z2\n u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.p);\n if (!u.equals(BigInteger.ZERO)) {\n return false;\n }\n // v = X2 * Z1 - X1 * Z2\n v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.p);\n return v.equals(BigInteger.ZERO);\n}\n\nfunction pointFpIsInfinity() {\n if ((this.x == null) && (this.y == null)) {\n return true;\n }\n return (this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO));\n}\n\nfunction pointFpNegate() {\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\n}\n\nfunction pointFpAdd(b) {\n if (this.isInfinity()) {\n return b;\n }\n if (b.isInfinity()) {\n return this;\n }\n\n // u = Y2 * Z1 - Y1 * Z2\n var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.p);\n // v = X2 * Z1 - X1 * Z2\n var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.p);\n\n if (BigInteger.ZERO.equals(v)) {\n if (BigInteger.ZERO.equals(u)) {\n return this.twice(); // this == b, so double\n }\n return this.curve.getInfinity(); // this = -b, so infinity\n }\n\n var THREE = new BigInteger(\"3\");\n var x1 = this.x.toBigInteger();\n var y1 = this.y.toBigInteger();\n\n var v2 = v.pow(2);\n var v3 = v2.multiply(v);\n var x1v2 = x1.multiply(v2);\n var zu2 = u.pow(2).multiply(this.z);\n\n // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)\n var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p);\n // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3\n var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p);\n // z3 = v^3 * z1 * z2\n var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p);\n\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\nfunction pointFpTwice() {\n if(this.isInfinity()) {\n return this;\n }\n if (this.y.toBigInteger().signum() === 0) {\n return this.curve.getInfinity();\n }\n\n // TODO: optimized handling of constants\n var THREE = new BigInteger(\"3\");\n var x1 = this.x.toBigInteger();\n var y1 = this.y.toBigInteger();\n\n var y1z1 = y1.multiply(this.z);\n var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p);\n var a = this.curve.a.toBigInteger();\n\n // w = 3 * x1^2 + a * z1^2\n var w = x1.pow(2).multiply(THREE);\n if (!BigInteger.ZERO.equals(a)) {\n w = w.add(this.z.pow(2).multiply(a));\n }\n w = w.mod(this.curve.p);\n //this.curve.reduce(w);\n // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)\n var x3 = w.pow(2).subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p);\n // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3\n var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(2).multiply(w)).mod(this.curve.p);\n // z3 = 8 * (y1 * z1)^3\n var z3 = y1z1.pow(2).multiply(y1z1).shiftLeft(3).mod(this.curve.p);\n\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\n// Simple NAF (Non-Adjacent Form) multiplication algorithm\n// TODO: modularize the multiplication algorithm\nfunction pointFpMultiply(k) {\n if (this.isInfinity()) {\n return this;\n }\n if (k.signum() === 0) {\n return this.curve.getInfinity();\n }\n\n var e = k;\n var h = e.multiply(new BigInteger(\"3\"));\n\n var neg = this.negate();\n var R = this;\n\n var i;\n for(i = h.bitLength() - 2; i > 0; --i) {\n R = R.twice();\n\n var hBit = h.testBit(i);\n var eBit = e.testBit(i);\n\n if (hBit !== eBit) {\n R = R.add(hBit ? this : neg);\n }\n }\n\n return R;\n}\n\n// Compute this*j + x*k (simultaneous multiplication)\nfunction pointFpMultiplyTwo(j, x, k) {\n var i;\n if (j.bitLength() > k.bitLength()) {\n i = j.bitLength() - 1;\n } else {\n i = k.bitLength() - 1;\n }\n\n var R = this.curve.getInfinity();\n var both = this.add(x);\n while (i >= 0) {\n R = R.twice();\n if (j.testBit(i)) {\n if (k.testBit(i)) {\n R = R.add(both);\n }\n else {\n R = R.add(this);\n }\n }\n else {\n if (k.testBit(i)) {\n R = R.add(x);\n }\n }\n --i;\n }\n\n return R;\n}\n\nECPointFp.prototype.getX = pointFpGetX;\nECPointFp.prototype.getY = pointFpGetY;\nECPointFp.prototype.equals = pointFpEquals;\nECPointFp.prototype.isInfinity = pointFpIsInfinity;\nECPointFp.prototype.negate = pointFpNegate;\nECPointFp.prototype.add = pointFpAdd;\nECPointFp.prototype.twice = pointFpTwice;\nECPointFp.prototype.multiply = pointFpMultiply;\nECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;\n\n// ----------------\n// ECCurveFp\n\n// constructor\nfunction ECCurveFp(p, a, b) {\n this.p = p;\n this.a = this.fromBigInteger(a);\n this.b = this.fromBigInteger(b);\n this.infinity = new ECPointFp(this, null, null);\n this.reducer = new Barrett(this.p);\n}\n\nfunction curveFpgetP() {\n return this.p;\n}\n\nfunction curveFpGetA() {\n return this.a;\n}\n\nfunction curveFpGetB() {\n return this.b;\n}\n\nfunction curveFpEquals(other) {\n if (other === this) {\n return true;\n }\n return (this.p.equals(other.p) && this.a.equals(other.a) && this.b.equals(other.b));\n}\n\nfunction curveFpContains(pt) {\n // y^2 = x^3 + a*x + b mod p\n var x = pt.getX().toBigInteger(),\n y = pt.getY().toBigInteger(),\n a = this.a.toBigInteger(),\n b = this.b.toBigInteger(),\n p = this.p;\n\n var left = y.pow(2).mod(p),\n right = x.pow(3).add(a.multiply(x)).add(b).mod(p)\n\n return left.equals(right);\n}\n\nfunction curveFpGetInfinity() {\n return this.infinity;\n}\n\nfunction curveFpFromBigInteger(x) {\n return new ECFieldElementFp(this.p, x);\n}\n\nfunction curveReduce(x) {\n this.reducer.reduce(x);\n}\n\n// for now, work with hex strings because they're easier in JS\nfunction curveFpDecodePointHex(s) {\n switch (parseInt(s.substring(0, 2), 16)) {\n // first byte\n case 0:\n return this.infinity;\n case 2:\n case 3:\n // point compression not supported yet\n return null;\n case 4:\n case 6:\n case 7:\n var len = (s.length - 2) / 2;\n var xHex = s.substr(2, len);\n var yHex = s.substr(len + 2, len);\n\n return new ECPointFp(this,\n this.fromBigInteger(new BigInteger(xHex, 16)),\n this.fromBigInteger(new BigInteger(yHex, 16)));\n\n default: // unsupported\n return null;\n }\n}\n\nfunction curveFpEncodePointHex(p) {\n if (p.isInfinity()) {\n return \"00\";\n }\n var xHex = p.getX().toBigInteger().toString(16);\n var yHex = p.getY().toBigInteger().toString(16);\n var oLen = this.getP().toString(16).length;\n if ((oLen % 2) !== 0) {\n oLen++;\n }\n while (xHex.length < oLen) {\n xHex = \"0\" + xHex;\n }\n while (yHex.length < oLen) {\n yHex = \"0\" + yHex;\n }\n return \"04\" + xHex + yHex;\n}\n\nECCurveFp.prototype.getP = curveFpgetP;\nECCurveFp.prototype.getA = curveFpGetA;\nECCurveFp.prototype.getB = curveFpGetB;\nECCurveFp.prototype.equals = curveFpEquals;\nECCurveFp.prototype.contains = curveFpContains;\nECCurveFp.prototype.getInfinity = curveFpGetInfinity;\nECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;\nECCurveFp.prototype.reduce = curveReduce;\nECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;\nECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;\n\n// Exports\nmodule.exports = {\n ECFieldElementFp: ECFieldElementFp,\n ECPointFp: ECPointFp,\n ECCurveFp: ECCurveFp\n};\n","/*!\n * deps/forge.js - Forge Package Customization\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"node-forge/lib/forge\");\nrequire(\"node-forge/lib/aes\");\nrequire(\"node-forge/lib/asn1\");\nrequire(\"node-forge/lib/cipher\");\nrequire(\"node-forge/lib/hmac\");\nrequire(\"node-forge/lib/mgf1\");\nrequire(\"node-forge/lib/pbkdf2\");\nrequire(\"node-forge/lib/pem\");\nrequire(\"node-forge/lib/pkcs1\");\nrequire(\"node-forge/lib/pkcs7\");\nrequire(\"node-forge/lib/pki\");\nrequire(\"node-forge/lib/prime\");\nrequire(\"node-forge/lib/prng\");\nrequire(\"node-forge/lib/pss\");\nrequire(\"node-forge/lib/random\");\nrequire(\"node-forge/lib/sha1\");\nrequire(\"node-forge/lib/sha256\");\nrequire(\"node-forge/lib/sha512\");\nrequire(\"node-forge/lib/util\");\n\n// Define AES \"raw\" cipher mode\nfunction modeRaw(options) {\n options = options || {};\n this.name = \"\";\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._blocks = this.blockSize / 4;\n this._inBlock = new Array(this._blocks);\n this._outBlock = new Array(this._blocks);\n}\n\nmodeRaw.prototype.start = function() {};\n\nmodeRaw.prototype.encrypt = function(input, output, finish) {\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n var i;\n\n // get next block\n for(i = 0; i < this._blocks; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output\n for(i = 0; i < this._blocks; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodeRaw.prototype.decrypt = function(input, output, finish) {\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n var i;\n\n // get next block\n for(i = 0; i < this._blocks; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output\n for(i = 0; i < this._blocks; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\n(function() {\n var name = \"AES\",\n mode = modeRaw,\n factory;\n factory = function() { return new forge.aes.Algorithm(name, mode); };\n forge.cipher.registerAlgorithm(name, factory);\n})();\n\n// Ensure that the jsbn modInverse function always returns a positive result\nconst originalModInverse = forge.jsbn.BigInteger.prototype.modInverse;\nconst positiveModInverse = function(m) {\n const inv = originalModInverse.apply(this, [m]);\n return inv.mod(m);\n}\n\nforge.jsbn.BigInteger.prototype.modInverse = positiveModInverse;\n\nmodule.exports = forge;\n","/*!\n * index.js - Main Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nif (typeof Promise === \"undefined\") {\n require(\"es6-promise\").polyfill();\n}\n\nif (typeof Buffer === \"undefined\") {\n (global || window).Buffer = require(\"buffer\").Buffer;\n}\n\nif (typeof process === \"undefined\") {\n (global || window).process = require(\"process\");\n}\n\nif (!process.version) {\n process.version = \"\";\n}\n\nvar JWS = require(\"./jws\");\n\nmodule.exports = {\n JWA: require(\"./algorithms\"),\n JWE: require(\"./jwe\"),\n JWK: require(\"./jwk\"),\n JWS: JWS,\n util: require(\"./util\"),\n parse: require(\"./parse\"),\n canYouSee: JWS.createVerify\n};\n","/*!\n * jwe/decrypt.js - Decrypt from a JWE\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar base64url = require(\"../util/base64url\"),\n AlgConfig = require(\"../util/algconfig\"),\n JWK = require(\"../jwk\"),\n merge = require(\"../util/merge\"),\n pako = require(\"pako\");\n\nvar DEFAULT_OPTIONS = {\n algorithms: \"*\"\n};\n\n/**\n * @class JWE.Decrypter\n * @classdesc Processor of encrypted data.\n *\n * @description\n * **NOTE:** This class cannot be instantiated directly. Instead\n * call {@link JWE.createDecrypt}.\n */\nfunction JWEDecrypter(ks, globalOpts) {\n var assumedKey,\n keystore;\n\n if (JWK.isKey(ks)) {\n assumedKey = ks;\n keystore = assumedKey.keystore;\n } else if (JWK.isKeyStore(ks)) {\n keystore = ks;\n } else {\n throw new TypeError(\"Keystore must be provided\");\n }\n\n globalOpts = merge({}, DEFAULT_OPTIONS, globalOpts);\n\n /**\n * Decrypts the given input.\n *\n * {opts}, if provided, is used to customize this specific decrypt operation.\n * This argument has the same semantics as {JWE.createDecrypt}, and takes\n * precedence over those options.\n *\n * The returned PRomise, when fulfilled, returns an object with the\n * following members:\n *\n * - `header` - The JOSE Header, combined from the relevant \"header\" and\n * \"protected\" fields from the original JWE object.\n * - `protected` - An array containing the names of the protected fields\n * - `key` - The used to decrypt the content\n * - `payload` - The decrypted content (as a Buffer)\n * - `plaintext` - An alias for `payload`\n *\n * @param {Object|String} input The encrypted content\n * @param {Object} [opts] The options for this decryption operation.\n * @returns {Promise} A promise for the decyprted plaintext\n */\n Object.defineProperty(this, \"decrypt\", {\n value: function(input, opts) {\n opts = merge({}, globalOpts, opts || {});\n var extraHandlers = opts.handlers || {};\n var handlerKeys = Object.keys(extraHandlers);\n var algSpec = new AlgConfig(opts.algorithms);\n\n /* eslint camelcase: [0] */\n if (typeof input === \"string\") {\n input = input.split(\".\");\n input = {\n protected: input[0],\n recipients: [\n {\n encrypted_key: input[1]\n }\n ],\n iv: input[2],\n ciphertext: input[3],\n tag: input[4]\n };\n } else if (!input || typeof input !== \"object\") {\n throw new Error(\"invalid input\");\n }\n if (\"encrypted_key\" in input) {\n input.recipients = [\n {\n encrypted_key: input.encrypted_key\n }\n ];\n }\n\n var promise;\n\n // ensure recipients exists\n var rcptList = input.recipients || [{}];\n promise = Promise.resolve(rcptList);\n\n //combine fields\n var fields,\n protect;\n promise = promise.then(function(rcptList) {\n if (input.protected) {\n protect = base64url.decode(input.protected).toString(\"utf8\");\n protect = JSON.parse(protect);\n\n // verify \"crit\" field first\n var crit = protect.crit;\n if (crit) {\n if (!Array.isArray(crit)) {\n return Promise.reject(new Error(\"Invalid 'crit' header\"));\n }\n for (var idx = 0; crit.length > idx; idx++) {\n if (-1 === handlerKeys.indexOf(crit[idx])) {\n return Promise.reject(new Error(\n \"Critical extension is not supported: \" + crit[idx]\n ));\n }\n }\n }\n\n fields = protect;\n protect = Object.keys(protect);\n } else {\n fields = {};\n protect = [];\n }\n fields = merge(input.unprotected || {}, fields);\n\n rcptList = rcptList.map(function(r) {\n var promise = Promise.resolve();\n var header = r.header || {};\n header = merge(header, fields);\n r.header = header;\n r.protected = protect;\n\n // check on allowed algorithms\n if (!algSpec.match(header.alg)) {\n promise = promise.then(function() {\n return Promise.reject(new Error(\"Algorithm not allowed: \" + header.alg));\n });\n }\n if (!algSpec.match(header.enc)) {\n promise = promise.then(function () {\n return Promise.reject(new Error(\"Algorithm not allowed: \" + header.enc));\n });\n }\n\n if (header.epk) {\n promise = promise.then(function() {\n return JWK.asKey(header.epk);\n });\n promise = promise.then(function(epk) {\n header.epk = epk.toObject(false);\n });\n }\n return promise.then(function() {\n return r;\n });\n });\n\n return Promise.all(rcptList);\n });\n\n // decrypt with first key found\n var algKey,\n encKey,\n kdata;\n promise = promise.then(function(rcptList) {\n var jwe = {};\n return new Promise(function(resolve, reject) {\n var processKey = function() {\n var rcpt = rcptList.shift();\n if (!rcpt) {\n reject(new Error(\"no key found\"));\n return;\n }\n\n var algPromise = Promise.resolve(rcpt);\n algPromise = algPromise.then(function(rcpt) {\n // try to unwrap encrypted key\n var prekey = kdata = rcpt.encrypted_key || \"\";\n prekey = base64url.decode(prekey);\n algKey = assumedKey || keystore.get({\n use: \"enc\",\n alg: rcpt.header.alg,\n kid: rcpt.header.kid\n });\n if (algKey) {\n return algKey.unwrap(rcpt.header.alg, prekey, rcpt.header);\n } else {\n return Promise.reject();\n }\n });\n algPromise = algPromise.then(function(key) {\n encKey = {\n \"kty\": \"oct\",\n \"k\": base64url.encode(key)\n };\n encKey = JWK.asKey(encKey);\n jwe.key = algKey;\n jwe.header = rcpt.header;\n jwe.protected = rcpt.protected;\n resolve(jwe);\n });\n algPromise.catch(processKey);\n };\n processKey();\n });\n });\n\n // assign decipher inputs\n promise = promise.then(function(jwe) {\n jwe.iv = input.iv;\n jwe.tag = input.tag;\n jwe.ciphertext = input.ciphertext;\n\n return jwe;\n });\n\n // process any prepare-decrypt handlers\n promise = promise.then(function(jwe) {\n var processing = [];\n handlerKeys.forEach(function(h) {\n h = extraHandlers[h];\n var p;\n if (\"function\" === typeof h) {\n p = h(jwe);\n } else if (\"object\" === typeof h && \"function\" === typeof h.prepare) {\n p = h.prepare(jwe);\n }\n if (p) {\n processing.push(Promise.resolve(p));\n }\n });\n return Promise.all(processing).then(function() {\n // don't actually care about individual handler results\n // assume {jwe} is updated\n return jwe;\n });\n });\n\n // prepare decrypt inputs\n promise = promise.then(function(jwe) {\n if (!Buffer.isBuffer(jwe.ciphertext)) {\n jwe.ciphertext = base64url.decode(jwe.ciphertext);\n }\n\n return jwe;\n });\n\n // decrypt it!\n promise = promise.then(function(jwe) {\n var adata = input.protected;\n if (\"aad\" in input && null != input.aad) {\n adata += \".\" + input.aad;\n }\n\n var params = {\n iv: jwe.iv,\n adata: adata,\n tag: jwe.tag,\n kdata: kdata,\n epu: jwe.epu,\n epv: jwe.epv\n };\n var cdata = jwe.ciphertext;\n\n delete jwe.iv;\n delete jwe.tag;\n delete jwe.ciphertext;\n\n return encKey.\n then(function(enkKey) {\n return enkKey.decrypt(jwe.header.enc, cdata, params).\n then(function(pdata) {\n jwe.payload = jwe.plaintext = pdata;\n return jwe;\n });\n });\n });\n\n // (OPTIONAL) decompress plaintext\n promise = promise.then(function(jwe) {\n if (\"DEF\" === jwe.header.zip) {\n return new Promise(function(resolve, reject) {\n try {\n var data = pako.inflateRaw(Buffer.from(jwe.plaintext))\n\n jwe.payload = jwe.plaintext = Buffer.from(data);\n resolve(jwe);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n return jwe;\n });\n\n // process any post-decrypt handlers\n promise = promise.then(function(jwe) {\n var processing = [];\n handlerKeys.forEach(function(h) {\n h = extraHandlers[h];\n var p;\n if (\"object\" === typeof h && \"function\" === typeof h.complete) {\n p = h.complete(jwe);\n }\n if (p) {\n processing.push(Promise.resolve(p));\n }\n });\n return Promise.all(processing).then(function() {\n // don't actually care about individual handler results\n // assume {jwe} is updated\n return jwe;\n });\n });\n\n return promise;\n }\n });\n}\n\n/**\n * @description\n * Creates a new Decrypter for the given Key or KeyStore.\n *\n * {opts}, when provided, is used to customize decryption processes. The\n * following options are currently supported:\n *\n * - `handlers` - An object where each name is a JOSE header member name and\n * the value can be a boolean, function, or an object.\n *\n * Handlers are intended to support 'crit' extensions. When a boolean value,\n * the member is expected to be processed once decryption is fully complete.\n * When a function, it is called just before the ciphertext is decrypted\n * (processed as if it were a `prepare` handler, as decribed below). When an\n * object, it can contain any of the following members:\n *\n * - `recipient` - A function called after a valid key is determined; it takes\n * an object describing the recipient, and returns a Promise that is\n * fulfilled once the handler's processing is complete.\n * - `prepare` - A function called just prior to decrypting the ciphertext;\n * it takes an object describing the decryption result (but containing\n * `ciphertext` and `tag' instead of `payload` and `plaintext`), and\n * returns a Promise that is fulfilled once the handler's processing is\n * complete.\n * - `complete` - A function called once decryption is complete, just prior\n * to fulfilling the Promise returned by `decrypt()`; it takes the object\n * that will be returned by `decrypt()`'s fulfilled Promise, and returns\n * a Promise that is fulfilled once the handler's processing is complete.\n *\n * Note that normal processing of `decrypt()` does not continue until all\n * relevant handlers have completed. Any changes handlers make to the\n * provided objects affects `decrypt()`'s processing.\n *\n * @param {JWK.Key|JWK.KeyStore} ks The Key or KeyStore to use for decryption.\n * @param {Object} [opts] The options for this Decrypter.\n * @returns {JWE.Decrypter} The new Decrypter.\n */\nfunction createDecrypt(ks, opts) {\n var dec = new JWEDecrypter(ks, opts);\n return dec;\n}\n\nmodule.exports = {\n decrypter: JWEDecrypter,\n createDecrypt: createDecrypt\n};\n","/*!\n * jwe/defaults.js - Defaults for JWEs\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\n/**\n * @description\n * The default options for {@link JWE.createEncrypt}.\n *\n * @property {Boolean|String} zip Determines the compression algorithm to\n * apply to the plaintext (if any) before it is encrypted. This can\n * also be `true` (which is equivalent to `\"DEF\"`) or **`false`**\n * (the default, which is equivalent to no compression).\n * @property {String} format Determines the serialization format of the\n * output. Expected to be `\"general\"` for general JSON\n * Serialization, `\"flattened\"` for flattened JSON Serialization,\n * or `\"compact\"` for Compact Serialization (default is\n * **`\"general\"`**).\n * @property {Boolean} compact Determines if the output is the Compact\n * serialization (`true`) or the JSON serialization (**`false`**,\n * the default).\n * @property {String} contentAlg The algorithm used to encrypt the plaintext\n * (default is **`\"A128CBC-HS256\"`**).\n * @property {String|String[]} protect The names of the headers to integrity\n * protect. The value `\"\"` means that none of the header parameters\n * are integrity protected, while `\"*\"` (the default) means that all\n * header parameters are integrity protected.\n */\nvar JWEDefaults = {\n zip: false,\n format: \"general\",\n contentAlg: \"A128CBC-HS256\",\n protect: \"*\"\n};\n\nmodule.exports = JWEDefaults;\n","/*!\n * jwe/encrypt.js - Encrypt to a JWE\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar util = require(\"../util\"),\n generateCEK = require(\"./helpers\").generateCEK,\n JWK = require(\"../jwk\"),\n slice = require(\"./helpers\").slice,\n pako = require(\"pako\"),\n CONSTANTS = require(\"../algorithms/constants\");\n\nvar assign = require(\"lodash/assign\");\nvar clone = require(\"lodash/clone\");\nvar DEFAULTS = require(\"./defaults\");\n\n/**\n * @class JWE.Encrypter\n * @classdesc\n * Generator of encrypted data.\n *\n * @description\n * **NOTE:** This class cannot be instantiated directly. Instead call {@link\n * JWE.createEncrypt}.\n */\nfunction JWEEncrypter(cfg, fields, recipients) {\n var finalized = false,\n format = cfg.format || \"general\",\n protectAll = !!cfg.protectAll,\n content = Buffer.alloc(0);\n\n /**\n * @member {String} JWE.Encrypter#zip\n * @readonly\n * @description\n * Indicates the compression algorithm applied to the plaintext\n * before it is encrypted. The possible values are:\n *\n * + **`\"DEF\"`**: Compress the plaintext using the DEFLATE algorithm.\n * + **`\"\"`**: Do not compress the plaintext.\n */\n Object.defineProperty(this, \"zip\", {\n get: function() {\n return fields.zip || \"\";\n },\n enumerable: true\n });\n /**\n * @member {Boolean} JWE.Encrypter#compact\n * @readonly\n * @description\n * Indicates whether the output of this encryption generator is\n * using the Compact serialization (`true`) or the JSON\n * serialization (`false`).\n */\n Object.defineProperty(this, \"compact\", {\n get: function() { return \"compact\" === format; },\n enumerable: true\n });\n /**\n * @member {String} JWE.Encrypter#format\n * @readonly\n * @description\n * Indicates the format the output of this encryption generator takes.\n */\n Object.defineProperty(this, \"format\", {\n get: function() { return format; },\n enumerable: true\n });\n /**\n * @member {String[]} JWE.Encrypter#protected\n * @readonly\n * @description\n * The header parameter names that are protected. Protected header fields\n * are first serialized to UTF-8 then encoded as util.base64url, then used as\n * the additional authenticated data in the encryption operation.\n */\n Object.defineProperty(this, \"protected\", {\n get: function() {\n return clone(cfg.protect);\n },\n enumerable: true\n });\n /**\n * @member {Object} JWE.Encrypter#header\n * @readonly\n * @description\n * The global header parameters, both protected and unprotected. Call\n * {@link JWE.Encrypter#protected} to determine which parameters will\n * be protected.\n */\n Object.defineProperty(this, \"header\", {\n get: function() {\n return clone(fields);\n },\n enumerable: true\n });\n\n /**\n * @method JWE.Encrypter#update\n * @description\n * Updates the plaintext data for the encryption generator. The plaintext\n * is appended to the end of any other plaintext already applied.\n *\n * If {data} is a Buffer, {encoding} is ignored. Otherwise, {data} is\n * converted to a Buffer internally to {encoding}.\n *\n * @param {Buffer|String} [data] The plaintext to apply.\n * @param {String} [encoding] The encoding of the plaintext.\n * @returns {JWE.Encrypter} This encryption generator.\n * @throws {Error} If ciphertext has already been generated.\n */\n Object.defineProperty(this, \"update\", {\n value: function(data, encoding) {\n if (finalized) {\n throw new Error(\"already final\");\n }\n if (data != null) {\n data = util.asBuffer(data, encoding);\n if (content.length) {\n content = Buffer.concat([content, data],\n content.length + data.length);\n } else {\n content = data;\n }\n }\n\n return this;\n }\n });\n /**\n * @method JWE.Encrypter#final\n * @description\n * Finishes the encryption operation.\n *\n * The returned Promise, when fulfilled, is the JSON Web Encryption (JWE)\n * object, either in the Compact (if {@link JWE.Encrypter#compact} is\n * `true`) or the JSON serialization.\n *\n * @param {Buffer|String} [data] The final plaintext data to apply.\n * @param {String} [encoding] The encoding of the final plaintext data\n * (if any).\n * @returns {Promise} A promise for the encryption operation.\n * @throws {Error} If ciphertext has already been generated.\n */\n Object.defineProperty(this, \"final\", {\n value: function(data, encoding) {\n if (finalized) {\n return Promise.reject(new Error(\"already final\"));\n }\n\n // last-minute data\n this.update(data, encoding);\n\n // mark as done...ish\n finalized = true;\n var promise = Promise.resolve({});\n\n // determine CEK and IV\n var encAlg = fields.enc;\n var encKey;\n promise = promise.then(function(jwe) {\n if (cfg.cek) {\n encKey = JWK.asKey(cfg.cek);\n }\n return jwe;\n });\n\n // process recipients\n promise = promise.then(function(jwe) {\n var procR = function(r, one) {\n var props = {};\n props = assign(props, fields);\n props = assign(props, r.header);\n\n var algKey = r.key,\n algAlg = props.alg;\n\n // generate Ephemeral EC Key\n var tks,\n rpromise;\n if ((props.alg || \"\").indexOf(\"ECDH-ES\") === 0) {\n tks = algKey.keystore.temp();\n if (r.epk) {\n rpromise = Promise.resolve(r.epk).\n then(function(epk) {\n r.header.epk = epk.toJSON(false, [\"kid\"]);\n props.epk = epk.toObject(true, [\"kid\"]);\n });\n } else {\n rpromise = tks.generate(\"EC\", algKey.get(\"crv\")).\n then(function(epk) {\n r.header.epk = epk.toJSON(false, [\"kid\"]);\n props.epk = epk.toObject(true, [\"kid\"]);\n });\n }\n } else {\n rpromise = Promise.resolve();\n }\n\n // encrypt the CEK\n rpromise = rpromise.then(function() {\n var cek,\n p;\n // special case 'alg=dir'\n if (\"dir\" === algAlg && one) {\n encKey = Promise.resolve(algKey);\n p = encKey.then(function(jwk) {\n // fixup encAlg\n if (!encAlg) {\n props.enc = fields.enc = encAlg = jwk.algorithms(JWK.MODE_ENCRYPT)[0];\n }\n return {\n once: true,\n direct: true\n };\n });\n } else {\n if (!encKey) {\n if (!encAlg) {\n props.enc = fields.enc = encAlg = cfg.contentAlg;\n }\n encKey = generateCEK(encAlg);\n }\n p = encKey.then(function(jwk) {\n cek = jwk.get(\"k\", true);\n // algKey may or may not be a promise\n return algKey;\n });\n p = p.then(function(algKey) {\n return algKey.wrap(algAlg, cek, props);\n });\n }\n return p;\n });\n rpromise = rpromise.then(function(wrapped) {\n if (wrapped.once && !one) {\n return Promise.reject(new Error(\"cannot use 'alg':'\" + algAlg + \"' with multiple recipients\"));\n }\n\n var rjwe = {},\n cek;\n if (wrapped.data) {\n cek = wrapped.data;\n cek = util.base64url.encode(cek);\n }\n\n if (wrapped.direct && cek) {\n // replace content key\n encKey = JWK.asKey({\n kty: \"oct\",\n k: cek\n });\n } else if (cek) {\n /* eslint camelcase: [0] */\n rjwe.encrypted_key = cek;\n }\n\n if (r.header && Object.keys(r.header).length) {\n rjwe.header = clone(r.header || {});\n }\n if (wrapped.header) {\n rjwe.header = assign(rjwe.header || {},\n wrapped.header);\n }\n\n return rjwe;\n });\n return rpromise;\n };\n\n var p = Promise.all(recipients);\n p = p.then(function(rcpts) {\n var single = (1 === rcpts.length);\n rcpts = rcpts.map(function(r) {\n return procR(r, single);\n });\n return Promise.all(rcpts);\n });\n p = p.then(function(rcpts) {\n jwe.recipients = rcpts.filter(function(r) { return !!r; });\n return jwe;\n });\n return p;\n });\n\n // normalize headers\n var props = {};\n promise = promise.then(function(jwe) {\n var protect,\n lenProtect,\n unprotect,\n lenUnprotect;\n\n unprotect = clone(fields);\n if ((protectAll && jwe.recipients.length === 1) || \"compact\" === format) {\n // merge single recipient into fields\n protect = {};\n protect = assign({},\n unprotect,\n jwe.recipients[0].header);\n lenProtect = Object.keys(protect).length;\n\n unprotect = undefined;\n lenUnprotect = 0;\n\n delete jwe.recipients[0].header;\n if (Object.keys(jwe.recipients[0]).length === 0) {\n jwe.recipients.splice(0, 1);\n }\n } else {\n protect = {};\n lenProtect = 0;\n lenUnprotect = Object.keys(unprotect).length;\n cfg.protect.forEach(function(f) {\n // remove protected header values from body unprotected header\n if (!(f in unprotect)) {\n return;\n }\n protect[f] = unprotect[f];\n lenProtect++;\n\n delete unprotect[f];\n lenUnprotect--;\n });\n\n jwe.recipients = (jwe.recipients || []).map(function(rcpt) {\n rcpt = rcpt || {};\n var header = rcpt.header;\n if (header) {\n Object.keys(header).forEach(function (f) {\n if (f in protect) { delete header[f]; }\n });\n if (!Object.keys(header).length) {\n delete rcpt.header;\n }\n }\n return rcpt;\n });\n }\n\n if (!jwe.recipients || jwe.recipients.length === 0) {\n delete jwe.recipients;\n }\n\n // \"serialize\" (and setup merged props)\n if (unprotect && lenUnprotect > 0) {\n props = assign(props, unprotect);\n jwe.unprotected = unprotect;\n }\n if (protect && lenProtect > 0) {\n props = assign(props, protect);\n protect = JSON.stringify(protect);\n jwe.protected = util.base64url.encode(protect, \"utf8\");\n }\n\n return jwe;\n });\n\n // (OPTIONAL) compress plaintext\n promise = promise.then(function(jwe) {\n var pdata = content;\n if (!props.zip) {\n jwe.plaintext = pdata;\n return jwe;\n } else if (props.zip === \"DEF\") {\n return new Promise(function(resolve, reject) {\n try {\n var data = pako.deflateRaw(Buffer.from(pdata, \"binary\"));\n\n jwe.plaintext = Buffer.from(data);\n resolve(jwe);\n } catch (error) {\n reject(error);\n }\n });\n }\n return Promise.reject(new Error(\"unsupported 'zip' mode\"));\n });\n\n // encrypt plaintext\n promise = promise.then(function(jwe) {\n props.adata = jwe.protected;\n if (\"aad\" in cfg && cfg.aad != null) {\n props.adata += \".\" + cfg.aad;\n props.adata = Buffer.from(props.adata, \"utf8\");\n }\n // calculate IV\n var iv = cfg.iv ||\n util.randomBytes(CONSTANTS.NONCELENGTH[encAlg] / 8);\n if (\"string\" === typeof iv) {\n iv = util.base64url.decode(iv);\n }\n props.iv = iv;\n\n if (\"recipients\" in jwe && jwe.recipients.length === 1) {\n props.kdata = jwe.recipients[0].encrypted_key;\n }\n\n if (\"epu\" in cfg && cfg.epu != null) {\n props.epu = cfg.epu;\n }\n\n if (\"epv\" in cfg && cfg.epv != null) {\n props.epv = cfg.epv;\n }\n\n var pdata = jwe.plaintext;\n delete jwe.plaintext;\n return encKey.then(function(encKey) {\n var p = encKey.encrypt(encAlg, pdata, props);\n p = p.then(function(result) {\n jwe.iv = util.base64url.encode(iv, \"binary\");\n if (\"aad\" in cfg && cfg.aad != null) {\n jwe.aad = cfg.aad;\n }\n jwe.ciphertext = util.base64url.encode(result.data, \"binary\");\n jwe.tag = util.base64url.encode(result.tag, \"binary\");\n return jwe;\n });\n return p;\n });\n });\n\n // (OPTIONAL) compact/flattened results\n switch (format) {\n case \"compact\":\n promise = promise.then(function(jwe) {\n var compact = new Array(5);\n\n compact[0] = jwe.protected;\n if (jwe.recipients && jwe.recipients[0]) {\n compact[1] = jwe.recipients[0].encrypted_key;\n }\n\n compact[2] = jwe.iv;\n compact[3] = jwe.ciphertext;\n compact[4] = jwe.tag;\n compact = compact.join(\".\");\n\n return compact;\n });\n break;\n case \"flattened\":\n promise = promise.then(function(jwe) {\n var flattened = {},\n rcpt = jwe.recipients && jwe.recipients[0];\n\n if (jwe.protected) {\n flattened.protected = jwe.protected;\n }\n if (jwe.unprotected) {\n flattened.unprotected = jwe.unprotected;\n }\n [\"header\", \"encrypted_key\"].forEach(function(f) {\n if (!rcpt) { return; }\n if (!(f in rcpt)) { return; }\n if (!rcpt[f]) { return; }\n if (\"object\" === typeof rcpt[f] && !Object.keys(rcpt[f]).length) { return; }\n flattened[f] = rcpt[f];\n });\n if (jwe.aad) {\n flattened.aad = jwe.aad;\n }\n flattened.iv = jwe.iv;\n flattened.ciphertext = jwe.ciphertext;\n flattened.tag = jwe.tag;\n\n return flattened;\n });\n break;\n case \"general\":\n promise = promise.then(function(jwe) {\n var recipients = jwe.recipients || [];\n recipients = recipients.map(function (rcpt) {\n if (!Object.keys(rcpt).length) { return undefined; }\n return rcpt;\n });\n recipients = recipients.filter(function (rcpt) { return !!rcpt; });\n if (recipients.length) {\n jwe.recipients = recipients;\n } else {\n delete jwe.recipients;\n }\n\n return jwe;\n });\n }\n\n return promise;\n }\n });\n}\n\nfunction createEncrypt(opts, rcpts) {\n // fixup recipients\n var options = opts,\n rcptStart = 1,\n rcptList = rcpts;\n\n if (arguments.length === 0) {\n throw new Error(\"at least one recipient must be provided\");\n }\n if (arguments.length === 1) {\n // assume opts is the recipient list\n rcptList = opts;\n rcptStart = 0;\n options = {};\n } else if (JWK.isKey(opts) ||\n (opts && \"kty\" in opts) ||\n (opts && \"key\" in opts &&\n (JWK.isKey(opts.key) || \"kty\" in opts.key))) {\n rcptList = opts;\n rcptStart = 0;\n options = {};\n } else {\n options = clone(opts);\n }\n if (!Array.isArray(rcptList)) {\n rcptList = slice(arguments, rcptStart);\n }\n\n // fixup options\n options = assign(clone(DEFAULTS), options);\n\n // setup header fields\n var fields = clone(options.fields || {});\n if (options.zip) {\n fields.zip = (typeof options.zip === \"boolean\") ?\n (options.zip ? \"DEF\" : false) :\n options.zip;\n }\n options.format = (options.compact ? \"compact\" : options.format) || \"general\";\n switch (options.format) {\n case \"compact\":\n if (\"aad\" in opts) {\n throw new Error(\"additional authenticated data cannot be used for compact serialization\");\n }\n /* eslint no-fallthrough: [0] */\n case \"flattened\":\n if (rcptList.length > 1) {\n throw new Error(\"too many recipients for compact serialization\");\n }\n break;\n }\n\n // note protected fields (globally)\n // protected fields are global only\n var protectAll = false;\n if (\"compact\" === options.format || \"*\" === options.protect) {\n protectAll = true;\n options.protect = Object.keys(fields).concat(\"enc\");\n } else if (typeof options.protect === \"string\") {\n options.protect = [options.protect];\n } else if (Array.isArray(options.protect)) {\n options.protect = options.protect.concat();\n } else if (!options.protect) {\n options.protect = [];\n } else {\n throw new Error(\"protect must be a list of fields\");\n }\n\n if (protectAll && 1 < rcptList.length) {\n throw new Error(\"too many recipients to protect all header parameters\");\n }\n\n rcptList = rcptList.map(function(r, idx) {\n var p;\n\n // resolve a key\n if (r && \"kty\" in r) {\n p = JWK.asKey(r);\n p = p.then(function(k) {\n return {\n key: k\n };\n });\n } else if (r) {\n p = JWK.asKey(r.key);\n p = p.then(function(k) {\n return {\n header: r.header,\n reference: r.reference,\n key: k\n };\n });\n } else {\n p = Promise.reject(new Error(\"missing key for recipient \" + idx));\n }\n\n // convert ephemeral key (if present)\n if (r.epk) {\n p = p.then(function(recipient) {\n return JWK.asKey(r.epk).\n then(function(epk) {\n recipient.epk = epk;\n return recipient;\n });\n });\n }\n\n // resolve the complete recipient\n p = p.then(function(recipient) {\n var key = recipient.key;\n\n // prepare the recipient header\n var header = recipient.header || {};\n recipient.header = header;\n var props = {};\n props = assign(props, fields);\n props = assign(props, recipient.header);\n\n // ensure key protection algorithm is set\n if (!props.alg) {\n props.alg = key.algorithms(JWK.MODE_WRAP)[0];\n header.alg = props.alg;\n }\n if (!props.alg) {\n return Promise.reject(new Error(\"key not valid for encrypting to recipient \" + idx));\n }\n header.alg = props.alg;\n\n // determine the key reference\n var ref = recipient.reference;\n delete recipient.reference;\n if (undefined === ref) {\n // header already contains the key reference\n ref = [\"kid\", \"jku\", \"x5c\", \"x5t\", \"x5u\"].some(function(k) {\n return (k in header);\n });\n ref = !ref ? \"kid\" : null;\n } else if (\"boolean\" === typeof ref) {\n // explicit (positive | negative) request for key reference\n ref = ref ? \"kid\" : null;\n }\n var jwk;\n if (ref) {\n jwk = key.toJSON();\n if (\"jwk\" === ref) {\n if (\"oct\" === key.kty) {\n return Promise.reject(new Error(\"cannot embed key\"));\n }\n header.jwk = jwk;\n } else if (ref in jwk) {\n header[ref] = jwk[ref];\n }\n }\n\n // freeze recipient\n recipient = Object.freeze(recipient);\n return recipient;\n });\n\n return p;\n });\n\n // create and configure encryption\n var cfg = {\n aad: (\"aad\" in options) ? util.base64url.encode(options.aad || \"\") : null,\n contentAlg: options.contentAlg,\n format: options.format,\n protect: options.protect,\n cek: options.cek,\n iv: options.iv,\n protectAll: protectAll\n };\n var enc = new JWEEncrypter(cfg, fields, rcptList);\n\n return enc;\n}\n\nmodule.exports = {\n encrypter: JWEEncrypter,\n createEncrypt: createEncrypt\n};\n","/*!\n * jwe/helpers.js - JWE Internal Helper Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar CONSTANTS = require(\"../algorithms/constants\"),\n JWK = require(\"../jwk\");\n\nmodule.exports = {\n slice: function(input, start) {\n return Array.prototype.slice.call(input, start || 0);\n },\n generateCEK: function(enc) {\n var ks = JWK.createKeyStore();\n var len = CONSTANTS.KEYLENGTH[enc];\n\n if (len) {\n return ks.generate(\"oct\", len);\n }\n\n throw new Error(\"unsupported encryption algorithm\");\n }\n};\n","/*!\n * jwe/index.js - JSON Web Encryption (JWE) Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar JWE = {\n createEncrypt: require(\"./encrypt\").createEncrypt,\n createDecrypt: require(\"./decrypt\").createDecrypt\n};\n\nmodule.exports = JWE;\n","/*!\n * jwk/basekey.js - JWK Key Base Class Implementation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar merge = require(\"../util/merge\");\nconst { v4: uuidv4 } = require(\"uuid\");\n\nvar assign = require(\"lodash/assign\");\nvar clone = require(\"lodash/clone\");\nvar flatten = require(\"lodash/flatten\");\nvar intersection = require(\"lodash/intersection\");\nvar omit = require(\"lodash/omit\");\nvar pick = require(\"lodash/pick\");\nvar uniq = require(\"lodash/uniq\");\n\nvar ALGORITHMS = require(\"../algorithms\"),\n CONSTANTS = require(\"./constants.js\"),\n HELPERS = require(\"./helpers.js\"),\n UTIL = require(\"../util\");\n\n/**\n * @class JWK.Key\n * @classdesc\n * Represents a JSON Web Key instance.\n *\n * @description\n * **NOTE:** This class cannot be instantiated directly. Instead call\n * {@link JWK.asKey}, {@link JWK.KeyStore#add}, or\n * {@link JWK.KeyStore#generate}.\n */\nvar JWKBaseKeyObject = function(kty, ks, props, cfg) {\n // ### validate/coerce arguments ###\n if (!kty) {\n throw new Error(\"kty cannot be null\");\n }\n\n if (!ks) {\n throw new Error(\"keystore cannot be null\");\n }\n\n if (!props) {\n throw new Error(\"props cannot be null\");\n } else if (\"string\" === typeof props) {\n props = JSON.parse(props);\n }\n\n if (!cfg) {\n throw new Error(\"cfg cannot be null\");\n }\n\n var excluded = [];\n var keys = {},\n json = {},\n prints,\n kid;\n\n props = clone(props);\n // strip thumbprints if present\n prints = assign({}, props[HELPERS.INTERNALS.THUMBPRINT_KEY] || {});\n delete props[HELPERS.INTERNALS.THUMBPRINT_KEY];\n Object.keys(prints).forEach(function(a) {\n var h = prints[a];\n if (!kid) {\n kid = h;\n if (Buffer.isBuffer(kid)) {\n kid = UTIL.base64url.encode(kid);\n }\n }\n if (!Buffer.isBuffer(h)) {\n h = UTIL.base64url.decode(h);\n prints[a] = h;\n }\n });\n\n // force certain values\n props.kty = kty;\n props.kid = props.kid || kid || uuidv4();\n\n // setup base info\n var included = Object.keys(HELPERS.COMMON_PROPS).map(function(p) {\n return HELPERS.COMMON_PROPS[p].name;\n });\n json.base = pick(props, included);\n excluded = excluded.concat(Object.keys(json.base));\n\n // setup public information\n json.public = clone(props);\n keys.public = cfg.publicKey(json.public);\n if (keys.public) {\n // exclude public values from extra\n excluded = excluded.concat(Object.keys(json.public));\n }\n\n // setup private information\n json.private = clone(props);\n keys.private = cfg.privateKey(json.private);\n if (keys.private) {\n // exclude private values from extra\n excluded = excluded.concat(Object.keys(json.private));\n }\n\n // setup extra information\n json.extra = omit(props, excluded);\n\n // TODO: validate 'alg' against supported algorithms\n\n // setup calculated values\n var keyLen;\n if (keys.public && (\"length\" in keys.public)) {\n keyLen = keys.public.length;\n } else if (keys.private && (\"length\" in keys.private)) {\n keyLen = keys.private.length;\n } else {\n keyLen = NaN;\n }\n\n // ### Public Properties ###\n /**\n * @member {JWK.KeyStore} JWK.Key#keystore\n * @description\n * The owning keystore.\n */\n Object.defineProperty(this, \"keystore\", {\n value: ks,\n enumerable: true\n });\n /**\n * @member {Number} JWK.Key#length\n * @description\n * The size of this Key, in bits.\n */\n Object.defineProperty(this, \"length\", {\n value: keyLen,\n enumerable: true\n });\n /**\n * @member {String} JWK.Key#kty\n * @description\n * The type of Key.\n */\n Object.defineProperty(this, \"kty\", {\n value: kty,\n enumerable: true\n });\n\n /**\n * @member {String} JWK.Key#kid\n * @description\n * The identifier for this Key.\n */\n Object.defineProperty(this, \"kid\", {\n value: json.base.kid,\n enumerable: true\n });\n /**\n * @member {String} JWK.Key#use\n * @description\n * The usage for this Key.\n */\n Object.defineProperty(this, \"use\", {\n value: json.base.use || \"\",\n enumerable: true\n });\n /**\n * @member {String} JWK.Key#alg\n * @description\n * The sole algorithm this key can be used for.\n */\n Object.defineProperty(this, \"alg\", {\n value: json.base.alg || \"\",\n enumerable: true\n });\n\n // ### Public Methods ###\n /**\n * Generates the thumbprint of this Key.\n *\n * @param {String} [] The hash algorithm to use\n * @returns {Promise} The promise for the thumbprint generation.\n */\n Object.defineProperty(this, \"thumbprint\", {\n value: function(hash) {\n hash = (hash || HELPERS.INTERNALS.THUMBPRINT_HASH).toUpperCase();\n if (prints[hash]) {\n // return cached value\n return Promise.resolve(prints[hash]);\n }\n var p = HELPERS.thumbprint(cfg, json, hash);\n p = p.then(function(result) {\n if (result) {\n prints[hash] = result;\n }\n return result;\n });\n return p;\n }\n });\n /**\n * @method JWK.Key#algorithms\n * @description\n * The possible algorithms this Key can be used for. The returned\n * list is not any particular order, but is filtered based on the\n * Key's intended usage.\n *\n * @param {String} mode The operation mode\n * @returns {String[]} The list of supported algorithms\n * @see JWK.Key#supports\n */\n Object.defineProperty(this, \"algorithms\", {\n value: function(mode) {\n var modes = [];\n if (!this.use || this.use === \"sig\") {\n if (!mode || CONSTANTS.MODE_SIGN === mode) {\n modes.push(CONSTANTS.MODE_SIGN);\n }\n if (!mode || CONSTANTS.MODE_VERIFY === mode) {\n modes.push(CONSTANTS.MODE_VERIFY);\n }\n }\n if (!this.use || this.use === \"enc\") {\n if (!mode || CONSTANTS.MODE_ENCRYPT === mode) {\n modes.push(CONSTANTS.MODE_ENCRYPT);\n }\n if (!mode || CONSTANTS.MODE_DECRYPT === mode) {\n modes.push(CONSTANTS.MODE_DECRYPT);\n }\n if (!mode || CONSTANTS.MODE_WRAP === mode) {\n modes.push(CONSTANTS.MODE_WRAP);\n }\n if (!mode || CONSTANTS.MODE_UNWRAP === mode) {\n modes.push(CONSTANTS.MODE_UNWRAP);\n }\n }\n\n var self = this;\n var algs = modes.map(function(m) {\n return cfg.algorithms.call(self, keys, m);\n });\n algs = flatten(algs);\n algs = uniq(algs);\n if (this.alg) {\n // TODO: fix this correctly\n var valid;\n if (\"oct\" === kty) {\n valid = [this.alg, \"dir\"];\n } else {\n valid = [this.alg];\n }\n algs = intersection(algs, valid);\n }\n\n return algs;\n }\n });\n /**\n * @method JWK.Key#supports\n * @description\n * Determines if the given algorithm is supported.\n *\n * @param {String} alg The algorithm in question\n * @param {String} [mode] The operation mode\n * @returns {Boolean} `true` if {alg} is supported, and `false` otherwise.\n * @see JWK.Key#algorithms\n */\n Object.defineProperty(this, \"supports\", {\n value: function(alg, mode) {\n return (this.algorithms(mode).indexOf(alg) !== -1);\n }\n });\n /**\n * @method JWK.Key#has\n * @description\n * Determines if this Key contains the given parameter.\n *\n * @param {String} name The name of the parameter\n * @param {Boolean} [isPrivate=false] `true` if private parameters should be\n * checked.\n * @returns {Boolean} `true` if the given parameter is present; `false`\n * otherwise.\n */\n Object.defineProperty(this, \"has\", {\n value: function(name, isPrivate) {\n var contains = false;\n contains = contains || !!(json.base &&\n (name in json.base));\n contains = contains || !!(keys.public &&\n (name in keys.public));\n contains = contains || !!(json.extra &&\n (name in json.extra));\n contains = contains || !!(isPrivate &&\n keys.private &&\n (name in keys.private));\n // TODO: check for export restrictions\n\n return contains;\n }\n });\n /**\n * @method JWK.Key#get\n * @description\n * Retrieves the value of the given parameter. The value returned by this\n * method is in its natural format, which might not exactly match its\n * JSON encoding (e.g., a binary string rather than a base64url-encoded\n * string).\n *\n * **NOTE:** This method can return `false`. Call\n * {@link JWK.Key#has} to determine if the parameter is present.\n *\n * @param {String} name The name of the parameter\n * @param {Boolean} [isPrivate=false] `true` if private parameters should\n * be checked.\n * @returns {any} The value of the named parameter, or undefined if\n * it is not present.\n */\n Object.defineProperty(this, \"get\", {\n value: function(name, isPrivate) {\n var src;\n if (json.base && (name in json.base)) {\n src = json.base;\n } else if (keys.public && (name in keys.public)) {\n src = keys.public;\n } else if (json.extra && (name in json.extra)) {\n src = json.extra;\n } else if (isPrivate && keys.private && (name in keys.private)) {\n // TODO: check for export restrictions\n src = keys.private;\n }\n\n return src && src[name] || null;\n }\n });\n /**\n * @method JWK.Key#toJSON\n * @description\n * Returns the JSON representation of this Key. All properties of the\n * returned JSON object are properly encoded (e.g., base64url encoding for\n * any binary strings).\n *\n * @param {Boolean} [isPrivate=false] `true` if private parameters should be\n * included.\n * @param {String[]} [excluded] The list of parameters to exclude from\n * the returned JSON.\n * @returns {Object} The plain JSON object\n */\n Object.defineProperty(this, \"toJSON\", {\n value: function(isPrivate, excluded) {\n // coerce arguments\n if (Array.isArray(isPrivate)) {\n excluded = isPrivate;\n isPrivate = false;\n }\n var result = {};\n\n // TODO: check for export restrictions\n result = merge(result,\n json.base,\n json.public,\n (\"boolean\" === typeof isPrivate && isPrivate) ? json.private : {},\n json.extra);\n result = omit(result, excluded || []);\n\n return result;\n }\n });\n\n /**\n * @method JWK.Key#toPEM\n * @description\n * Returns the PEM representation of this Key as a string.\n *\n * @param {Boolean} [isPrivate=false] `true` if private parameters should be\n * included.\n * @returns {string} The PEM-encoded string\n */\n Object.defineProperty(this, \"toPEM\", {\n value: function(isPrivate) {\n if (isPrivate === null) {\n isPrivate = false;\n }\n\n if (!cfg.convertToPEM) {\n throw new Error(\"Unsupported key type for PEM encoding\");\n }\n var k = (isPrivate) ? keys.private : keys.public;\n if (!k) {\n throw new Error(\"Invalid key\");\n }\n return cfg.convertToPEM.call(this, k, isPrivate);\n }\n });\n\n /**\n * @method JWK.Key#toObject\n * @description\n * Returns the plain object representing this Key. All properties of the\n * returned object are in their natural encoding (e.g., binary strings\n * instead of base64url encoded).\n *\n * @param {Boolean} [isPrivate=false] `true` if private parameters should be\n * included.\n * @param {String[]} [excluded] The list of parameters to exclude from\n * the returned object.\n * @returns {Object} The plain Object.\n */\n Object.defineProperty(this, \"toObject\", {\n value: function(isPrivate, excluded) {\n // coerce arguments\n if (Array.isArray(isPrivate)) {\n excluded = isPrivate;\n isPrivate = false;\n }\n var result = {};\n\n // TODO: check for export restrictions\n result = merge(result,\n json.base,\n keys.public,\n (\"boolean\" === typeof isPrivate && isPrivate) ? keys.private : {},\n json.extra);\n result = omit(result, (excluded || []).concat(\"length\"));\n\n return result;\n }\n });\n\n /**\n * @method JWK.Key#sign\n * @description\n * Sign the given data using the specified algorithm.\n *\n * **NOTE:** This is the primitive signing operation; the output is\n * _**NOT**_ a JSON Web Signature (JWS) object.\n *\n * The Promise, when fulfilled, returns an Object with the following\n * properties:\n *\n * + **data**: The data that was signed (and should be equal to {data}).\n * + **mac**: The signature or message authentication code (MAC).\n *\n * @param {String} alg The signing algorithm\n * @param {String|Buffer} data The data to sign\n * @param {Object} [props] Additional properties for the signing\n * algorithm.\n * @returns {Promise} The promise for the signing operation.\n * @throws {Error} If {alg} is not appropriate for this Key; or if\n * this Key does not contain the appropriate parameters.\n */\n Object.defineProperty(this, \"sign\", {\n value: function(alg, data, props) {\n // validate appropriateness\n if (this.algorithms(\"sign\").indexOf(alg) === -1) {\n return Promise.reject(new Error(\"unsupported algorithm\"));\n }\n var k = cfg.signKey.call(this, alg, keys);\n if (!k) {\n return Promise.reject(new Error(\"improper key\"));\n }\n\n // prepare properties (if any)\n props = (props) ?\n clone(props) :\n {};\n if (cfg.signProps) {\n props = merge(props, cfg.signProps.call(this, alg, props));\n }\n return ALGORITHMS.sign(alg, k, data, props);\n }\n });\n /**\n * @method JWK.Key#verify\n * @description\n * Verify the given data and signature using the specified algorithm.\n *\n * **NOTE:** This is the primitive verification operation; the input is\n * _**NOT**_ a JSON Web Signature.

\n *\n * The Promise, when fulfilled, returns an Object with the following\n * properties:\n *\n * + **data**: The data that was verified (and should be equal to\n * {data}).\n * + **mac**: The signature or MAC that was verified (and should be equal\n * to {mac}).\n * + **valid**: `true` if {mac} is valid for {data}.\n *\n * @param {String} alg The verification algorithm\n * @param {String|Buffer} data The data to verify\n * @param {String|Buffer} mac The signature or MAC to verify\n * @param {Object} [props] Additional properties for the verification\n * algorithm.\n * @returns {Promise} The promise for the verification operation.\n * @throws {Error} If {alg} is not appropriate for this Key; or if\n * the Key does not contain the appropriate properties.\n */\n Object.defineProperty(this, \"verify\", {\n value: function(alg, data, mac, props) {\n // validate appropriateness\n if (this.algorithms(\"verify\").indexOf(alg) === -1) {\n return Promise.reject(new Error(\"unsupported algorithm\"));\n }\n var k = cfg.verifyKey.call(this, alg, keys);\n if (!k) {\n return Promise.reject(new Error(\"improper key\"));\n }\n\n // prepare properties (if any)\n props = (props) ?\n clone(props) :\n {};\n if (cfg.verifyProps) {\n props = merge(props, cfg.verifyProps.call(this, alg, props));\n }\n return ALGORITHMS.verify(alg, k, data, mac, props);\n }\n });\n\n /**\n * @method JWK.Key#encrypt\n * @description\n * Encrypts the given data using the specified algorithm.\n *\n * **NOTE:** This is the primitive encryption operation; the output is\n * _**NOT**_ a JSON Web Encryption (JWE) object.\n *\n * **NOTE:** This operation is treated as distinct from {@link\n * JWK.Key#wrap}, as different algorithms and properties are often\n * used for wrapping a key versues encrypting arbitrary data.\n *\n * The Promise, when fulfilled, returns an object with the following\n * properties:\n *\n * + **data**: The ciphertext data\n * + **mac**: The associated message authentication code (MAC).\n *\n * @param {String} alg The encryption algorithm\n * @param {Buffer|String} data The data to encrypt\n * @param {Object} [props] Additional properties for the encryption\n * algorithm.\n * @returns {Promise} The promise for the encryption operation.\n * @throws {Error} If {alg} is not appropriate for this Key; or if\n * this Key does not contain the appropriate parameters.\n */\n Object.defineProperty(this, \"encrypt\", {\n value: function(alg, data, props) {\n // validate appropriateness\n if (this.algorithms(\"encrypt\").indexOf(alg) === -1) {\n return Promise.reject(new Error(\"unsupported algorithm\"));\n }\n var k = cfg.encryptKey.call(this, alg, keys);\n if (!k) {\n return Promise.reject(new Error(\"improper key\"));\n }\n\n // prepare properties (if any)\n props = (props) ?\n clone(props) :\n {};\n if (cfg.encryptProps) {\n props = merge(props, cfg.encryptProps.call(this, alg, props));\n }\n return ALGORITHMS.encrypt(alg, k, data, props);\n }\n });\n /**\n * @method JWK.Key#decrypt\n * @description\n * Decrypts the given data using the specified algorithm.\n *\n * **NOTE:** This is the primitive decryption operation; the input is\n * _**NOT**_ a JSON Web Encryption (JWE) object.\n *\n * **NOTE:** This operation is treated as distinct from {@link\n * JWK.Key#unwrap}, as different algorithms and properties are often used\n * for unwrapping a key versues decrypting arbitrary data.\n *\n * The Promise, when fulfilled, returns the plaintext data.\n *\n * @param {String} alg The decryption algorithm.\n * @param {Buffer|String} data The data to decypt.\n * @param {Object} [props] Additional data for the decryption operation.\n * @returns {Promise} The promise for the decryption operation.\n * @throws {Error} If {alg} is not appropriate for this Key; or if\n * the Key does not contain the appropriate properties.\n */\n Object.defineProperty(this, \"decrypt\", {\n value: function(alg, data, props) {\n // validate appropriateness\n if (this.algorithms(\"decrypt\").indexOf(alg) === -1) {\n return Promise.reject(new Error(\"unsupported algorithm\"));\n }\n var k = cfg.decryptKey.call(this, alg, keys);\n if (!k) {\n return Promise.reject(new Error(\"improper key\"));\n }\n\n // prepare properties (if any)\n props = (props) ?\n clone(props) :\n {};\n if (cfg.decryptProps) {\n props = merge(props, cfg.decryptProps.call(this, alg, props));\n }\n return ALGORITHMS.decrypt(alg, k, data, props);\n }\n });\n\n /**\n * @method JWK.Key#wrap\n * @description\n * Wraps the given key using the specified algorithm.\n *\n * **NOTE:** This is the primitive encryption operation; the output is\n * _**NOT**_ a JSON Web Encryption (JWE) object.\n *\n * **NOTE:** This operation is treated as distinct from {@link\n * JWK.Key#encrypt}, as different algorithms and properties are\n * often used for wrapping a key versues encrypting arbitrary data.\n *\n * The Promise, when fulfilled, returns an object with the following\n * properties:\n *\n * + **data**: The ciphertext data\n * + **headers**: The additional header parameters to apply to a JWE.\n *\n * @param {String} alg The encryption algorithm\n * @param {Buffer|String} data The data to encrypt\n * @param {Object} [props] Additional properties for the encryption\n * algorithm.\n * @returns {Promise} The promise for the encryption operation.\n * @throws {Error} If {alg} is not appropriate for this Key; or if\n * this Key does not contain the appropriate parameters.\n */\n Object.defineProperty(this, \"wrap\", {\n value: function(alg, data, props) {\n // validate appropriateness\n if (this.algorithms(\"wrap\").indexOf(alg) === -1) {\n return Promise.reject(new Error(\"unsupported algorithm\"));\n }\n var k = cfg.wrapKey.call(this, alg, keys);\n if (!k) {\n return Promise.reject(new Error(\"improper key\"));\n }\n\n // prepare properties (if any)\n props = (props) ?\n clone(props) :\n {};\n if (cfg.wrapProps) {\n props = merge(props, cfg.wrapProps.call(this, alg, props));\n }\n return ALGORITHMS.encrypt(alg, k, data, props);\n }\n });\n /**\n * @method JWK.Key#unwrap\n * @description\n * Unwraps the given key using the specified algorithm.\n *\n * **NOTE:** This is the primitive unwrap operation; the input is\n * _**NOT**_ a JSON Web Encryption (JWE) object.\n *\n * **NOTE:** This operation is treated as distinct from {@link\n * JWK.Key#decrypt}, as different algorithms and properties are often used\n * for unwrapping a key versues decrypting arbitrary data.\n *\n * The Promise, when fulfilled, returns the unwrapped key.\n *\n * @param {String} alg The unwrap algorithm.\n * @param {Buffer|String} data The data to unwrap.\n * @param {Object} [props] Additional data for the unwrap operation.\n * @returns {Promise} The promise for the unwrap operation.\n * @throws {Error} If {alg} is not appropriate for this Key; or if\n * the Key does not contain the appropriate properties.\n */\n Object.defineProperty(this, \"unwrap\", {\n value: function(alg, data, props) {\n // validate appropriateness\n if (this.algorithms(\"unwrap\").indexOf(alg) === -1) {\n return Promise.reject(new Error(\"unsupported algorithm\"));\n }\n var k = cfg.unwrapKey.call(this, alg, keys);\n if (!k) {\n return Promise.reject(new Error(\"improper key\"));\n }\n\n // prepare properties (if any)\n props = (props) ?\n clone(props) :\n {};\n if (cfg.unwrapProps) {\n props = merge(props, cfg.unwrapProps.call(this, alg, props));\n }\n return ALGORITHMS.decrypt(alg, k, data, props);\n }\n });\n};\n\nmodule.exports = JWKBaseKeyObject;\n","/*!\n * jwk/constants.js - Constants for JWKs\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nmodule.exports = {\n MODE_SIGN: \"sign\",\n MODE_VERIFY: \"verify\",\n MODE_ENCRYPT: \"encrypt\",\n MODE_DECRYPT: \"decrypt\",\n MODE_WRAP: \"wrap\",\n MODE_UNWRAP: \"unwrap\"\n};\n","/*!\n * jwk/rsa.js - RSA Key Representation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar ecutil = require(\"../algorithms/ec-util.js\"),\n forge = require(\"../deps/forge\"),\n depsecc = require(\"../deps/ecc\");\n\nvar JWK = {\n BaseKey: require(\"./basekey.js\"),\n helpers: require(\"./helpers.js\")\n};\n\nvar SIG_ALGS = [\n \"ES256\",\n \"ES384\",\n \"ES512\"\n];\nvar WRAP_ALGS = [\n \"ECDH-ES\",\n \"ECDH-ES+A128KW\",\n \"ECDH-ES+A192KW\",\n \"ECDH-ES+A256KW\"\n];\n\nvar EC_OID = ecutil.EC_OID;\nfunction oidToCurveName(oid) {\n switch (oid) {\n case \"1.2.840.10045.3.1.7\":\n return \"P-256\";\n case \"1.3.132.0.34\":\n return \"P-384\";\n case \"1.3.132.0.35\":\n return \"P-521\";\n default:\n return null;\n }\n}\n\nvar JWKEcCfg = {\n publicKey: function(props) {\n var fields = JWK.helpers.COMMON_PROPS.concat([\n {name: \"crv\", type: \"string\"},\n {name: \"x\", type: \"binary\"},\n {name: \"y\", type: \"binary\"}\n ]);\n var pk = JWK.helpers.unpackProps(props, fields);\n if (pk && pk.crv && pk.x && pk.y) {\n pk.length = ecutil.curveSize(pk.crv);\n } else {\n delete pk.crv;\n delete pk.x;\n delete pk.y;\n }\n\n return pk;\n },\n privateKey: function(props) {\n var fields = JWK.helpers.COMMON_PROPS.concat([\n {name: \"crv\", type: \"string\"},\n {name: \"x\", type: \"binary\"},\n {name: \"y\", type: \"binary\"},\n {name: \"d\", type: \"binary\"}\n ]);\n var pk = JWK.helpers.unpackProps(props, fields);\n if (pk && pk.crv && pk.x && pk.y && pk.d) {\n pk.length = ecutil.curveSize(pk.crv);\n } else {\n pk = undefined;\n }\n\n return pk;\n },\n thumbprint: function(json) {\n if (json.public) {\n json = json.public;\n }\n var fields = {\n crv: json.crv,\n kty: \"EC\",\n x: json.x,\n y: json.y\n };\n return fields;\n },\n algorithms: function(keys, mode) {\n var len = (keys.public && keys.public.length) ||\n (keys.private && keys.private.length) ||\n 0;\n // NOTE: 521 is the actual, but 512 is the expected\n if (len === 521) {\n len = 512;\n }\n\n switch (mode) {\n case \"encrypt\":\n case \"decrypt\":\n return [];\n case \"wrap\":\n return (keys.public && WRAP_ALGS) || [];\n case \"unwrap\":\n return (keys.private && WRAP_ALGS) || [];\n case \"sign\":\n if (!keys.private) {\n return [];\n }\n return SIG_ALGS.filter(function(a) {\n return (a === (\"ES\" + len));\n });\n case \"verify\":\n if (!keys.public) {\n return [];\n }\n return SIG_ALGS.filter(function(a) {\n return (a === (\"ES\" + len));\n });\n }\n },\n\n encryptKey: function(alg, keys) {\n return keys.public;\n },\n decryptKey: function(alg, keys) {\n return keys.private;\n },\n\n wrapKey: function(alg, keys) {\n return keys.public;\n },\n unwrapKey: function(alg, keys) {\n return keys.private;\n },\n\n signKey: function(alg, keys) {\n return keys.private;\n },\n verifyKey: function(alg, keys) {\n return keys.public;\n }\n};\nJWKEcCfg.convertToPEM = ecutil.convertToPEM;\n\n// Inspired by digitalbaazar/node-forge/js/rsa.js\nvar validators = {\n oid: EC_OID,\n privateKey: {\n // ECPrivateKey\n name: \"ECPrivateKey\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n // EC version\n name: \"ECPrivateKey.version\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false\n },\n {\n // private value (d)\n name: \"ECPrivateKey.private\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OCTETSTRING,\n constructed: false,\n capture: \"d\"\n },\n {\n // EC parameters\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n name: \"ECPrivateKey.parameters\",\n constructed: true,\n value: [\n {\n // namedCurve (crv)\n name: \"ECPrivateKey.namedCurve\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OID,\n constructed: false,\n capture: \"crv\"\n }\n ]\n },\n {\n // publicKey\n name: \"ECPrivateKey.publicKey\",\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n value: [\n {\n name: \"ECPrivateKey.point\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.BITSTRING,\n constructed: false,\n capture: \"point\"\n }\n ]\n }\n ]\n },\n embeddedPrivateKey: {\n // ECPrivateKey\n name: \"ECPrivateKey\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n // EC version\n name: \"ECPrivateKey.version\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false\n },\n {\n // private value (d)\n name: \"ECPrivateKey.private\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OCTETSTRING,\n constructed: false,\n capture: \"d\"\n },\n {\n // publicKey\n name: \"ECPrivateKey.publicKey\",\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n value: [\n {\n name: \"ECPrivateKey.point\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.BITSTRING,\n constructed: false,\n capture: \"point\"\n }\n ]\n }\n ]\n }\n};\n\nvar JWKEcFactory = {\n kty: \"EC\",\n validators: validators,\n prepare: function(props) {\n // TODO: validate key properties\n var cfg = JWKEcCfg;\n var p = Promise.resolve(props);\n p = p.then(function(json) {\n return JWK.helpers.thumbprint(cfg, json);\n });\n p = p.then(function(hash) {\n var prints = {};\n prints[JWK.helpers.INTERNALS.THUMBPRINT_HASH] = hash;\n props[JWK.helpers.INTERNALS.THUMBPRINT_KEY] = prints;\n return cfg;\n });\n return p;\n },\n generate: function(size) {\n var keypair = depsecc.generateKeyPair(size);\n var result = {\n \"crv\": size,\n \"x\": keypair.public.x,\n \"y\": keypair.public.y,\n \"d\": keypair.private.d\n };\n return Promise.resolve(result);\n },\n import: function(input) {\n if (validators.oid !== input.keyOid) {\n return null;\n }\n\n // coerce key params to OID\n var crv;\n if (input.keyParams && forge.asn1.Type.OID === input.keyParams.type) {\n crv = forge.asn1.derToOid(input.keyParams.value);\n crv = oidToCurveName(crv);\n } else if (input.crv) {\n crv = forge.asn1.derToOid(input.crv);\n crv = oidToCurveName(crv);\n }\n if (!crv) {\n return null;\n }\n\n if (!input.parsed) {\n var capture = {},\n errors = [];\n if (\"private\" === input.type) {\n // coerce capture.value to DER *iff* private\n if (\"string\" === typeof input.keyValue) {\n input.keyValue = forge.asn1.fromDer(input.keyValue);\n } else if (Array.isArray(input.keyValue)) {\n input.keyValue = input.keyValue[0];\n }\n\n if (!forge.asn1.validate(input.keyValue,\n validators.embeddedPrivateKey,\n capture,\n errors)) {\n return null;\n }\n } else {\n capture.point = input.keyValue;\n }\n input = capture;\n }\n\n // convert factors to Buffers\n var output = {\n kty: \"EC\",\n crv: crv\n };\n if (input.d) {\n output.d = Buffer.from(input.d, \"binary\");\n }\n if (input.point) {\n var pt = Buffer.from(input.point, \"binary\");\n // only support uncompressed\n if (4 !== pt.readUInt16BE(0)) {\n return null;\n }\n pt = pt.slice(2);\n var len = pt.length / 2;\n output.x = pt.slice(0, len);\n output.y = pt.slice(len);\n }\n return output;\n }\n};\n// public API\nmodule.exports = Object.freeze({\n config: JWKEcCfg,\n factory: JWKEcFactory\n});\n\n// registration\n(function(REGISTRY) {\n REGISTRY.register(JWKEcFactory);\n})(require(\"./keystore\").registry);\n","/*!\n * jwk/helpers.js - JWK Internal Helper Functions and Constants\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar clone = require(\"lodash/clone\"),\n util = require(\"../util\"),\n forge = require(\"../deps/forge\");\n\nvar ALGORITHMS = require(\"../algorithms\");\n\n// ### ASN.1 Validators\n// Adapted from digitalbazaar/node-forge/js/asn1.js\n// PrivateKeyInfo\nvar privateKeyValidator = {\n name: \"PrivateKeyInfo\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n // Version (INTEGER)\n name: \"PrivateKeyInfo.version\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"keyVersion\"\n },\n {\n name: \"PrivateKeyInfo.privateKeyAlgorithm\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n name: \"AlgorithmIdentifier.algorithm\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OID,\n constructed: false,\n capture: \"keyOid\"\n },\n {\n name: \"AlgorithmIdentifier.parameters\",\n captureAsn1: \"keyParams\"\n }\n ]\n },\n {\n name: \"PrivateKeyInfo\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OCTETSTRING,\n constructed: false,\n capture: \"keyValue\"\n }\n ]\n};\n// Adapted from digitalbazaar/node-forge/x509.js\nvar publicKeyValidator = {\n name: \"SubjectPublicKeyInfo\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n name: \"SubjectPublicKeyInfo.AlgorithmIdentifier\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n name: \"AlgorithmIdentifier.algorithm\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OID,\n constructed: false,\n capture: \"keyOid\"\n },\n {\n name: \"AlgorithmIdentifier.parameters\",\n captureAsn1: \"keyParams\"\n }\n ]\n },\n {\n name: \"SubjectPublicKeyInfo.subjectPublicKey\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.BITSTRING,\n constructed: false,\n capture: \"keyValue\"\n }\n ]\n};\n// Adapted from digitalbazaar/node-forge/x509.js\nvar X509CertificateValidator = {\n name: \"Certificate\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n name: \"Certificate.TBSCertificate\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: \"certificate\",\n value: [\n {\n name: \"Certificate.TBSCertificate.version\",\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n value: [\n {\n name: \"Certificate.TBSCertificate.version.integer\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"certVersion\"\n }\n ]\n },\n {\n name: \"Certificate.TBSCertificate.serialNumber\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"certSerialNumber\"\n },\n {\n name: \"Certificate.TBSCertificate.signature\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n name: \"Certificate.TBSCertificate.signature.algorithm\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OID,\n constructed: false,\n capture: \"certSignatureOid\"\n }, {\n name: \"Certificate.TBSCertificate.signature.parameters\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: \"certSignatureParams\"\n }\n ]\n },\n {\n name: \"Certificate.TBSCertificate.issuer\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: \"certIssuer\"\n },\n {\n name: \"Certificate.TBSCertificate.validity\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n // Note: UTC and generalized times may both appear so the capture\n // names are based on their detected order, the names used below\n // are only for the common case, which validity time really means\n // \"notBefore\" and which means \"notAfter\" will be determined by order\n value: [\n {\n // notBefore (Time) (UTC time case)\n name: \"Certificate.TBSCertificate.validity.notBefore (utc)\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: \"certValidity1UTCTime\"\n },\n {\n // notBefore (Time) (generalized time case)\n name: \"Certificate.TBSCertificate.validity.notBefore (generalized)\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: \"certValidity2GeneralizedTime\"\n },\n {\n // notAfter (Time) (only UTC time is supported)\n name: \"Certificate.TBSCertificate.validity.notAfter (utc)\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: \"certValidity3UTCTime\"\n },\n {\n // notAfter (Time) (only UTC time is supported)\n name: \"Certificate.TBSCertificate.validity.notAfter (generalized)\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: \"certValidity4GeneralizedTime\"\n }\n ]\n }, {\n // Name (subject) (RDNSequence)\n name: \"Certificate.TBSCertificate.subject\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: \"certSubject\"\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n // issuerUniqueID (optional)\n name: \"Certificate.TBSCertificate.issuerUniqueID\",\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n value: [\n {\n name: \"Certificate.TBSCertificate.issuerUniqueID.id\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.BITSTRING,\n constructed: false,\n capture: \"certIssuerUniqueId\"\n }\n ]\n },\n {\n // subjectUniqueID (optional)\n name: \"Certificate.TBSCertificate.subjectUniqueID\",\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n constructed: true,\n optional: true,\n value: [\n {\n name: \"Certificate.TBSCertificate.subjectUniqueID.id\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.BITSTRING,\n constructed: false,\n capture: \"certSubjectUniqueId\"\n }\n ]\n },\n {\n // Extensions (optional)\n name: \"Certificate.TBSCertificate.extensions\",\n tagClass: forge.asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n constructed: true,\n captureAsn1: \"certExtensions\",\n optional: true\n }\n ]\n },\n {\n // AlgorithmIdentifier (signature algorithm)\n name: \"Certificate.signatureAlgorithm\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n // algorithm\n name: \"Certificate.signatureAlgorithm.algorithm\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.OID,\n constructed: false,\n capture: \"certSignatureOid\"\n },\n {\n name: \"Certificate.TBSCertificate.signature.parameters\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: \"certSignatureParams\"\n }\n ]\n },\n {\n // SignatureValue\n name: \"Certificate.signatureValue\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.BITSTRING,\n constructed: false,\n capture: \"certSignature\"\n }\n ]\n};\n\nvar INTERNALS = {\n THUMBPRINT_KEY: \"internal\\u0000thumbprint\",\n THUMBPRINT_HASH: \"SHA-256\"\n};\n\nmodule.exports = {\n validators: {\n privateKey: privateKeyValidator,\n publicKey: publicKeyValidator,\n certificate: X509CertificateValidator\n },\n\n thumbprint: function(cfg, json, hash) {\n if (\"function\" !== typeof cfg.thumbprint) {\n return Promise.reject(new Error(\"thumbprint not supported\"));\n }\n\n hash = (hash || INTERNALS.THUMBPRINT_HASH).toUpperCase();\n var fields = cfg.thumbprint(json);\n var input = Object.keys(fields).\n sort().\n map(function(k) {\n var v = fields[k];\n if (Buffer.isBuffer(v)) {\n v = util.base64url.encode(v);\n }\n return JSON.stringify(k) + \":\" + JSON.stringify(v);\n });\n input = \"{\" + input.join(\",\") + \"}\";\n try {\n return ALGORITHMS.digest(hash, Buffer.from(input, \"utf8\"));\n } catch (err) {\n return Promise.reject(err);\n }\n },\n unpackProps: function(props, allowed) {\n var output;\n\n // apply all of the existing values\n allowed.forEach(function(cfg) {\n if (!(cfg.name in props)) {\n return;\n }\n output = output || {};\n var value = props[cfg.name];\n switch (cfg.type) {\n case \"binary\":\n if (Buffer.isBuffer(value)) {\n props[cfg.name] = util.base64url.encode(value);\n } else {\n value = util.base64url.decode(value);\n }\n break;\n case \"string\":\n case \"number\":\n case \"boolean\":\n break;\n case \"array\":\n value = [].concat(value);\n break;\n case \"object\":\n value = clone(value);\n break;\n default:\n // TODO: deep clone?\n break;\n }\n output[cfg.name] = value;\n });\n\n // remove any from json that didn't apply\n var check = output || {};\n Object.keys(props).\n forEach(function(n) {\n if (n in check) { return; }\n delete props[n];\n });\n\n return output;\n },\n COMMON_PROPS: [\n {name: \"kty\", type: \"string\"},\n {name: \"kid\", type: \"string\"},\n {name: \"use\", type: \"string\"},\n {name: \"alg\", type: \"string\"},\n {name: \"x5c\", type: \"array\"},\n {name: \"x5t\", type: \"binary\"},\n {name: \"x5u\", type: \"string\"},\n {name: \"key_ops\", type: \"array\"}\n ],\n INTERNALS: INTERNALS\n};\n","/*!\n * jwk/index.js - JSON Web Key (JWK) Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar JWKStore = require(\"./keystore.js\");\n\n// Public API -- Key and KeyStore methods\nObject.keys(JWKStore.KeyStore).forEach(function(name) {\n exports[name] = JWKStore.KeyStore[name];\n});\n\n// Public API -- constants\nvar CONSTANTS = require(\"./constants.js\");\nObject.keys(CONSTANTS).forEach(function(name) {\n exports[name] = CONSTANTS[name];\n});\n\n// Registered Key Types\nrequire(\"./octkey.js\");\nrequire(\"./rsakey.js\");\nrequire(\"./eckey.js\");\n","/*!\n * jwk/keystore.js - JWK KeyStore Implementation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar clone = require(\"lodash/clone\"),\n merge = require(\"../util/merge\"),\n forge = require(\"../deps/forge\"),\n util = require(\"../util\");\n\nvar JWK = {\n BaseKey: require(\"./basekey.js\"),\n helpers: require(\"./helpers.js\")\n};\n\n/**\n * @class JWK.KeyStoreRegistry\n * @classdesc\n * A registry of JWK.Key types that can be used.\n *\n * @description\n * **NOTE:** This constructor cannot be called directly. Instead use the\n * global {JWK.registry}\n */\nvar JWKRegistry = function() {\n var types = {};\n\n Object.defineProperty(this, \"register\", {\n value: function(factory) {\n if (!factory || \"string\" !== typeof factory.kty || !factory.kty) {\n throw new Error(\"invalid Key factory\");\n }\n\n var kty = factory.kty;\n types[kty] = factory;\n return this;\n }\n });\n Object.defineProperty(this, \"unregister\", {\n value: function(factory) {\n if (!factory || \"string\" !== typeof factory.kty || !factory.kty) {\n throw new Error(\"invalid Key factory\");\n }\n\n var kty = factory.kty;\n if (factory === types[kty]) {\n delete types[kty];\n }\n return this;\n }\n });\n\n Object.defineProperty(this, \"get\", {\n value: function(kty) {\n return types[kty || \"\"] || undefined;\n }\n });\n Object.defineProperty(this, \"all\", {\n value: function() {\n return Object.keys(types).map(function(t) { return types[t]; });\n }\n });\n};\n\n// Globals\nvar GLOBAL_REGISTRY = new JWKRegistry();\n\n// importer\nfunction processCert(input) {\n // convert certIssuer to readable attributes\n [\"certIssuer\", \"certSubject\"].forEach(function(field) {\n /* eslint new-cap: [0] */\n var attrs = forge.pki.RDNAttributesAsArray(input[field]);\n var result = input[field] = {};\n attrs.forEach(function(a) {\n result[a.name || a.type] = a.value;\n });\n });\n\n return input;\n}\n\nfunction fromPEM(input) {\n var result = {};\n var pems = forge.pem.decode(input);\n var found = pems.some(function(p) {\n switch (p.type) {\n case \"CERTIFICATE\":\n result.form = \"pkix\";\n break;\n case \"PUBLIC KEY\":\n result.form = \"spki\";\n break;\n case \"PRIVATE KEY\":\n result.form = \"pkcs8\";\n break;\n case \"EC PRIVATE KEY\":\n /* eslint no-fallthrough: [0] */\n case \"RSA PRIVATE KEY\":\n result.form = \"private\";\n break;\n default:\n return false;\n }\n\n result.body = p.body;\n return true;\n });\n if (!found) {\n throw new Error(\"supported PEM type not found\");\n }\n return result;\n}\nfunction importFrom(registry, input) {\n // form can be one of:\n // 'private' | 'pkcs8' | 'public' | 'spki' | 'pkix' | 'x509'\n var capture = {},\n errors = [],\n result;\n\n // conver from DER to ASN1\n var form = input.form,\n der = input.body,\n thumbprint = null;\n input = forge.asn1.fromDer(der);\n switch(form) {\n case \"private\":\n registry.all().some(function(factory) {\n if (result) {\n return false;\n }\n if (!factory.validators) {\n return false;\n }\n\n var oid = factory.validators.oid,\n validator = factory.validators.privateKey;\n if (!validator) {\n return false;\n }\n capture = {};\n errors = [];\n result = forge.asn1.validate(input, validator, capture, errors);\n if (result) {\n capture.keyOid = forge.asn1.oidToDer(oid);\n capture.parsed = true;\n }\n return result;\n });\n capture.type = \"private\";\n break;\n case \"pkcs8\":\n result = forge.asn1.validate(input, JWK.helpers.validators.privateKey, capture, errors);\n capture.type = \"private\";\n break;\n case \"public\":\n // eslint no-fallthrough: [0] */\n case \"spki\":\n result = forge.asn1.validate(input, JWK.helpers.validators.publicKey, capture, errors);\n capture.type = \"public\";\n break;\n case \"pkix\":\n /* eslint no-fallthrough: [0] */\n case \"x509\":\n result = forge.asn1.validate(input, JWK.helpers.validators.certificate, capture, errors);\n if (result) {\n capture = processCert(capture);\n var md = forge.md.sha1.create();\n md.update(der);\n thumbprint = util.base64url.encode(Buffer.from(md.digest().toHex(), \"hex\"));\n }\n capture.type = \"public\";\n break;\n }\n if (!result) {\n return null;\n }\n\n // convert oids\n if (capture.keyOid) {\n capture.keyOid = forge.asn1.derToOid(capture.keyOid);\n }\n\n // find and invoke the importer\n result = null;\n GLOBAL_REGISTRY.all().forEach(function(factory) {\n if (result) {\n return;\n }\n if (!factory) {\n return;\n }\n if (\"function\" !== typeof factory.import) {\n return;\n }\n result = factory.import(capture);\n });\n if (result && capture.certSubject && capture.certSubject.commonName) {\n result.kid = capture.certSubject.commonName;\n }\n if (result && thumbprint) {\n result.x5t = thumbprint;\n }\n return result;\n}\n\n/**\n * @class JWK.KeyStore\n * @classdesc\n * Represents a collection of Keys.\n *\n * @description\n * **NOTE:** This constructor cannot be called directly. Instead call {@link\n * JWK.createKeyStore}.\n */\nvar JWKStore = function(registry, parent) {\n var keysets = {};\n\n /**\n * @method JWK.KeyStore#generate\n * @description\n * Generates a new random Key into this KeyStore.\n *\n * The type of {size} depends on the value of {kty}:\n *\n * + **`EC`**: String naming the curve to use, which can be one of:\n * `\"P-256\"`, `\"P-384\"`, or `\"P-521\"` (default is **`\"P-256\"`**).\n * + **`RSA`**: Number describing the size of the key, in bits (default is\n * **`2048`**).\n * + **`oct`**: Number describing the size of the key, in bits (default is\n * **`256`**).\n *\n * Any properties in {props} are applied before the key is generated,\n * and are expected to be data types acceptable in JSON. This allows the\n * generated key to have a specific key identifier, or to specify its\n * acceptable usage.\n *\n * The returned Promise, when fulfilled, returns the generated Key.\n *\n * @param {String} kty The type of generated key\n * @param {String|Number} [size] The size of the generated key\n * @param {Object} [props] Additional properties to apply to the generated\n * key.\n * @returns {Promise} The promise for the generated Key\n * @throws {Error} If {kty} is not supported\n */\n Object.defineProperty(this, \"generate\", {\n value: function(kty, size, props) {\n var keytype = registry.get(kty);\n if (!keytype) {\n return Promise.reject(new Error(\"unsupported key type\"));\n }\n\n props = clone(props || {});\n props.kty = kty;\n\n var self = this,\n promise = keytype.generate(size);\n return promise.then(function(jwk) {\n jwk = merge(props, jwk, {\n kty: kty\n });\n return self.add(jwk);\n });\n }\n });\n /**\n * @method JWK.KeyStore#add\n * @description\n * Adds a Key to this KeyStore. If {jwk} is a string, it is first\n * parsed into a plain JSON object. If {jwk} is already an instance\n * of JWK.Key, its (public) JSON representation is first obtained\n * then applied to a new JWK.Key object within this KeyStore.\n *\n * @param {String|Object} jwk The JSON Web Key (JWK)\n * @param {String} [form] The format of a String key to expect\n * @param {Object} [extras] extra jwk fields inserted when importing from a non json string (eg \"pem\")\n * @returns {Promise} The promise for the added key\n */\n Object.defineProperty(this, \"add\", {\n value: function(jwk, form, extras) {\n extras = extras || {};\n\n var factors;\n if (Buffer.isBuffer(jwk) || typeof jwk === \"string\") {\n // form can be 'json', 'pkcs8', 'spki', 'pkix', 'x509', 'pem'\n form = (form || \"json\").toLowerCase();\n if (\"json\" === form) {\n jwk = JSON.parse(jwk.toString(\"utf8\"));\n } else {\n try {\n if (\"pem\" === form) {\n // convert *first* PEM -> DER\n factors = fromPEM(jwk);\n } else {\n factors = {\n body: jwk.toString(\"binary\"),\n form: form\n };\n }\n jwk = importFrom(registry, factors);\n if (!jwk) {\n throw new Error(\"no importer for key\");\n }\n Object.keys(extras).forEach(function(field){\n jwk[field] = extras[field];\n });\n } catch (err) {\n return Promise.reject(err);\n }\n }\n } else if (JWKStore.isKey(jwk)) {\n // assume a complete duplicate is desired\n jwk = jwk.toJSON(true);\n } else {\n jwk = clone(jwk);\n }\n\n var keytype = registry.get(jwk.kty);\n if (!keytype) {\n return Promise.reject(new Error(\"unsupported key type\"));\n }\n\n var self = this,\n promise = keytype.prepare(jwk);\n return promise.then(function(cfg) {\n return new JWK.BaseKey(jwk.kty, self, jwk, cfg);\n }).then(function(jwk) {\n var kid = jwk.kid || \"\";\n var keys = keysets[kid] = keysets[kid] || [];\n keys.push(jwk);\n\n return jwk;\n });\n }\n });\n /**\n * @method JWK.KeyStore#remove\n * @description\n * Removes a Key from this KeyStore.\n *\n * **NOTE:** The removed Key's {keystore} property is not changed.\n *\n * @param {JWK.Key} jwk The key to remove.\n */\n Object.defineProperty(this, \"remove\", {\n value: function(jwk) {\n if (!jwk) {\n return;\n }\n\n var keys = keysets[jwk.kid];\n if (!keys) {\n return;\n }\n\n var pos = keys.indexOf(jwk);\n if (pos === -1) {\n return;\n }\n\n keys.splice(pos, 1);\n if (!keys.length) {\n delete keysets[jwk.kid];\n }\n }\n });\n\n /**\n * @method JWK.KeyStore#all\n * @description\n * Retrieves all of the contained Keys that optinally match all of the\n * given properties.\n *\n * If {props} are specified, this method only returns Keys which exactly\n * match the given properties. The properties can be any of the\n * following:\n *\n * + **alg**: The algorithm for the Key.\n * + **use**: The usage for the Key.\n * + **kid**: The identifier for the Key.\n *\n * If no properties are given, this method returns all of the Keys for this\n * KeyStore.\n *\n * @param {Object} [props] The properties to match against\n * @param {Boolean} [local = false] `true` if only the Keys\n * directly contained by this KeyStore should be returned, or\n * `false` if it should return all Keys of this KeyStore and\n * its ancestors.\n * @returns {JWK.Key[]} The list of matching Keys, or an empty array if no\n * matches are found.\n */\n Object.defineProperty(this, \"all\", {\n value: function(props, local) {\n props = props || {};\n\n // workaround for issues/109\n if (props.kid !== undefined && props.kid !== null && typeof props.kid !== \"string\") {\n props.kid = String(props.kid);\n }\n\n var candidates = [];\n var matches = function(key) {\n // match on 'kty'\n if (props.kty &&\n key.kty &&\n props.kty !== key.kty) {\n return false;\n }\n // match on 'use'\n if (props.use &&\n key.use &&\n props.use !== key.use) {\n return false;\n }\n // match on 'alg'\n if (props.alg) {\n if (props.alg !== \"dir\" &&\n key.alg &&\n props.alg !== key.alg) {\n return false;\n }\n return key.supports(props.alg);\n }\n //TODO: match on 'key_ops'\n\n return true;\n };\n Object.keys(keysets).forEach(function(id) {\n if (props.kid && props.kid !== id) {\n return;\n }\n\n var keys = keysets[id].filter(matches);\n if (keys.length) {\n candidates = candidates.concat(keys);\n }\n });\n\n if (!local && parent) {\n candidates = candidates.concat(parent.all(props));\n }\n\n return candidates;\n }\n });\n /**\n * @method JWK.KeyStore#get\n * @description\n * Retrieves the contained Key matching the given {kid}, and optionally\n * all of the given properties. This method equivalent to calling\n * {@link JWK.Store#all}, then returning the first Key whose\n * \"kid\" is {kid}. If {kid} is undefined, then the first Key that\n * is returned from `all()` is returned.\n *\n * @param {String} [kid] The key identifier to match against.\n * @param {Object} [props] The properties to match against.\n * @param {Boolean} [local = false] `true` if only the Keys\n * directly contained by this KeyStore should be returned, or\n * `false` if it should return all Keys of this KeyStore and\n * its ancestors.\n * @returns {JWK.Key} The Key matching {kid} and {props}, or `null`\n * if no match is found.\n */\n Object.defineProperty(this, \"get\", {\n value: function(kid, props, local) {\n // reconcile arguments\n if (typeof kid === \"boolean\") {\n local = kid;\n props = kid = null;\n } else if (typeof kid === \"object\") {\n local = props;\n props = kid;\n kid = null;\n }\n\n // fixup props\n props = props || {};\n if (kid) {\n props.kid = kid;\n }\n\n // workaround for issues/109\n if (props.kid !== undefined && props.kid !== null && typeof props.kid !== \"string\") {\n props.kid = String(props.kid);\n }\n\n var candidates = this.all(props, true);\n if (!candidates.length && parent && !local) {\n candidates = parent.get(props, local);\n }\n return candidates[0] || null;\n }\n });\n\n /**\n * @method JWK.KeyStore#temp\n * @description\n * Creates a temporary KeyStore based on this KeyStore.\n *\n * @returns {JWK.KeyStore} The temporary KeyStore.\n */\n Object.defineProperty(this, \"temp\", {\n value: function() {\n return new JWKStore(registry, this);\n }\n });\n\n /**\n * @method JWK.KeyStore#toJSON\n * @description\n * Generates a JSON representation of this KeyStore, which conforms\n * to a JWK Set from {I-D.ietf-jose-json-web-key}.\n *\n * @param {Boolean} [isPrivate = false] `true` if the private fields\n * of stored keys are to be included.\n * @returns {Object} The JSON representation of this KeyStore.\n */\n Object.defineProperty(this, \"toJSON\", {\n value: function(isPrivate) {\n var keys = [];\n\n Object.keys(keysets).forEach(function(kid) {\n var items = keysets[kid].map(function(k) {\n return k.toJSON(isPrivate);\n });\n keys = keys.concat(items);\n });\n\n return {\n keys: keys\n };\n }\n });\n};\n\n/**\n * Determines if the given object is an instance of JWK.KeyStore.\n *\n * @param {Object} obj The object to test\n * @returns {Boolean} `true` if {obj} is an instance of JWK.KeyStore,\n * and `false` otherwise.\n */\nJWKStore.isKeyStore = function(obj) {\n if (!obj) {\n return false;\n }\n\n if (\"object\" !== typeof obj) {\n return false;\n }\n\n if (\"function\" !== typeof obj.get ||\n \"function\" !== typeof obj.all ||\n \"function\" !== typeof obj.generate ||\n \"function\" !== typeof obj.add ||\n \"function\" !== typeof obj.remove) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Creates a new empty KeyStore.\n *\n * @returns {JWK.KeyStore} The empty KeyStore.\n */\nJWKStore.createKeyStore = function() {\n return new JWKStore(GLOBAL_REGISTRY);\n};\n\n/**\n * Coerces the given object into a KeyStore. This method uses the following\n * algorithm to coerce {ks}:\n *\n * 1. if {ks} is an instance of JWK.KeyStore, it is returned directly\n * 2. if {ks} is a string, it is parsed into a JSON value\n * 3. if {ks} is an array, it creates a new JWK.KeyStore and calls {@link\n * JWK.KeyStore#add} for each element in the {ks} array.\n * 4. if {ks} is a JSON object, it creates a new JWK.KeyStore and calls {@link\n * JWK.KeyStore#add} for each element in the \"keys\" property.\n *\n * @param {Object|String} ks The value to coerce into a\n * KeyStore\n * @returns {Promise(JWK.KeyStore)} A promise for the coerced KeyStore.\n */\nJWKStore.asKeyStore = function(ks) {\n if (JWKStore.isKeyStore(ks)) {\n return Promise.resolve(ks);\n }\n\n var store = JWKStore.createKeyStore(),\n keys;\n\n if (typeof ks === \"string\") {\n ks = JSON.parse(ks);\n }\n\n if (Array.isArray(ks)) {\n keys = ks;\n } else if (\"keys\" in ks) {\n keys = ks.keys;\n } else {\n return Promise.reject(new Error(\"invalid keystore\"));\n }\n\n keys = keys.map(function(k) {\n return store.add(k);\n });\n\n var promise = Promise.all(keys);\n promise = promise.then(function() {\n return store;\n });\n\n return promise;\n};\n\n\n/**\n * Determines if the given object is a JWK.Key instance.\n *\n * @param {Object} obj The object to test\n * @returns `true` if {obj} is a JWK.Key\n */\nJWKStore.isKey = function(obj) {\n if (!obj) {\n return false;\n }\n\n if (\"object\" !== typeof obj) {\n return false;\n }\n\n if (!JWKStore.isKeyStore(obj.keystore)) {\n return false;\n }\n\n if (\"string\" !== typeof obj.kty ||\n \"number\" !== typeof obj.length ||\n \"function\" !== typeof obj.algorithms ||\n \"function\" !== typeof obj.supports ||\n \"function\" !== typeof obj.encrypt ||\n \"function\" !== typeof obj.decrypt ||\n \"function\" !== typeof obj.wrap ||\n \"function\" !== typeof obj.unwrap ||\n \"function\" !== typeof obj.sign ||\n \"function\" !== typeof obj.verify) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Creates a new key with the given properties. This method is a convenience\n * to calling `JWK.createKeyStore()` then `generate()` on the returned keystore.\n *\n * @param {String} kty The type of generated key\n * @param {String|Number} [size] The size of the generated key\n * @param {Object} [props] Additional properties to apply to the generated\n * key.\n * @returns {Promise} The promise for the generated Key\n * @throws {Error} If {kty} is not supported\n * @see JWKStore#generate\n */\nJWKStore.createKey = function(kty, size, props) {\n var ks = JWKStore.createKeyStore();\n return ks.generate(kty, size, props);\n}\n\n/**\n * Coerces the given object into a Key. If {key} is an instance of JWK.Key,\n * it is returned directly. Otherwise, this method first creates a new\n * JWK.KeyStore and calls {@link JWK.KeyStore#add} on this new KeyStore.\n *\n * @param {Object|String} key The value to coerce into a Key\n * @param {String} [form] The format of a String Key to expect\n * @param {Object} [extras] extra jwk fields inserted when importing from a non json string (eg \"pem\")\n * @returns {Promise(JWK.Key)} A promise for the coerced Key.\n */\nJWKStore.asKey = function(key, form, extras) {\n if (JWKStore.isKey(key)) {\n return Promise.resolve(key);\n }\n\n var ks = JWKStore.createKeyStore();\n key = ks.add(key, form, extras);\n\n return key;\n};\n\nmodule.exports = {\n KeyRegistry: JWKRegistry,\n KeyStore: JWKStore,\n registry: GLOBAL_REGISTRY\n};\n","/*!\n * jwk/octkey.js - Symmetric Octet Key Representation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar util = require(\"../util\");\n\nvar JWK = {\n BaseKey: require(\"./basekey.js\"),\n helpers: require(\"./helpers.js\")\n};\n\nvar SIG_ALGS = [\n \"HS256\",\n \"HS384\",\n \"HS512\"\n];\nvar ENC_ALGS = [\n \"A128GCM\",\n \"A192GCM\",\n \"A256GCM\",\n \"A128CBC-HS256\",\n \"A192CBC-HS384\",\n \"A256CBC-HS512\",\n \"A128CBC+HS256\",\n \"A192CBC+HS384\",\n \"A256CBC+HS512\"\n];\nvar WRAP_ALGS = [\n \"A128KW\",\n \"A192KW\",\n \"A256KW\",\n \"A128GCMKW\",\n \"A192GCMKW\",\n \"A256GCMKW\",\n \"PBES2-HS256+A128KW\",\n \"PBES2-HS384+A192KW\",\n \"PBES2-HS512+A256KW\",\n \"dir\"\n];\n\nfunction adjustDecryptProps(alg, props) {\n if (\"iv\" in props) {\n props.iv = Buffer.isBuffer(props.iv) ?\n props.iv :\n util.base64url.decode(props.iv || \"\");\n }\n if (\"adata\" in props) {\n props.adata = Buffer.isBuffer(props.adata) ?\n props.adata :\n Buffer.from(props.adata || \"\", \"utf8\");\n }\n if (\"mac\" in props) {\n props.mac = Buffer.isBuffer(props.mac) ?\n props.mac :\n util.base64url.decode(props.mac || \"\");\n }\n if (\"tag\" in props) {\n props.tag = Buffer.isBuffer(props.tag) ?\n props.tag :\n util.base64url.decode(props.tag || \"\");\n }\n\n return props;\n}\nfunction adjustEncryptProps(alg, props) {\n if (\"iv\" in props) {\n props.iv = Buffer.isBuffer(props.iv) ?\n props.iv :\n util.base64url.decode(props.iv || \"\");\n }\n if (\"adata\" in props) {\n props.adata = Buffer.isBuffer(props.adata) ?\n props.adata :\n Buffer.from(props.adata || \"\", \"utf8\");\n }\n\n return props;\n}\n\nvar JWKOctetCfg = {\n publicKey: function(props) {\n var fields = JWK.helpers.COMMON_PROPS.concat([\n ]);\n\n var pk;\n pk = JWK.helpers.unpackProps(props, fields);\n\n return pk;\n },\n privateKey: function(props) {\n var fields = JWK.helpers.COMMON_PROPS.concat([\n {name: \"k\", type: \"binary\"}\n ]);\n\n var pk;\n pk = JWK.helpers.unpackProps(props, fields);\n if (pk && pk.k) {\n pk.length = pk.k.length * 8;\n } else {\n pk = undefined;\n }\n\n return pk;\n },\n\n thumbprint: function(json) {\n if (json.private) {\n json = json.private;\n }\n var fields;\n fields = {\n k: json.k || \"\",\n kty: \"oct\"\n };\n return fields;\n },\n algorithms: function(keys, mode) {\n var len = keys.private && (keys.private.k.length * 8);\n var mins = [256, 384, 512];\n\n if (!len) {\n return [];\n }\n switch (mode) {\n case \"encrypt\":\n case \"decrypt\":\n return ENC_ALGS.filter(function(a) {\n return (a === (\"A\" + (len / 2) + \"CBC-HS\" + len)) ||\n (a === (\"A\" + (len / 2) + \"CBC+HS\" + len)) ||\n (a === (\"A\" + len + \"GCM\"));\n });\n case \"sign\":\n case \"verify\":\n // TODO: allow for HS{less-than-keysize}\n return SIG_ALGS.filter(function(a) {\n var result = false;\n mins.forEach(function(m) {\n if (m > len) { return; }\n result = result | (a === (\"HS\" + m));\n });\n return result;\n });\n case \"wrap\":\n case \"unwrap\":\n return WRAP_ALGS.filter(function(a) {\n return (a === (\"A\" + len + \"KW\")) ||\n (a === (\"A\" + len + \"GCMKW\")) ||\n (a.indexOf(\"PBES2-\") === 0) ||\n (a === \"dir\");\n });\n }\n\n return [];\n },\n encryptKey: function(alg, keys) {\n return keys.private && keys.private.k;\n },\n encryptProps: adjustEncryptProps,\n\n decryptKey: function(alg, keys) {\n return keys.private && keys.private.k;\n },\n decryptProps: adjustDecryptProps,\n\n wrapKey: function(alg, keys) {\n return keys.private && keys.private.k;\n },\n wrapProps: adjustEncryptProps,\n\n unwrapKey: function(alg, keys) {\n return keys.private && keys.private.k;\n },\n unwrapProps: adjustDecryptProps,\n\n signKey: function(alg, keys) {\n return keys.private && keys.private.k;\n },\n verifyKey: function(alg, keys) {\n return keys.private && keys.private.k;\n }\n};\n\n// Factory\nvar JWKOctetFactory = {\n kty: \"oct\",\n prepare: function(props) {\n // TODO: validate key properties\n var cfg = JWKOctetCfg;\n var p = Promise.resolve(props);\n p = p.then(function(json) {\n return JWK.helpers.thumbprint(cfg, json);\n });\n p = p.then(function(hash) {\n var prints = {};\n prints[JWK.helpers.INTERNALS.THUMBPRINT_HASH] = hash;\n props[JWK.helpers.INTERNALS.THUMBPRINT_KEY] = prints;\n return cfg;\n });\n return p;\n },\n generate: function(size) {\n // TODO: validate key sizes\n var key = util.randomBytes(size / 8);\n\n return Promise.resolve({\n k: key\n });\n }\n};\n\n// public API\nmodule.exports = Object.freeze({\n config: JWKOctetCfg,\n factory: JWKOctetFactory\n});\n\n// registration\n(function(REGISTRY) {\n REGISTRY.register(JWKOctetFactory);\n})(require(\"./keystore\").registry);\n","/*!\n * jwk/rsa.js - RSA Key Representation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\"),\n rsau = require(\"../algorithms/rsa-util\"),\n nodeCrypto = require(\"../algorithms/helpers\").nodeCrypto;\n\nvar JWK = {\n BaseKey: require(\"./basekey.js\"),\n helpers: require(\"./helpers.js\")\n};\n\nvar SIG_ALGS = [\n \"RS256\",\n \"RS384\",\n \"RS512\",\n \"PS256\",\n \"PS384\",\n \"PS512\"\n];\nvar WRAP_ALGS = [\n \"RSA-OAEP\",\n \"RSA-OAEP-256\",\n \"RSA1_5\"\n];\n\nvar JWKRsaCfg = {\n publicKey: function(props) {\n var fields = JWK.helpers.COMMON_PROPS.concat([\n {name: \"n\", type: \"binary\"},\n {name: \"e\", type: \"binary\"}\n ]);\n var pk;\n pk = JWK.helpers.unpackProps(props, fields);\n if (pk && pk.n && pk.e) {\n pk.length = pk.n.length * 8;\n } else {\n delete pk.e;\n delete pk.n;\n }\n\n return pk;\n },\n privateKey: function(props) {\n var fields = JWK.helpers.COMMON_PROPS.concat([\n {name: \"n\", type: \"binary\"},\n {name: \"e\", type: \"binary\"},\n {name: \"d\", type: \"binary\"},\n {name: \"p\", type: \"binary\"},\n {name: \"q\", type: \"binary\"},\n {name: \"dp\", type: \"binary\"},\n {name: \"dq\", type: \"binary\"},\n {name: \"qi\", type: \"binary\"}\n ]);\n\n var pk;\n pk = JWK.helpers.unpackProps(props, fields);\n if (pk && pk.d && pk.n && pk.e && pk.p && pk.q && pk.dp && pk.dq && pk.qi) {\n pk.length = pk.d.length * 8;\n } else {\n pk = undefined;\n }\n\n return pk;\n },\n thumbprint: function(json) {\n if (json.public) {\n json = json.public;\n }\n var fields = {\n e: json.e,\n kty: \"RSA\",\n n: json.n\n };\n return fields;\n },\n algorithms: function(keys, mode) {\n switch (mode) {\n case \"encrypt\":\n case \"decrypt\":\n return [];\n case \"wrap\":\n return (keys.public && WRAP_ALGS.slice()) || [];\n case \"unwrap\":\n return (keys.private && WRAP_ALGS.slice()) || [];\n case \"sign\":\n return (keys.private && SIG_ALGS.slice()) || [];\n case \"verify\":\n return (keys.public && SIG_ALGS.slice()) || [];\n }\n\n return [];\n },\n\n wrapKey: function(alg, keys) {\n return keys.public;\n },\n unwrapKey: function(alg, keys) {\n return keys.private;\n },\n\n signKey: function(alg, keys) {\n return keys.private;\n },\n verifyKey: function(alg, keys) {\n return keys.public;\n },\n\n convertToPEM: function(key, isPrivate) {\n var k = rsau.convertToForge(key, !isPrivate);\n if (!isPrivate) {\n return forge.pki.publicKeyToPem(k);\n }\n return forge.pki.privateKeyToPem(k);\n }\n};\n\nfunction convertBNtoBuffer(bn) {\n bn = bn.toString(16);\n if (bn.length % 2) {\n bn = \"0\" + bn;\n }\n return Buffer.from(bn, \"hex\");\n}\n\n// Adapted from digitalbaazar/node-forge/js/rsa.js\nvar validators = {\n oid: \"1.2.840.113549.1.1.1\",\n privateKey: {\n name: \"RSAPrivateKey\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n // Version (INTEGER)\n name: \"RSAPrivateKey.version\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"version\"\n },\n {\n // modulus (n)\n name: \"RSAPrivateKey.modulus\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"n\"\n },\n {\n // publicExponent (e)\n name: \"RSAPrivateKey.publicExponent\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"e\"\n },\n {\n // privateExponent (d)\n name: \"RSAPrivateKey.privateExponent\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"d\"\n },\n {\n // prime1 (p)\n name: \"RSAPrivateKey.prime1\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"p\"\n },\n {\n // prime2 (q)\n name: \"RSAPrivateKey.prime2\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"q\"\n },\n {\n // exponent1 (d mod (p-1))\n name: \"RSAPrivateKey.exponent1\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"dp\"\n },\n {\n // exponent2 (d mod (q-1))\n name: \"RSAPrivateKey.exponent2\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"dq\"\n },\n {\n // coefficient ((inverse of q) mod p)\n name: \"RSAPrivateKey.coefficient\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"qi\"\n }\n ]\n },\n publicKey: {\n // RSAPublicKey\n name: \"RSAPublicKey\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.SEQUENCE,\n constructed: true,\n value: [\n {\n // modulus (n)\n name: \"RSAPublicKey.modulus\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"n\"\n },\n {\n // publicExponent (e)\n name: \"RSAPublicKey.exponent\",\n tagClass: forge.asn1.Class.UNIVERSAL,\n type: forge.asn1.Type.INTEGER,\n constructed: false,\n capture: \"e\"\n }\n ]\n }\n};\n\n// Factory\nvar JWKRsaFactory = {\n kty: \"RSA\",\n validators: validators,\n prepare: function(props) {\n // TODO: validate key properties\n var cfg = JWKRsaCfg;\n var p = Promise.resolve(props);\n p = p.then(function(json) {\n return JWK.helpers.thumbprint(cfg, json);\n });\n p = p.then(function(hash) {\n var prints = {};\n prints[JWK.helpers.INTERNALS.THUMBPRINT_HASH] = hash;\n props[JWK.helpers.INTERNALS.THUMBPRINT_KEY] = prints;\n return cfg;\n });\n return p;\n },\n generate: function(size) {\n // TODO: validate key sizes\n var promise;\n\n if (nodeCrypto) {\n promise = new Promise(function (resolve, reject) {\n forge.pki.rsa.generateKeyPair({\n bits: size,\n e: 0x010001\n }, function (err, key) {\n if (err) return reject(err);\n resolve(key.privateKey);\n });\n });\n } else {\n var key = forge.pki.rsa.generateKeyPair({\n bits: size,\n e: 0x010001\n });\n promise = Promise.resolve(key.privateKey);\n }\n\n return promise.then(function (key) {\n\n // convert to JSON-ish\n var result = {};\n [\n \"e\",\n \"n\",\n \"d\",\n \"p\",\n \"q\",\n {incoming: \"dP\", outgoing: \"dp\"},\n {incoming: \"dQ\", outgoing: \"dq\"},\n {incoming: \"qInv\", outgoing: \"qi\"}\n ].forEach(function(f) {\n var incoming,\n outgoing;\n\n if (\"string\" === typeof f) {\n incoming = outgoing = f;\n } else {\n incoming = f.incoming;\n outgoing = f.outgoing;\n }\n\n if (incoming in key) {\n result[outgoing] = convertBNtoBuffer(key[incoming]);\n }\n });\n\n return result;\n });\n },\n import: function(input) {\n if (validators.oid !== input.keyOid) {\n return null;\n }\n\n if (!input.parsed) {\n // coerce capture.keyValue to DER\n if (\"string\" === typeof input.keyValue) {\n input.keyValue = forge.asn1.fromDer(input.keyValue);\n } else if (Array.isArray(input.keyValue)) {\n input.keyValue = input.keyValue[0];\n }\n // capture key factors\n var validator = (\"private\" === input.type) ?\n validators.privateKey :\n validators.publicKey;\n var capture = {},\n errors = [];\n if (!forge.asn1.validate(input.keyValue, validator, capture, errors)) {\n return null;\n }\n input = capture;\n }\n\n // convert factors to Buffers\n var output = {\n kty: \"RSA\"\n };\n [\"n\", \"e\", \"d\", \"p\", \"q\", \"dp\", \"dq\", \"qi\"].forEach(function(f) {\n if (!(f in input)) {\n return;\n }\n var b = Buffer.from(input[f], \"binary\");\n // remove leading zero padding if any\n if (0 === b[0]) {\n b = b.slice(1);\n }\n output[f] = b;\n });\n return output;\n }\n};\n\n// public API\nmodule.exports = Object.freeze({\n config: JWKRsaCfg,\n factory: JWKRsaFactory\n});\n\n// registration\n(function(REGISTRY) {\n REGISTRY.register(JWKRsaFactory);\n})(require(\"./keystore\").registry);\n","/*!\n * jws/defaults.js - Defaults for JWSs\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\n/**\n * @description\n * The default options for {@link JWS.createSign}.\n *\n * @property {Boolean} compact Determines if the output is the Compact\n * serialization (`true`) or the JSON serialization (**`false`**,\n * the default).\n * @property {String|String[]} protect The names of the headers to integrity\n * protect. The value `\"\"` means that none of header parameters\n * are integrity protected, while `\"*\"` (the default) means that all\n * headers parameter sare integrity protected.\n */\nvar JWSDefaults = {\n compact: false,\n protect: \"*\"\n};\n\nmodule.exports = JWSDefaults;\n","/*!\n * jws/helpers.js - JWS Internal Helper Functions\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nmodule.exports = {\n slice: function(input, start) {\n return Array.prototype.slice.call(input, start || 0);\n }\n};\n","/*!\n * jws/index.js - JSON Web Signature (JWS) Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar JWS = {\n createSign: require(\"./sign\").createSign,\n createVerify: require(\"./verify\").createVerify\n};\n\nmodule.exports = JWS;\n","/*!\n * jws/sign.js - Sign to JWS\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar merge = require(\"../util/merge\"),\n util = require(\"../util\"),\n JWK = require(\"../jwk\"),\n slice = require(\"./helpers\").slice;\n\nvar clone = require(\"lodash/clone\");\nvar uniq = require(\"lodash/uniq\");\n\nvar DEFAULTS = require(\"./defaults\");\n\n/**\n * @class JWS.Signer\n * @classdesc Generator of signed content.\n *\n * @description\n * **NOTE:** this class cannot be instantiated directly. Instead call {@link\n * JWS.createSign}.\n */\nvar JWSSigner = function(cfg, signatories) {\n var finalized = false,\n format = cfg.format || \"general\",\n content = Buffer.alloc(0);\n\n /**\n * @member {Boolean} JWS.Signer#compact\n * @description\n * Indicates whether the outuput of this signature generator is using\n * the Compact serialization (`true`) or the JSON serialization\n * (`false`).\n */\n Object.defineProperty(this, \"compact\", {\n get: function() {\n return \"compact\" === format;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"format\", {\n get: function() {\n return format;\n },\n enumerable: true\n });\n\n /**\n * @method JWS.Signer#update\n * @description\n * Updates the signing content for this signature content. The content\n * is appended to the end of any other content already applied.\n *\n * If {data} is a Buffer, {encoding} is ignored. Otherwise, {data} is\n * converted to a Buffer internally to {encoding}.\n *\n * @param {Buffer|String} data The data to sign.\n * @param {String} [encoding=\"binary\"] The encoding of {data}.\n * @returns {JWS.Signer} This signature generator.\n * @throws {Error} If a signature has already been generated.\n */\n Object.defineProperty(this, \"update\", {\n value: function(data, encoding) {\n if (finalized) {\n throw new Error(\"already final\");\n }\n if (data != null) {\n data = util.asBuffer(data, encoding);\n if (content.length) {\n content = Buffer.concat([content, data],\n content.length + data.length);\n } else {\n content = data;\n }\n }\n\n return this;\n }\n });\n /**\n * @method JWS.Signer#final\n * @description\n * Finishes the signature operation.\n *\n * The returned Promise, when fulfilled, is the JSON Web Signature (JWS)\n * object, either in the Compact (if {@link JWS.Signer#format} is\n * `\"compact\"`), the flattened JSON (if {@link JWS.Signer#format} is\n * \"flattened\"), or the general JSON serialization.\n *\n * @param {Buffer|String} [data] The final content to apply.\n * @param {String} [encoding=\"binary\"] The encoding of the final content\n * (if any).\n * @returns {Promise} The promise for the signatures\n * @throws {Error} If a signature has already been generated.\n */\n Object.defineProperty(this, \"final\", {\n value: function(data, encoding) {\n if (finalized) {\n return Promise.reject(new Error(\"already final\"));\n }\n\n // last-minute data\n this.update(data, encoding);\n\n // mark as done...ish\n finalized = true;\n var promise;\n\n // map signatory promises to just signatories\n promise = Promise.all(signatories);\n promise = promise.then(function(sigs) {\n // prepare content\n content = util.base64url.encode(content);\n\n sigs = sigs.map(function(s) {\n // prepare protected\n var protect = {},\n lenProtect = 0,\n unprotect = clone(s.header),\n lenUnprotect = Object.keys(unprotect).length;\n s.protected.forEach(function(h) {\n if (!(h in unprotect)) {\n return;\n }\n protect[h] = unprotect[h];\n lenProtect++;\n delete unprotect[h];\n lenUnprotect--;\n });\n if (lenProtect > 0) {\n protect = JSON.stringify(protect);\n protect = util.base64url.encode(protect);\n } else {\n protect = \"\";\n }\n\n // signit!\n var data = Buffer.from(protect + \".\" + content, \"ascii\");\n s = s.key.sign(s.header.alg, data, s.header);\n s = s.then(function(result) {\n var sig = {};\n if (0 < lenProtect) {\n sig.protected = protect;\n }\n if (0 < lenUnprotect) {\n sig.header = unprotect;\n }\n sig.signature = util.base64url.encode(result.mac);\n return sig;\n });\n return s;\n });\n sigs = [Promise.resolve(content)].concat(sigs);\n return Promise.all(sigs);\n });\n promise = promise.then(function(results) {\n var content = results[0];\n return {\n payload: content,\n signatures: results.slice(1)\n };\n });\n switch (format) {\n case \"compact\":\n promise = promise.then(function(jws) {\n var compact = [\n jws.signatures[0].protected,\n jws.payload,\n jws.signatures[0].signature\n ];\n compact = compact.join(\".\");\n return compact;\n });\n break;\n case \"flattened\":\n promise = promise.then(function(jws) {\n var flattened = {};\n flattened.payload = jws.payload;\n\n var sig = jws.signatures[0];\n if (sig.protected) {\n flattened.protected = sig.protected;\n }\n if (sig.header) {\n flattened.header = sig.header;\n }\n flattened.signature = sig.signature;\n\n return flattened;\n });\n break;\n }\n\n return promise;\n }\n });\n};\n\n\n/**\n * @description\n * Creates a new JWS.Signer with the given options and signatories.\n *\n * @param {Object} [opts] The signing options\n * @param {Boolean} [opts.compact] Use compact serialization?\n * @param {String} [opts.format] The serialization format to use (\"compact\",\n * \"flattened\", \"general\")\n * @param {Object} [opts.fields] Additional header fields\n * @param {JWK.Key[]|Object[]} [signs] Signatories, either as an array of\n * JWK.Key instances; or an array of objects, each with the following\n * properties\n * @param {JWK.Key} signs.key Key used to sign content\n * @param {Object} [signs.header] Per-signatory header fields\n * @param {String} [signs.reference] Reference field to identify the key\n * @param {String[]|String} [signs.protect] List of fields to integrity\n * protect (\"*\" to protect all fields)\n * @returns {JWS.Signer} The signature generator.\n * @throws {Error} If Compact serialization is requested but there are\n * multiple signatories\n */\nfunction createSign(opts, signs) {\n // fixup signatories\n var options = opts,\n signStart = 1,\n signList = signs;\n\n if (arguments.length === 0) {\n throw new Error(\"at least one signatory must be provided\");\n }\n if (arguments.length === 1) {\n signList = opts;\n signStart = 0;\n options = {};\n } else if (JWK.isKey(opts) ||\n (opts && \"kty\" in opts) ||\n (opts && \"key\" in opts &&\n (JWK.isKey(opts.key) || \"kty\" in opts.key))) {\n signList = opts;\n signStart = 0;\n options = {};\n } else {\n options = clone(opts);\n }\n if (!Array.isArray(signList)) {\n signList = slice(arguments, signStart);\n }\n\n // fixup options\n options = merge(clone(DEFAULTS), options);\n\n // setup header fields\n var allFields = options.fields || {};\n // setup serialization format\n var format = options.format;\n if (!format) {\n format = options.compact ? \"compact\" : \"general\";\n }\n if ((\"compact\" === format || \"flattened\" === format) && 1 < signList.length) {\n throw new Error(\"too many signatories for compact or flattened JSON serialization\");\n }\n\n // note protected fields (globally)\n // protected fields are per signature\n var protectAll = (\"*\" === options.protect);\n if (options.compact) {\n protectAll = true;\n }\n\n signList = signList.map(function(s, idx) {\n var p;\n\n // resolve a key\n if (s && \"kty\" in s) {\n p = JWK.asKey(s);\n p = p.then(function(k) {\n return {\n key: k\n };\n });\n } else if (s) {\n p = JWK.asKey(s.key);\n p = p.then(function(k) {\n return {\n header: s.header,\n reference: s.reference,\n protect: s.protect,\n key: k\n };\n });\n } else {\n p = Promise.reject(new Error(\"missing key for signatory \" + idx));\n }\n\n // resolve the complete signatory\n p = p.then(function(signatory) {\n var key = signatory.key;\n\n // make sure there is a header\n var header = signatory.header || {};\n header = merge(merge({}, allFields), header);\n signatory.header = header;\n\n // ensure an algorithm\n if (!header.alg) {\n header.alg = key.algorithms(JWK.MODE_SIGN)[0] || \"\";\n }\n\n // determine the key reference\n var ref = signatory.reference;\n delete signatory.reference;\n if (undefined === ref) {\n // header already contains the key reference\n ref = [\"kid\", \"jku\", \"x5c\", \"x5t\", \"x5u\"].some(function(k) {\n return (k in header);\n });\n ref = !ref ? \"kid\" : null;\n } else if (\"boolean\" === typeof ref) {\n // explicit (positive | negative) request for key reference\n ref = ref ? \"kid\" : null;\n }\n var jwk;\n if (ref) {\n jwk = key.toJSON();\n if (\"jwk\" === ref) {\n if (\"oct\" === key.kty) {\n return Promise.reject(new Error(\"cannot embed key\"));\n }\n header.jwk = jwk;\n } else if (ref in jwk) {\n header[ref] = jwk[ref];\n }\n }\n\n // determine protected fields\n var protect = signatory.protect;\n if (protectAll || \"*\" === protect) {\n protect = Object.keys(header);\n } else if (\"string\" === protect) {\n protect = [protect];\n } else if (Array.isArray(protect)) {\n protect = protect.concat();\n } else if (!protect) {\n protect = [];\n } else {\n return Promise.reject(new Error(\"protect must be a list of fields\"));\n }\n protect = uniq(protect);\n signatory.protected = protect;\n\n // freeze signatory\n signatory = Object.freeze(signatory);\n return signatory;\n });\n\n return p;\n });\n\n var cfg = {\n format: format\n };\n return new JWSSigner(cfg,\n signList);\n}\n\nmodule.exports = {\n signer: JWSSigner,\n createSign: createSign\n};\n","/*!\n * jws/verify.js - Verifies from a JWS\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar clone = require(\"lodash/clone\"),\n merge = require(\"../util/merge\"),\n base64url = require(\"../util/base64url\"),\n AlgConfig = require(\"../util/algconfig\"),\n JWK = require(\"../jwk\");\n\nvar DEFAULT_OPTIONS = {\n algorithms: \"*\",\n allowEmbeddedKey: false\n};\n\n/**\n * @class JWS.Verifier\n * @classdesc Parser of signed content.\n *\n * @description\n * **NOTE:** this class cannot be instantiated directly. Instead call {@link\n * JWS.createVerify}.\n */\nvar JWSVerifier = function(ks, globalOpts) {\n var assumedKey,\n keystore;\n\n if (JWK.isKey(ks)) {\n assumedKey = ks;\n keystore = assumedKey.keystore;\n } else if (JWK.isKeyStore(ks)) {\n keystore = ks;\n } else {\n keystore = JWK.createKeyStore();\n }\n\n globalOpts = merge(DEFAULT_OPTIONS, globalOpts);\n\n Object.defineProperty(this, \"defaultKey\", {\n value: assumedKey || undefined,\n enumerable: true\n });\n Object.defineProperty(this, \"keystore\", {\n value: keystore,\n enumerable: true\n });\n\n Object.defineProperty(this, \"verify\", {\n value: function(input, opts) {\n opts = merge({}, globalOpts, opts || {});\n var extraHandlers = opts.handlers || {};\n var handlerKeys = Object.keys(extraHandlers);\n var algSpec = new AlgConfig(opts.algorithms);\n\n if (\"string\" === typeof input) {\n input = input.split(\".\");\n input = {\n payload: input[1],\n signatures: [\n {\n protected: input[0],\n signature: input[2]\n }\n ]\n };\n } else if (!input || \"object\" !== typeof input) {\n throw new Error(\"invalid input\");\n }\n\n // fixup \"flattened JSON\" to look like \"general JSON\"\n if (input.signature) {\n input.signatures = [\n {\n protected: input.protected || undefined,\n header: input.header || undefined,\n signature: input.signature\n }\n ];\n }\n\n // ensure signatories exists\n var sigList = input.signatures || [{}];\n\n // combine fields and decode signature per signatory\n sigList = sigList.map(function(s) {\n var header = clone(s.header || {});\n var protect = s.protected ?\n JSON.parse(base64url.decode(s.protected, \"utf8\")) :\n {};\n header = merge(header, protect);\n var signature = base64url.decode(s.signature);\n\n // process allowed algorithims\n if (!algSpec.match(header.alg)) {\n return Promise.reject(new Error(\"Algorithm not allowed: \" + header.alg));\n }\n\n // process \"crit\" first\n var crit = protect.crit;\n if (crit) {\n if (!Array.isArray(crit)) {\n return Promise.reject(new Error(\"Invalid 'crit' header\"));\n }\n for (var idx = 0; crit.length > idx; idx++) {\n if (-1 === handlerKeys.indexOf(crit[idx])) {\n return Promise.reject(new Error(\n \"Critical extension is not supported: \" + crit[idx]\n ));\n }\n }\n }\n protect = Object.keys(protect);\n\n return Promise.resolve({\n protected: protect,\n aad: s.protected || \"\",\n header: header,\n signature: signature\n });\n });\n\n var promise = Promise.all(sigList);\n promise = promise.then(function(sigList) {\n return new Promise(function(resolve, reject) {\n var processSig = function() {\n var sig = sigList.shift();\n if (!sig) {\n reject(new Error(\"no key found\"));\n return;\n }\n\n sig = merge({}, sig, {\n payload: input.payload\n });\n var p = Promise.resolve(sig);\n // find the key\n p = p.then(function(sig) {\n var algKey;\n // TODO: resolve jku, x5c, x5u\n if (opts.allowEmbeddedKey && sig.header.jwk) {\n algKey = JWK.asKey(sig.header.jwk);\n } else if (opts.allowEmbeddedKey && sig.header.x5c) {\n algKey = sig.header.x5c[0];\n algKey = Buffer.from(algKey, \"base64\");\n // TODO: callback to validate chain\n algKey = JWK.asKey(algKey, \"pkix\");\n } else {\n algKey = Promise.resolve(assumedKey || keystore.get({\n use: \"sig\",\n alg: sig.header.alg,\n kid: sig.header.kid\n }));\n }\n return algKey.then(function(k) {\n if (!k) {\n return Promise.reject(new Error(\"key does not match\"));\n }\n sig.key = k;\n return sig;\n });\n });\n\n // process any prepare-verify handlers\n p = p.then(function(sig) {\n var processing = [];\n handlerKeys.forEach(function(h) {\n h = extraHandlers[h];\n var p;\n if (\"function\" === typeof h) {\n p = h(sig);\n } else if (\"object\" === typeof h && \"function\" === typeof h.prepare) {\n p = h.prepare(sig);\n }\n if (p) {\n processing.push(Promise.resolve(p));\n }\n });\n return Promise.all(processing).then(function() {\n // don't actually care about individual handler results\n // assume {sig} is updated\n return sig;\n });\n });\n\n // prepare verify inputs\n p = p.then(function(sig) {\n var aad = sig.aad || \"\",\n payload = sig.payload || \"\";\n var content = Buffer.alloc(1 + aad.length + payload.length),\n pos = 0;\n content.write(aad, pos, \"ascii\");\n pos += aad.length;\n content.write(\".\", pos, \"ascii\");\n pos++;\n\n if (Buffer.isBuffer(payload)) {\n payload.copy(content, pos);\n } else {\n content.write(payload, pos, \"binary\");\n }\n sig.content = content;\n return sig;\n });\n\n p = p.then(function(sig) {\n return sig.key.verify(sig.header.alg,\n sig.content,\n sig.signature);\n });\n\n p = p.then(function(result) {\n var payload = sig.payload;\n payload = base64url.decode(payload);\n return {\n protected: sig.protected,\n header: sig.header,\n payload: payload,\n signature: result.mac,\n key: sig.key\n };\n });\n\n // process any post-verify handlers\n p = p.then(function(jws) {\n var processing = [];\n handlerKeys.forEach(function(h) {\n h = extraHandlers[h];\n var p;\n if (\"object\" === typeof h && \"function\" === typeof h.complete) {\n p = h.complete(jws);\n }\n if (p) {\n processing.push(Promise.resolve(p));\n }\n });\n return Promise.all(processing).then(function() {\n // don't actually care about individual handler results\n // assume {jws} is updated\n return jws;\n });\n });\n p.then(resolve, processSig);\n };\n processSig();\n });\n });\n return promise;\n }\n });\n};\n\n/**\n * @description\n * Creates a new JWS.Verifier with the given Key or KeyStore.\n *\n * @param {JWK.Key|JWK.KeyStore} ks The Key or KeyStore to use for verification.\n * @returns {JWS.Verifier} The new Verifier.\n */\nfunction createVerify(ks, opts) {\n var vfy = new JWSVerifier(ks, opts);\n\n return vfy;\n}\n\nmodule.exports = {\n verifier: JWSVerifier,\n createVerify: createVerify\n};\n","/*!\n * parse/compact.js - JOSE Compact Serialization Parser\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar jose = {\n JWE: require(\"../jwe\"),\n JWS: require(\"../jws\"),\n util: require(\"../util\")\n};\n\nfunction parseCompact(input) {\n var parts = input.split(\".\");\n\n var type,\n op;\n if (3 === parts.length) {\n // JWS\n type = \"JWS\";\n op = function(ks, opts) {\n return jose.JWS.createVerify(ks).\n verify(input, opts);\n };\n } else if (5 === parts.length) {\n // JWE\n type = \"JWE\";\n op = function(ks, opts) {\n return jose.JWE.createDecrypt(ks).\n decrypt(input, opts);\n };\n } else {\n throw new TypeError(\"invalid jose serialization\");\n }\n\n // parse header\n var header;\n header = jose.util.base64url.decode(parts[0], \"utf8\");\n header = JSON.parse(header);\n return {\n type: type,\n format: \"compact\",\n input: input,\n header: header,\n perform: op\n };\n}\n\nmodule.exports = parseCompact;\n","/*!\n * parse/index.js - JOSE Parser Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar compact = require(\"./compact\"),\n json = require(\"./json\");\n\nvar parse = module.exports = function(input) {\n if (Buffer.isBuffer(input)) {\n // assume buffer holds a Compact Serialization string\n return compact(input.toString(\"ascii\"));\n } else if (\"string\" === typeof input) {\n return compact(input);\n } else if (input) {\n return json(input);\n } else {\n throw new TypeError(\"invalid input\");\n }\n};\n\nparse.compact = compact;\nparse.json = json;\n","/*!\n * parse/compact.js - JOSE JSON Serialization Parser\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar merge = require(\"../util/merge\");\n\nvar jose = {\n JWE: require(\"../jwe\"),\n JWS: require(\"../jws\"),\n util: require(\"../util\")\n};\n\nfunction parseJSON(input) {\n var type,\n op,\n headers;\n\n if (\"signatures\" in input || \"signature\" in input) {\n // JWS\n type = \"JWS\";\n op = function(ks, opts) {\n return jose.JWS.createVerify(ks).\n verify(input, opts);\n };\n // headers can be (signatures[].protected, signatures[].header, signature.protected, signature.header)\n headers = input.signatures ||\n [ {\n protected: input.protected,\n header: input.header,\n signature: input.signature\n }];\n headers = headers.map(function(sig) {\n var all = {};\n if (sig.header) {\n all = merge(all, sig.header);\n }\n\n var prot;\n if (sig.protected) {\n prot = sig.protected;\n prot = jose.util.base64url.decode(prot, \"utf8\");\n prot = JSON.parse(prot);\n all = merge(all, prot);\n }\n\n return all;\n });\n } else if (\"ciphertext\" in input) {\n // JWE\n type = \"JWE\";\n op = function(ks, opts) {\n return jose.JWE.createDecrypt(ks).\n decrypt(input, opts);\n };\n // headers can be (protected, unprotected, recipients[].header)\n var root = {};\n if (input.protected) {\n root.protected = input.protected;\n root.protected = jose.util.base64url.decode(root.protected, \"utf8\");\n root.protected = JSON.parse(root.protected);\n }\n if (input.unprotected) {\n root.unprotected = input.unprotected;\n }\n\n headers = input.recipients || [{}];\n headers = headers.map(function(rcpt) {\n var all = {};\n if (rcpt.header) {\n all = merge(all, rcpt.header);\n }\n if (root.unprotected) {\n all = merge(all, root.unprotected);\n }\n if (root.protected) {\n all = merge(all, root.protected);\n }\n\n return all;\n });\n }\n\n return {\n type: type,\n format: \"json\",\n input: input,\n all: headers,\n perform: op\n };\n}\n\nmodule.exports = parseJSON;\n","/*!\n * util/algconfig.js - Functions for managing algorithm set options\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nfunction quoteRE(str) {\n return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n}\n\nfunction makeRE(prefix, wildcard, suffix) {\n var parts = [];\n\n parts.push(\"^\");\n if (prefix) {\n prefix = quoteRE(prefix);\n parts.push(prefix);\n }\n if (wildcard) {\n parts.push((prefix || suffix) ? \".*\" : \".+\");\n }\n if (suffix) {\n suffix = quoteRE(suffix);\n parts.push(suffix);\n }\n parts.push(\"$\");\n\n return parts.join(\"\");\n}\n\nvar AlgConfig = function(algspec) {\n if (!algspec) {\n algspec = [];\n } else if (\"string\" === typeof algspec) {\n algspec = algspec.split(\" \");\n }\n\n var specAllowed = [], specDisallowed = [];\n var ptnAllowed = [], ptnDisallowed = [];\n var ptn = /^(!)?([^*]*)(\\*?)([^*]*)$/, fmt;\n algspec.forEach(function (a) {\n if (!a) { return; }\n\n ptn.lastIndex = 0;\n var parts = ptn.exec(a);\n if (!parts) { return; }\n\n fmt = \"(\" + makeRE(parts[2], parts[3], parts[4]) + \")\";\n if (!parts[1]) {\n // allowed pattern\n ptnAllowed.push(fmt);\n specAllowed.push(parts[0]);\n } else {\n // disallowed pattern\n ptnDisallowed.push(fmt);\n specDisallowed.push(parts[0]);\n }\n });\n\n ptnAllowed = (ptnAllowed.length) ?\n new RegExp(ptnAllowed.join(\"|\")) :\n null;\n ptnDisallowed = (ptnDisallowed.length) ?\n new RegExp(ptnDisallowed.join(\"|\")) :\n null;\n if (!specAllowed.length) {\n specAllowed = [\"*\"];\n }\n\n Object.defineProperty(this, \"spec\", {\n value: specAllowed.join(\" \") + \" \" + specDisallowed.join(\" \"),\n enumerable: true\n });\n Object.defineProperty(this, \"match\", {\n value: function(alg) {\n var result = Boolean(alg);\n\n if (result && ptnAllowed) {\n ptnAllowed.lastIndex = 0;\n result = ptnAllowed.test(alg);\n }\n if (result && ptnDisallowed) {\n ptnDisallowed.lastIndex = 0;\n result = !ptnDisallowed.test(alg);\n }\n\n return result;\n }\n });\n}\n\nmodule.exports = AlgConfig;\n","/*!\n * util/base64url.js - Implementation of web-safe Base64 Encoder/Decoder\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar impl = require(\"base64url\");\n\n/**\n * @namespace base64url\n * @description\n * Provides methods to encode and decode data according to the\n * base64url alphabet.\n */\nvar base64url = {\n /**\n * @function\n * Encodes the input to base64url.\n *\n * If {input} is a Buffer, then {encoding} is ignored. Otherwise,\n * {encoding} can be one of \"binary\", \"base64\", \"hex\", \"utf8\".\n *\n * @param {Buffer|String} input The data to encode.\n * @param {String} [encoding = binary] The input encoding format.\n * @returns {String} the base64url encoding of {input}.\n */\n encode: function encode(buffer, encoding) {\n if (buffer instanceof ArrayBuffer) {\n buffer = new Uint8Array(buffer);\n }\n\n if (!Buffer.isBuffer(buffer)) {\n buffer = Buffer.from(buffer, encoding);\n }\n\n return impl.encode(buffer);\n },\n /**\n * @function\n * Decodes the input from base64url.\n *\n * @param {String} input The data to decode.\n * @returns {Buffer|String} the base64url decoding of {input}.\n */\n decode: impl.toBuffer\n};\n\nmodule.exports = base64url;\n","/*!\n * util/databuffer.js - Forge-compatible Buffer based on Node.js Buffers\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\"),\n base64url = require(\"./base64url.js\");\n\n/**\n *\n */\nfunction DataBuffer(b, options) {\n options = options || {};\n\n // treat (views of) (Array)Buffers special\n // NOTE: default implementation creates copies, but efficiently\n // wherever possible\n if (Buffer.isBuffer(b)) {\n this.data = b;\n } else if (forge.util.isArrayBuffer(b)) {\n b = new Uint8Array(b);\n this.data = Buffer.from(b);\n } else if (forge.util.isArrayBufferView(b)) {\n b = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);\n this.data = Buffer.from(b);\n }\n\n if (this.data) {\n this.write = this.data.length;\n b = undefined;\n }\n\n // setup growth rate\n this.growSize = options.growSize || DataBuffer.DEFAULT_GROW_SIZE;\n\n // initialize pointers and data\n this.write = this.write || 0;\n this.read = this.read || 0;\n if (b) {\n this.putBytes(b);\n } else if (!this.data) {\n this.accommodate(0);\n }\n\n // massage read/write pointers\n options.readOffset = (\"readOffset\" in options) ?\n options.readOffset :\n this.read;\n this.write = (\"writeOffset\" in options) ?\n options.writeOffset :\n this.write;\n this.read = Math.min(options.readOffset, this.write);\n}\nDataBuffer.DEFAULT_GROW_SIZE = 16;\n\nDataBuffer.prototype.length = function() {\n return this.write - this.read;\n};\nDataBuffer.prototype.available = function() {\n return this.data.length - this.write;\n};\nDataBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\nDataBuffer.prototype.accommodate = function(length) {\n if (!this.data) {\n // initializes a new buffer\n length = Math.max(this.write + length, this.growSize);\n\n this.data = Buffer.alloc(length);\n } else if (this.available() < length) {\n length = Math.max(length, this.growSize);\n\n // create a new empty buffer, and copy current one into it\n var src = this.data;\n var dst = Buffer.alloc(src.length + length);\n src.copy(dst, 0);\n\n // set data as the new buffer\n this.data = dst;\n }\n // ensure the rest is 0\n this.data.fill(0, this.write);\n\n return this;\n};\nDataBuffer.prototype.clear = function() {\n this.read = this.write = 0;\n this.data = Buffer.alloc(0);\n return this;\n};\nDataBuffer.prototype.truncate = function(count) {\n // chop off bytes from the end\n this.write = this.read + Math.max(0, this.length() - count);\n // ensure the remainder is 0\n this.data.fill(0, this.write);\n return this;\n};\nDataBuffer.prototype.compact = function() {\n if (this.read > 0) {\n if (this.write === this.read) {\n this.read = this.write = 0;\n } else {\n this.data.copy(this.data, 0, this.read, this.write);\n this.write = this.write - this.read;\n this.read = 0;\n }\n // ensure remainder is 0\n this.data.fill(0, this.write);\n }\n return this;\n};\nDataBuffer.prototype.copy = function() {\n return new DataBuffer(this, {\n readOffset: this.read,\n writeOffset: this.write,\n growSize: this.growSize\n });\n};\n\nDataBuffer.prototype.equals = function(test) {\n if (!DataBuffer.isBuffer(test)) {\n return false;\n }\n\n if (test.length() !== this.length()) {\n return false;\n }\n\n var rval = true,\n delta = this.read - test.read;\n // constant time\n for (var idx = test.read; test.write > idx; idx++) {\n rval = rval && (this.data[idx + delta] === test.data[idx]);\n }\n return rval;\n};\nDataBuffer.prototype.at = function(idx) {\n return this.data[this.read + idx];\n};\nDataBuffer.prototype.setAt = function(idx, b) {\n this.data[this.read + idx] = b;\n return this;\n};\nDataBuffer.prototype.last = function() {\n return this.data[this.write - 1];\n};\nDataBuffer.prototype.bytes = function(count) {\n var rval;\n if (undefined === count) {\n count = this.length();\n } else if (count) {\n count = Math.min(count, this.length());\n }\n\n if (0 === count) {\n rval = \"\";\n } else {\n var begin = this.read,\n end = begin + count,\n data = this.data.slice(begin, end);\n rval = String.fromCharCode.apply(null, data);\n }\n\n return rval;\n};\nDataBuffer.prototype.buffer = function(count) {\n var rval;\n if (undefined === count) {\n count = this.length();\n } else if (count) {\n count = Math.min(count, this.length());\n }\n\n if (0 === count) {\n rval = new ArrayBuffer(0);\n } else {\n var begin = this.read,\n end = begin + count,\n data = this.data.slice(begin, end);\n rval = new Uint8Array(end - begin);\n rval.set(data);\n }\n\n return rval;\n};\nDataBuffer.prototype.native = function(count) {\n var rval;\n if (\"undefined\" === typeof count) {\n count = this.length();\n } else if (count) {\n count = Math.min(count, this.length());\n }\n\n if (0 === count) {\n rval = Buffer.alloc(0);\n } else {\n var begin = this.read,\n end = begin + count;\n rval = this.data.slice(begin, end);\n }\n\n return rval;\n};\n\nDataBuffer.prototype.toHex = function() {\n return this.toString(\"hex\");\n};\nDataBuffer.prototype.toString = function(encoding) {\n // short circuit empty string\n if (0 === this.length()) {\n return \"\";\n }\n\n var view = this.data.slice(this.read, this.write);\n encoding = encoding || \"utf8\";\n // special cases, then built-in support\n switch (encoding) {\n case \"raw\":\n return view.toString(\"binary\");\n case \"base64url\":\n return base64url.encode(view);\n case \"utf16\":\n return view.toString(\"ucs2\");\n default:\n return view.toString(encoding);\n }\n};\n\nDataBuffer.prototype.fillWithByte = function(b, n) {\n if (!n) {\n n = this.available();\n }\n this.accommodate(n);\n this.data.fill(b, this.write, this.write + n);\n this.write += n;\n\n return this;\n};\n\nDataBuffer.prototype.getBuffer = function(count) {\n var rval = this.buffer(count);\n this.read += rval.byteLength;\n\n return rval;\n};\nDataBuffer.prototype.putBuffer = function(bytes) {\n return this.putBytes(bytes);\n};\n\nDataBuffer.prototype.getBytes = function(count) {\n var rval = this.bytes(count);\n this.read += rval.length;\n return rval;\n};\nDataBuffer.prototype.putBytes = function(bytes, encoding) {\n if (\"string\" === typeof bytes) {\n // fixup encoding\n encoding = encoding || \"binary\";\n switch (encoding) {\n case \"utf16\":\n // treat as UCS-2/UTF-16BE\n encoding = \"ucs-2\";\n break;\n case \"raw\":\n encoding = \"binary\";\n break;\n case \"base64url\":\n // NOTE: this returns a Buffer\n bytes = base64url.decode(bytes);\n break;\n }\n\n // replace bytes with decoded Buffer (if not already)\n if (!Buffer.isBuffer(bytes)) {\n bytes = Buffer.from(bytes, encoding);\n }\n }\n\n var src, dst;\n if (bytes instanceof DataBuffer) {\n // be slightly more efficient\n var orig = bytes;\n bytes = orig.data.slice(orig.read, orig.write);\n orig.read = orig.write;\n } else if (bytes instanceof forge.util.ByteStringBuffer) {\n bytes = bytes.getBytes();\n }\n\n // process array\n if (Buffer.isBuffer(bytes)) {\n src = bytes;\n } else if (Array.isArray(bytes)) {\n src = Buffer.from(bytes);\n } else if (forge.util.isArrayBuffer(bytes)) {\n src = new Uint8Array(bytes);\n src = Buffer.from(src);\n } else if (forge.util.isArrayBufferView(bytes)) {\n src = (bytes instanceof Uint8Array) ?\n bytes :\n new Uint8Array(bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength);\n src = Buffer.from(src);\n } else {\n throw new TypeError(\"invalid source type\");\n }\n\n this.accommodate(src.length);\n dst = this.data;\n src.copy(dst, this.write);\n this.write += src.length;\n\n return this;\n};\n\nDataBuffer.prototype.getNative = function(count) {\n var rval = this.native(count);\n this.read += rval.length;\n return rval;\n};\nDataBuffer.prototype.putNative = DataBuffer.prototype.putBuffer;\n\nDataBuffer.prototype.getByte = function() {\n var b = this.data[this.read];\n this.read = Math.min(this.read + 1, this.write);\n return b;\n};\nDataBuffer.prototype.putByte = function(b) {\n this.accommodate(1);\n this.data[this.write] = b & 0xff;\n this.write++;\n\n return this;\n};\n\nDataBuffer.prototype.getInt16 = function() {\n var n = (this.data[this.read] << 8) ^\n (this.data[this.read + 1]);\n this.read = Math.min(this.read + 2, this.write);\n return n;\n};\nDataBuffer.prototype.putInt16 = function(n) {\n this.accommodate(2);\n this.data[this.write] = (n >>> 8) & 0xff;\n this.data[this.write + 1] = n & 0xff;\n this.write += 2;\n return this;\n};\n\nDataBuffer.prototype.getInt24 = function() {\n var n = (this.data[this.read] << 16) ^\n (this.data[this.read + 1] << 8) ^\n this.data[this.read + 2];\n this.read = Math.min(this.read + 3, this.write);\n return n;\n};\nDataBuffer.prototype.putInt24 = function(n) {\n this.accommodate(3);\n this.data[this.write] = (n >>> 16) & 0xff;\n this.data[this.write + 1] = (n >>> 8) & 0xff;\n this.data[this.write + 2] = n & 0xff;\n this.write += 3;\n return this;\n};\n\nDataBuffer.prototype.getInt32 = function() {\n var n = (this.data[this.read] << 24) ^\n (this.data[this.read + 1] << 16) ^\n (this.data[this.read + 2] << 8) ^\n this.data[this.read + 3];\n this.read = Math.min(this.read + 4, this.write);\n return n;\n};\nDataBuffer.prototype.putInt32 = function(n) {\n this.accommodate(4);\n this.data[this.write] = (n >>> 24) & 0xff;\n this.data[this.write + 1] = (n >>> 16) & 0xff;\n this.data[this.write + 2] = (n >>> 8) & 0xff;\n this.data[this.write + 3] = n & 0xff;\n this.write += 4;\n return this;\n};\n\nDataBuffer.prototype.getInt16Le = function() {\n var n = (this.data[this.read + 1] << 8) ^\n this.data[this.read];\n this.read = Math.min(this.read + 2, this.write);\n return n;\n};\nDataBuffer.prototype.putInt16Le = function(n) {\n this.accommodate(2);\n this.data[this.write + 1] = (n >>> 8) & 0xff;\n this.data[this.write] = n & 0xff;\n this.write += 2;\n return this;\n};\n\nDataBuffer.prototype.getInt24Le = function() {\n var n = (this.data[this.read + 2] << 16) ^\n (this.data[this.read + 1] << 8) ^\n this.data[this.read];\n this.read = Math.min(this.read + 3, this.write);\n return n;\n};\nDataBuffer.prototype.putInt24Le = function(n) {\n this.accommodate(3);\n this.data[this.write + 2] = (n >>> 16) & 0xff;\n this.data[this.write + 1] = (n >>> 8) & 0xff;\n this.data[this.write] = n & 0xff;\n this.write += 3;\n return this;\n};\nDataBuffer.prototype.getInt32Le = function() {\n var n = (this.data[this.read + 3] << 24) ^\n (this.data[this.read + 2] << 16) ^\n (this.data[this.read + 1] << 8) ^\n this.data[this.read];\n this.read = Math.min(this.read + 4, this.write);\n return n;\n};\nDataBuffer.prototype.putInt32Le = function(n) {\n this.accommodate(4);\n this.data[this.write + 3] = (n >>> 24) & 0xff;\n this.data[this.write + 2] = (n >>> 16) & 0xff;\n this.data[this.write + 1] = (n >>> 8) & 0xff;\n this.data[this.write] = n & 0xff;\n this.write += 4;\n return this;\n};\n\nDataBuffer.prototype.getInt = function(bits) {\n var rval = 0;\n do {\n rval = (rval << 8) | this.getByte();\n bits -= 8;\n } while (bits > 0);\n return rval;\n};\nDataBuffer.prototype.putInt = function(n, bits) {\n this.accommodate(Math.ceil(bits / 8));\n do {\n bits -= 8;\n this.putByte((n >> bits) & 0xff);\n } while (bits > 0);\n return this;\n};\n\nDataBuffer.prototype.putSignedInt = function(n, bits) {\n if (n < 0) {\n n += 2 << (bits - 1);\n }\n return this.putInt(n, bits);\n};\n\nDataBuffer.prototype.putString = function(str) {\n return this.putBytes(str, \"utf16\");\n};\n\nDataBuffer.isBuffer = function(test) {\n return (test instanceof DataBuffer);\n};\nDataBuffer.asBuffer = function(orig) {\n return DataBuffer.isBuffer(orig) ?\n orig :\n orig ?\n new DataBuffer(orig) :\n new DataBuffer();\n};\n\nmodule.exports = DataBuffer;\n","/*!\n * util/index.js - Utilities Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar forge = require(\"../deps/forge.js\");\n\nvar util;\n\nfunction asBuffer(input, encoding) {\n if (Buffer.isBuffer(input)) {\n return input;\n }\n\n if (\"string\" === typeof input) {\n encoding = encoding || \"binary\";\n if (\"base64url\" === encoding) {\n return util.base64url.decode(input);\n }\n return Buffer.from(input, encoding);\n }\n\n // assume input is an Array, ArrayBuffer, or ArrayBufferView\n if (forge.util.isArrayBufferView(input)) {\n input = (input instanceof Uint8Array) ?\n input :\n new Uint8Array(input.buffer, input.byteOffset, input.byteOffset + input.byteLength);\n } else if (forge.util.isArrayBuffer(input)) {\n input = new Uint8Array(input);\n }\n\n var output;\n output = Buffer.from(input);\n\n return output;\n}\n\nfunction randomBytes(len) {\n return Buffer.from(forge.random.getBytes(len), \"binary\");\n}\n\nutil = {\n base64url: require(\"./base64url.js\"),\n utf8: require(\"./utf8.js\"),\n asBuffer: asBuffer,\n randomBytes: randomBytes\n};\nmodule.exports = util;\n","/*!\n * util/utf8.js - Implementation of UTF-8 Encoder/Decoder\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar partialRight = require(\"lodash/partialRight\");\nvar merge = require(\"lodash/merge\");\n\nvar typedArrayCtors = (function() {\n var ctors = [];\n if (\"undefined\" !== typeof Uint8ClampedArray) {\n ctors.push(Uint8ClampedArray);\n }\n if (\"undefined\" !== typeof Uint8Array) {\n ctors.push(Uint8Array);\n }\n if (\"undefined\" !== typeof Uint16Array) {\n ctors.push(Uint16Array);\n }\n if (\"undefined\" !== typeof Uint32Array) {\n ctors.push(Uint32Array);\n }\n if (\"undefined\" !== typeof Float32Array) {\n ctors.push(Float32Array);\n }\n if (\"undefined\" !== typeof Float64Array) {\n ctors.push(Float64Array);\n }\n return ctors;\n})();\n\nfunction findTypedArrayFor(ta) {\n var ctor;\n for (var idx = 0; !ctor && typedArrayCtors.length > idx; idx++) {\n if (ta instanceof typedArrayCtors[idx]) {\n ctor = typedArrayCtors[idx];\n }\n }\n return ctor;\n}\n\nfunction mergeBuffer(a, b) {\n // TODO: should this be a copy, or the reference itself?\n if (Buffer.isBuffer(b)) {\n b = Buffer.from(b);\n } else {\n var Ctor = findTypedArrayFor(b);\n b = Ctor ?\n new Ctor(b, b.byteOffset, b.byteLength) :\n undefined;\n }\n\n // TODO: QUESTION: create a merged ??\n // for now, a is b\n a = b;\n\n return b;\n}\n\nmodule.exports = partialRight(merge, mergeBuffer);\n","/*!\n * util/utf8.js - Implementation of UTF-8 Encoder/Decoder\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n\"use strict\";\n\nvar utf8 = exports;\n\nutf8.encode = function(input) {\n var output = encodeURIComponent(input || \"\");\n output = output.replace(/%([0-9a-fA-F]{2})/g, function(m, code) {\n code = parseInt(code, 16);\n return String.fromCharCode(code);\n });\n\n return output;\n};\nutf8.decode = function(input) {\n var output = (input || \"\").replace(/[\\u0080-\\u00ff]/g, function(m) {\n var code = (0x100 | m.charCodeAt(0)).toString(16).substring(1);\n return \"%\" + code;\n });\n output = decodeURIComponent(output);\n\n return output;\n};\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nconst { Deflate, deflate, deflateRaw, gzip } = require('./lib/deflate');\n\nconst { Inflate, inflate, inflateRaw, ungzip } = require('./lib/inflate');\n\nconst constants = require('./lib/zlib/constants');\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = ungzip;\nmodule.exports.constants = constants;\n","'use strict';\n\n\nconst zlib_deflate = require('./zlib/deflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = zlib_deflate.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n this.result = utils.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n const deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n\nconst zlib_inflate = require('./zlib/inflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\nconst GZheader = require('./zlib/gzheader');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n this.options = utils.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = zlib_inflate.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n zlib_inflate.inflateReset(strm);\n status = zlib_inflate.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n const inflator = new Inflate(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || msg[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = inflate;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nmodule.exports.assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nmodule.exports.flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n","// String encode/decode helpers\n'use strict';\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nmodule.exports.string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nmodule.exports.buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nmodule.exports.utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = require('./trees');\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_PARTIAL_FLUSH, Z_FULL_FLUSH, Z_FINISH, Z_BLOCK,\n Z_OK, Z_STREAM_END, Z_STREAM_ERROR, Z_DATA_ERROR, Z_BUF_ERROR,\n Z_DEFAULT_COMPRESSION,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY,\n Z_UNKNOWN,\n Z_DEFLATED\n} = require('./constants');\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = msg[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH) ||\n flush === Z_NO_FLUSH ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH && flush !== Z_FINISH &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH) && flush !== Z_NO_FLUSH &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR;\n }\n strm.state.gzhead = head;\n return Z_OK;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n};\n\n\n/* ========================================================================= */\nconst deflate = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n};\n\n\nmodule.exports.deflateInit = deflateInit;\nmodule.exports.deflateInit2 = deflateInit2;\nmodule.exports.deflateReset = deflateReset;\nmodule.exports.deflateResetKeep = deflateResetKeep;\nmodule.exports.deflateSetHeader = deflateSetHeader;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateEnd = deflateEnd;\nmodule.exports.deflateSetDictionary = deflateSetDictionary;\nmodule.exports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst inflate_fast = require('./inffast');\nconst inflate_table = require('./inftrees');\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH, Z_BLOCK, Z_TREES,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR,\n Z_DEFLATED\n} = require('./constants');\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n};\n\n\nmodule.exports.inflateReset = inflateReset;\nmodule.exports.inflateReset2 = inflateReset2;\nmodule.exports.inflateResetKeep = inflateResetKeep;\nmodule.exports.inflateInit = inflateInit;\nmodule.exports.inflateInit2 = inflateInit2;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateEnd = inflateEnd;\nmodule.exports.inflateGetHeader = inflateGetHeader;\nmodule.exports.inflateSetDictionary = inflateSetDictionary;\nmodule.exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nmodule.exports = inflate_table;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES = 30;\n/* number of distance codes */\n\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nmodule.exports._tr_init = _tr_init;\nmodule.exports._tr_stored_block = _tr_stored_block;\nmodule.exports._tr_flush_block = _tr_flush_block;\nmodule.exports._tr_tally = _tr_tally;\nmodule.exports._tr_align = _tr_align;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function get() {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function get() {\n return _parse.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function get() {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function get() {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function get() {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function get() {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function get() {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function get() {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function get() {\n return _version.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nvar _default = {\n randomUUID\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\n\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nexports.unsafeStringify = unsafeStringify;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nfunction unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = require(\"./stringify.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.unsafeStringify)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.URL = exports.DNS = void 0;\nexports.default = v35;\n\nvar _stringify = require(\"./stringify.js\");\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.unsafeStringify)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _native = _interopRequireDefault(require(\"./native.js\"));\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = require(\"./stringify.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n if (_native.default.randomUUID && !buf && !options) {\n return _native.default.randomUUID();\n }\n\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.unsafeStringify)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.slice(14, 15), 16);\n}\n\nvar _default = version;\nexports.default = _default;","/**!\n * lib/keyobject.js -- KMS Key Representation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar jose = require(\"node-jose\"),\n uuid = require(\"uuid\");\n\nvar KMS = {\n KeyObject: require(\"./keyobject\")\n};\n\nfunction KMSContext() {\n var sharedKey = null,\n clientInfo = {},\n serverInfo = {};\n\n Object.defineProperty(this, \"ephemeralKey\", {\n get: function() {\n // TODO: honor expiration\n return sharedKey;\n },\n set: function(key) {\n sharedKey = key ?\n KMS.KeyObject.fromObject(key) :\n null;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"clientInfo\", {\n get: function() { return clientInfo; },\n set: function(info) {\n // TODO: validate client info\n clientInfo = info || {};\n },\n enumerable: true\n });\n Object.defineProperty(this, \"serverInfo\", {\n get: function() { return serverInfo; },\n set: function(info) {\n // TODO: validate server info\n serverInfo = info || {};\n },\n enumerable: true\n });\n\n Object.defineProperty(this, \"requestId\", {\n value: function() {\n return uuid();\n }\n });\n}\n\nKMSContext.prototype.createECDHKey = function() {\n var clientInfo = this.clientInfo;\n var ks = jose.JWK.createKeyStore();\n\n // TODO: make this more configurable\n var keyType = \"EC\",\n keyOrder = \"P-256\",\n expiresIn = 3600000;\n var promise = ks.generate(keyType, keyOrder);\n promise = promise.then(function(k) {\n var ts = new Date();\n var rep = {\n uri: \"-internal/\" + k.kid,\n jwk: k.toJSON(true),\n userId: (clientInfo && clientInfo.credential && clientInfo.credential.userId) ||\n \"\",\n clientId: (clientInfo && clientInfo.clientId) ||\n \"\",\n createDate: ts,\n expirationDate: new Date(ts.getTime() + expiresIn)\n };\n\n return new KMS.KeyObject(rep);\n });\n return promise;\n};\n\nKMSContext.prototype.deriveEphemeralKey = function(remote) {\n var local = this.ephemeralKey;\n if (!local || !local.jwk || \"EC\" !== local.jwk.kty) {\n return Promise.reject(new Error(\"invalid local ECDH key\"));\n }\n remote = KMS.KeyObject.fromObject(remote);\n\n var promise;\n promise = Promise.all([local.asKey(), remote.asKey()]);\n promise = promise.then(function(keys) {\n var lkey = keys[0],\n rkey = keys[1];\n var props = {\n public: rkey.toObject()\n };\n var k = lkey.toObject(true);\n return jose.JWA.derive(\"ECDH-HKDF\", k, props);\n });\n promise = promise.then(function(result) {\n var uri = remote.uri,\n created = remote.createDate,\n expires = remote.expirationDate;\n var shared = {\n uri: uri,\n createDate: created,\n expirationDate: expires,\n jwk: {\n kty: \"oct\",\n kid: uri,\n alg: \"A256GCM\",\n k: jose.util.base64url.encode(result)\n }\n };\n return new KMS.KeyObject(shared);\n });\n return promise;\n};\n\nmodule.exports = KMSContext;\n","/**!\n * lib/index.js -- KMS Entry Point\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nmodule.exports = {\n KeyObject: require(\"./keyobject\"),\n Context: require(\"./context\"),\n Request: require(\"./request\"),\n Response: require(\"./response\")\n};\n","/**!\n * lib/keyobject.js -- KMS Key Representation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar cloneDeep = require(\"lodash.clonedeep\"),\n jose = require(\"node-jose\");\n\nfunction KMSKeyObject(rep) {\n rep = cloneDeep(rep || {});\n // coerce date fields\n [\"createDate\", \"expirationDate\", \"bindDate\"].forEach(function(f) {\n if (f in rep && rep[f]) {\n rep[f] = \"string\" === typeof rep[f] ?\n new Date(Date.parse(rep[f])) :\n rep[f];\n }\n });\n\n Object.defineProperty(this, \"uri\", {\n get: function() { return rep.uri || \"\"; },\n enumerable: true\n });\n Object.defineProperty(this, \"jwk\", {\n get: function() { return rep.jwk || undefined; },\n enumerable: true\n });\n Object.defineProperty(this, \"userId\", {\n get: function() { return rep.userId || \"\"; },\n enumerable: true\n });\n Object.defineProperty(this, \"clientId\", {\n get: function() { return rep.clientId || \"\"; },\n enumerable: true\n });\n Object.defineProperty(this, \"createDate\", {\n get: function() { return rep.createDate || undefined; },\n enumerable: true\n });\n Object.defineProperty(this, \"expirationDate\", {\n get: function() { return rep.expirationDate || undefined; },\n enumerable: true\n });\n Object.defineProperty(this, \"bindDate\", {\n get: function() { return rep.bindDate || undefined; },\n enumerable: true\n });\n Object.defineProperty(this, \"resourceUri\", {\n get: function() { return rep.resourceUri || \"\"; },\n enumerable: true\n });\n}\n\n// ### Instance Methods ###\nKMSKeyObject.prototype.asKey = function() {\n if (!this.jwk) {\n return Promise.reject(new Error(\"'jwk' not set\"));\n }\n return jose.JWK.asKey(this.jwk);\n};\n\nKMSKeyObject.prototype.toJSON = function() {\n var self = this,\n json = {};\n Object.keys(this).forEach(function(f) {\n var v = self[f];\n if (\"function\" === typeof v || \"undefined\" === typeof v) {\n return;\n }\n if (v instanceof Date) {\n v = v.toISOString();\n }\n json[f] = cloneDeep(v);\n });\n\n return json;\n};\n\n// ### Class Functions ###\nKMSKeyObject.fromObject = function(rep) {\n if (!rep) {\n throw new TypeError(\"representation required\");\n }\n if (rep instanceof KMSKeyObject) {\n return rep;\n }\n return new KMSKeyObject(rep);\n};\n\nmodule.exports = KMSKeyObject;\n","/**!\n * lib/request.js -- KMS (Generic) Request\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar clone = require(\"lodash.clone\"),\n jose = require(\"node-jose\");\n\nfunction KMSRequest(body) {\n var wrapped = \"\";\n body = (body && clone(body)) || {};\n\n Object.defineProperty(this, \"wrapped\", {\n get: function() { return wrapped; },\n set: function(w) { wrapped = String(w || \"\"); },\n enumerable: true\n });\n Object.defineProperty(this, \"body\", {\n get: function() { return body; },\n set: function(b) {\n b = (b && clone(b)) || {};\n\n // carry forward requestId\n if (\"requestId\" in body) {\n b.requestId = body.requestId;\n }\n // carry forward uri\n if (\"uri\" in body) {\n b.uri = body.uri;\n }\n // carry forward method\n if (\"method\" in body) {\n b.method = body.method;\n }\n // clear any wrapped, then save\n wrapped = \"\";\n body = b;\n },\n enumerable: true\n });\n\n Object.defineProperty(this, \"requestId\", {\n get: function() { return body.requestId || \"\"; },\n set: function(id) {\n if (!id) {\n delete body.requestId;\n } else {\n body.requestId = id;\n }\n },\n enumerable: true\n });\n Object.defineProperty(this, \"uri\", {\n get: function() { return body.uri || \"\"; },\n set: function(uri) {\n if (!uri) {\n delete body.uri;\n } else {\n body.uri = uri;\n }\n },\n enumerable: true\n });\n Object.defineProperty(this, \"method\", {\n get: function() { return body.method || \"\"; },\n set: function(method) {\n if (!method) {\n delete body.method;\n } else {\n body.method = method;\n }\n },\n enumerable: true\n });\n}\n\nKMSRequest.prototype.wrap = function(ctx, opts) {\n opts = opts || {};\n\n // TODO: make this more configurable\n var self = this,\n promise;\n\n // set the requestId if not already set\n if (!this.requestId || opts.requestId) {\n this.requestId = opts.requestId || ctx.requestId();\n }\n\n var body = this.body;\n body.client = ctx.clientInfo;\n\n // prepare the key\n if (opts.serverKey) {\n promise = jose.JWK.asKey(ctx.serverInfo.key);\n } else {\n promise = ctx.ephemeralKey.asKey();\n }\n promise = promise.then(function(jwk) {\n var key = jwk;\n var cfg = {\n compact: true,\n contentAlg: opts.contentAlg || \"A256GCM\"\n };\n var jwe = jose.JWE.createEncrypt(cfg, key);\n return jwe.final(JSON.stringify(self.body), \"utf8\");\n });\n promise = promise.then(function(result) {\n // save wrapped\n self.wrapped = result;\n return result;\n });\n return promise;\n};\n\nmodule.exports = KMSRequest;\n","/**!\n * lib/response.js -- KMS (Generic) Response\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar clone = require(\"lodash.clone\"),\n jose = require(\"node-jose\");\n\nfunction KMSResponse(wrapped) {\n wrapped = wrapped || \"\";\n var body = {};\n\n Object.defineProperty(this, \"wrapped\", {\n get: function() { return wrapped; },\n set: function(w) {\n // clear existing body before saving wrapped\n body = {};\n wrapped = String(w || \"\");\n },\n enumerable: true\n });\n Object.defineProperty(this, \"body\", {\n get: function() { return body; },\n set: function(b) { body = (b && clone(b)) || {}; },\n enumerable: true\n });\n\n Object.defineProperty(this, \"status\", {\n get: function() { return body.status || 0; },\n set: function(s) {\n s = parseInt(s);\n if (!isNaN(s)) {\n body.status = s;\n }\n },\n enumerable: true\n });\n Object.defineProperty(this, \"reason\", {\n get: function() { return body.reason || \"\"; },\n set: function(r) { body.reason = String(r || \"\"); },\n enumerable: true\n });\n Object.defineProperty(this, \"requestId\", {\n get: function() { return body.requestId || \"\"; },\n set: function(id) { body.requestId = String(id || \"\"); },\n enumerable: true\n });\n}\n\nKMSResponse.prototype.unwrap = function(ctx, opts) {\n opts = opts || {};\n\n var keystore = jose.JWK.createKeyStore(),\n waiting = [],\n key;\n\n // add ephemeral key (if any)\n key = ctx.ephemeralKey && ctx.ephemeralKey.jwk;\n if (key) {\n waiting.push(keystore.add(key));\n }\n // add server key (if any)\n key = ctx.serverInfo && ctx.serverInfo.key;\n if (key) {\n waiting.push(keystore.add(key));\n }\n\n var self = this;\n var promise = Promise.all(waiting);\n promise = promise.then(function() {\n var wrapped = self.wrapped;\n // count the dots\n switch ((wrapped.match(/\\./g) || []).length) {\n case 2: // signed\n return jose.JWS.createVerify(keystore).\n verify(wrapped);\n case 4: // encrypted\n return jose.JWE.createDecrypt(keystore).\n decrypt(wrapped);\n default: // bogus\n return Promise.reject(new Error(\"invalid wrapped\"));\n }\n });\n promise = promise.then(function(result) {\n // parse result to JSON\n result = (result.plaintext || result.payload).toString(\"utf8\");\n result = JSON.parse(result);\n // save it before returning it\n self.body = result;\n return result;\n });\n return promise;\n};\n\nmodule.exports = KMSResponse;\n","/**\n * lodash 3.0.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseClone = require('lodash._baseclone'),\n bindCallback = require('lodash._bindcallback');\n\n/**\n * Creates a deep clone of `value`. If `customizer` is provided it's invoked\n * to produce the cloned values. If `customizer` returns `undefined` cloning\n * is handled by the method instead. The `customizer` is bound to `thisArg`\n * and invoked with up to three argument; (value [, index|key, object]).\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\n * The enumerable properties of `arguments` objects and objects created by\n * constructors other than `Object` are cloned to plain `Object` objects. An\n * empty object is returned for uncloneable values such as functions, DOM nodes,\n * Maps, Sets, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to deep clone.\n * @param {Function} [customizer] The function to customize cloning values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {*} Returns the deep cloned value.\n * @example\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * var deep = _.cloneDeep(users);\n * deep[0] === users[0];\n * // => false\n *\n * // using a customizer callback\n * var el = _.cloneDeep(document.body, function(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * });\n *\n * el === document.body\n * // => false\n * el.nodeName\n * // => BODY\n * el.childNodes.length;\n * // => 20\n */\nfunction cloneDeep(value, customizer, thisArg) {\n return typeof customizer == 'function'\n ? baseClone(value, true, bindCallback(customizer, thisArg, 3))\n : baseClone(value, true);\n}\n\nmodule.exports = cloneDeep;\n","\nvar rng;\n\nvar crypto = global.crypto || global.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n // Moderately fast, high quality\n var _rnds8 = new Uint8Array(16);\n rng = function whatwgRNG() {\n crypto.getRandomValues(_rnds8);\n return _rnds8;\n };\n}\n\nif (!rng) {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var _rnds = new Array(16);\n rng = function() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return _rnds;\n };\n}\n\nmodule.exports = rng;\n\n","// uuid.js\n//\n// Copyright (c) 2010-2012 Robert Kieffer\n// MIT License - http://opensource.org/licenses/mit-license.php\n\n// Unique ID creation requires a high quality random # generator. We feature\n// detect to determine the best RNG source, normalizing to a function that\n// returns 128-bits of randomness, since that's what's usually required\nvar _rng = require('./rng');\n\n// Maps for number <-> hex string conversion\nvar _byteToHex = [];\nvar _hexToByte = {};\nfor (var i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n}\n\n// **`parse()` - Parse a UUID into it's component bytes**\nfunction parse(s, buf, offset) {\n var i = (buf && offset) || 0, ii = 0;\n\n buf = buf || [];\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n if (ii < 16) { // Don't overflow!\n buf[i + ii++] = _hexToByte[oct];\n }\n });\n\n // Zero out remaining bytes if string was short\n while (ii < 16) {\n buf[i + ii++] = 0;\n }\n\n return buf;\n}\n\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\nfunction unparse(buf, offset) {\n var i = offset || 0, bth = _byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = _rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n _seedBytes[0] | 0x01,\n _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n var node = options.node || _nodeId;\n for (var n = 0; n < 6; n++) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : unparse(b);\n}\n\n// **`v4()` - Generate random UUID**\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v4(options, buf, offset) {\n // Deprecated - 'format' argument, as supported in v1.2\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options == 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || _rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ii++) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || unparse(rnds);\n}\n\n// Export public API\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nuuid.parse = parse;\nuuid.unparse = unparse;\n\nmodule.exports = uuid;\n","/**!\n * lib/index.js -- SCR Implementation\n *\n * Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.\n */\n \"use strict\";\n\nvar clone = require(\"lodash.clone\"),\n jose = require(\"node-jose\");\n\nfunction SCRObject(cfg) {\n cfg.loc = cfg.loc || undefined;\n cfg.tag = cfg.tag || undefined;\n\n Object.defineProperty(this, \"enc\", {\n get: function() {\n return cfg.enc;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"key\", {\n get: function() {\n return cfg.key;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"iv\", {\n get: function() {\n return cfg.iv;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"aad\", {\n get: function() {\n return cfg.aad;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"loc\", {\n get: function() {\n return cfg.loc;\n },\n set: function(loc) {\n cfg.loc = loc;\n },\n enumerable: true\n });\n Object.defineProperty(this, \"tag\", {\n get: function() {\n return cfg.tag;\n },\n enumerable: true\n });\n\n Object.defineProperty(this, \"toJSON\", {\n value: function() {\n var key = cfg.key.get(\"k\", true);\n var data = {};\n data.enc = cfg.enc;\n data.key = jose.util.base64url.encode(key);\n data.iv = jose.util.base64url.encode(cfg.iv);\n data.aad = cfg.aad;\n\n if (cfg.loc) {\n data.loc = cfg.loc;\n }\n if (cfg.tag) {\n data.tag = jose.util.base64url.encode(cfg.tag);\n }\n\n return data;\n }\n });\n Object.defineProperty(this, \"toJWE\", {\n value: function(jwk) {\n var self = this,\n promise;\n promise = jose.JWK.asKey(jwk);\n promise = promise.then(function(jwk) {\n var rcpt = {\n header: {\n alg: \"dir\"\n },\n key: jwk,\n reference: false\n };\n var opts = {\n compact: true,\n contentAlg: cfg.enc\n };\n\n var data = self.toJSON();\n data = JSON.stringify(data);\n return jose.JWE.createEncrypt(opts, rcpt).\n final(data, \"utf8\");\n });\n\n return promise;\n }\n });\n\n Object.defineProperty(this, \"encrypt\", {\n value: function(pdata) {\n var props = {\n iv: cfg.iv,\n adata: new Buffer(cfg.aad, \"utf8\")\n };\n\n // condition the data before encrypting\n pdata = jose.util.asBuffer(pdata);\n return cfg.key.encrypt(cfg.enc, pdata, props).\n then(function(result) {\n var cdata = result.data;\n cfg.tag = result.tag;\n\n return cdata;\n });\n }\n });\n Object.defineProperty(this, \"decrypt\", {\n value: function(cdata) {\n var props = {\n iv: cfg.iv,\n adata: new Buffer(cfg.aad, \"utf8\"),\n mac: cfg.tag\n };\n\n // condition data before decrypting\n cdata = jose.util.asBuffer(cdata);\n return cfg.key.decrypt(cfg.enc, cdata, props).\n then(function(pdata) {\n return pdata;\n });\n }\n });\n}\n\nvar SCR = {\n create: function() {\n // TODO: make this more configurable\n // TODO: abstract away forge??\n var iv = jose.util.randomBytes(12);\n var aad = new Date().toISOString();\n\n var keystore = jose.JWK.createKeyStore();\n var promise = keystore.generate(\"oct\", 256);\n promise = promise.then(function(key) {\n return new SCRObject({\n enc: \"A256GCM\",\n key: key,\n iv: iv,\n aad: aad\n });\n });\n\n return promise;\n },\n fromJWE: function(jwk, jwe) {\n var promise;\n promise = jose.JWK.asKey(jwk);\n promise = promise.then(function(jwk) {\n return jose.JWE.createDecrypt(jwk).decrypt(jwe);\n });\n promise = promise.then(function(result) {\n result = result.plaintext.toString(\"utf8\");\n result = JSON.parse(result);\n return SCR.fromJSON(result);\n });\n\n return promise;\n },\n fromJSON: function(json) {\n // create a copy to mitigate tampering\n var cfg = clone(json);\n\n var promise;\n if (json.key) {\n promise = jose.JWK.asKey({\n kty: \"oct\",\n k: json.key\n });\n } else {\n promise = Promise.resolve();\n }\n promise = promise.then(function(key) {\n if (key) {\n cfg.key = key;\n }\n\n if (\"iv\" in cfg) {\n cfg.iv = Buffer.isBuffer(cfg.iv) ?\n cfg.iv :\n jose.util.base64url.decode(cfg.iv);\n }\n if (\"tag\" in cfg) {\n cfg.tag = Buffer.isBuffer(cfg.tag) ?\n cfg.tag :\n jose.util.base64url.decode(cfg.tag);\n }\n\n return new SCRObject(cfg);\n });\n\n return promise;\n }\n};\n\nmodule.exports = SCR;\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n /* eslint-env browser */\n if (typeof window !== 'undefined' && obj === window) {\n return '{ [object Window] }';\n }\n if (obj === global) {\n return '{ [object globalThis] }';\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","module.exports = require('os');\n","var trim = function(string) {\n return string.replace(/^\\s+|\\s+$/g, '');\n}\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n var headersArr = trim(headers).split('\\n')\n\n for (var i = 0; i < headersArr.length; i++) {\n var row = headersArr[i]\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n\n return result\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Deferred = void 0;\r\nclass Deferred {\r\n constructor() {\r\n this.resolve = () => null;\r\n this.reject = () => null;\r\n this.promise = new Promise((resolve, reject) => {\r\n this.reject = reject;\r\n this.resolve = resolve;\r\n });\r\n }\r\n}\r\nexports.Deferred = Deferred;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EndOfStreamError = exports.defaultMessages = void 0;\r\nexports.defaultMessages = 'End-Of-Stream';\r\n/**\r\n * Thrown on read operation of the end of file or stream has been reached\r\n */\r\nclass EndOfStreamError extends Error {\r\n constructor() {\r\n super(exports.defaultMessages);\r\n }\r\n}\r\nexports.EndOfStreamError = EndOfStreamError;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = exports.EndOfStreamError = void 0;\r\nconst EndOfFileStream_1 = require(\"./EndOfFileStream\");\r\nconst Deferred_1 = require(\"./Deferred\");\r\nvar EndOfFileStream_2 = require(\"./EndOfFileStream\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return EndOfFileStream_2.EndOfStreamError; } });\r\nconst maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation\r\nclass StreamReader {\r\n constructor(s) {\r\n this.s = s;\r\n /**\r\n * Deferred used for postponed read request (as not data is yet available to read)\r\n */\r\n this.deferred = null;\r\n this.endOfStream = false;\r\n /**\r\n * Store peeked data\r\n * @type {Array}\r\n */\r\n this.peekQueue = [];\r\n if (!s.read || !s.once) {\r\n throw new Error('Expected an instance of stream.Readable');\r\n }\r\n this.s.once('end', () => this.reject(new EndOfFileStream_1.EndOfStreamError()));\r\n this.s.once('error', err => this.reject(err));\r\n this.s.once('close', () => this.reject(new Error('Stream closed')));\r\n }\r\n /**\r\n * Read ahead (peek) from stream. Subsequent read or peeks will return the same data\r\n * @param uint8Array - Uint8Array (or Buffer) to store data read from stream in\r\n * @param offset - Offset target\r\n * @param length - Number of bytes to read\r\n * @returns Number of bytes peeked\r\n */\r\n async peek(uint8Array, offset, length) {\r\n const bytesRead = await this.read(uint8Array, offset, length);\r\n this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer\r\n return bytesRead;\r\n }\r\n /**\r\n * Read chunk from stream\r\n * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\r\n * @param offset - Offset target\r\n * @param length - Number of bytes to read\r\n * @returns Number of bytes read\r\n */\r\n async read(buffer, offset, length) {\r\n if (length === 0) {\r\n return 0;\r\n }\r\n if (this.peekQueue.length === 0 && this.endOfStream) {\r\n throw new EndOfFileStream_1.EndOfStreamError();\r\n }\r\n let remaining = length;\r\n let bytesRead = 0;\r\n // consume peeked data first\r\n while (this.peekQueue.length > 0 && remaining > 0) {\r\n const peekData = this.peekQueue.pop(); // Front of queue\r\n if (!peekData)\r\n throw new Error('peekData should be defined');\r\n const lenCopy = Math.min(peekData.length, remaining);\r\n buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);\r\n bytesRead += lenCopy;\r\n remaining -= lenCopy;\r\n if (lenCopy < peekData.length) {\r\n // remainder back to queue\r\n this.peekQueue.push(peekData.subarray(lenCopy));\r\n }\r\n }\r\n // continue reading from stream if required\r\n while (remaining > 0 && !this.endOfStream) {\r\n const reqLen = Math.min(remaining, maxStreamReadSize);\r\n const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen);\r\n bytesRead += chunkLen;\r\n if (chunkLen < reqLen)\r\n break;\r\n remaining -= chunkLen;\r\n }\r\n return bytesRead;\r\n }\r\n /**\r\n * Read chunk from stream\r\n * @param buffer Target Uint8Array (or Buffer) to store data read from stream in\r\n * @param offset Offset target\r\n * @param length Number of bytes to read\r\n * @returns Number of bytes read\r\n */\r\n async readFromStream(buffer, offset, length) {\r\n const readBuffer = this.s.read(length);\r\n if (readBuffer) {\r\n buffer.set(readBuffer, offset);\r\n return readBuffer.length;\r\n }\r\n else {\r\n const request = {\r\n buffer,\r\n offset,\r\n length,\r\n deferred: new Deferred_1.Deferred()\r\n };\r\n this.deferred = request.deferred;\r\n this.s.once('readable', () => {\r\n this.readDeferred(request);\r\n });\r\n return request.deferred.promise;\r\n }\r\n }\r\n /**\r\n * Process deferred read request\r\n * @param request Deferred read request\r\n */\r\n readDeferred(request) {\r\n const readBuffer = this.s.read(request.length);\r\n if (readBuffer) {\r\n request.buffer.set(readBuffer, request.offset);\r\n request.deferred.resolve(readBuffer.length);\r\n this.deferred = null;\r\n }\r\n else {\r\n this.s.once('readable', () => {\r\n this.readDeferred(request);\r\n });\r\n }\r\n }\r\n reject(err) {\r\n this.endOfStream = true;\r\n if (this.deferred) {\r\n this.deferred.reject(err);\r\n this.deferred = null;\r\n }\r\n }\r\n}\r\nexports.StreamReader = StreamReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = exports.EndOfStreamError = void 0;\r\nvar EndOfFileStream_1 = require(\"./EndOfFileStream\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return EndOfFileStream_1.EndOfStreamError; } });\r\nvar StreamReader_1 = require(\"./StreamReader\");\r\nObject.defineProperty(exports, \"StreamReader\", { enumerable: true, get: function () { return StreamReader_1.StreamReader; } });\r\n","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nmodule.exports = require('./lib/checks');","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nvar util = require('util');\n\nvar errors = module.exports = require('./errors');\n\nfunction failCheck(ExceptionConstructor, callee, messageFormat, formatArgs) {\n messageFormat = messageFormat || '';\n var message = util.format.apply(this, [messageFormat].concat(formatArgs));\n var error = new ExceptionConstructor(message);\n Error.captureStackTrace(error, callee);\n throw error;\n}\n\nfunction failArgumentCheck(callee, message, formatArgs) {\n failCheck(errors.IllegalArgumentError, callee, message, formatArgs);\n}\n\nfunction failStateCheck(callee, message, formatArgs) {\n failCheck(errors.IllegalStateError, callee, message, formatArgs);\n}\n\nmodule.exports.checkArgument = function(value, message) {\n if (!value) {\n failArgumentCheck(arguments.callee, message,\n Array.prototype.slice.call(arguments, 2));\n }\n};\n\nmodule.exports.checkState = function(value, message) {\n if (!value) {\n failStateCheck(arguments.callee, message,\n Array.prototype.slice.call(arguments, 2));\n }\n};\n\nmodule.exports.checkIsDef = function(value, message) {\n if (value !== undefined) {\n return value;\n }\n\n failArgumentCheck(arguments.callee, message ||\n 'Expected value to be defined but was undefined.',\n Array.prototype.slice.call(arguments, 2));\n};\n\nmodule.exports.checkIsDefAndNotNull = function(value, message) {\n // Note that undefined == null.\n if (value != null) {\n return value;\n }\n\n failArgumentCheck(arguments.callee, message ||\n 'Expected value to be defined and not null but got \"' +\n typeOf(value) + '\".', Array.prototype.slice.call(arguments, 2));\n};\n\n// Fixed version of the typeOf operator which returns 'null' for null values\n// and 'array' for arrays.\nfunction typeOf(value) {\n var s = typeof value;\n if (s == 'object') {\n if (!value) {\n return 'null';\n } else if (value instanceof Array) {\n return 'array';\n }\n }\n return s;\n}\n\nfunction typeCheck(expect) {\n return function(value, message) {\n var type = typeOf(value);\n\n if (type == expect) {\n return value;\n }\n\n failArgumentCheck(arguments.callee, message ||\n 'Expected \"' + expect + '\" but got \"' + type + '\".',\n Array.prototype.slice.call(arguments, 2));\n };\n}\n\nmodule.exports.checkIsString = typeCheck('string');\nmodule.exports.checkIsArray = typeCheck('array');\nmodule.exports.checkIsNumber = typeCheck('number');\nmodule.exports.checkIsBoolean = typeCheck('boolean');\nmodule.exports.checkIsFunction = typeCheck('function');\nmodule.exports.checkIsObject = typeCheck('object');\n","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nvar util = require('util');\n\nfunction IllegalArgumentError(message) {\n Error.call(this, message);\n this.message = message;\n}\nutil.inherits(IllegalArgumentError, Error);\n\nIllegalArgumentError.prototype.name = 'IllegalArgumentError';\n\nfunction IllegalStateError(message) {\n Error.call(this, message);\n this.message = message;\n}\nutil.inherits(IllegalStateError, Error);\n\nIllegalStateError.prototype.name = 'IllegalStateError';\n\nmodule.exports.IllegalStateError = IllegalStateError;\nmodule.exports.IllegalArgumentError = IllegalArgumentError;","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*!\n * MIT License\n * \n * Copyright (c) 2017-2022 Peculiar Ventures, LLC\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 all\n * 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\n'use strict';\n\nconst ARRAY_BUFFER_NAME = \"[object ArrayBuffer]\";\nclass BufferSourceConverter {\n static isArrayBuffer(data) {\n return Object.prototype.toString.call(data) === ARRAY_BUFFER_NAME;\n }\n static toArrayBuffer(data) {\n if (this.isArrayBuffer(data)) {\n return data;\n }\n if (data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return this.toUint8Array(data.buffer)\n .slice(data.byteOffset, data.byteOffset + data.byteLength)\n .buffer;\n }\n static toUint8Array(data) {\n return this.toView(data, Uint8Array);\n }\n static toView(data, type) {\n if (data.constructor === type) {\n return data;\n }\n if (this.isArrayBuffer(data)) {\n return new type(data);\n }\n if (this.isArrayBufferView(data)) {\n return new type(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n static isBufferSource(data) {\n return this.isArrayBufferView(data)\n || this.isArrayBuffer(data);\n }\n static isArrayBufferView(data) {\n return ArrayBuffer.isView(data)\n || (data && this.isArrayBuffer(data.buffer));\n }\n static isEqual(a, b) {\n const aView = BufferSourceConverter.toUint8Array(a);\n const bView = BufferSourceConverter.toUint8Array(b);\n if (aView.length !== bView.byteLength) {\n return false;\n }\n for (let i = 0; i < aView.length; i++) {\n if (aView[i] !== bView[i]) {\n return false;\n }\n }\n return true;\n }\n static concat(...args) {\n let buffers;\n if (Array.isArray(args[0]) && !(args[1] instanceof Function)) {\n buffers = args[0];\n }\n else if (Array.isArray(args[0]) && args[1] instanceof Function) {\n buffers = args[0];\n }\n else {\n if (args[args.length - 1] instanceof Function) {\n buffers = args.slice(0, args.length - 1);\n }\n else {\n buffers = args;\n }\n }\n let size = 0;\n for (const buffer of buffers) {\n size += buffer.byteLength;\n }\n const res = new Uint8Array(size);\n let offset = 0;\n for (const buffer of buffers) {\n const view = this.toUint8Array(buffer);\n res.set(view, offset);\n offset += view.length;\n }\n if (args[args.length - 1] instanceof Function) {\n return this.toView(res, args[args.length - 1]);\n }\n return res.buffer;\n }\n}\n\nconst STRING_TYPE = \"string\";\nconst HEX_REGEX = /^[0-9a-f]+$/i;\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;\nclass Utf8Converter {\n static fromString(text) {\n const s = unescape(encodeURIComponent(text));\n const uintArray = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) {\n uintArray[i] = s.charCodeAt(i);\n }\n return uintArray.buffer;\n }\n static toString(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let encodedString = \"\";\n for (let i = 0; i < buf.length; i++) {\n encodedString += String.fromCharCode(buf[i]);\n }\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n}\nclass Utf16Converter {\n static toString(buffer, littleEndian = false) {\n const arrayBuffer = BufferSourceConverter.toArrayBuffer(buffer);\n const dataView = new DataView(arrayBuffer);\n let res = \"\";\n for (let i = 0; i < arrayBuffer.byteLength; i += 2) {\n const code = dataView.getUint16(i, littleEndian);\n res += String.fromCharCode(code);\n }\n return res;\n }\n static fromString(text, littleEndian = false) {\n const res = new ArrayBuffer(text.length * 2);\n const dataView = new DataView(res);\n for (let i = 0; i < text.length; i++) {\n dataView.setUint16(i * 2, text.charCodeAt(i), littleEndian);\n }\n return res;\n }\n}\nclass Convert {\n static isHex(data) {\n return typeof data === STRING_TYPE\n && HEX_REGEX.test(data);\n }\n static isBase64(data) {\n return typeof data === STRING_TYPE\n && BASE64_REGEX.test(data);\n }\n static isBase64Url(data) {\n return typeof data === STRING_TYPE\n && BASE64URL_REGEX.test(data);\n }\n static ToString(buffer, enc = \"utf8\") {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.ToUtf8String(buf);\n case \"binary\":\n return this.ToBinary(buf);\n case \"hex\":\n return this.ToHex(buf);\n case \"base64\":\n return this.ToBase64(buf);\n case \"base64url\":\n return this.ToBase64Url(buf);\n case \"utf16le\":\n return Utf16Converter.toString(buf, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buf);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static FromString(str, enc = \"utf8\") {\n if (!str) {\n return new ArrayBuffer(0);\n }\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.FromUtf8String(str);\n case \"binary\":\n return this.FromBinary(str);\n case \"hex\":\n return this.FromHex(str);\n case \"base64\":\n return this.FromBase64(str);\n case \"base64url\":\n return this.FromBase64Url(str);\n case \"utf16le\":\n return Utf16Converter.fromString(str, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(str);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static ToBase64(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n if (typeof btoa !== \"undefined\") {\n const binary = this.ToString(buf, \"binary\");\n return btoa(binary);\n }\n else {\n return Buffer.from(buf).toString(\"base64\");\n }\n }\n static FromBase64(base64) {\n const formatted = this.formatString(base64);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64(formatted)) {\n throw new TypeError(\"Argument 'base64Text' is not Base64 encoded\");\n }\n if (typeof atob !== \"undefined\") {\n return this.FromBinary(atob(formatted));\n }\n else {\n return new Uint8Array(Buffer.from(formatted, \"base64\")).buffer;\n }\n }\n static FromBase64Url(base64url) {\n const formatted = this.formatString(base64url);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64Url(formatted)) {\n throw new TypeError(\"Argument 'base64url' is not Base64Url encoded\");\n }\n return this.FromBase64(this.Base64Padding(formatted.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\")));\n }\n static ToBase64Url(data) {\n return this.ToBase64(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/\\=/g, \"\");\n }\n static FromUtf8String(text, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.FromBinary(text);\n case \"utf8\":\n return Utf8Converter.fromString(text);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(text);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.fromString(text, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static ToUtf8String(buffer, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.ToBinary(buffer);\n case \"utf8\":\n return Utf8Converter.toString(buffer);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buffer);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.toString(buffer, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static FromBinary(text) {\n const stringLength = text.length;\n const resultView = new Uint8Array(stringLength);\n for (let i = 0; i < stringLength; i++) {\n resultView[i] = text.charCodeAt(i);\n }\n return resultView.buffer;\n }\n static ToBinary(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let res = \"\";\n for (let i = 0; i < buf.length; i++) {\n res += String.fromCharCode(buf[i]);\n }\n return res;\n }\n static ToHex(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let result = \"\";\n const len = buf.length;\n for (let i = 0; i < len; i++) {\n const byte = buf[i];\n if (byte < 16) {\n result += \"0\";\n }\n result += byte.toString(16);\n }\n return result;\n }\n static FromHex(hexString) {\n let formatted = this.formatString(hexString);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isHex(formatted)) {\n throw new TypeError(\"Argument 'hexString' is not HEX encoded\");\n }\n if (formatted.length % 2) {\n formatted = `0${formatted}`;\n }\n const res = new Uint8Array(formatted.length / 2);\n for (let i = 0; i < formatted.length; i = i + 2) {\n const c = formatted.slice(i, i + 2);\n res[i / 2] = parseInt(c, 16);\n }\n return res.buffer;\n }\n static ToUtf16String(buffer, littleEndian = false) {\n return Utf16Converter.toString(buffer, littleEndian);\n }\n static FromUtf16String(text, littleEndian = false) {\n return Utf16Converter.fromString(text, littleEndian);\n }\n static Base64Padding(base64) {\n const padCount = 4 - (base64.length % 4);\n if (padCount < 4) {\n for (let i = 0; i < padCount; i++) {\n base64 += \"=\";\n }\n }\n return base64;\n }\n static formatString(data) {\n return (data === null || data === void 0 ? void 0 : data.replace(/[\\n\\r\\t ]/g, \"\")) || \"\";\n }\n}\nConvert.DEFAULT_UTF8_ENCODING = \"utf8\";\n\nfunction assign(target, ...sources) {\n const res = arguments[0];\n for (let i = 1; i < arguments.length; i++) {\n const obj = arguments[i];\n for (const prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\nfunction combine(...buf) {\n const totalByteLength = buf.map((item) => item.byteLength).reduce((prev, cur) => prev + cur);\n const res = new Uint8Array(totalByteLength);\n let currentPos = 0;\n buf.map((item) => new Uint8Array(item)).forEach((arr) => {\n for (const item2 of arr) {\n res[currentPos++] = item2;\n }\n });\n return res.buffer;\n}\nfunction isEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexports.BufferSourceConverter = BufferSourceConverter;\nexports.Convert = Convert;\nexports.assign = assign;\nexports.combine = combine;\nexports.isEqual = isEqual;\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, encoder);\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n /* eslint operator-linebreak: [2, \"before\"] */\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' '),\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri +\n (headerExtension.attributes ? ' ' + headerExtension.attributes : '') +\n '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb=> {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type &&\n existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrÑ–bute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substring(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range\n .trim()\n .split(/\\s+/)\n .join(' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => comps.join(' ').trim())\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next\n while ((next = re[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $floor = GetIntrinsic('%Math.floor%');\n\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(fn, 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(fn, 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AbstractTokenizer = void 0;\r\nconst peek_readable_1 = require(\"peek-readable\");\r\n/**\r\n * Core tokenizer\r\n */\r\nclass AbstractTokenizer {\r\n constructor(fileInfo) {\r\n /**\r\n * Tokenizer-stream position\r\n */\r\n this.position = 0;\r\n this.numBuffer = new Uint8Array(8);\r\n this.fileInfo = fileInfo ? fileInfo : {};\r\n }\r\n /**\r\n * Read a token from the tokenizer-stream\r\n * @param token - The token to read\r\n * @param position - If provided, the desired position in the tokenizer-stream\r\n * @returns Promise with token data\r\n */\r\n async readToken(token, position = this.position) {\r\n const uint8Array = Buffer.alloc(token.len);\r\n const len = await this.readBuffer(uint8Array, { position });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(uint8Array, 0);\r\n }\r\n /**\r\n * Peek a token from the tokenizer-stream.\r\n * @param token - Token to peek from the tokenizer-stream.\r\n * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\r\n * @returns Promise with token data\r\n */\r\n async peekToken(token, position = this.position) {\r\n const uint8Array = Buffer.alloc(token.len);\r\n const len = await this.peekBuffer(uint8Array, { position });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(uint8Array, 0);\r\n }\r\n /**\r\n * Read a numeric token from the stream\r\n * @param token - Numeric token\r\n * @returns Promise with number\r\n */\r\n async readNumber(token) {\r\n const len = await this.readBuffer(this.numBuffer, { length: token.len });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(this.numBuffer, 0);\r\n }\r\n /**\r\n * Read a numeric token from the stream\r\n * @param token - Numeric token\r\n * @returns Promise with number\r\n */\r\n async peekNumber(token) {\r\n const len = await this.peekBuffer(this.numBuffer, { length: token.len });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(this.numBuffer, 0);\r\n }\r\n /**\r\n * Ignore number of bytes, advances the pointer in under tokenizer-stream.\r\n * @param length - Number of bytes to ignore\r\n * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\r\n */\r\n async ignore(length) {\r\n if (this.fileInfo.size !== undefined) {\r\n const bytesLeft = this.fileInfo.size - this.position;\r\n if (length > bytesLeft) {\r\n this.position += bytesLeft;\r\n return bytesLeft;\r\n }\r\n }\r\n this.position += length;\r\n return length;\r\n }\r\n async close() {\r\n // empty\r\n }\r\n normalizeOptions(uint8Array, options) {\r\n if (options && options.position !== undefined && options.position < this.position) {\r\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n }\r\n if (options) {\r\n return {\r\n mayBeLess: options.mayBeLess === true,\r\n offset: options.offset ? options.offset : 0,\r\n length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),\r\n position: options.position ? options.position : this.position\r\n };\r\n }\r\n return {\r\n mayBeLess: false,\r\n offset: 0,\r\n length: uint8Array.length,\r\n position: this.position\r\n };\r\n }\r\n}\r\nexports.AbstractTokenizer = AbstractTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BufferTokenizer = void 0;\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nclass BufferTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n /**\r\n * Construct BufferTokenizer\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param fileInfo - Pass additional file information to the tokenizer\r\n */\r\n constructor(uint8Array, fileInfo) {\r\n super(fileInfo);\r\n this.uint8Array = uint8Array;\r\n this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;\r\n }\r\n /**\r\n * Read buffer from tokenizer\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param options - Read behaviour options\r\n * @returns {Promise}\r\n */\r\n async readBuffer(uint8Array, options) {\r\n if (options && options.position) {\r\n if (options.position < this.position) {\r\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n }\r\n this.position = options.position;\r\n }\r\n const bytesRead = await this.peekBuffer(uint8Array, options);\r\n this.position += bytesRead;\r\n return bytesRead;\r\n }\r\n /**\r\n * Peek (read ahead) buffer from tokenizer\r\n * @param uint8Array\r\n * @param options - Read behaviour options\r\n * @returns {Promise}\r\n */\r\n async peekBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);\r\n if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n else {\r\n uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);\r\n return bytes2read;\r\n }\r\n }\r\n async close() {\r\n // empty\r\n }\r\n}\r\nexports.BufferTokenizer = BufferTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fromFile = exports.FileTokenizer = void 0;\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst fs = require(\"./FsPromise\");\r\nclass FileTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n constructor(fd, fileInfo) {\r\n super(fileInfo);\r\n this.fd = fd;\r\n }\r\n /**\r\n * Read buffer from file\r\n * @param uint8Array - Uint8Array to write result to\r\n * @param options - Read behaviour options\r\n * @returns Promise number of bytes read\r\n */\r\n async readBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n this.position = normOptions.position;\r\n const res = await fs.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position);\r\n this.position += res.bytesRead;\r\n if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n return res.bytesRead;\r\n }\r\n /**\r\n * Peek buffer from file\r\n * @param uint8Array - Uint8Array (or Buffer) to write data to\r\n * @param options - Read behaviour options\r\n * @returns Promise number of bytes read\r\n */\r\n async peekBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n const res = await fs.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position);\r\n if ((!normOptions.mayBeLess) && res.bytesRead < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n return res.bytesRead;\r\n }\r\n async close() {\r\n return fs.close(this.fd);\r\n }\r\n}\r\nexports.FileTokenizer = FileTokenizer;\r\nasync function fromFile(sourceFilePath) {\r\n const stat = await fs.stat(sourceFilePath);\r\n if (!stat.isFile) {\r\n throw new Error(`File not a file: ${sourceFilePath}`);\r\n }\r\n const fd = await fs.open(sourceFilePath, 'r');\r\n return new FileTokenizer(fd, { path: sourceFilePath, size: stat.size });\r\n}\r\nexports.fromFile = fromFile;\r\n","\"use strict\";\r\n/**\r\n * Module convert fs functions to promise based functions\r\n */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.readFile = exports.writeFileSync = exports.writeFile = exports.read = exports.open = exports.close = exports.stat = exports.createReadStream = exports.pathExists = void 0;\r\nconst fs = require(\"fs\");\r\nexports.pathExists = fs.existsSync;\r\nexports.createReadStream = fs.createReadStream;\r\nasync function stat(path) {\r\n return new Promise((resolve, reject) => {\r\n fs.stat(path, (err, stats) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve(stats);\r\n });\r\n });\r\n}\r\nexports.stat = stat;\r\nasync function close(fd) {\r\n return new Promise((resolve, reject) => {\r\n fs.close(fd, err => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve();\r\n });\r\n });\r\n}\r\nexports.close = close;\r\nasync function open(path, mode) {\r\n return new Promise((resolve, reject) => {\r\n fs.open(path, mode, (err, fd) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve(fd);\r\n });\r\n });\r\n}\r\nexports.open = open;\r\nasync function read(fd, buffer, offset, length, position) {\r\n return new Promise((resolve, reject) => {\r\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, _buffer) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve({ bytesRead, buffer: _buffer });\r\n });\r\n });\r\n}\r\nexports.read = read;\r\nasync function writeFile(path, data) {\r\n return new Promise((resolve, reject) => {\r\n fs.writeFile(path, data, err => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve();\r\n });\r\n });\r\n}\r\nexports.writeFile = writeFile;\r\nfunction writeFileSync(path, data) {\r\n fs.writeFileSync(path, data);\r\n}\r\nexports.writeFileSync = writeFileSync;\r\nasync function readFile(path) {\r\n return new Promise((resolve, reject) => {\r\n fs.readFile(path, (err, buffer) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve(buffer);\r\n });\r\n });\r\n}\r\nexports.readFile = readFile;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ReadStreamTokenizer = void 0;\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst maxBufferSize = 256000;\r\nclass ReadStreamTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n constructor(stream, fileInfo) {\r\n super(fileInfo);\r\n this.streamReader = new peek_readable_1.StreamReader(stream);\r\n }\r\n /**\r\n * Get file information, an HTTP-client may implement this doing a HEAD request\r\n * @return Promise with file information\r\n */\r\n async getFileInfo() {\r\n return this.fileInfo;\r\n }\r\n /**\r\n * Read buffer from tokenizer\r\n * @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream\r\n * @param options - Read behaviour options\r\n * @returns Promise with number of bytes read\r\n */\r\n async readBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n const skipBytes = normOptions.position - this.position;\r\n if (skipBytes > 0) {\r\n await this.ignore(skipBytes);\r\n return this.readBuffer(uint8Array, options);\r\n }\r\n else if (skipBytes < 0) {\r\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n }\r\n if (normOptions.length === 0) {\r\n return 0;\r\n }\r\n const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length);\r\n this.position += bytesRead;\r\n if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n return bytesRead;\r\n }\r\n /**\r\n * Peek (read ahead) buffer from tokenizer\r\n * @param uint8Array - Uint8Array (or Buffer) to write data to\r\n * @param options - Read behaviour options\r\n * @returns Promise with number of bytes peeked\r\n */\r\n async peekBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n let bytesRead = 0;\r\n if (normOptions.position) {\r\n const skipBytes = normOptions.position - this.position;\r\n if (skipBytes > 0) {\r\n const skipBuffer = new Uint8Array(normOptions.length + skipBytes);\r\n bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });\r\n uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset);\r\n return bytesRead - skipBytes;\r\n }\r\n else if (skipBytes < 0) {\r\n throw new Error('Cannot peek from a negative offset in a stream');\r\n }\r\n }\r\n if (normOptions.length > 0) {\r\n try {\r\n bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length);\r\n }\r\n catch (err) {\r\n if (options && options.mayBeLess && err instanceof peek_readable_1.EndOfStreamError) {\r\n return 0;\r\n }\r\n throw err;\r\n }\r\n if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n }\r\n return bytesRead;\r\n }\r\n async ignore(length) {\r\n // debug(`ignore ${this.position}...${this.position + length - 1}`);\r\n const bufSize = Math.min(maxBufferSize, length);\r\n const buf = new Uint8Array(bufSize);\r\n let totBytesRead = 0;\r\n while (totBytesRead < length) {\r\n const remaining = length - totBytesRead;\r\n const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });\r\n if (bytesRead < 0) {\r\n return bytesRead;\r\n }\r\n totBytesRead += bytesRead;\r\n }\r\n return totBytesRead;\r\n }\r\n}\r\nexports.ReadStreamTokenizer = ReadStreamTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fromBuffer = exports.fromStream = exports.EndOfStreamError = void 0;\r\nconst ReadStreamTokenizer_1 = require(\"./ReadStreamTokenizer\");\r\nconst BufferTokenizer_1 = require(\"./BufferTokenizer\");\r\nvar peek_readable_1 = require(\"peek-readable\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return peek_readable_1.EndOfStreamError; } });\r\n/**\r\n * Construct ReadStreamTokenizer from given Stream.\r\n * Will set fileSize, if provided given Stream has set the .path property/\r\n * @param stream - Read from Node.js Stream.Readable\r\n * @param fileInfo - Pass the file information, like size and MIME-type of the corresponding stream.\r\n * @returns ReadStreamTokenizer\r\n */\r\nfunction fromStream(stream, fileInfo) {\r\n fileInfo = fileInfo ? fileInfo : {};\r\n return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, fileInfo);\r\n}\r\nexports.fromStream = fromStream;\r\n/**\r\n * Construct ReadStreamTokenizer from given Buffer.\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param fileInfo - Pass additional file information to the tokenizer\r\n * @returns BufferTokenizer\r\n */\r\nfunction fromBuffer(uint8Array, fileInfo) {\r\n return new BufferTokenizer_1.BufferTokenizer(uint8Array, fileInfo);\r\n}\r\nexports.fromBuffer = fromBuffer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fromStream = exports.fromBuffer = exports.EndOfStreamError = exports.fromFile = void 0;\r\nconst fs = require(\"./FsPromise\");\r\nconst core = require(\"./core\");\r\nvar FileTokenizer_1 = require(\"./FileTokenizer\");\r\nObject.defineProperty(exports, \"fromFile\", { enumerable: true, get: function () { return FileTokenizer_1.fromFile; } });\r\nvar core_1 = require(\"./core\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return core_1.EndOfStreamError; } });\r\nObject.defineProperty(exports, \"fromBuffer\", { enumerable: true, get: function () { return core_1.fromBuffer; } });\r\n/**\r\n * Construct ReadStreamTokenizer from given Stream.\r\n * Will set fileSize, if provided given Stream has set the .path property.\r\n * @param stream - Node.js Stream.Readable\r\n * @param fileInfo - Pass additional file information to the tokenizer\r\n * @returns Tokenizer\r\n */\r\nasync function fromStream(stream, fileInfo) {\r\n fileInfo = fileInfo ? fileInfo : {};\r\n if (stream.path) {\r\n const stat = await fs.stat(stream.path);\r\n fileInfo.path = stream.path;\r\n fileInfo.size = stat.size;\r\n }\r\n return core.fromStream(stream, fileInfo);\r\n}\r\nexports.fromStream = fromStream;\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnsiStringType = exports.StringType = exports.BufferType = exports.Uint8ArrayType = exports.IgnoreType = exports.Float80_LE = exports.Float80_BE = exports.Float64_LE = exports.Float64_BE = exports.Float32_LE = exports.Float32_BE = exports.Float16_LE = exports.Float16_BE = exports.INT64_BE = exports.UINT64_BE = exports.INT64_LE = exports.UINT64_LE = exports.INT32_LE = exports.INT32_BE = exports.INT24_BE = exports.INT24_LE = exports.INT16_LE = exports.INT16_BE = exports.INT8 = exports.UINT32_BE = exports.UINT32_LE = exports.UINT24_BE = exports.UINT24_LE = exports.UINT16_BE = exports.UINT16_LE = exports.UINT8 = void 0;\nconst ieee754 = require(\"ieee754\");\n// Primitive types\nfunction dv(array) {\n return new DataView(array.buffer, array.byteOffset);\n}\n/**\n * 8-bit unsigned integer\n */\nexports.UINT8 = {\n len: 1,\n get(array, offset) {\n return dv(array).getUint8(offset);\n },\n put(array, offset, value) {\n dv(array).setUint8(offset, value);\n return offset + 1;\n }\n};\n/**\n * 16-bit unsigned integer, Little Endian byte order\n */\nexports.UINT16_LE = {\n len: 2,\n get(array, offset) {\n return dv(array).getUint16(offset, true);\n },\n put(array, offset, value) {\n dv(array).setUint16(offset, value, true);\n return offset + 2;\n }\n};\n/**\n * 16-bit unsigned integer, Big Endian byte order\n */\nexports.UINT16_BE = {\n len: 2,\n get(array, offset) {\n return dv(array).getUint16(offset);\n },\n put(array, offset, value) {\n dv(array).setUint16(offset, value);\n return offset + 2;\n }\n};\n/**\n * 24-bit unsigned integer, Little Endian byte order\n */\nexports.UINT24_LE = {\n len: 3,\n get(array, offset) {\n const dataView = dv(array);\n return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint8(offset, value & 0xff);\n dataView.setUint16(offset + 1, value >> 8, true);\n return offset + 3;\n }\n};\n/**\n * 24-bit unsigned integer, Big Endian byte order\n */\nexports.UINT24_BE = {\n len: 3,\n get(array, offset) {\n const dataView = dv(array);\n return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint16(offset, value >> 8);\n dataView.setUint8(offset + 2, value & 0xff);\n return offset + 3;\n }\n};\n/**\n * 32-bit unsigned integer, Little Endian byte order\n */\nexports.UINT32_LE = {\n len: 4,\n get(array, offset) {\n return dv(array).getUint32(offset, true);\n },\n put(array, offset, value) {\n dv(array).setUint32(offset, value, true);\n return offset + 4;\n }\n};\n/**\n * 32-bit unsigned integer, Big Endian byte order\n */\nexports.UINT32_BE = {\n len: 4,\n get(array, offset) {\n return dv(array).getUint32(offset);\n },\n put(array, offset, value) {\n dv(array).setUint32(offset, value);\n return offset + 4;\n }\n};\n/**\n * 8-bit signed integer\n */\nexports.INT8 = {\n len: 1,\n get(array, offset) {\n return dv(array).getInt8(offset);\n },\n put(array, offset, value) {\n dv(array).setInt8(offset, value);\n return offset + 1;\n }\n};\n/**\n * 16-bit signed integer, Big Endian byte order\n */\nexports.INT16_BE = {\n len: 2,\n get(array, offset) {\n return dv(array).getInt16(offset);\n },\n put(array, offset, value) {\n dv(array).setInt16(offset, value);\n return offset + 2;\n }\n};\n/**\n * 16-bit signed integer, Little Endian byte order\n */\nexports.INT16_LE = {\n len: 2,\n get(array, offset) {\n return dv(array).getInt16(offset, true);\n },\n put(array, offset, value) {\n dv(array).setInt16(offset, value, true);\n return offset + 2;\n }\n};\n/**\n * 24-bit signed integer, Little Endian byte order\n */\nexports.INT24_LE = {\n len: 3,\n get(array, offset) {\n const unsigned = exports.UINT24_LE.get(array, offset);\n return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint8(offset, value & 0xff);\n dataView.setUint16(offset + 1, value >> 8, true);\n return offset + 3;\n }\n};\n/**\n * 24-bit signed integer, Big Endian byte order\n */\nexports.INT24_BE = {\n len: 3,\n get(array, offset) {\n const unsigned = exports.UINT24_BE.get(array, offset);\n return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n },\n put(array, offset, value) {\n const dataView = dv(array);\n dataView.setUint16(offset, value >> 8);\n dataView.setUint8(offset + 2, value & 0xff);\n return offset + 3;\n }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexports.INT32_BE = {\n len: 4,\n get(array, offset) {\n return dv(array).getInt32(offset);\n },\n put(array, offset, value) {\n dv(array).setInt32(offset, value);\n return offset + 4;\n }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexports.INT32_LE = {\n len: 4,\n get(array, offset) {\n return dv(array).getInt32(offset, true);\n },\n put(array, offset, value) {\n dv(array).setInt32(offset, value, true);\n return offset + 4;\n }\n};\n/**\n * 64-bit unsigned integer, Little Endian byte order\n */\nexports.UINT64_LE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigUint64(offset, true);\n },\n put(array, offset, value) {\n dv(array).setBigUint64(offset, value, true);\n return offset + 8;\n }\n};\n/**\n * 64-bit signed integer, Little Endian byte order\n */\nexports.INT64_LE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigInt64(offset, true);\n },\n put(array, offset, value) {\n dv(array).setBigInt64(offset, value, true);\n return offset + 8;\n }\n};\n/**\n * 64-bit unsigned integer, Big Endian byte order\n */\nexports.UINT64_BE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigUint64(offset);\n },\n put(array, offset, value) {\n dv(array).setBigUint64(offset, value);\n return offset + 8;\n }\n};\n/**\n * 64-bit signed integer, Big Endian byte order\n */\nexports.INT64_BE = {\n len: 8,\n get(array, offset) {\n return dv(array).getBigInt64(offset);\n },\n put(array, offset, value) {\n dv(array).setBigInt64(offset, value);\n return offset + 8;\n }\n};\n/**\n * IEEE 754 16-bit (half precision) float, big endian\n */\nexports.Float16_BE = {\n len: 2,\n get(dataView, offset) {\n return ieee754.read(dataView, offset, false, 10, this.len);\n },\n put(dataView, offset, value) {\n ieee754.write(dataView, value, offset, false, 10, this.len);\n return offset + this.len;\n }\n};\n/**\n * IEEE 754 16-bit (half precision) float, little endian\n */\nexports.Float16_LE = {\n len: 2,\n get(array, offset) {\n return ieee754.read(array, offset, true, 10, this.len);\n },\n put(array, offset, value) {\n ieee754.write(array, value, offset, true, 10, this.len);\n return offset + this.len;\n }\n};\n/**\n * IEEE 754 32-bit (single precision) float, big endian\n */\nexports.Float32_BE = {\n len: 4,\n get(array, offset) {\n return dv(array).getFloat32(offset);\n },\n put(array, offset, value) {\n dv(array).setFloat32(offset, value);\n return offset + 4;\n }\n};\n/**\n * IEEE 754 32-bit (single precision) float, little endian\n */\nexports.Float32_LE = {\n len: 4,\n get(array, offset) {\n return dv(array).getFloat32(offset, true);\n },\n put(array, offset, value) {\n dv(array).setFloat32(offset, value, true);\n return offset + 4;\n }\n};\n/**\n * IEEE 754 64-bit (double precision) float, big endian\n */\nexports.Float64_BE = {\n len: 8,\n get(array, offset) {\n return dv(array).getFloat64(offset);\n },\n put(array, offset, value) {\n dv(array).setFloat64(offset, value);\n return offset + 8;\n }\n};\n/**\n * IEEE 754 64-bit (double precision) float, little endian\n */\nexports.Float64_LE = {\n len: 8,\n get(array, offset) {\n return dv(array).getFloat64(offset, true);\n },\n put(array, offset, value) {\n dv(array).setFloat64(offset, value, true);\n return offset + 8;\n }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, big endian\n */\nexports.Float80_BE = {\n len: 10,\n get(array, offset) {\n return ieee754.read(array, offset, false, 63, this.len);\n },\n put(array, offset, value) {\n ieee754.write(array, value, offset, false, 63, this.len);\n return offset + this.len;\n }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, little endian\n */\nexports.Float80_LE = {\n len: 10,\n get(array, offset) {\n return ieee754.read(array, offset, true, 63, this.len);\n },\n put(array, offset, value) {\n ieee754.write(array, value, offset, true, 63, this.len);\n return offset + this.len;\n }\n};\n/**\n * Ignore a given number of bytes\n */\nclass IgnoreType {\n /**\n * @param len number of bytes to ignore\n */\n constructor(len) {\n this.len = len;\n }\n // ToDo: don't read, but skip data\n get(array, off) {\n }\n}\nexports.IgnoreType = IgnoreType;\nclass Uint8ArrayType {\n constructor(len) {\n this.len = len;\n }\n get(array, offset) {\n return array.subarray(offset, offset + this.len);\n }\n}\nexports.Uint8ArrayType = Uint8ArrayType;\nclass BufferType {\n constructor(len) {\n this.len = len;\n }\n get(uint8Array, off) {\n return Buffer.from(uint8Array.subarray(off, off + this.len));\n }\n}\nexports.BufferType = BufferType;\n/**\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\n */\nclass StringType {\n constructor(len, encoding) {\n this.len = len;\n this.encoding = encoding;\n }\n get(uint8Array, offset) {\n return Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);\n }\n}\nexports.StringType = StringType;\n/**\n * ANSI Latin 1 String\n * Using windows-1252 / ISO 8859-1 decoding\n */\nclass AnsiStringType {\n constructor(len) {\n this.len = len;\n }\n static decode(buffer, offset, until) {\n let str = '';\n for (let i = offset; i < until; ++i) {\n str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));\n }\n return str;\n }\n static inRange(a, min, max) {\n return min <= a && a <= max;\n }\n static codePointToString(cp) {\n if (cp <= 0xFFFF) {\n return String.fromCharCode(cp);\n }\n else {\n cp -= 0x10000;\n return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);\n }\n }\n static singleByteDecoder(bite) {\n if (AnsiStringType.inRange(bite, 0x00, 0x7F)) {\n return bite;\n }\n const codePoint = AnsiStringType.windows1252[bite - 0x80];\n if (codePoint === null) {\n throw Error('invaliding encoding');\n }\n return codePoint;\n }\n get(buffer, offset = 0) {\n return AnsiStringType.decode(buffer, offset, offset + this.len);\n }\n}\nexports.AnsiStringType = AnsiStringType;\nAnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,\n 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,\n 8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,\n 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,\n 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\n 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,\n 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,\n 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,\n 248, 249, 250, 251, 252, 253, 254, 255];\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/*\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nvar punycode = require('punycode');\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n/*\n * define these here so at least they only have to be\n * compiled once on the first module load.\n */\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,\n\n /*\n * RFC 2396: characters reserved for delimiting URLs.\n * We actually just auto-escape these.\n */\n delims = [\n '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'\n ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [\n '{', '}', '|', '\\\\', '^', '`'\n ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n /*\n * Characters that are never ever allowed in a hostname.\n * Note that any invalid chars are also handled, but these\n * are the ones that are *expected* to be seen, so we fast-path\n * them.\n */\n nonHostChars = [\n '%', '/', '?', ';', '#'\n ].concat(autoEscape),\n hostEndingChars = [\n '/', '?', '#'\n ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n javascript: true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('qs');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && typeof url === 'object' && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n if (typeof url !== 'string') {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n /*\n * Copy chrome, IE, opera backslash-handling behavior.\n * Back slashes before the query string get converted to forward slashes\n * See: https://code.google.com/p/chromium/issues/detail?id=25916\n */\n var queryIndex = url.indexOf('?'),\n splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n /*\n * trim before proceeding.\n * This is to support parse stuff like \" http://foo.com \\n\"\n */\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n /*\n * figure out if it's got a host\n * user@server is *always* interpreted as a hostname, and url\n * resolution will treat //foo/bar as host=foo,path=bar because that's\n * how the browser resolves relative URLs.\n */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@/]+@[^@/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {\n\n /*\n * there's a hostname.\n * the first instance of /, ?, ;, or # ends the host.\n *\n * If there is an @ in the hostname, then non-host chars *are* allowed\n * to the left of the last @ sign, unless some host-ending character\n * comes *before* the @-sign.\n * URLs are obnoxious.\n *\n * ex:\n * http://a@b@c/ => user:a@b host:c\n * http://a@b?@c => user:a host:c path:/?@c\n */\n\n /*\n * v0.12 TODO(isaacs): This is not quite how Chrome does things.\n * Review our test case against browsers more comprehensively.\n */\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n }\n\n /*\n * at this point, either we have an explicit point where the\n * auth portion cannot go past, or the last @ char is the decider.\n */\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n /*\n * atSign must be in auth portion.\n * http://a@b/c@d => host:b auth:a path:/c@d\n */\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n /*\n * Now we have a portion which is definitely the auth.\n * Pull that off.\n */\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) { hostEnd = rest.length; }\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n /*\n * we've indicated that there is a hostname,\n * so even if it's empty, it has to be present.\n */\n this.hostname = this.hostname || '';\n\n /*\n * if hostname begins with [ and ends with ]\n * assume that it's an IPv6 address.\n */\n var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n /*\n * we replace non-ASCII char with a temporary placeholder\n * we need this to make sure size of hostname is not\n * broken by replacing non-ASCII by nothing\n */\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n /*\n * IDNA Support: Returns a punycoded representation of \"domain\".\n * It only converts parts of the domain name that\n * have non-ASCII characters, i.e. it doesn't matter if\n * you call it with a domain that already is ASCII-only.\n */\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n /*\n * strip [ and ] from the hostname\n * the host field still retains them, though\n */\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n /*\n * now rest is set to the post-host stuff.\n * chop off any delim chars.\n */\n if (!unsafeProtocol[lowerProto]) {\n\n /*\n * First, make 100% sure that any \"autoEscape\" chars get\n * escaped, even if encodeURIComponent doesn't think they\n * need to be.\n */\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1) { continue; }\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n // to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n /*\n * ensure it's an object, and not a string url.\n * If it's an obj, this is a no-op.\n * this way, you can call url_format() on strings\n * to clean up potentially wonky urls.\n */\n if (typeof obj === 'string') { obj = urlParse(obj); }\n if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); }\n return obj.format();\n}\n\nUrl.prototype.format = function () {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) {\n query = querystring.stringify(this.query, {\n arrayFormat: 'repeat',\n addQueryPrefix: false\n });\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; }\n\n /*\n * only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n * unless they had them to begin with.\n */\n if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; }\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; }\n if (search && search.charAt(0) !== '?') { search = '?' + search; }\n\n pathname = pathname.replace(/[?#]/g, function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) { return relative; }\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n if (typeof relative === 'string') {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n /*\n * hash is always overridden, no matter what.\n * even href=\"\" will remove it.\n */\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol') { result[rkey] = relative[rkey]; }\n }\n\n // urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n result.pathname = '/';\n result.path = result.pathname;\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n /*\n * if it's a known url protocol, then changing\n * the protocol does weird things\n * first, if it's not file:, then we MUST have a host,\n * and if there was a path\n * to begin with, then we MUST have a path.\n * if it is file:, then the host is dropped,\n * because that's known to be hostless.\n * anything else is assumed to be absolute.\n */\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift())) { }\n if (!relative.host) { relative.host = ''; }\n if (!relative.hostname) { relative.hostname = ''; }\n if (relPath[0] !== '') { relPath.unshift(''); }\n if (relPath.length < 2) { relPath.unshift(''); }\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n /*\n * if the url is a non-slashed url, then relative\n * links like ../.. should be able\n * to crawl up to the hostname, as well. This is strange.\n * result.protocol has already been set by now.\n * Later on, put the first path part into the host field.\n */\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); }\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); }\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = relative.host || relative.host === '' ? relative.host : result.host;\n result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n /*\n * it's relative\n * throw away the existing file, and take the new path instead.\n */\n if (!srcPath) { srcPath = []; }\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (relative.search != null) {\n /*\n * just pull out the search.\n * like href='?foo'.\n * Put this after the other two cases because it simplifies the booleans\n */\n if (psychotic) {\n result.host = srcPath.shift();\n result.hostname = result.host;\n /*\n * occationaly the auth can get stuck only in host\n * this especially happens in cases like\n * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n */\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.hostname = authInHost.shift();\n result.host = result.hostname;\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n // to support http.request\n if (result.pathname !== null || result.search !== null) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n /*\n * no path at all. easy.\n * we've already handled the other stuff above.\n */\n result.pathname = null;\n // to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n /*\n * if a url ENDs in . or .., then it must get a trailing slash.\n * however, if it ends in anything else non-slashy,\n * then it must NOT get a trailing slash.\n */\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === '';\n\n /*\n * strip single dots, resolve double dots to parent dir\n * if the path tries to go above the root, `up` ends up > 0\n */\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';\n result.host = result.hostname;\n /*\n * occationaly the auth can get stuck only in host\n * this especially happens in cases like\n * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n */\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.hostname = authInHost.shift();\n result.host = result.hostname;\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (srcPath.length > 0) {\n result.pathname = srcPath.join('/');\n } else {\n result.pathname = null;\n result.path = null;\n }\n\n // to support request.http\n if (result.pathname !== null || result.search !== null) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function () {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n","\nmodule.exports = require('./lib/urlsafe-base64');","/*!\n * urlsafe-base64\n */\n\n/**\n * Module Dependencies\n */\n\n// None yet!\n\n/**\n * Library version.\n */\n\nexports.version = '1.0.0';\n\n/**\n * .encode\n *\n * return an encoded Buffer as URL Safe Base64\n *\n * Note: This function encodes to the RFC 4648 Spec where '+' is encoded\n * as '-' and '/' is encoded as '_'. The padding character '=' is\n * removed.\n *\n * @param {Buffer} buffer\n * @return {String}\n * @api public\n */\n\nexports.encode = function encode(buffer) {\n\n return buffer.toString('base64')\n .replace(/\\+/g, '-') // Convert '+' to '-'\n .replace(/\\//g, '_') // Convert '/' to '_'\n .replace(/=+$/, ''); // Remove ending '='\n\n};\n\n/**\n * .decode\n *\n * return an decoded URL Safe Base64 as Buffer\n *\n * @param {String}\n * @return {Buffer}\n * @api public\n */\n\nexports.decode = function decode(base64) {\n\n // Add removed at end '='\n base64 += Array(5 - base64.length % 4).join('=');\n\n base64 = base64\n .replace(/\\-/g, '+') // Convert '-' to '+'\n .replace(/\\_/g, '/'); // Convert '_' to '/'\n\n return new Buffer(base64, 'base64');\n\n};\n\n/**\n * .validate\n *\n * Validates a string if it is URL Safe Base64 encoded.\n *\n * @param {String}\n * @return {Boolean}\n * @api public\n */\n\nexports.validate = function validate(base64) {\n\n return /^[A-Za-z0-9\\-_]+$/.test(base64);\n\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","(function(module) {\n 'use strict';\n\n module.exports.is_uri = is_iri;\n module.exports.is_http_uri = is_http_iri;\n module.exports.is_https_uri = is_https_iri;\n module.exports.is_web_uri = is_web_iri;\n // Create aliases\n module.exports.isUri = is_iri;\n module.exports.isHttpUri = is_http_iri;\n module.exports.isHttpsUri = is_https_iri;\n module.exports.isWebUri = is_web_iri;\n\n\n // private function\n // internal URI spitter method - direct from RFC 3986\n var splitUri = function(uri) {\n var splitted = uri.match(/(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/);\n return splitted;\n };\n\n function is_iri(value) {\n if (!value) {\n return;\n }\n\n // check for illegal characters\n if (/[^a-z0-9\\:\\/\\?\\#\\[\\]\\@\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=\\.\\-\\_\\~\\%]/i.test(value)) return;\n\n // check for hex escapes that aren't complete\n if (/%[^0-9a-f]/i.test(value)) return;\n if (/%[0-9a-f](:?[^0-9a-f]|$)/i.test(value)) return;\n\n var splitted = [];\n var scheme = '';\n var authority = '';\n var path = '';\n var query = '';\n var fragment = '';\n var out = '';\n\n // from RFC 3986\n splitted = splitUri(value);\n scheme = splitted[1]; \n authority = splitted[2];\n path = splitted[3];\n query = splitted[4];\n fragment = splitted[5];\n\n // scheme and path are required, though the path can be empty\n if (!(scheme && scheme.length && path.length >= 0)) return;\n\n // if authority is present, the path must be empty or begin with a /\n if (authority && authority.length) {\n if (!(path.length === 0 || /^\\//.test(path))) return;\n } else {\n // if authority is not present, the path must not start with //\n if (/^\\/\\//.test(path)) return;\n }\n\n // scheme must begin with a letter, then consist of letters, digits, +, ., or -\n if (!/^[a-z][a-z0-9\\+\\-\\.]*$/.test(scheme.toLowerCase())) return;\n\n // re-assemble the URL per section 5.3 in RFC 3986\n out += scheme + ':';\n if (authority && authority.length) {\n out += '//' + authority;\n }\n\n out += path;\n\n if (query && query.length) {\n out += '?' + query;\n }\n\n if (fragment && fragment.length) {\n out += '#' + fragment;\n }\n\n return out;\n }\n\n function is_http_iri(value, allowHttps) {\n if (!is_iri(value)) {\n return;\n }\n\n var splitted = [];\n var scheme = '';\n var authority = '';\n var path = '';\n var port = '';\n var query = '';\n var fragment = '';\n var out = '';\n\n // from RFC 3986\n splitted = splitUri(value);\n scheme = splitted[1]; \n authority = splitted[2];\n path = splitted[3];\n query = splitted[4];\n fragment = splitted[5];\n\n if (!scheme) return;\n\n if(allowHttps) {\n if (scheme.toLowerCase() != 'https') return;\n } else {\n if (scheme.toLowerCase() != 'http') return;\n }\n\n // fully-qualified URIs must have an authority section that is\n // a valid host\n if (!authority) {\n return;\n }\n\n // enable port component\n if (/:(\\d+)$/.test(authority)) {\n port = authority.match(/:(\\d+)$/)[0];\n authority = authority.replace(/:\\d+$/, '');\n }\n\n out += scheme + ':';\n out += '//' + authority;\n \n if (port) {\n out += port;\n }\n \n out += path;\n \n if(query && query.length){\n out += '?' + query;\n }\n\n if(fragment && fragment.length){\n out += '#' + fragment;\n }\n \n return out;\n }\n\n function is_https_iri(value) {\n return is_http_iri(value, true);\n }\n\n function is_web_iri(value) {\n return (is_http_iri(value) || is_https_iri(value));\n }\n\n})(module);\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar found = false;\n\tforEach(cache, function (getter, typedArray) {\n\t\tif (!found) {\n\t\t\ttry {\n\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t}\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn found;\n};\n\nvar trySlices = function tryAllSlices(value) {\n\tvar found = false;\n\tforEach(cache, function (getter, name) {\n\t\tif (!found) {\n\t\t\ttry {\n\t\t\t\tgetter(value);\n\t\t\t\tfound = $slice(name, 1);\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn found;\n};\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","module.exports = require(\"core-js/library/fn/array/from\");","module.exports = require(\"core-js/library/fn/array/is-array\");","module.exports = require(\"core-js/library/fn/date/now\");","module.exports = require(\"core-js/library/fn/json/stringify\");","module.exports = require(\"core-js/library/fn/map\");","module.exports = require(\"core-js/library/fn/number/is-integer\");","module.exports = require(\"core-js/library/fn/number/is-nan\");","module.exports = require(\"core-js/library/fn/object/assign\");","module.exports = require(\"core-js/library/fn/object/define-properties\");","module.exports = require(\"core-js/library/fn/object/define-property\");","module.exports = require(\"core-js/library/fn/object/entries\");","module.exports = require(\"core-js/library/fn/object/freeze\");","module.exports = require(\"core-js/library/fn/object/get-own-property-descriptor\");","module.exports = require(\"core-js/library/fn/object/get-own-property-descriptors\");","module.exports = require(\"core-js/library/fn/object/get-own-property-symbols\");","module.exports = require(\"core-js/library/fn/object/keys\");","module.exports = require(\"core-js/library/fn/object/values\");","module.exports = require(\"core-js/library/fn/parse-int\");","module.exports = require(\"core-js/library/fn/promise\");","module.exports = require(\"core-js/library/fn/reflect/apply\");","module.exports = require(\"core-js/library/fn/reflect/construct\");","module.exports = require(\"core-js/library/fn/reflect/define-property\");","module.exports = require(\"core-js/library/fn/reflect/delete-property\");","module.exports = require(\"core-js/library/fn/reflect/get-own-property-descriptor\");","module.exports = require(\"core-js/library/fn/set\");","module.exports = require(\"core-js/library/fn/symbol\");","module.exports = require(\"core-js/library/fn/symbol/iterator\");","module.exports = require(\"core-js/library/fn/weak-map\");","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar _Object$defineProperty = require(\"core-js/library/fn/object/define-property.js\");\nvar _Symbol = require(\"core-js/library/fn/symbol/index.js\");\nvar _Object$create = require(\"core-js/library/fn/object/create.js\");\nvar _Object$getPrototypeOf = require(\"core-js/library/fn/object/get-prototype-of.js\");\nvar _Object$setPrototypeOf = require(\"core-js/library/fn/object/set-prototype-of.js\");\nvar _Promise = require(\"core-js/library/fn/promise.js\");\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = _Object$defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof _Symbol ? _Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return _Object$defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = _Object$create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = _Object$getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw new Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return _Object$setPrototypeOf ? _Object$setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = _Object$create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = _Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw new Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _Symbol = require(\"core-js/library/fn/symbol/index.js\");\nvar _Symbol$iterator = require(\"core-js/library/fn/symbol/iterator.js\");\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","// GENERATED FILE. DO NOT EDIT.\nvar Long = (function(exports) {\n \"use strict\";\n \n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.default = void 0;\n \n /**\n * @license\n * Copyright 2009 The Closure Library Authors\n * Copyright 2020 Daniel Wirtz / The long.js Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n // WebAssembly optimizations to do native i64 multiplication and divide\n var wasm = null;\n \n try {\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports;\n } catch (e) {// no wasm support :(\n }\n /**\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n * See the from* functions below for more convenient ways of constructing Longs.\n * @exports Long\n * @class A Long class for representing a 64 bit two's-complement integer value.\n * @param {number} low The low (signed) 32 bits of the long\n * @param {number} high The high (signed) 32 bits of the long\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @constructor\n */\n \n \n function Long(low, high, unsigned) {\n /**\n * The low 32 bits as a signed value.\n * @type {number}\n */\n this.low = low | 0;\n /**\n * The high 32 bits as a signed value.\n * @type {number}\n */\n \n this.high = high | 0;\n /**\n * Whether unsigned or not.\n * @type {boolean}\n */\n \n this.unsigned = !!unsigned;\n } // The internal representation of a long is the two given signed, 32-bit values.\n // We use 32-bit pieces because these are the size of integers on which\n // Javascript performs bit-operations. For operations like addition and\n // multiplication, we split each number into 16 bit pieces, which can easily be\n // multiplied within Javascript's floating-point representation without overflow\n // or change in sign.\n //\n // In the algorithms below, we frequently reduce the negative case to the\n // positive case by negating the input(s) and then post-processing the result.\n // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n // a positive number, it overflows back into a negative). Not handling this\n // case would often result in infinite recursion.\n //\n // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n // methods on which they depend.\n \n /**\n * An indicator used to reliably determine if an object is a Long or not.\n * @type {boolean}\n * @const\n * @private\n */\n \n \n Long.prototype.__isLong__;\n Object.defineProperty(Long.prototype, \"__isLong__\", {\n value: true\n });\n /**\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n * @inner\n */\n \n function isLong(obj) {\n return (obj && obj[\"__isLong__\"]) === true;\n }\n /**\n * @function\n * @param {*} value number\n * @returns {number}\n * @inner\n */\n \n \n function ctz32(value) {\n var c = Math.clz32(value & -value);\n return value ? 31 - c : c;\n }\n /**\n * Tests if the specified object is a Long.\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n */\n \n \n Long.isLong = isLong;\n /**\n * A cache of the Long representations of small integer values.\n * @type {!Object}\n * @inner\n */\n \n var INT_CACHE = {};\n /**\n * A cache of the Long representations of small unsigned integer values.\n * @type {!Object}\n * @inner\n */\n \n var UINT_CACHE = {};\n /**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n \n function fromInt(value, unsigned) {\n var obj, cachedObj, cache;\n \n if (unsigned) {\n value >>>= 0;\n \n if (cache = 0 <= value && value < 256) {\n cachedObj = UINT_CACHE[value];\n if (cachedObj) return cachedObj;\n }\n \n obj = fromBits(value, 0, true);\n if (cache) UINT_CACHE[value] = obj;\n return obj;\n } else {\n value |= 0;\n \n if (cache = -128 <= value && value < 128) {\n cachedObj = INT_CACHE[value];\n if (cachedObj) return cachedObj;\n }\n \n obj = fromBits(value, value < 0 ? -1 : 0, false);\n if (cache) INT_CACHE[value] = obj;\n return obj;\n }\n }\n /**\n * Returns a Long representing the given 32 bit integer value.\n * @function\n * @param {number} value The 32 bit integer in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n \n \n Long.fromInt = fromInt;\n /**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n \n function fromNumber(value, unsigned) {\n if (isNaN(value)) return unsigned ? UZERO : ZERO;\n \n if (unsigned) {\n if (value < 0) return UZERO;\n if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n } else {\n if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n }\n \n if (value < 0) return fromNumber(-value, unsigned).neg();\n return fromBits(value % TWO_PWR_32_DBL | 0, value / TWO_PWR_32_DBL | 0, unsigned);\n }\n /**\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n * @function\n * @param {number} value The number in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n \n \n Long.fromNumber = fromNumber;\n /**\n * @param {number} lowBits\n * @param {number} highBits\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n \n function fromBits(lowBits, highBits, unsigned) {\n return new Long(lowBits, highBits, unsigned);\n }\n /**\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n * assumed to use 32 bits.\n * @function\n * @param {number} lowBits The low 32 bits\n * @param {number} highBits The high 32 bits\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n \n \n Long.fromBits = fromBits;\n /**\n * @function\n * @param {number} base\n * @param {number} exponent\n * @returns {number}\n * @inner\n */\n \n var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n \n /**\n * @param {string} str\n * @param {(boolean|number)=} unsigned\n * @param {number=} radix\n * @returns {!Long}\n * @inner\n */\n \n function fromString(str, unsigned, radix) {\n if (str.length === 0) throw Error('empty string');\n \n if (typeof unsigned === 'number') {\n // For goog.math.long compatibility\n radix = unsigned;\n unsigned = false;\n } else {\n unsigned = !!unsigned;\n }\n \n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\") return unsigned ? UZERO : ZERO;\n radix = radix || 10;\n if (radix < 2 || 36 < radix) throw RangeError('radix');\n var p;\n if ((p = str.indexOf('-')) > 0) throw Error('interior hyphen');else if (p === 0) {\n return fromString(str.substring(1), unsigned, radix).neg();\n } // Do several (8) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n \n var radixToPower = fromNumber(pow_dbl(radix, 8));\n var result = ZERO;\n \n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i),\n value = parseInt(str.substring(i, i + size), radix);\n \n if (size < 8) {\n var power = fromNumber(pow_dbl(radix, size));\n result = result.mul(power).add(fromNumber(value));\n } else {\n result = result.mul(radixToPower);\n result = result.add(fromNumber(value));\n }\n }\n \n result.unsigned = unsigned;\n return result;\n }\n /**\n * Returns a Long representation of the given string, written using the specified radix.\n * @function\n * @param {string} str The textual representation of the Long\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n * @returns {!Long} The corresponding Long value\n */\n \n \n Long.fromString = fromString;\n /**\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n \n function fromValue(val, unsigned) {\n if (typeof val === 'number') return fromNumber(val, unsigned);\n if (typeof val === 'string') return fromString(val, unsigned); // Throws for non-objects, converts non-instanceof Long:\n \n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\n }\n /**\n * Converts the specified value to a Long using the appropriate from* function for its type.\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long}\n */\n \n \n Long.fromValue = fromValue; // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n // no runtime penalty for these.\n \n /**\n * @type {number}\n * @const\n * @inner\n */\n \n var TWO_PWR_16_DBL = 1 << 16;\n /**\n * @type {number}\n * @const\n * @inner\n */\n \n var TWO_PWR_24_DBL = 1 << 24;\n /**\n * @type {number}\n * @const\n * @inner\n */\n \n var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n /**\n * @type {number}\n * @const\n * @inner\n */\n \n var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n /**\n * @type {number}\n * @const\n * @inner\n */\n \n var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n /**\n * @type {!Long}\n * @const\n * @inner\n */\n \n var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n /**\n * @type {!Long}\n * @inner\n */\n \n var ZERO = fromInt(0);\n /**\n * Signed zero.\n * @type {!Long}\n */\n \n Long.ZERO = ZERO;\n /**\n * @type {!Long}\n * @inner\n */\n \n var UZERO = fromInt(0, true);\n /**\n * Unsigned zero.\n * @type {!Long}\n */\n \n Long.UZERO = UZERO;\n /**\n * @type {!Long}\n * @inner\n */\n \n var ONE = fromInt(1);\n /**\n * Signed one.\n * @type {!Long}\n */\n \n Long.ONE = ONE;\n /**\n * @type {!Long}\n * @inner\n */\n \n var UONE = fromInt(1, true);\n /**\n * Unsigned one.\n * @type {!Long}\n */\n \n Long.UONE = UONE;\n /**\n * @type {!Long}\n * @inner\n */\n \n var NEG_ONE = fromInt(-1);\n /**\n * Signed negative one.\n * @type {!Long}\n */\n \n Long.NEG_ONE = NEG_ONE;\n /**\n * @type {!Long}\n * @inner\n */\n \n var MAX_VALUE = fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0, false);\n /**\n * Maximum signed value.\n * @type {!Long}\n */\n \n Long.MAX_VALUE = MAX_VALUE;\n /**\n * @type {!Long}\n * @inner\n */\n \n var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF | 0, 0xFFFFFFFF | 0, true);\n /**\n * Maximum unsigned value.\n * @type {!Long}\n */\n \n Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n /**\n * @type {!Long}\n * @inner\n */\n \n var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n /**\n * Minimum signed value.\n * @type {!Long}\n */\n \n Long.MIN_VALUE = MIN_VALUE;\n /**\n * @alias Long.prototype\n * @inner\n */\n \n var LongPrototype = Long.prototype;\n /**\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n * @this {!Long}\n * @returns {number}\n */\n \n LongPrototype.toInt = function toInt() {\n return this.unsigned ? this.low >>> 0 : this.low;\n };\n /**\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n * @this {!Long}\n * @returns {number}\n */\n \n \n LongPrototype.toNumber = function toNumber() {\n if (this.unsigned) return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n };\n /**\n * Converts the Long to a string written in the specified radix.\n * @this {!Long}\n * @param {number=} radix Radix (2-36), defaults to 10\n * @returns {string}\n * @override\n * @throws {RangeError} If `radix` is out of range\n */\n \n \n LongPrototype.toString = function toString(radix) {\n radix = radix || 10;\n if (radix < 2 || 36 < radix) throw RangeError('radix');\n if (this.isZero()) return '0';\n \n if (this.isNegative()) {\n // Unsigned Longs are never negative\n if (this.eq(MIN_VALUE)) {\n // We need to change the Long value before it can be negated, so we remove\n // the bottom-most digit in this base and then recurse to do the rest.\n var radixLong = fromNumber(radix),\n div = this.div(radixLong),\n rem1 = div.mul(radixLong).sub(this);\n return div.toString(radix) + rem1.toInt().toString(radix);\n } else return '-' + this.neg().toString(radix);\n } // Do several (6) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n \n \n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n rem = this;\n var result = '';\n \n while (true) {\n var remDiv = rem.div(radixToPower),\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n digits = intval.toString(radix);\n rem = remDiv;\n if (rem.isZero()) return digits + result;else {\n while (digits.length < 6) digits = '0' + digits;\n \n result = '' + digits + result;\n }\n }\n };\n /**\n * Gets the high 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed high bits\n */\n \n \n LongPrototype.getHighBits = function getHighBits() {\n return this.high;\n };\n /**\n * Gets the high 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned high bits\n */\n \n \n LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n return this.high >>> 0;\n };\n /**\n * Gets the low 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed low bits\n */\n \n \n LongPrototype.getLowBits = function getLowBits() {\n return this.low;\n };\n /**\n * Gets the low 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned low bits\n */\n \n \n LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n return this.low >>> 0;\n };\n /**\n * Gets the number of bits needed to represent the absolute value of this Long.\n * @this {!Long}\n * @returns {number}\n */\n \n \n LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n if (this.isNegative()) // Unsigned Longs are never negative\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n var val = this.high != 0 ? this.high : this.low;\n \n for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;\n \n return this.high != 0 ? bit + 33 : bit + 1;\n };\n /**\n * Tests if this Long's value equals zero.\n * @this {!Long}\n * @returns {boolean}\n */\n \n \n LongPrototype.isZero = function isZero() {\n return this.high === 0 && this.low === 0;\n };\n /**\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n * @returns {boolean}\n */\n \n \n LongPrototype.eqz = LongPrototype.isZero;\n /**\n * Tests if this Long's value is negative.\n * @this {!Long}\n * @returns {boolean}\n */\n \n LongPrototype.isNegative = function isNegative() {\n return !this.unsigned && this.high < 0;\n };\n /**\n * Tests if this Long's value is positive or zero.\n * @this {!Long}\n * @returns {boolean}\n */\n \n \n LongPrototype.isPositive = function isPositive() {\n return this.unsigned || this.high >= 0;\n };\n /**\n * Tests if this Long's value is odd.\n * @this {!Long}\n * @returns {boolean}\n */\n \n \n LongPrototype.isOdd = function isOdd() {\n return (this.low & 1) === 1;\n };\n /**\n * Tests if this Long's value is even.\n * @this {!Long}\n * @returns {boolean}\n */\n \n \n LongPrototype.isEven = function isEven() {\n return (this.low & 1) === 0;\n };\n /**\n * Tests if this Long's value equals the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.equals = function equals(other) {\n if (!isLong(other)) other = fromValue(other);\n if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1) return false;\n return this.high === other.high && this.low === other.low;\n };\n /**\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.eq = LongPrototype.equals;\n /**\n * Tests if this Long's value differs from the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.notEquals = function notEquals(other) {\n return !this.eq(\n /* validates */\n other);\n };\n /**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.neq = LongPrototype.notEquals;\n /**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.ne = LongPrototype.notEquals;\n /**\n * Tests if this Long's value is less than the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.lessThan = function lessThan(other) {\n return this.comp(\n /* validates */\n other) < 0;\n };\n /**\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.lt = LongPrototype.lessThan;\n /**\n * Tests if this Long's value is less than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n return this.comp(\n /* validates */\n other) <= 0;\n };\n /**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.lte = LongPrototype.lessThanOrEqual;\n /**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.le = LongPrototype.lessThanOrEqual;\n /**\n * Tests if this Long's value is greater than the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.greaterThan = function greaterThan(other) {\n return this.comp(\n /* validates */\n other) > 0;\n };\n /**\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.gt = LongPrototype.greaterThan;\n /**\n * Tests if this Long's value is greater than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n return this.comp(\n /* validates */\n other) >= 0;\n };\n /**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n \n LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n /**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n \n LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n /**\n * Compares this Long's value with the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n \n LongPrototype.compare = function compare(other) {\n if (!isLong(other)) other = fromValue(other);\n if (this.eq(other)) return 0;\n var thisNeg = this.isNegative(),\n otherNeg = other.isNegative();\n if (thisNeg && !otherNeg) return -1;\n if (!thisNeg && otherNeg) return 1; // At this point the sign bits are the same\n \n if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1; // Both are positive if at least one is unsigned\n \n return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;\n };\n /**\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n \n \n LongPrototype.comp = LongPrototype.compare;\n /**\n * Negates this Long's value.\n * @this {!Long}\n * @returns {!Long} Negated Long\n */\n \n LongPrototype.negate = function negate() {\n if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n return this.not().add(ONE);\n };\n /**\n * Negates this Long's value. This is an alias of {@link Long#negate}.\n * @function\n * @returns {!Long} Negated Long\n */\n \n \n LongPrototype.neg = LongPrototype.negate;\n /**\n * Returns the sum of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} addend Addend\n * @returns {!Long} Sum\n */\n \n LongPrototype.add = function add(addend) {\n if (!isLong(addend)) addend = fromValue(addend); // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n \n var a48 = this.high >>> 16;\n var a32 = this.high & 0xFFFF;\n var a16 = this.low >>> 16;\n var a00 = this.low & 0xFFFF;\n var b48 = addend.high >>> 16;\n var b32 = addend.high & 0xFFFF;\n var b16 = addend.low >>> 16;\n var b00 = addend.low & 0xFFFF;\n var c48 = 0,\n c32 = 0,\n c16 = 0,\n c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 + b48;\n c48 &= 0xFFFF;\n return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);\n };\n /**\n * Returns the difference of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n \n \n LongPrototype.subtract = function subtract(subtrahend) {\n if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n return this.add(subtrahend.neg());\n };\n /**\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n * @function\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n \n \n LongPrototype.sub = LongPrototype.subtract;\n /**\n * Returns the product of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n \n LongPrototype.multiply = function multiply(multiplier) {\n if (this.isZero()) return this;\n if (!isLong(multiplier)) multiplier = fromValue(multiplier); // use wasm support if present\n \n if (wasm) {\n var low = wasm[\"mul\"](this.low, this.high, multiplier.low, multiplier.high);\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n \n if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n \n if (this.isNegative()) {\n if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());else return this.neg().mul(multiplier).neg();\n } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg(); // If both longs are small, use float multiplication\n \n \n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n // We can skip products that would overflow.\n \n var a48 = this.high >>> 16;\n var a32 = this.high & 0xFFFF;\n var a16 = this.low >>> 16;\n var a00 = this.low & 0xFFFF;\n var b48 = multiplier.high >>> 16;\n var b32 = multiplier.high & 0xFFFF;\n var b16 = multiplier.low >>> 16;\n var b00 = multiplier.low & 0xFFFF;\n var c48 = 0,\n c32 = 0,\n c16 = 0,\n c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xFFFF;\n return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);\n };\n /**\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n * @function\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n \n \n LongPrototype.mul = LongPrototype.multiply;\n /**\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\n * unsigned if this Long is unsigned.\n * @this {!Long}\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n \n LongPrototype.divide = function divide(divisor) {\n if (!isLong(divisor)) divisor = fromValue(divisor);\n if (divisor.isZero()) throw Error('division by zero'); // use wasm support if present\n \n if (wasm) {\n // guard against signed division overflow: the largest\n // negative number / -1 would be 1 larger than the largest\n // positive number, due to two's complement.\n if (!this.unsigned && this.high === -0x80000000 && divisor.low === -1 && divisor.high === -1) {\n // be consistent with non-wasm code path\n return this;\n }\n \n var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(this.low, this.high, divisor.low, divisor.high);\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n \n if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n var approx, rem, res;\n \n if (!this.unsigned) {\n // This section is only relevant for signed longs and is derived from the\n // closure library as a whole.\n if (this.eq(MIN_VALUE)) {\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n else if (divisor.eq(MIN_VALUE)) return ONE;else {\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n var halfThis = this.shr(1);\n approx = halfThis.div(divisor).shl(1);\n \n if (approx.eq(ZERO)) {\n return divisor.isNegative() ? ONE : NEG_ONE;\n } else {\n rem = this.sub(divisor.mul(approx));\n res = approx.add(rem.div(divisor));\n return res;\n }\n }\n } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n \n if (this.isNegative()) {\n if (divisor.isNegative()) return this.neg().div(divisor.neg());\n return this.neg().div(divisor).neg();\n } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n \n res = ZERO;\n } else {\n // The algorithm below has not been made for unsigned longs. It's therefore\n // required to take special care of the MSB prior to running it.\n if (!divisor.unsigned) divisor = divisor.toUnsigned();\n if (divisor.gt(this)) return UZERO;\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\n return UONE;\n res = UZERO;\n } // Repeat the following until the remainder is less than other: find a\n // floating-point that approximates remainder / other *from below*, add this\n // into the result, and subtract it from the remainder. It is critical that\n // the approximate value is less than or equal to the real value so that the\n // remainder never becomes negative.\n \n \n rem = this;\n \n while (rem.gte(divisor)) {\n // Approximate the result of division. This may be a little greater or\n // smaller than the actual value.\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); // We will tweak the approximate result by changing it in the 48-th digit or\n // the smallest non-fractional digit, whichever is larger.\n \n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n // Decrease the approximation until it is smaller than the remainder. Note\n // that if it is too large, the product overflows and is negative.\n approxRes = fromNumber(approx),\n approxRem = approxRes.mul(divisor);\n \n while (approxRem.isNegative() || approxRem.gt(rem)) {\n approx -= delta;\n approxRes = fromNumber(approx, this.unsigned);\n approxRem = approxRes.mul(divisor);\n } // We know the answer can't be zero... and actually, zero would cause\n // infinite recursion since we would make no progress.\n \n \n if (approxRes.isZero()) approxRes = ONE;\n res = res.add(approxRes);\n rem = rem.sub(approxRem);\n }\n \n return res;\n };\n /**\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n \n \n LongPrototype.div = LongPrototype.divide;\n /**\n * Returns this Long modulo the specified.\n * @this {!Long}\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n \n LongPrototype.modulo = function modulo(divisor) {\n if (!isLong(divisor)) divisor = fromValue(divisor); // use wasm support if present\n \n if (wasm) {\n var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(this.low, this.high, divisor.low, divisor.high);\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n \n return this.sub(this.div(divisor).mul(divisor));\n };\n /**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n \n \n LongPrototype.mod = LongPrototype.modulo;\n /**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n \n LongPrototype.rem = LongPrototype.modulo;\n /**\n * Returns the bitwise NOT of this Long.\n * @this {!Long}\n * @returns {!Long}\n */\n \n LongPrototype.not = function not() {\n return fromBits(~this.low, ~this.high, this.unsigned);\n };\n /**\n * Returns count leading zeros of this Long.\n * @this {!Long}\n * @returns {!number}\n */\n \n \n LongPrototype.countLeadingZeros = function countLeadingZeros() {\n return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n };\n /**\n * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n * @function\n * @param {!Long}\n * @returns {!number}\n */\n \n \n LongPrototype.clz = LongPrototype.countLeadingZeros;\n /**\n * Returns count trailing zeros of this Long.\n * @this {!Long}\n * @returns {!number}\n */\n \n LongPrototype.countTrailingZeros = function countTrailingZeros() {\n return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n };\n /**\n * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n * @function\n * @param {!Long}\n * @returns {!number}\n */\n \n \n LongPrototype.ctz = LongPrototype.countTrailingZeros;\n /**\n * Returns the bitwise AND of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\n \n LongPrototype.and = function and(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\n };\n /**\n * Returns the bitwise OR of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\n \n \n LongPrototype.or = function or(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\n };\n /**\n * Returns the bitwise XOR of this Long and the given one.\n * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\n \n \n LongPrototype.xor = function xor(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\n };\n /**\n * Returns this Long with bits shifted to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n \n LongPrototype.shiftLeft = function shiftLeft(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;else if (numBits < 32) return fromBits(this.low << numBits, this.high << numBits | this.low >>> 32 - numBits, this.unsigned);else return fromBits(0, this.low << numBits - 32, this.unsigned);\n };\n /**\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n \n LongPrototype.shl = LongPrototype.shiftLeft;\n /**\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n LongPrototype.shiftRight = function shiftRight(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;else if (numBits < 32) return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >> numBits, this.unsigned);else return fromBits(this.high >> numBits - 32, this.high >= 0 ? 0 : -1, this.unsigned);\n };\n /**\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n \n LongPrototype.shr = LongPrototype.shiftRight;\n /**\n * Returns this Long with bits logically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits < 32) return fromBits(this.low >>> numBits | this.high << 32 - numBits, this.high >>> numBits, this.unsigned);\n if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n return fromBits(this.high >>> numBits - 32, 0, this.unsigned);\n };\n /**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n \n LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n /**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n \n LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n /**\n * Returns this Long with bits rotated to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n \n LongPrototype.rotateLeft = function rotateLeft(numBits) {\n var b;\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n \n if (numBits < 32) {\n b = 32 - numBits;\n return fromBits(this.low << numBits | this.high >>> b, this.high << numBits | this.low >>> b, this.unsigned);\n }\n \n numBits -= 32;\n b = 32 - numBits;\n return fromBits(this.high << numBits | this.low >>> b, this.low << numBits | this.high >>> b, this.unsigned);\n };\n /**\n * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n \n \n LongPrototype.rotl = LongPrototype.rotateLeft;\n /**\n * Returns this Long with bits rotated to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n \n LongPrototype.rotateRight = function rotateRight(numBits) {\n var b;\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n \n if (numBits < 32) {\n b = 32 - numBits;\n return fromBits(this.high << b | this.low >>> numBits, this.low << b | this.high >>> numBits, this.unsigned);\n }\n \n numBits -= 32;\n b = 32 - numBits;\n return fromBits(this.low << b | this.high >>> numBits, this.high << b | this.low >>> numBits, this.unsigned);\n };\n /**\n * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n \n \n LongPrototype.rotr = LongPrototype.rotateRight;\n /**\n * Converts this Long to signed.\n * @this {!Long}\n * @returns {!Long} Signed long\n */\n \n LongPrototype.toSigned = function toSigned() {\n if (!this.unsigned) return this;\n return fromBits(this.low, this.high, false);\n };\n /**\n * Converts this Long to unsigned.\n * @this {!Long}\n * @returns {!Long} Unsigned long\n */\n \n \n LongPrototype.toUnsigned = function toUnsigned() {\n if (this.unsigned) return this;\n return fromBits(this.low, this.high, true);\n };\n /**\n * Converts this Long to its byte representation.\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @this {!Long}\n * @returns {!Array.} Byte representation\n */\n \n \n LongPrototype.toBytes = function toBytes(le) {\n return le ? this.toBytesLE() : this.toBytesBE();\n };\n /**\n * Converts this Long to its little endian byte representation.\n * @this {!Long}\n * @returns {!Array.} Little endian byte representation\n */\n \n \n LongPrototype.toBytesLE = function toBytesLE() {\n var hi = this.high,\n lo = this.low;\n return [lo & 0xff, lo >>> 8 & 0xff, lo >>> 16 & 0xff, lo >>> 24, hi & 0xff, hi >>> 8 & 0xff, hi >>> 16 & 0xff, hi >>> 24];\n };\n /**\n * Converts this Long to its big endian byte representation.\n * @this {!Long}\n * @returns {!Array.} Big endian byte representation\n */\n \n \n LongPrototype.toBytesBE = function toBytesBE() {\n var hi = this.high,\n lo = this.low;\n return [hi >>> 24, hi >>> 16 & 0xff, hi >>> 8 & 0xff, hi & 0xff, lo >>> 24, lo >>> 16 & 0xff, lo >>> 8 & 0xff, lo & 0xff];\n };\n /**\n * Creates a Long from its byte representation.\n * @param {!Array.} bytes Byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @returns {Long} The corresponding Long value\n */\n \n \n Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\n };\n /**\n * Creates a Long from its little endian byte representation.\n * @param {!Array.} bytes Little endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\n \n \n Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n return new Long(bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24, bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24, unsigned);\n };\n /**\n * Creates a Long from its big endian byte representation.\n * @param {!Array.} bytes Big endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\n \n \n Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n return new Long(bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7], bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], unsigned);\n };\n \n var _default = Long;\n exports.default = _default;\n return \"default\" in exports ? exports.default : exports;\n})({});\nif (typeof define === 'function' && define.amd) define([], function() { return Long; });\nelse if (typeof module === 'object' && typeof exports==='object') module.exports = Long;\n","import _Object$keys from \"core-js/library/fn/object/keys.js\";\nimport _Object$defineProperty from \"core-js/library/fn/object/define-property.js\";\nexport default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n _Object$keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n _Object$defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","import _Promise from \"core-js/library/fn/promise.js\";\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n _Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new _Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import _Reflect$construct from \"core-js/library/fn/reflect/construct.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = _Reflect$construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}","import _Reflect$construct from \"core-js/library/fn/reflect/construct.js\";\nexport default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !_Reflect$construct) return false;\n if (_Reflect$construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import _Object$defineProperty from \"core-js/library/fn/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n _Object$defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n _Object$defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import _Object$defineProperty from \"core-js/library/fn/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _Object$setPrototypeOf from \"core-js/library/fn/object/set-prototype-of.js\";\nimport _Object$getPrototypeOf from \"core-js/library/fn/object/get-prototype-of.js\";\nexport default function _getPrototypeOf(o) {\n _getPrototypeOf = _Object$setPrototypeOf ? _Object$getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || _Object$getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import _Object$create from \"core-js/library/fn/object/create.js\";\nimport _Object$defineProperty from \"core-js/library/fn/object/define-property.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = _Object$create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n _Object$defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","import _Object$setPrototypeOf from \"core-js/library/fn/object/set-prototype-of.js\";\nexport default function _setPrototypeOf(o, p) {\n _setPrototypeOf = _Object$setPrototypeOf ? _Object$setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import _Array$isArray from \"core-js/library/fn/array/is-array.js\";\nexport default function _arrayWithHoles(arr) {\n if (_Array$isArray(arr)) return arr;\n}","import _Symbol from \"core-js/library/fn/symbol/index.js\";\nimport _Symbol$iterator from \"core-js/library/fn/symbol/iterator.js\";\nexport default function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof _Symbol && r[_Symbol$iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import _Array$isArray from \"core-js/library/fn/array/is-array.js\";\nimport arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) return arrayLikeToArray(arr);\n}","import _Symbol from \"core-js/library/fn/symbol/index.js\";\nimport _Symbol$iterator from \"core-js/library/fn/symbol/iterator.js\";\nimport _Array$from from \"core-js/library/fn/array/from.js\";\nexport default function _iterableToArray(iter) {\n if (typeof _Symbol !== \"undefined\" && iter[_Symbol$iterator] != null || iter[\"@@iterator\"] != null) return _Array$from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nimport _Symbol$toPrimitive from \"core-js/library/fn/symbol/to-primitive.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[_Symbol$toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _Symbol from \"core-js/library/fn/symbol/index.js\";\nimport _Symbol$iterator from \"core-js/library/fn/symbol/iterator.js\";\nexport default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _Array$from from \"core-js/library/fn/array/from.js\";\nimport arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return _Array$from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import _Map from \"core-js/library/fn/map.js\";\nimport _Object$create from \"core-js/library/fn/object/create.js\";\nimport getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof _Map === \"function\" ? new _Map() : undefined;\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = _Object$create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n try {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n } catch (e) {\n return typeof fn === \"function\";\n }\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(12965);\n"],"names":["root","factory","exports","module","define","amd","self","obj","_global","__esModule","_babelPolyfill","console","warn","it","TypeError","isObject","core","version","__e","aFunction","fn","that","length","undefined","a","call","b","c","apply","arguments","Object","defineProperty","get","document","is","createElement","global","ctx","hide","has","PROTOTYPE","$export","type","name","source","key","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","C","this","Function","virtual","R","U","exec","e","window","Math","__g","hasOwnProperty","dP","createDesc","object","value","f","anObject","IE8_DOM_DEFINE","toPrimitive","O","Attributes","bitmap","enumerable","configurable","writable","val","toString","valueOf","cof","msg","UNSCOPABLES","ArrayProto","Array","prototype","at","index","unicode","Constructor","forbiddenField","toObject","toAbsoluteIndex","toLength","copyWithin","start","len","to","from","end","count","min","inc","aLen","endPos","toIObject","IS_INCLUDES","$this","el","fromIndex","IObject","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","callbackfn","res","result","push","memo","isRight","i","isArray","SPECIES","original","constructor","speciesConstructor","invoke","arraySlice","slice","factories","bind","partArgs","bound","args","concat","n","join","construct","TAG","ARG","T","tryGet","callee","redefineAll","anInstance","forOf","$iterDefine","step","setSpecies","DESCRIPTORS","fastKey","validate","SIZE","getEntry","entry","_i","_f","k","getConstructor","wrapper","NAME","ADDER","iterable","_t","_l","clear","data","r","p","next","prev","forEach","v","def","setStrong","iterated","kind","_k","getWeak","createArrayMethod","$has","arrayFind","arrayFindIndex","id","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","store","set","splice","ufstore","redefine","meta","fails","$iterDetect","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","Base","proto","fixMethod","KEY","entries","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","iter","BUGGY_ZERO","$instance","NEED","$defineProperty","getTime","Date","$toISOString","toISOString","lz","num","NaN","isFinite","RangeError","d","y","getUTCFullYear","m","getUTCMilliseconds","s","abs","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","NUMBER","hint","split","getKeys","gOPS","pIE","getSymbols","symbols","isEnum","exp","MATCH","re","defined","wks","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","groups","replace","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","fns","nativeMethod","regexp","str","arg2","forceStringMethod","done","strfn","rxfn","String","RegExp","string","arg","ignoreCase","multiline","sticky","IS_CONCAT_SPREADABLE","flattenIntoArray","sourceLen","depth","mapper","thisArg","element","spreadable","targetIndex","sourceIndex","mapFn","isArrayIter","getIterFn","BREAK","RETURN","ITERATOR","iterator","iterFn","documentElement","setPrototypeOf","un","propertyIsEnumerable","Iterators","floor","isRegExp","ret","descriptor","IteratorPrototype","LIBRARY","$iterCreate","getPrototypeOf","BUGGY","keys","KEYS","VALUES","returnThis","DEFAULT","IS_SET","FORCED","getMethod","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","values","SAFE_CLOSING","riter","skipClosing","safe","arr","$expm1","expm1","x","sign","pow","EPSILON","EPSILON32","MAX32","MIN32","fround","$abs","$sign","Infinity","log1p","log","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","onFreeze","macrotask","Observer","MutationObserver","WebKitMutationObserver","process","Promise","isNode","head","last","notify","flush","parent","domain","exit","enter","nextTick","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","PromiseCapability","reject","$$resolve","$$reject","$assign","assign","A","Symbol","K","j","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","display","src","contentWindow","open","write","lt","close","Properties","defineProperties","gOPD","getOwnPropertyDescriptor","gOPN","windowNames","getOwnPropertyNames","getWindowNames","$keys","hiddenKeys","getOwnPropertySymbols","ObjectProto","arrayIndexOf","names","isEntries","Reflect","ownKeys","$parseFloat","$trim","charAt","$parseInt","ws","hex","radix","test","newPromiseCapability","promiseCapability","SRC","$toString","TO_STRING","TPL","isFunction","classof","builtinExec","re1","re2","regexpFlags","nativeExec","nativeReplace","patchedExec","LAST_INDEX","UPDATES_LAST_INDEX_WRONG","NPCG_INCLUDED","lastIndex","reCopy","match","check","buggy","__proto__","tag","stat","shared","uid","SHARED","mode","copyright","D","method","toInteger","pos","l","charCodeAt","searchString","quot","createHTML","attribute","p1","toLowerCase","repeat","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","ceil","spaces","space","ltrim","rtrim","exporter","ALIAS","FORCE","trim","defer","channel","port","html","cel","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","ONREADYSTATECHANGE","run","listener","event","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","appendChild","removeChild","setTimeout","max","number","isNaN","$typed","$buffer","propertyDesc","toIndex","createArrayIncludes","ArrayIterators","arrayFill","arrayCopyWithin","$DP","$GOPD","Uint8Array","ARRAY_BUFFER","SHARED_BUFFER","BYTES_PER_ELEMENT","$ArrayBuffer","ArrayBuffer","$DataView","DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","WRONG_LENGTH","$map","allocate","LITTLE_ENDIAN","Uint16Array","buffer","FORCED_SET","toOffset","BYTES","offset","speciesFromList","list","fromList","addGetter","internal","_d","$from","mapfn","mapping","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","indexOf","searchElement","includes","separator","map","reverse","middle","some","comparefn","subarray","begin","$begin","byteOffset","$slice","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","CLAMPED","GETTER","SETTER","TypedArray","TAC","ABV","TypedArrayPrototype","addElement","o","getter","round","setter","$offset","$length","byteLength","klass","$len","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","DATA_VIEW","WRONG_INDEX","BaseBuffer","LN2","BUFFER","BYTE_LENGTH","BYTE_OFFSET","$BUFFER","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","unpackIEEE754","nBits","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","view","isLittleEndian","intIndex","_b","pack","conversion","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","Typed","TypedArrayConstructors","px","random","userAgent","wksExt","$Symbol","USE_SYMBOL","$every","$filter","$find","forced","$forEach","STRICT","createProperty","$indexOf","NEGATIVE_ZERO","addToUnscopables","Arguments","$reduce","upTo","size","cloned","$some","$sort","toJSON","pv","TO_PRIMITIVE","DateProto","INVALID_DATE","HAS_INSTANCE","FunctionProto","FProto","nameRE","strong","MAP","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","cbrt","clz32","LOG2E","cosh","hypot","value1","value2","div","sum","larg","$imul","imul","UINT16","xn","yn","xl","yl","log10","LOG10E","log2","sinh","E","tanh","trunc","$Number","BROKEN_COF","TRIM","toNumber","argument","third","maxCode","first","code","digits","parseInt","_isFinite","isInteger","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","parseFloat","aNumberValue","$toFixed","toFixed","ERROR","ZERO","multiply","c2","divide","numToString","t","acc","fractionDigits","z","x2","$fails","$toPrecision","toPrecision","precision","$freeze","$getOwnPropertyDescriptor","$getPrototypeOf","$isExtensible","$isFrozen","$isSealed","$preventExtensions","$seal","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","microtask","newPromiseCapabilityModule","perform","promiseResolve","PROMISE","versions","v8","$Promise","empty","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","unhandled","isUnhandled","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","capability","all","remaining","$index","alreadyCalled","race","rApply","fApply","thisArgument","argumentsList","L","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","Enumerate","enumerate","getProto","receiver","setProto","V","existingDescriptor","ownDesc","$flags","$RegExp","CORRECT_NEW","tiRE","piRE","fiU","proxy","flags","advanceStringIndex","regExpExec","$match","maybeCallNative","rx","fullUnicode","matchStr","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","$replace","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","matched","position","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","ch","capture","sameValue","SEARCH","$search","previousLastIndex","callRegExpExec","$min","$push","$SPLIT","LENGTH","MAX_UINT32","SUPPORTS_Y","SPLIT","$split","internalSplit","limit","lastLength","output","lastLastIndex","splitLimit","separatorCopy","splitter","unicodeMatching","lim","q","add","$at","codePointAt","context","ENDS_WITH","$endsWith","endsWith","endPosition","search","color","fromCharCode","$fromCodePoint","fromCodePoint","INCLUDES","point","url","raw","callSite","tpl","STARTS_WITH","$startsWith","startsWith","wksDefine","enumKeys","_create","gOPNExt","$GOPS","$JSON","JSON","_stringify","stringify","HIDDEN","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","wrap","sym","isSymbol","$defineProperties","$propertyIsEnumerable","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","$isView","isView","fin","viewS","viewT","init","InternalMap","each","weak","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","WEAK_MAP","$WeakMap","WEAK_SET","arraySpeciesCreate","flatMap","$includes","getOwnPropertyDescriptors","getDesc","$values","onFinally","$pad","WEBKIT_BUG","padEnd","padStart","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","$task","MSIE","time","boundArgs","setInterval","runtime","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","record","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","pop","skipTempReset","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","$Object","IS_ADDER","COLLECTION","cb","nextItem","__awaiter$6","_arguments","fulfilled","rejected","getRandomValues","rnds8","rng","crypto","byteToHex","unsafeStringify","randomUUID","native","v4","options","buf","rnds","commonjsGlobal","g","events","ReflectApply","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","EventEmitter$1","once","EventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","existing","newListener","unshift","warned","emitter","onceWrapper","fired","removeListener","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","copy","spliceOne","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","on","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","er","message","listeners","addListener","prependListener","prependOnceListener","originalListener","shift","off","removeAllListeners","rawListeners","eventNames","logger$1","logHandler","Logger","VERSION","contextualLoggersByNameMap","scope","func","merge","defineLogLevel","TRACE","DEBUG","INFO","TIME","WARN","OFF","ContextualLogger","defaultContext","setLevel","filterLevel","newLevel","getLevel","enabledFor","lvl","trace","debug","label","timeEnd","level","msgArgs","globalLogger","setHandler","createDefaultHandler","formatter","messages","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","timerLabel","useDefaults","defaultLevel","setDefaults","_prevLogger","noConflict","logger","consoleLogHandler","EffectEnv","EffectEvent","BaseEffect","underlyingStream","getUnderlyingStream","inputTrack","inputStream","getTracks","super","isEnabled","getOutputTrack","outputTrack","getOutputStream","outputStream","preloadAssets","load","input","MediaStream","loadMediaStream","MediaStreamTrack","loadMediaStreamTrack","loadMedia","addTrack","replaceInputTrack","track","removeTrack","enable","effectTrack","Enabled","TrackUpdated","disable","Disabled","dispose","setEnabled","createEffect","EffectClass","effectInstance","catch","BaseCameraEffect","BaseMicrophoneEffect","audioCtx","audioContext","AudioContext","defaultOptions$2","maxGain","rampTime","GainEffect","gainValue","_super","createOutputStream","getAudioTracks","enabled","createMediaStreamSource","gainNode","GainNode","connect","mediaStreamDestination","createMediaStreamDestination","stream","setGainValue","gain","linearRampToValueAtTime","currentTime","disconnect","appendScript","fs","getElementsByTagName","onload","onerror","parentNode","insertBefore","fetchUrls","paths","token","env","Int","body","items","headers","Authorization","fetch","resp","json","fetchSignedUrl","path","memoizeBlobUrl","cache","Map","memoizedFunc","cacheKey","cachedResult","item","URL","createObjectURL","blob","clearCache","memoizedFetchSignedUrl","FutureState","Future","Pending","Resolved","Rejected","hasSimdSupport","WebAssembly","omitKey","fromEntries","NoiseReductionMode","defaultOptions$1","freeze","Worklet","avoidSimd","authToken","Prod","NoiseReductionEffect","isLoaded","loadFuture","isReady","disableFuture","enableFuture","fetchUrl","validatedUrl","supportsSimd","audioTrack","disposeFuture","Legacy","loadLegacy","loadWorklet","performance","preloadFuture","fetchAndLoadWorkletProcessor","fetchAndLoadLegacyProcessor","duration","workletProcessorUrl","audioWorklet","addModule","legacyProcessorUrl","destination","AudioWorkletNode","workletNode","ev","Events","Ready","handleDisabled","handleEnabled","Disposed","payload","sourceNode","legacyProcessor","WebMediaEffects","NoiseReductionLegacyProcessor","sampleRate","legacyScriptNode","createScriptProcessor","onaudioprocess","processAudioChunk","_e","_g","createNoiseReductionEffect","RateEstimatorEvent","RateEstimatorStatus","RateEstimator","targetRate","timestamps","status","Idle","defaults","hysteresisMargin","lowDuration","lowThreshold","minSamples","maxSamples","getEstimatedValues","rate","estimatedRate","threshold","getOptions","getTimestamps","addTimestamp","timestamp","Init","calculateAndUpdateRate","evaluateRate","sampleCount","isRateLow","handleLowRate","lowRateStartTime","handleReturnToNormalRate","Ok","tolerance","lowerBound","upperBound","Lagging","Low","RateLow","RateLagging","RateOk","updateOptions","newOptions","toAbsoluteURI","relativeURL","baseURL","href","compileShader","gl","shader_type","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","linkProgram","vertex_shader","fragment_shader","program","createProgram","attachShader","getProgramParameter","LINK_STATUS","getProgramInfoLog","resizeImage","imageData","srcWidth","srcHeight","targetWidth","targetHeight","targetData","Uint8ClampedArray","xRatio","yRatio","scaledSrcWidth","srcY","srcOffset","LIB_VERSION","BASE_URL","LOCAL_BASE_URL","LOCAL_WORKER_URI","LOCAL_PORT","MODEL_VERSION","WASM_URI","Quality","BlurStrength","getBlurConfig","blur_strength","horizontal_mirror","kernel_size","sigma","WEAK","MODERATE","STRONG","STRONGER","STRONGEST","getPreloadConfig","quality","LOW","model_url_resolver","model_path","base_url","useLocalWorker","model_version","worker_uri","base_config","wasm_uri","mask","generation_interval_ms","model_uri","model_rank","mask_quality_config","TINY","input_size","height","width","output_size","MEDIUM","HIGH","ULTRA","getConfig","renderConfig","modelUrlResolver","baseUrl","basePreloadConfig","maskConfig","render","ort_min","__webpack_modules__","InferenceSession","Tensor","registerBackend","createSessionHandler","backend","priority","wasm","webgl","webgpu","logLevelInternal","logLevel","Float32Array","Int8Array","Int16Array","Int32Array","Float64Array","Uint32Array","u","BigInt64Array","BigUint64Array","dims","bufferToTensor","tensorLayout","norm","mean","bias","bitmapFormat","tensorFormat","h","_","fromImage","HTMLImageElement","ImageData","ImageBitmap","getContext","resizedHeight","resizedWidth","drawImage","getImageData","Image","crossOrigin","putImageData","toDataURL","format","fillStyle","fillRect","toImageData","createImageData","reshape","outputNames","inputNames","SharedArrayBuffer","executionProviders","initialized","aborted","initPromise","startProfiling","endProfiling","Session","loadModel","OnnxjsSessionHandler","c8","rX","initTimeout","simd","numThreads","cpus","hardwareConcurrency","initWasm","OnnxruntimeWebAssemblySessionHandler","__createBinding","__exportStar","createAttributeWithCacheKey","_cacheKey","Attribute","onnxruntime","experimental","fbs","_attributes","onnx","AttributeProto","getValue","getType","delete","getFloat","getInt","getString","getTensor","getFloats","getInts","getStrings","getTensors","AttributeType","FLOAT","INT","STRING","TENSOR","FLOATS","INTS","STRINGS","TENSORS","GRAPH","GRAPHS","getValueNoCheck","LongUtil","isLong","longToNumber","fromProto","fromOrtTensor","decodeUtf8String","getValueNoCheckFromOnnxFormat","getValueNoCheckFromOrtFormat","floats","ints","strings","tensors","graphs","floatsArray","intsLength","stringsLength","tensorsLength","resolveBackend","initialize","WebGLBackend","contextId","matmulMaxBatchSize","textureCacheMode","glContext","createWebGLContext","setWithEnv","verbose","WebGLSessionHandler","CoordsGlslLib","GlslLib","getFunctions","offsetToCoords","coordsToOffset","toVec","valueFrom","getCommonUtilFuncs","getInputsSamplingSnippets","getOutputSamplingSnippet","getCustomTypes","GlslLibRoutine","outputTextureLayout","isPacked","getPackedOutputSamplingSnippet","getUnpackedOutputSamplingSnippet","unpackedShape","getOutputScalarCoords","getOutputPacked1DCoords","getOutputPacked2DCoords","getOutputPacked3DCoords","getOutputPackedNDCoords","getGlsl","floatTextureSetRGBA","getOutputUnpacked1DCoords","getOutputUnpacked2DCoords","getOutputUnpacked3DCoords","getOutputUnpacked4DCoords","getOutputUnpacked5DCoords","getOutputUnpacked6DCoords","floatTextureSetR","ArrayUtil","arraysEqual","texture2D","programInfo","inputTextureLayouts","generateShaderFuncNameFromInputSamplerName","getPackedSamplerFromInput","getUnpackedSamplerFromInput","generateShaderFuncNameFromInputSamplerNameAtOutCoords","getPackedSamplerAtOutputCoords","getUnpackedSamplerAtOutputCoords","BroadcastUtil","getBroadcastDims","getCoordsDataType","getGlChannels","ShapeUtil","getPackedSamplerScalar","getPackedSampler1D","getPackedSampler2D","getPackedSampler3D","getPackedSamplerND","getUnpackedSamplerScalar","getUnpackedSampler1D","getUnpackedSampler2D","getUnpackedSampler3D","getUnpackedSampler4D","getUnpackedSampler5D","getUnpackedSampler6D","squeezeInputShape","parse","routineBody","getSqueezedParams","dependencies","newShape","keptDims","squeezeShape","shape","strides","getValueFromSingle","getPackedValueFrom","TopologicalSortGlslRoutines","GlslLibRoutineNode","GlslContext","FunctionType","ValueBased","Positional","addDependency","returnOrderedNodes","Set","createOrderedNodes","dfsTraverse","EncodingGlslLib","encodeFloat32","decodeFloat32","encode","decode","encodeUint8","decodeUint8","FragColorGlslLib","setFragColor","getColorAsFloat","replaceInlines","params","GlslPreprocessor","libs","glslLibRoutineDependencyGraph","glslRegistry","preprocess","hasMain","getDefaultFragShaderMain","getFragShaderPreamble","getUniforms","variables","getImports","selectGlslLibRoutinesToBeIncluded","arrayLength","encoding","fragcolor","vec","VecGlslLib","shapeUtils","ShapeUtilsGlslLib","coordinates","bcastIndex","bcastMatmulIndex","offsetToIndices","indicesToOffset","incrementIndices","indexToOffsetSingle","offsetToIndicesSingle","getVertexShaderSource","varyingVertex","varyingFrag","outputDeclaration","binaryVecFunctions","copyVec","setVecItem","getVecItem","sub","mul","WebGLInferenceHandler","session","packedTextureDataCache","unpackedTextureDataCache","calculateTextureWidthAndHeight","layoutStrategy","executeProgram","inputTypes","getOrCreateTextureData","cacheHint","programManager","getArtifact","createTextureLayoutFromTextureType","textureType","createTextureData","build","setArtifact","runProgram","tensor","TextureType","packed","getTextureData","dataId","unpack","packedLastDimension","numberData","createTextureLayoutFromShape","reverseWH","createTextureDataFromLayoutBindTensor","textureManager","createTextureFromLayout","createTextureDataFromTexture","reshapeUnpacked","unpacked","channels","computeStrides","texture","reshapePacked","isReshapeCheap","processDims3D","createPackedReshape3DProgramInfoLoader","cast","readTexture","readTextureAsync","setTextureData","isInitializer","isTextureLayoutCached","clearActiveTextures","releaseTexture","isFloat32DownloadSupported","readUint8TextureAsFloat","encodeAsUint8","createPackProgramInfoLoader","createUnpackProgramInfoLoader","__setModuleDefault","default","__importStar","WEBGL_OP_RESOLVE_RULES","I","$","M","acos","and","asin","atan","averagePool","parseAveragePoolAttributes","batchNormalization","parseBatchNormalizationAttributes","parseCastAttributes","clip","parseClipAttributes","clipV11","parseConcatAttributes","conv","parseConvAttributes","convTranspose","parseConvTransposeAttributes","cos","identity","depthToSpace","parseDepthToSpaceAttributes","equal","elu","parseEluAttributes","flatten","parseFlattenAttributes","gather","parseGatherAttributes","gemm","parseGemmAttributesV7","parseGemmAttributesV11","globalAveragePool","parseGlobalAveragePoolAttributes","globalMaxPool","greater","imageScaler","parseImageScalerAttributes","instanceNormalization","parseInstanceNormalizationAttributes","leakyRelu","parseLeakyReluAttributes","less","lrn","parseLrnAttributes","matMul","parseMatMulAttributes","maxPool","parseMaxPoolAttributes","neg","not","or","padV2","parsePadAttributesV2","padV11","parsePadAttributesV11","pRelu","reduceLogSum","parseReduceAttributes","reduceMax","reduceMean","reduceMin","reduceProd","reduceSum","reduceLogSumSquare","relu","resize","parseResizeAttributesV10","parseResizeAttributesV11","sigmoid","sin","sliceV10","parseSliceAttributes","softmax","parseSoftmaxAttributes","softmaxV13","parseSoftmaxAttributesV13","parseSplitAttributes","squeeze","parseSqueezeAttributes","squeezeV13","tan","tile","transpose","parseTransposeAttributes","upsample","parseUpsampleAttributesV7","parseUpsampleAttributesV9","unsqueeze","parseUnsqueezeAttributes","unsqueezeV13","xor","epsilon","momentum","spatial","glslPRelu","glslPow","glslXor","glslOr","glslAnd","glslLess","glslGreater","glslEqual","glslSub","glslMul","glslDiv","glslAdd","areEqual","calcShape","ProtoUtil","tensorDataTypeFromProto","createPackedConcatProgramInfoLoader","getChannels","unpackFromChannel","axis","createUnpackedGroupedConvProgramInfoLoader","group","autoPad","dilations","kernelShape","pads","calculateOutputShape","activationFunction","applyActivation","getActivationSnippet","conv2DPacked","conv2DPackedPointwise","createPackedMatmulProgramInfoLoader","createPackedIm2ColProgramInfoLoader","outputShape","outputPadding","parseInternalActivationAttributes","createMatmulProgramInfoLoader","createIm2ColProgramInfoLoader","createDotProductProgramInfoLoader","PoolConvUtil","adjustPadsBasedOnAutoPad","blocksize","perm","activationCacheKey","calculateIm2ColDims","flattenShape","activation","glslRelu","glslSigmoid","glslClip","clipMin","clipMax","MIN_CLIP","MAX_CLIP","normalizeAxis","NUMBER_TYPES","transA","transB","alpha","beta","isOptionalC","GemmUtil","getShapeOfGemmResult","scale","createLrnProgramInfoLoader","getBiasForMatmul","unpackedReversed","getVecChannels","integerData","floatData","padShape","ceilMode","countIncludePad","storageOrder","adjustPoolAttributes","computePoolOutputShape","axes","keepDims","normalizeAxes","calculateReshapedDims","validateInputs","parseUpsampleAttributes","coordinateTransformMode","scales","scalesInputIdx","sizesInputIdx","isResize","scalesValidation","starts","ends","sizeToDimension","sizeFromDimension","outputs","numOutputs","SplitUtil","splitShape","sortBasedOnPerm","downloadUint8AsFloat","glslTanh","glslTan","glslSqrt","glslSin","glslNot","glslNeg","glslLog","glslLeakyRelu","glslIdentity","glslFloor","glslExp","glslElu","glslCos","glslCeil","glslAtan","glslAsin","glslAcos","glslAbs","createUnpackProgramInfo","unsqueezeShape","inputs","opset","extrapolationValue","useExtrapolation","needRoiInput","nearestMode","cubicCoefficientA","excludeOutside","useNearest2xOptimization","roiInputIdx","ProgramManager","profiler","textureLayoutStrategy","repo","attributesBound","useProgram","bindOutput","bindAttributes","attribLocations","bindUniforms","uniformLocations","draw","vertexShader","deleteShader","deleteProgram","compile","getUniformLocations","getAttribLocations","VERTEX_SHADER","FRAGMENT_SHADER","attachFramebuffer","textureCoord","setVertexAttributes","location","bindTexture","uniform1fv","uniform1f","uniform1iv","uniform1i","bindTextureToUniform","getAttribLocation","getUniformLocation","PreferLogicalStrategy","maxTextureSize","TextureManager","reuseTextures","pack2unpackMap","unpack2packMap","createInferenceHandler","onGraphInitialized","getValues","initializers","addInitializer","resolveOperator","impl","opImpl","opInit","Uint8DataEncoder","RGBAFloatDataEncoder","RedFloat32DataEncoder","internalFormat","R32F","RED","channelSize","RGBA32F","RGBA","ALPHA","UNSIGNED_BYTE","getBatchDim","sizeToSquarishShape","getRowsCols","sizeFromShape","isInt","parseAxisParam","AlwaysKeepOriginalSizeStrategy","assert","computeTextureWH","breakAxis","computeTexture","reversedWH","config","pendingRead","inUseTextures","idleTextures","textureLookup","toEncoderType","getEncoder","updateTexture","toTextureData","allocateTexture","toTensorData","createAndWaitForFence","deleteTexture","repeatedTry","getPackedShape","toUpperCase","createNewWebGLContext","OffscreenCanvas","antialias","stencil","preserveDrawingBuffer","premultipliedAlpha","failIfMajorPerformanceCaveat","WebGLContext","webgl2","isContextLost","DEPTH_TEST","STENCIL_TEST","BLEND","DITHER","POLYGON_OFFSET_FILL","SAMPLE_COVERAGE","SCISSOR_TEST","CULL_FACE","cullFace","BACK","linearSearchLastTrue","frameBufferBound","itemsToPoll","getExtensions","vertexbuffer","createVertexbuffer","framebuffer","createFramebuffer","queryVitalParameters","createTexture","TEXTURE_2D","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","checkError","texSubImage2D","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","viewport","scissor","readPixels","isFramebufferReady","getActiveTexture","getParameter","ACTIVE_TEXTURE","TEXTURE0","getTextureBinding","TEXTURE_BINDING_2D","getFramebufferBinding","FRAMEBUFFER_BINDING","vertexAttribPointer","enableVertexAttribArray","activeTexture","drawArrays","TRIANGLE_STRIP","getError","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","isRenderFloat32Supported","textureHalfFloatExtension","HALF_FLOAT_OES","maxTextureImageUnits","disposed","deleteFramebuffer","bindBuffer","deleteBuffer","ELEMENT_ARRAY_BUFFER","createDefaultGeometry","createBuffer","bufferData","STATIC_DRAW","isFloatTextureAttachableToFrameBuffer","checkFloatTextureAttachableToFrameBuffer","checkRenderFloat32","checkFloat32Download","isBlendSupported","checkFloat32Blend","MAX_TEXTURE_SIZE","MAX_TEXTURE_IMAGE_UNITS","colorBufferFloatExtension","getExtension","disjointTimerQueryWebgl2Extension","textureFloatExtension","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","POINTS","beginTimer","createQuery","beginQuery","TIME_ELAPSED_EXT","endTimer","endQuery","isTimerResultAvailable","getQueryParameter","QUERY_RESULT_AVAILABLE","GPU_DISJOINT_EXT","getTimerResult","QUERY_RESULT","deleteQuery","waitForQueryAndGetTime","createFence","pollFence","fenceSync","SYNC_GPU_COMMANDS_COMPLETE","clientWaitSync","ALREADY_SIGNALED","CONDITION_SATISFIED","query","isFencePassed","addItemToPoll","pollItems","isDoneFn","resolveFn","ExecutionPlan","op","graph","getNodes","_ops","_starter","_values","getInputIndices","execute","getOutputIndices","getData","Graph","_from","_to","tensorValueTypeFromProto","tensorType","NodeProto","opType","Node","tensorAttributesFromORTFormat","executeNode","buildGraph","transformGraph","checkIsAcyclic","_allInputIndices","getInputNames","_allInputNames","_allOutputIndices","getOutputNames","_allOutputNames","_allData","_nodes","GraphProto","buildGraphFromOnnxFormat","buildGraphFromOrtFormat","initializer","tensorDimsFromProto","dataType","inputsLength","nodeArgsLength","nodeArgs","valueType","TypeInfoValue","tensor_type","TensorTypeAndShape","elemType","dimLength","dim","dimValue","initializersLength","tensorDimsFromORTFormat","outputsLength","nodes","nodesLength","attributesLength","removeAllIdentityNodes","removeAllDropoutNodes","fuseConvActivationNodes","finalizeGraph","deleteNode","isActivation","Profiler","fatal","none","provider","minimalSeverity","logDateTime","logSourceLocation","category","startTime","endCallback","timer","checkTimer","endTime","maxNumberEvents","flushBatchSize","flushIntervalInMilliseconds","_started","_flushPointer","_maxNumberEvents","_flushBatchSize","_flushIntervalInMilliseconds","_timingEvents","_flushTime","logOneEvent","endSync","started","Model","loadFromOnnxFormat","loadFromOrtFormat","ModelProto","irVersion","_opsets","opsetImport","_graph","flatbuffers","ByteBuffer","getRootAsInferenceSession","model","opsetImportLength","opsets","FLOAT_TYPES","INT_TYPES","substring","UNDEFINED","SPARSE_TENSOR","SPARSE_TENSORS","UNKNOWN","VALUE","PARAM","DimensionValueType","UINT8","INT8","INT16","INT32","INT64","BOOL","FLOAT16","DOUBLE","UINT32","UINT64","COMPLEX64","COMPLEX128","BFLOAT16","TensorDataType","Primitive","Fused","NodeType","NONE","sequence_type","map_type","bb","bb_pos","__init","getRootAsShape","readInt32","getSizePrefixedRootAsShape","setPosition","SIZE_PREFIX_LENGTH","__offset","Dimension","__indirect","__vector","__vector_len","startShape","startObject","addDim","addFieldOffset","createDimVector","startVector","addOffset","endVector","startDimVector","endShape","endObject","createShape","Shape","getRootAsDimension","getSizePrefixedRootAsDimension","DimensionValue","denotation","__string","startDimension","addValue","addDenotation","endDimension","createDimension","getRootAsDimensionValue","getSizePrefixedRootAsDimensionValue","dimType","readInt8","readInt64","createLong","dimParam","startDimensionValue","addDimType","addFieldInt8","addDimValue","addFieldInt64","addDimParam","endDimensionValue","createDimensionValue","getRootAsTensorTypeAndShape","getSizePrefixedRootAsTensorTypeAndShape","startTensorTypeAndShape","addElemType","addFieldInt32","addShape","endTensorTypeAndShape","createTensorTypeAndShape","getRootAsMapType","getSizePrefixedRootAsMapType","keyType","TypeInfo","startMapType","addKeyType","addValueType","endMapType","createMapType","MapType","getRootAsSequenceType","getSizePrefixedRootAsSequenceType","startSequenceType","endSequenceType","createSequenceType","SequenceType","EdgeEnd","nodeIndex","readUint32","srcArgIndex","dstArgIndex","createEdgeEnd","prep","writeInt32","getRootAsNodeEdge","getSizePrefixedRootAsNodeEdge","inputEdges","inputEdgesLength","outputEdges","outputEdgesLength","startNodeEdge","addNodeIndex","addInputEdges","startInputEdgesVector","addOutputEdges","startOutputEdgesVector","endNodeEdge","createNodeEdge","NodeEdge","getRootAsNode","getSizePrefixedRootAsNode","docString","sinceVersion","executionProviderType","inputArgCounts","inputArgCountsLength","inputArgCountsArray","implicitInputs","implicitInputsLength","startNode","addName","addDocString","addDomain","addSinceVersion","addIndex","addOpType","addType","addExecutionProviderType","addInputs","createInputsVector","startInputsVector","addOutputs","createOutputsVector","startOutputsVector","addAttributes","createAttributesVector","startAttributesVector","addInputArgCounts","createInputArgCountsVector","addInt32","startInputArgCountsVector","addImplicitInputs","createImplicitInputsVector","startImplicitInputsVector","endNode","createNode","getRootAsValueInfo","getSizePrefixedRootAsValueInfo","startValueInfo","endValueInfo","createValueInfo","ValueInfo","getRootAsTypeInfo","getSizePrefixedRootAsTypeInfo","readUint8","__union","startTypeInfo","endTypeInfo","createTypeInfo","getRootAsOperatorSetId","getSizePrefixedRootAsOperatorSetId","startOperatorSetId","addVersion","endOperatorSetId","createOperatorSetId","OperatorSetId","getRootAsTensor","getSizePrefixedRootAsTensor","dimsLength","rawData","rawDataLength","rawDataArray","stringData","stringDataLength","startTensor","addDims","createDimsVector","addInt64","startDimsVector","addDataType","addRawData","createRawDataVector","addInt8","startRawDataVector","addStringData","createStringDataVector","startStringDataVector","endTensor","createTensor","getRootAsSparseTensor","getSizePrefixedRootAsSparseTensor","indices","startSparseTensor","addValues","addIndices","endSparseTensor","createSparseTensor","SparseTensor","getRootAsAttribute","getSizePrefixedRootAsAttribute","readFloat32","floatsLength","graphsLength","startAttribute","addF","addFieldFloat32","addI","addS","addT","addG","addFloats","createFloatsVector","addFloat32","startFloatsVector","addInts","createIntsVector","startIntsVector","addStrings","createStringsVector","startStringsVector","addTensors","createTensorsVector","startTensorsVector","addGraphs","createGraphsVector","startGraphsVector","endAttribute","createAttribute","getRootAsGraph","getSizePrefixedRootAsGraph","maxNodeIndex","nodeEdges","nodeEdgesLength","sparseInitializers","sparseInitializersLength","startGraph","addInitializers","createInitializersVector","startInitializersVector","addNodeArgs","createNodeArgsVector","startNodeArgsVector","addNodes","createNodesVector","startNodesVector","addMaxNodeIndex","addNodeEdges","createNodeEdgesVector","startNodeEdgesVector","addSparseInitializers","createSparseInitializersVector","startSparseInitializersVector","endGraph","createGraph","getRootAsModel","getSizePrefixedRootAsModel","producerName","producerVersion","modelVersion","graphDocString","startModel","addIrVersion","addOpsetImport","createOpsetImportVector","startOpsetImportVector","addProducerName","addProducerVersion","addModelVersion","addGraph","addGraphDocString","endModel","createModel","getRootAsKernelCreateInfos","getSizePrefixedRootAsKernelCreateInfos","nodeIndices","nodeIndicesLength","nodeIndicesArray","kernelDefHashes","readUint64","kernelDefHashesLength","startKernelCreateInfos","addNodeIndices","createNodeIndicesVector","startNodeIndicesVector","addKernelDefHashes","createKernelDefHashesVector","startKernelDefHashesVector","endKernelCreateInfos","createKernelCreateInfos","KernelCreateInfos","getRootAsSubGraphSessionState","getSizePrefixedRootAsSubGraphSessionState","graphId","sessionState","SessionState","startSubGraphSessionState","addGraphId","addSessionState","endSubGraphSessionState","requiredField","createSubGraphSessionState","SubGraphSessionState","getRootAsSessionState","getSizePrefixedRootAsSessionState","kernels","subGraphSessionStates","subGraphSessionStatesLength","startSessionState","addKernels","addSubGraphSessionStates","createSubGraphSessionStatesVector","startSubGraphSessionStatesVector","endSessionState","createSessionState","getSizePrefixedRootAsInferenceSession","bufferHasIdentifier","__has_identifier","ortVersion","startInferenceSession","addOrtVersion","addModel","endInferenceSession","finishInferenceSessionBuffer","finishSizePrefixedInferenceSessionBuffer","createInferenceSession","_initialized","backendHint","graphInputTypes","graphInputDims","_model","sessionHandler","promisify","readFile","arrayBuffer","initializeOps","_executionPlan","normalizeAndValidateInputs","createOutput","validateInputTensorDims","validateInputTensorTypes","compareTensorDims","__importDefault","dataProvider","asyncDataProvider","_strides","Guid","validateDimsAndCalcSize","TensorProto","DataType","int32Data","int64Data","doubleData","uint64Data","fromData","greaterThanOrEqual","lessThan","fromBits","ReduceUtil","MathUtil","arrayCopyHelper","MatMulUtil","checkInputsShape","preprocessInputShapes","postprocessOutputShape","calcMatMulShape","fillIndex","calc","isValidBroadcast","tensorDataTypeStringToEnum","Long","fromValue","low","high","unsigned","getSizeFromDimensionRange","incrementIndex","sqr","axpy","powx","determineSplit","calcReduce","calcReduceShape","calcReduceByAxis","adjustPadAndReturnShape","computeShapeHelper","computeConvOutputShape","TextDecoder","WebGpuBackend","currentKernelId","commandEncoder","computePassEncoder","pendingDispatchNumber","profilingEnabled","currentKernelCustomData","kernelCustomData","gpu","requestAdapter","requiredLimits","maxComputeWorkgroupStorageSize","limits","maxComputeWorkgroupsPerDimension","maxStorageBufferBindingSize","features","profilingMode","requiredFeatures","device","requestDevice","gpuDataManager","createGpuDataManager","kernelPersistentData","onuncapturederror","GPUValidationError","profilingQuerySet","createQuerySet","getCommandEncoder","createCommandEncoder","getComputePassEncoder","beginComputePass","endComputePass","submit","refreshPendingBuffers","temporaryData","normalizeDispatchGroupSize","dispatchGroup","LOG_DEBUG","upload","memcpy","download","alloc","free","release","createKernel","WEBGPU_OP_RESOLVE_RULES","releaseKernel","computeKernel","getFloat32Array","HEAP8","customData","HEAPU32","opKernelContext","compute","getTensorElementSize","stackSave","stackAlloc","_JsepOutput","stackRestore","jsepInit","HEAPU8","LOG","logLevelStringToEnum","storageCache","downloadCache","buffersForUploadingPending","buffersPending","originalSize","mappedAtCreation","usage","GPUBufferUsage","MAP_WRITE","COPY_SRC","getMappedRange","unmap","copyBufferToBuffer","gpuData","STORAGE","COPY_DST","GpuDataType","MAP_READ","mapAsync","GPUMapMode","READ","destroy","clipV10","parseAlphaAttributes","erf","parseGemmAttributes","parseGlobalMaxPoolAttributes","reciprocal","thresholdedRelu","biasActivationSnippet","activationFnSnippet","typeSnippet","createConv2DMatMulProgramInfo","N","gpuDataType","getShaderSource","utilFunctions","makeMatMulPackedVec4Source","makeMatMulPackedSource","scalar","vector","createIndicesHelper","o2iImpl","iType","indicesVariableDeclaration","o2iCall","mainStart","guardAgainstOutOfBoundsWorkgroupSizes","createShaderHelper","WORKGROUP_SIZE","i2oImpl","i2oExpression","normalizedDispatchGroup","createGroupedConvProgramInfoLoader","getActicationSnippet","auto_pad","kernel_shape","w_is_const","wIsConst","wT","transposeProgramMetadata","createTransposeProgramInfo","createConv2DMatMulProgramInfoLoader","activation_params","ceil_mode","count_include_pad","storage_order","writeTimestamp","setPipeline","computePipeline","binding","resource","createBindGroup","layout","getBindGroupLayout","setBindGroup","dispatchWorkgroups","QUERY_RESOLVE","resolveQuerySet","profilingTimeBase","createShaderModule","createComputePipeline","entryPoint","profile","iterateExtraOptions","releaseSession","createSession","createSessionFinalize","createSessionAllocate","initOrt","currentScript","wasmPaths","substr","terminate","Z","in","initializeWebAssembly","loggingLevel","getInstance","modeldata","sessionId","inputIndices","outputIndices","extractTransferableBuffers","setRunOptions","logSeverityLevel","logVerbosityLevel","allocWasmString","_OrtCreateRunOptions","extra","WeakSet","_OrtAddRunConfigEntry","_OrtReleaseRunOptions","_free","setSessionOptions","use_ort_model_bytes_directly","enableMemPattern","graphOptimizationLevel","executionMode","logId","optimizedModelFilePath","_OrtCreateSessionOptions","enableCpuMemArena","enableProfiling","_OrtAppendExecutionProvider","_OrtAddSessionConfigEntry","_OrtReleaseSessionOptions","lengthBytesUTF8","_malloc","stringToUTF8","tensorTypeToTypedArrayConstructor","tensorDataTypeEnumToString","_OrtInit","_OrtCreateSession","_OrtGetInputCount","_OrtGetOutputCount","_OrtGetInputName","UTF8ToString","_OrtGetOutputName","_OrtFree","_OrtReleaseSession","HEAP32","_OrtCreateTensor","_OrtRun","jsepRunPromise","_OrtGetTensorData","_OrtReleaseTensor","_OrtEndProfiling","locateFile","Blob","mainScriptUrlOrBlob","PThread","terminateAllThreads","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","webkitURL","revokeObjectURL","encodeURIComponent","_scriptDir","H","ready","ENVIRONMENT_IS_PTHREAD","dirname","normalize","readFileSync","argv","ae","exitCode","inspect","Worker","XMLHttpRequest","send","responseText","responseType","response","writeSync","print","printErr","thisProgram","quit","wasmBinary","noExitRuntime","ne","HEAP16","HEAPU16","HEAPF32","HEAPF64","INITIAL_MEMORY","wasmMemory","Memory","initial","maximum","X","Y","J","preRun","Q","te","cmd","onAbort","RuntimeError","oe","ie","se","pe","La","Xa","ue","lb","Ra","Ka","start_routine","pb","ib","pthread_ptr","Qa","vb","loaded","le","je","qb","onExit","ce","fe","Oa","$a","Ua","mb","xb","receiveObjectTransfer","ob","threadInitTLS","Za","setExitStatus","Ya","nb","kb","targetThread","yb","transferList","Ce","thread","threadId","text","alert","filename","lineno","urlOrBlob","wasmModule","hb","de","establishStackSpace","pt","ft","he","ge","me","be","Pa","gb","eb","fb","ab","ye","we","wb","ve","xe","Te","Se","Oe","Ae","Ee","Ie","$e","Pe","De","ke","Atomics","ut","compareExchange","Re","Me","Ne","Fe","ot","Le","toTimeString","getFullYear","getTimezoneOffset","dt","ht","st","invokeEntryPoint","ct","executeNotifiedProxyingQueue","hrtime","__performance_now_clock_drift","Ue","Be","Ge","Ve","USER","LOGNAME","PATH","PWD","HOME","LANG","languages","ze","He","We","qe","Ke","Xe","Ye","Je","Ze","Qe","et","getMonth","getDate","getDay","Ma","Na","setDate","setMonth","setFullYear","tb","sb","Sa","Va","Ta","Ja","zb","rb","ub","tt","nt","getUTCDay","UTC","getSeconds","getMinutes","getHours","setTime","jb","grow","Wa","randomBytes","asm","wa","za","monitorRunDependencies","credentials","instantiate","instantiateWasm","instantiateStreaming","___wasm_call_ctors","aa","ba","ca","da","ea","fa","ga","ha","ia","ja","ka","la","ma","na","oa","pa","qa","ra","sa","_pthread_self","ta","ua","va","__emscripten_tls_init","__emscripten_thread_init","xa","__emscripten_thread_crashed","ya","_emscripten_run_in_main_runtime_thread_js","Aa","__emscripten_proxy_execute_task_queue","Ba","__emscripten_thread_free_data","Ca","__emscripten_thread_exit","Da","_emscripten_stack_set_limits","Ea","Fa","Ga","Ha","gt","calledRun","onRuntimeInitialized","postRun","setStatus","___cxa_is_pointer_type","Ia","keepRuntimeAlive","ExitStatus","preInit","ee","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","inquire","moduleName","mod","eval","read","EMPTY","isGuid","validator","gen","createEmpty","equals","isEmpty","Instance","Module","__isLong__","fromInt","fromNumber","fromString","UZERO","ONE","UONE","NEG_ONE","MAX_UNSIGNED_VALUE","MIN_VALUE","toInt","isZero","isNegative","eq","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","eqz","isPositive","isOdd","isEven","notEquals","neq","comp","lessThanOrEqual","lte","greaterThan","gte","compare","negate","subtract","get_high","div_u","div_s","toUnsigned","shru","shr","shl","modulo","rem_u","rem_s","rem","shiftLeft","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","Reader","Writer","util","roots","Version","refAttrName","newBuffer","emptyArray","uint32","float","int64","fork","ldelim","int32","encodeDelimited","skipType","decodeDelimited","verify","isString","fromObject","LongBits","base64","arrays","longs","enums","toJSONOptions","ValueInfoProto","TypeProto","metadataProps","OperatorSetIdProto","StringStringEntryProto","TensorAnnotation","quantParameterTensorNames","tensorName","valueInfo","quantizationAnnotation","externalData","segment","dataLocation","Segment","double","uint64","DataLocation","TensorShapeProto","oneOfGetter","oneOfSetter","oneofs","_configure","BufferWriter","BufferReader","rpc","configure","utf8","Buffer","isBuffer","lo","hi","_slice","sint32","bool","fixed32","sfixed32","skip","sint64","zzDecode","fixed64","sfixed64","utf8Slice","Service","rpcImpl","requestDelimited","Boolean","responseDelimited","rpcCall","asPromise","zero","zzEncode","zeroHash","toLong","fromHash","toHash","captureStackTrace","stack","pool","emptyObject","isset","isSet","utf8Write","_Buffer_from","_Buffer_allocUnsafe","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","lcFirst","newError","ProtocolError","allocUnsafe","tail","states","_push","writeBytesBuffer","Offset","Table","SIZEOF_SHORT","SIZEOF_INT","FILE_IDENTIFIER_LENGTH","Encoding","UTF8_BYTES","UTF16_STRING","float32","float64","toFloat64","Builder","minalign","vtable","vtable_in_use","isNested","object_start","vtables","vector_num_elems","force_defaults","capacity","forceDefaults","dataBuffer","asUint8Array","growByteBuffer","pad","writeInt8","writeInt16","writeInt64","writeFloat32","writeFloat64","addInt16","addFloat64","slot","addFieldInt16","addFieldFloat64","addFieldStruct","nested","notNested","readInt16","finishSizePrefixed","createString","bytes_","position_","readUint16","readFloat64","writeUint8","writeUint16","writeUint32","writeUint64","getBufferIdentifier","__webpack_module_cache__","__awaiter$5","SharedResourceManager","modelSessions","initializeWorker","crossOriginScriptUrl","content","workerUrl","worker","terminateWorker","preloadModel","modelUrl","getModelUrl","warmupModel","preloadWorker","newConfig","inputSize","inputChannels","inputType","numPixels","dummyInputData","dummyInput","feed","dummyMaskData","prevMaskTensor","getModelSession","getWorker","getWorkerUrl","sharedResourceManager","preload","__awaiter$4","LocalGenerator","last_mask_generation","last_mask","numImagePixels","channelFlipOffset","numInputPixels","pixel","widthScale","heightScale","nearestNeighborX","maskIdx","outputIdx","normalizedValue","getMask","mask_model","warm","image_tns","segmentation","input_image","prev_mask","output_mask","postRender","NullGenerator","WorkerGenerator","new_mask","toReturn","workerConfig","resolutionCb","image","WebGLRenderer","output_canvas","verts","vertex_shader_src","output_2d","output_canvas_2d","intermediate_canvas","gl_intermediate","image_texture","LINEAR","mask_texture","vertex_array","createVertexArray","bindVertexArray","getUVCalculation","setSharedUniforms","u_resolution","uniform2f","u_image","u_mask","TEXTURE1","uploadVideoStream","postDraw","__awaiter$3","BlurRenderer","fragment_shader_common","fragment_shader_pass_1_src","fragment_shader_pass_2_src","program_1","transfer_texture","u_kernel","getBlurKernel","program_2","u_blur","TEXTURE2","TRIANGLES","kernel","__awaiter$2","PassthroughRenderer","__awaiter$1","ReplacementRenderer","background_canvas_ctx","background","background_data","background_texture","u_background","static","__awaiter","Pipeline","input_canvas","input_ctx","willReadFrequently","onFrame","renderer","rawImageData","maskImageData","generateUuid","getOrCreateEl","uniqueId","addToDom","getElementById","bottom","opacity","zIndex","setAttribute","getCanvasEl","showInDom","getVideoEl","isIos","platform","portraitMql","matchMedia","srcEl","destEl","sh","sw","dh","dw","clearRect","getBackgroundConfig","backgroundEl","video","mirror","loadImageFromUrl","loadVideoFromUrl","onloadeddata","videoHeight","videoWidth","autoplay","playsInline","loop","muted","DEFAULT_FRAME_RATE","VirtualBackgroundMode","defaultOptions","Blur","blurStrength","omitAuthToken","VirtualBackgroundEffect","frameRate","trackSettings","lastFrameTime","frameInterval","restoreEffectOnTrackEnable","handleOrientationChange","mql","isPortrait","matches","videoEl","inputEl","outputEl","handleFrame","handleVideoLoadedMetadata","handleVideoResize","handleModelResolver","preloadConfig","videoTrack","getVideoTracks","loadDomAndModel","getSettings","setupDom","detectQuirks","srcObject","effectStream","captureStream","requestFrame","requestAnimationFrame","createPipeline","bgImageUrl","Video","bgVideoUrl","virtualVideoEl","manageEffectRestoration","onFrameProcessedCallback","inputTrackEnabled","play","oldSettings","newSettings","updateSize","modelPath","_j","_m","_o","_p","remove","setOnFrameProcessedCallback","callback","createVirtualBackgroundEffect","protoProps","child","Surrogate","__super__","AmpersandEvents","classExtend","models","comparator","mainIndex","idAttribute","_reset","silent","isModel","serialize","collection","attrs","singular","sortable","sortAttr","toAdd","toRemove","modelMap","order","targetProto","generateId","_isDerivedIndex","_derived","cid","hasChanged","_prepareModel","_addReference","isNew","_index","orderedModels","trigger","indexName","collectionMainIndex","_indexes","_deIndex","_removeReference","previousModels","right","indexes","validationError","indexVal","indexAttr","_onModelEvent","eventName","previousAttributes","isCollection","extend","runOnce","utils","eventsApi","_callback","retain","allEvents","triggerEvents","stopListening","listeningTo","_listeningTo","_listenId","createEmitter","listenTo","createListenMethod","listenToOnce","listenToAndRun","unbind","eventSplitter","a1","a2","a3","action","rest","implementation","cloneObj","omit","escape","forOwn","isDate","_isEqual","union","KeyTree","arrayNext","changeRE","noop","_eventBubblingHandlerCache","_definition","_keyTree","_initCollections","_initChildren","_cache","_previousAttributes","_changed","_initDerived","createPropertyDefinition","isSession","descArray","_ensureValidType","required","allowNull","setOnce","_getDefaultForType","typeDef","_dataTypes","defaultValue","_getOnChangeForType","onChange","createDerivedProperty","modelProto","definition","depList","deps","dep","_deps","_getDerivedProperty","extraProperties","namespaceAttribute","typeAttribute","getId","getNamespace","attr","isValid","_validate","attrOpts","props","getAttributes","setFromSerializedValue","_children","_collections","wasChanging","changeEvents","newType","newVal","unset","currentVal","isEqual","_changing","_createPropertyDefinition","_getCompareForType","_pending","change","property","changedAttributes","diff","changed","old","previous","derived","derivedItem","update","propString","flushCache","coll","_safeSet","_getCachedEventBubblingHandler","propertyName","newValue","_verifyRequired","isState","dataTypes","date","dateVal","array","previousVal","attributeName","omitFromExtend","children","currentItem","newIndex","safeSetTimeout","unref","fromBase64url","UrlSafeBase64","toBase64Url","debounce","wait","maxWait","maxCalls","maxWaitTimer","waitTimer","_options","clearTimeout","_Reflect$apply","checkRequired","Defer","_this","_Promise","makeStateDataType","currentValue","prop","make","_len","containers","_key","TopContainer","_WeakMap","sizes","ChildContainer","container","Container","_classCallCheck","_len2","_key2","_construct","_createClass","mine","_len3","_key3","_len4","_key4","overwrite","_len5","_key5","insert","_len6","_key6","_Map","flights","oneFlight","oneFlightDecorator","cacheFailures","cacheSuccesses","keyFactory","_wrap","innerKey","flight","_typeof","email","containsEmails","uuid","containsMTID","execEmail","execUuid","proxyEvents","transferEvents","drain","_isArray","SDK_EVENT","INTERNAL","WEBEX_ACTIVITY","ACTIVITY_FIELD","ACTOR","OBJECT","TARGET","ACTIVITY_VERB","ACKNOWLEDGE","CARD_ACTION","CREATE","POST","SHARE","DELETE","ADD","LEAVE","ADD_MODERATOR","REMOVE_MODERATOR","LOCK","UNLOCK","HIDE","UPDATE","ACTIVITY_TAG","ONE_ON_ONE","LOCKED","EXTERNAL","EVENT_TYPE","CREATED","DELETED","UPDATED","SEEN","OWNER","CREATOR","ORG","STATUS","ACTIVE","DISABLED","SPACE_TYPE","DIRECT","GROUP","RESOURCE","ATTACHMENT_ACTIONS","MEMBERSHIPS","MESSAGES","ROOMS","ATTACHMENTS","CARD_CONTENT_TYPE","browserDetection","hydraTypes","ATTACHMENT_ACTION","CONTENT","MEMBERSHIP","MESSAGE","ORGANIZATION","PEOPLE","ROOM","TEAM","deviceType","PROVISIONAL","WEB","INTERNAL_US_CLUSTER_NAME","INTERNAL_US_INTEGRATION_CLUSTER_NAME","createEventEnvelope","webex","ensureMyIdIsAvailable","createdBy","orgId","ownedBy","created","_x","_ensureMyIdIsAvailable","_asyncToGenerator","_regeneratorRuntime","_callee","_context","people","person","retry","strategyOptions","_objectSpread","_defaults","backoff","delay","maxAttempts","initialDelay","maxDelay","retryDecorator","innerPromise","_isFunction","setStrategy","ExponentialStrategy","failAfter","tap","whileInFlight","param","Exception","_Error","_inherits","_createSuper","_this2","_this$constructor","defaultMessage","_wrapNativeSuper","_defineProperty","getBrowserSerial","browserData","_window$navigator","bowser","mockDetectionObject","getOSName","require","getOSVersion","getBrowserName","getBrowserVersion","isBrowser","_memoize","agent","_window$navigator2","_results$getOSName","_results$getOSVersion","_results$getBrowserNa","_results$getBrowserVe","isRequired","constructHydraId","cluster","deconstructHydraId","buildHydraMessageId","buildHydraPersonId","buildHydraRoomId","buildHydraOrgId","buildHydraMembershipId","personUUID","spaceUUID","getHydraClusterString","conversationUrl","internalClusterString","services","getClusterId","clusterParts","getHydraRoomType","tags","makeSubTypes","NetworkOrCORSError","_Base","BadRequest","_Base2","_super2","Unauthorized","_BadRequest","_super3","PaymentRequired","_BadRequest2","_super4","Forbidden","_BadRequest3","_super5","NotFound","_BadRequest4","_super6","MethodNotAllowed","_BadRequest5","_super7","NotAcceptable","_BadRequest6","_super8","ProxyAuthenticationRequired","_BadRequest7","_super9","RequestTimeout","_BadRequest8","_super10","Conflict","_BadRequest9","_super11","Gone","_BadRequest10","_super12","LengthRequired","_BadRequest11","_super13","PreconditionFailed","_BadRequest12","_super14","RequestEntityTooLarge","_BadRequest13","_super15","RequestUriTooLong","_BadRequest14","_super16","UnsupportedMediaType","_BadRequest15","_super17","RequestRangeNotSatisfiable","_BadRequest16","_super18","ExpectationFailed","_BadRequest17","_super19","TooManyRequests","_BadRequest18","_super20","InternalServerError","_Base3","_super21","NotImplemented","_InternalServerError","_super22","BadGateway","_InternalServerError2","_super23","ServiceUnavailable","_InternalServerError3","_super24","GatewayTimeout","_InternalServerError4","_super25","HttpVersionNotSupported","_InternalServerError5","_super26","_Object$assign","select","statusCode","_parseInt","Derived","hasNativeReflectConstruct","_Reflect$construct","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","HttpError","_Exception","parseObject","_Object$defineProperties","httpVersion","rawHeaders","trailers","rawTrailers","statusMessage","socket","_res","_Object$values","_pick","errorKeys","_JSON$stringify","Interceptor","_Object$keys","_Reflect$defineProperty","_get","ENABLE_VERBOSE_NETWORK_LOGGING","HttpStatusInterceptor","_Interceptor","ErrorConstructor","_assertThisInitialized","errorCode","parseHeaders","xtend","initParams","uri","createXHR","_createXHR","called","getBody","xhr","responseXML","firefoxBugTakenEffect","nodeName","getXml","isJson","errorFunc","evt","_evt$target","timeoutTimer","ProgressEvent","total","lengthComputable","readyState","failureResponse","loadFunc","useXDR","rawRequest","getAllResponseHeaders","cors","XDomainRequest","sync","onreadystatechange","onprogress","onabort","ontimeout","username","password","withCredentials","timeout","abort","setRequestHeader","beforeSend","forEachArray","detect","_detect","fileType","fromBuffer","mime","_createForOfIteratorHelper","allowArrayLike","_Symbol","_Symbol$iterator","_Array$isArray","minLen","_arrayLikeToArray","_Array$from","_unsupportedIterableToArray","normalCompletion","didErr","_e2","return","arr2","_request","setXhr","bindProgressEvents","auth","bearer","authorization","user","pass","btoa","setAuth","jar","setCookies","defs","setResponseType","_x2","_setContentType","setContentType","form","qs","_Reflect$deleteProperty","formData","fd","FormData","setPayload","setQs","processResponseJson","t0","_step","_iterator","file","ensureBlob","intercept","interceptors","successKey","errorKey","interceptor","logOptions","_prepareFetchOptions","accept","Accept","keepalive","protorequest","_curry","_isString","_Reflect$getOwnPropertyDescriptor","_assign","protoprepareFetchOptions","setTimingsAndFetch","opts","$timings","requestStart","networkStart","setRequestTimings","calculateEndTime","durationMinutes","namespace","getBy","_find","itemId","meeting","CalendarUtil","setAll","getAll","_encryptTextProp","encryption","encryptText","ciphertext","_encryptCalendarEventPayload","encryptionKeyUrl","encryptedAttendees","attendees","attendee","_encryptFreeBusyPayload","promises","emails","EncryptHelper","encryptCalendarEventRequest","kms","createUnboundKeys","encryptFreeBusyRequest","_decryptTextProp","decryptText","plaintext","decryptSchedulerDataResponse","decryptedParticipants","encryptedParticipants","participant","decryptedScheduleFor","encryptedScheduleFor","decryptedMeetingJoinInfo","meetingJoinInfo","decryptedOrganizer","encryptedOrganizer","decryptFreeBusyResponse","calendarFreeBusyScheduleResponse","calendarFreeBusyItems","calendarFreeBusyItem","Calendar","WebexPlugin","registered","rpcEventRequests","prefetchEncryptionKey","canAuthorize","isUnverifiedGuest","getKey","onBehalfOf","retrievedKey","register","_this3","mercury","listenForEvents","unregister","_this4","stopListeningForEvents","_this5","envelope","_handleCreate","_handleUpdate","_handleDelete","_handleFreeBusy","CalendarCollection","calendarMeetingExternal","_this6","DecryptHelper","requestId","syncCalendar","fromDate","toDate","getByType","processMeetingEvent","transform","getParticipants","participantsUrl","request","getNotesByUrl","notesUrl","getNotes","service","_this7","meetingObjects","notesResponse","createCalendarEvent","_this8","updateCalendarEvent","_this9","deleteCalendarEvent","getSchedulerData","_this10","getFreeBusy","_this11","calendar","registerInternalPlugin","payloadTransformer","predicates","direction","_has","extract","transforms","removeNode","parentElement","_filterSync","processCallback","allowedTags","allowedStyles","doc","DOMParser","parseFromString","depthFirstForEach","childNodes","filterNode","isElement","allowedTagNames","_includes","allowedAttributes","_forEach","listAttributeNames","attrName","attrValue","getNamedItem","reparent","styles","styleName","removeAttribute","innerHTML","_filterEscapeSync","before","after","escapeNode","trimPattern","_reduce","attrNames","ownerDocument","nodeType","filterEscape","_OverloadYield","_awaitAsyncGenerator","AsyncGenerator","resume","settle","readExifData","_readExifData","exifData","Orientation","ExifImageHeight","ExifImageWidth","mimeType","translateValues","orientation","exifHeight","exifWidth","InvalidUserCreation","_ConversationError","ConversationError","EMITTER_SYMBOL","FILE_SYMBOL","PROMISE_SYMBOL","ShareActivity","conversation","claimedFileType","clientTempId","enableThumbnails","hiddenSpaceUrl","mentions","spaceUrl","uploads","_spaceUrl","_retrieveSpaceUrl","_hiddenSpaceUrl","addGif","gif","gifToAdd","fileSize","objectType","SCR","scr","thumbnailScr","detectFileType","_ref2","thumbnailMaxWidth","thumbnailMaxHeight","isAvatar","img","fileDimensions","thumbnailDimensions","_ref","maxWidth","maxHeight","computeDimensions","canvas","orient","parts","byteString","atob","processImage","thumb","main","encryptBinary","cdata","_ref3","_slicedToArray","uploadPromise","_upload","metadata","downloadUrl","_imageData","thumbnail","_ref4","_ref5","_ref6","getFiles","files","uploadOptions","fileHash","sha256","_ref7","role","initializeBody","transcode","phases","$url","uploadUrl","finalize","$uri","finishUploadUrl","prepare","activity","verb","contentCategory","_determineContentCategory","_itemContainsActionWithMimeType","_some","actions","mimeTypes","_filter","_map","_step2","_iterator2","_object$object","_files$items","_files","share","OLDER","NEWER","MID","INITIAL","ACTIVITY_TYPES","getActivityType","_activity$parent","_activity$parent2","getPublishedDate","published","isNewer","activity1","activity2","sortActivitiesByPublishedDate","activities","_sortBy","getParentId","_activity$parent3","sanitizeActivity","final","reactionSelf","replies","getIsReplyEditActivity","parentActivity","setValue","getActivityObjectsFromMap","hashMap","activityManager","replyActivityHash","editActivityHash","reactionActivityHash","reactionSelfActivityHash","handleNewReply","replyAct","replyParentId","existingReplyHash","replyHash","handleNewEdit","editAct","editParentId","existingEdit","reactionHelper","reactionAct","hash","reactionParentId","existingReaction","handleNewReaction","handleNewReactionSelf","reactionSelfAct","getActivityHandlerByKey","getActivityByTypeAndParentId","bookendManager","oldestAct","newestAct","setBookends","act","oldestActsFirst","newestInBatch","_last","oldestInBatch","setNewestAct","getNewestAct","getOldestAct","noMoreActivitiesManager","noMoreActs","noOlderActs","noNewerActs","getNoMoreActs","checkAndSetNoMoreActs","queryType","visibleActs","currentBatchSize","checkAndSetNoNewerActs","checkAndSetNoOlderActs","rootActivityManager","rootActivityHash","addNewRoot","rootAct","getRootActivityHash","getLoopCounterFailsafe","fetchLoopCount","getQuery","queryOptions","newestPublishedDate","oldestPublishedDate","batchSize","_queryOptions$activit","activityToSearch","sinceDate","lastActivityFirst","searchType","midDate","maxDate","idToUrl","getConvoLimit","conversationsLimit","Conversation","getUrlFromClusterId","_ref$cluster","getServiceUrlFromClusterId","acknowledge","getConvoUrl","convoWithUrl","_isObject","prepareConversation","asUUID","kmsMessage","resourceUri","userIds","participants","allowPartialCreation","userId","validParticipants","_uniq","forceGrouped","_createGrouped","skipOneOnOneFetch","_createOneOnOne","_maybeCreateOneOnOneThenPost","createReactionHmac","unboundedStorage","keyString","formatjwk","jwk","kid","kty","hmac","hmacSHA256","sendReaction","reactionPayload","deleteReaction","reactionId","recipientId","deleteReactionPayload","actor","recipients","addReaction","addReactionPayload","kmsResourceObjectUrl","querystring","authId","isEncrypted","shunt","_downloadUnencryptedFile","shouldNotAddExifData","expand","bulkActivitiesFetch","activityUrls","api","activitiesArr","multistatus","statusData","uuidEntryFormat","personRefresh","activitiesLimit","includeConvWithDeletedUserUUID","includeParticipants","_omit","disableTransform","_recordUUIDs","leave","_list","summary","deferDecrypt","convo","paginate","reqOptions","page","links","Page","participantsLimit","additionalUrls","listLeft","listActivities","_listActivities","listParentActivityIds","_this12","_callee2","_context2","listAllChildActivitiesByParentId","_arguments2","_this13","_callee3","activityParentId","activityType","initialResponse","_iterator3","_step3","_context3","listChildActivitiesByParentId","_toConsumableArray","hasNext","_arguments3","_this14","_callee4","finalQuery","_context4","getReactionSummaryByParentId","_this15","_callee5","_yield$_this15$reques","reactionObjects","_context5","listMentions","muteMentions","muteMessages","ignore","cardAction","_this16","post","_this17","_this18","parentActivityId","_merge","listThreads","_this19","_callee6","_context6","processActivityEvent","processInmeetingchatEvent","removeAllMuteTags","untag","makeShare","avatar","_this20","conversations","generalConversationUuid","relatedUrl","updateTypingStatus","eventType","typing","conversationId","_this21","endpoint","_this22","cloneActivity","_cloneDeepWith","copySrc","_cloneDeep","toJWE","defaultActivityEncryptionKeyUrl","defaultActivityEncryptionkeyUrl","unassign","_this23","unmuteMentions","unmuteMessages","unignore","_this24","updateKey","_this25","_updateKey","_this26","keyUris","forceCreate","_prepareConversationForCreation","getConversationUrl","_this27","convoUrl","waitForCatalog","_inferConversationUrl","_this28","feature","getFeature","haMessagingEnabled","listActivitiesThreadOrdered","_this29","baseOptions","olderOptions","threadOrderer","_listActivitiesThreadOrdered","jumpToActivity","_callee7","searchObject","newUrl","searchOptions","_yield$threadOrderer$","searchResults","_context7","getOlder","_callee8","_yield$threadOrderer$2","_yield$threadOrderer$3","moreActivitiesExist","_context8","getNewer","_callee9","newerOptions","_yield$threadOrderer$4","_context9","_callee10","_options$minActivitie","minActivities","_options$queryType","_options$search","includeChildren","_bookendManager","defaultBatchSize","_activityManager","_loop","_ret","_context12","_rootActivityManager","_noMoreActivitiesMana","getActivityHandlerByType","handleNewActivity","handleNewActivities","handleOlderQuery","handleNewerQuery","handleSearch","getQueryResponseHandler","incrementLoopCounter","_loop2","orderedActivities","getRepliesByParentId","nextOptions","currentOldestPublishedDate","currentNewestPublishedDate","_context11","actType","activityHandler","allBatchActivitiesConfig","$allBatchActivitiesFetch","$fetchRequests","$parentsFetch","_yield$_awaitAsyncGen","_yield$_awaitAsyncGen2","allBatchActivities","_yield$_awaitAsyncGen3","parents","_parents$reply","replyIds","_parents$edit","editIds","_parents$reaction","reactionIds","$reactionFetches","$replyFetches","$editFetches","_iterator4","_step4","actId","childFetchOptions","_yield$_awaitAsyncGen4","_yield$_awaitAsyncGen5","reactions","edits","newReplyReactions","allReactions","visibleActivitiesCount","_iterator5","_step5","rootActivity","rootId","repliesByRootId","_context10","reply","edit","replyArr","editArr","reactionArr","repliesByParentId","replyActivity","replyId","latestActivity","allRelevantActivities","finalReply","_createParsedServerActivity","sanitizedFullReply","finalActivity","sanitizedFullRoot","allActivitiesHash","isOrphan","getIsActivityOrphaned","editActivity","editActParentObj","initialType","determineActivityType","editParent","replyParent","createReplyActivity","parentReplyAct","createReplyEditActivity","_this30","_callee11","_iterator6","_step6","_context13","host","_this31","comment","_this32","isDefaultClassification","classificationId","effectiveDate","favorite","_this33","recordUUID","_this34","moderator","_this35","_ref8","fnName","_this36","_this37","_Object$getOwnPropertySymbols","_Object$getOwnPropertyDescriptor","toArray","_Object$getOwnPropertyDescriptors","_Object$defineProperty","encryptTextProp","encryptJsonProp","encryptObject","_capitalize","encryptReaction2","reaction2","encryptConversation","encryptActivity","_activity$target","_activity$object","_activity$object2","encryptVerbActivity","maybeEncryptTarget","updateKeyActivity","prepareActivityKmsMessage","kro","keyUrl","encryptVerbActivityWithKey","encryptAddActivity","encryptAssignActivity","alias","encryptCreateActivity","encryptPostActivity","encryptShareActivity","encryptCardactionActivity","encryptUpdateActivity","encryptUpdateKeyActivity","encryptComment","encryptContent","encryptFile","encryptSubmit","encryptImageURI","imageURI","encryptPropContent","encryptPropDisplayName","encryptPropInputs","encryptPropLocation","encryptPropScr","encryptScr","decryptTextProp","decryptObject","decryptSubmit","decryptionFailureMessage","decryptReaction2summary","decryptReaction2selfsummary","decryptReaction2","decryptThread","threadObject","childActivities","decryptMeetingcontainer","meetingContainerActivity","usableKey","extensions","itemToDecrypt","decryptConversation","avatarEncryptionKeyUrl","previousValue","decryptActivity","decryptMicroappinstance","microappInstance","decryptComment","cards","decryptContent","decryptContentFiles","decryptContentLinks","decryptEvent","decryptFile","transcodedCollection","decryptLink","link","decryptTranscodedContent","transcodedContent","decryptImageURI","keepEncryptedProperties","encryptedPropName","_camelCase","decryptPropCardItem","_Number$isInteger","decryptPropScr","decryptScr","decryptPropSslr","sslr","decryptPropDisplayName","decryptPropContent","decryptPropModel","decryptPropLocation","decryptPropTopic","optionsOrResponse","decrypt","_ctx$webex$config$con","inboundProcessFunc","allowedInboundTags","allowedInboundStyles","htmlFilter","_ctx$webex$config$con2","outboundProcessFunc","allowedOutboundTags","allowedOutboundStyles","htmlFilterEscape","threadActivity","entryEmail","emailAddress","entryUUID","patterns","roomProperties","isModerator","decryptionTransforms","encryptionTransforms","FEATURE_COLLECTION_DEVELOPER","FEATURE_COLLECTION_ENTITLEMENT","FEATURE_COLLECTION_USER","CISCO_DEVICE_URL","FEATURE_COLLECTION_NAMES","FEATURE_TYPES","BOOLEAN","DEVICE_EVENT_REGISTRATION_SUCCESS","DEVICE_EVENTS","AmpState","lastModified","mutable","parsedModel","_Number$isNaN","optns","AmpCollection","FeatureModel","developer","FeatureCollection","entitlement","collectionName","firstIpV4","firstIpV6","firstMdns","totalTime","supportsIpV4","receivedOnlyMDnsCandidates","supportsIpV6","gatherLocalCandidates","pc","doneGatheringIceCandidates","onicecandidate","_event$candidate","candidate","address","onicegatheringstatechange","iceGatheringState","createDataChannel","createOffer","offer","setLocalDescription","RTCPeerConnection","_dec","waitForValue","_dec2","_dec3","_dec4","deprecated","_dec5","persist","ephemeral","_obj","FeaturesModel","ipNetworkDetector","IpNetworkDetector","clientMessagingGiphy","customerCompanyName","customerLogoUrl","helpUrl","intranetInactivityDuration","intranetInactivityCheckUrl","inNetworkInactivityDuration","ecmEnabledForAllUsers","ecmSupportedStorageProviders","modificationTime","navigationBarColor","partnerCompanyName","partnerLogoUrl","peopleInsightsEnabled","reportingSiteDesc","reportingSiteUrl","searchEncryptionKeyUrl","showSupportText","supportProviderCompanyName","supportProviderLogoUrl","webFileShareControl","webSocketUrl","whiteboardFileShareControl","logoutTimer","lastUserActivityDate","isReachabilityChecked","isInMeeting","isInNetwork","meetingStarted","meetingEnded","refresh","canRegister","mediaCluster","etag","ttl","ephemeralDeviceTTL","processRegistrationSuccess","newMetrics","callDiagnosticMetrics","setDeviceInfo","submitInternalEvent","metrics","submitClientMetrics","METRICS","fields","canRegisterWaitDuration","checkNetworkReachability","resetLogoutTimer","trackingid","getWebSocketUrl","waitForRegistration","convertUrlToPriorityHostUrl","wsUrl","serviceHostMap","refreshTimer","enableInactivityEnforcement","setLogoutTimer","logout","markUrlFailedAndGetNew","markFailedUrl","_Date$now","_applyDecoratedDescriptor","DeviceUrlInterceptor","_this$webex$internal","waitForService","serviceName","getServiceFromUrl","_set","title","inBrowser","localizedModel","systemName","systemVersion","installationId","Device","onBeforeLogout","ensureBuffer","toArrayBuffer","fr","FileReader","readAsArrayBuffer","KMS_KEY_REVOKE_ERROR_CODES","KmsError","KmsTimeoutError","_KmsError","_ref$request","DryError","_WebexHttpError","WebexHttpError","TIMEOUT_SYMBOL","Batcher","processKmsMessageEvent","kmsMessages","acceptItem","prepareItem","getDeferredForRequest","handleItemFailure","prepareRequest","_getKMSCluster","req","submitHttpRequest","handleHttpSuccess","didItemFail","handleItemSuccess","getDeferredForResponse","handleKmsKeyRevokedEncryptionFailure","fingerprintRequest","fingerprintResponse","parameters","inputBuffer","inputOffset","inputLength","insertSpace","checkBufferParams","baseBlock","utilFromBase","inputBase","utilToBase","base","reserved","internalReserved","internalValue","biggest","retBuf","retView","basis","buffers","outputLength","prevLength","utilConcatView","views","utilDecodeTC","valueHex","condition1","condition2","warnings","bigIntBuffer","bigIntView","bigInt","smallIntBuffer","smallIntView","utilEncodeTC","modValue","tempBuf","tempView","isEqualBuffer","inputBuffer1","inputBuffer2","view1","view2","padNumber","inputNumber","fullLength","dif","padding","base64Template","base64UrlTemplate","toBase64","useUrlTemplate","skipPadding","skipLeadingZeros","flag1","flag2","template","nonZeroPosition","chr1","chr2","chr3","enc1","enc2","enc3","enc4","fromBase64","cutTailZeros","toSearch","incoming","nonZeroStart","arrayBufferToString","resultString","stringToArrayBuffer","resultBuffer","resultView","nearestPowerOf2","propsArray","assertBigInt","BigInt","prepareIndefiniteForm","idBlock","isConstructed","valueBlock","lenBlock","isIndefiniteForm","powers2","digitsString","VALUE_HEX","IS_HEX_ONLY","ID_BLOCK","TAG_CLASS","TAG_NUMBER","IS_CONSTRUCTED","IS_INDEFINITE_FORM","OPTIONAL","PRIMITIVE_SCHEMA","VALUE_DATE","VALUE_DEC","EMPTY_STRING","EMPTY_BUFFER","ViewWriter","LocalBaseBlock","blockLength","valueBeforeDecode","blockName","HexBlock","BaseClass","isHexOnly","fromBER","toBER","sizeOnly","ex","LocalIdentificationBlock","tagClass","tagNumber","firstOctet","encodedBuf","encodedView","curView","intBuffer","tagNumberMask","tagNumberBufferMaxLength","intTagNumberBuffer","tempBuffer","tempBufferView","LocalLengthBlock","longFormUsed","lengthBufferView","ValueBlock","BaseBlock","valueBlockType","optional","primitiveSchema","resultOffset","writer","_writer","idBlockBuf","valueBlockSizeBuf","lenBlockBuf","valueBlockBuf","LocalPrimitiveValueBlock","valueHexView","LocalConstructedValueBlock","initialOffset","initialLength","currentOffset","indefiniteLength","returnObject","LocalFromBER","EndOfContent","Constructed","LocalEndOfContentValueBlock","LocalBooleanValueBlock","Sequence","Null","LocalOctetStringValueBlock","currentBlockName","OctetString","asn","octetString","LocalBitStringValueBlock","unusedBits","BitString","bitString","bits","byte","LocalIntegerValueBlock","valueDec","_value","_valueHex","_valueDec","fromDER","expectedLength","updatedValueHex","toDER","updatedView","viewAdd","second","firstView","secondView","firstViewCopy","firstViewCopyLength","secondViewCopy","secondViewCopyLength","power2","viewSub","firstBit","currentByte","bitNumber","asn1View","flag","byteNumber","Integer","otherValue","convertToDER","integer","convertFromDER","Enumerated","LocalSidValueBlock","isFirstSid","tempValueHex","valueBigInt","sidValue","LocalObjectIdentifierValueBlock","sidBlock","retBufs","valueBuf","pos1","pos2","sid","plus","parsedSID","sidStr","sidArray","ObjectIdentifier","LocalUtf8StringValueBlock","Utf8String","decodeURIComponent","inputString","unescape","strLen","LocalRelativeSidValueBlock","LocalRelativeObjectIdentifierValueBlock","RelativeObjectIdentifier","LocalBmpStringValueBlock","BmpString","copyBuffer","valueView","temp","strLength","codeBuf","codeView","LocalUniversalStringValueBlock","UniversalString","LocalSimpleStringValueBlock","LocalSimpleStringBlock","NumericString","PrintableString","TeletexString","VideotexString","IA5String","GraphicString","VisibleString","GeneralString","CharacterString","UTCTime","year","month","day","hour","minute","valueDate","toBuffer","inputDate","parserArray","outputArray","GeneralizedTime","millisecond","parser","isUTC","timeString","dateTimeString","fractionPart","hourDifference","minuteDifference","multiplier","differencePosition","differenceString","fractionPointPosition","fractionPartCheck","fractionResult","tempDate","DATE","TimeOfDay","DateTime","Duration","incomingOffset","newASN1Type","newObject","inputObject","localChangeType","VALUE_HEX_VIEW","EMPTY_VIEW","END_OF_CONTENT_NAME","OCTET_STRING_NAME","BIT_STRING_NAME","toUint8Array","endLength","ToHex","valueBeforeDecodeView","inputView","lenOffset","typeStore","onAsciiEncoding","other","BaseStringBlock","stringValueBlockType","_a$w","_a$v","_a$u","_a$t","_a$s","_a$r","_a$q","_a$p","_a$o","_a$n","_a$m","_a$l","_a$k","_a$j","_a$i","_a$h","_a$g","_a$f","_a$e","_a$d","_a$c","_a$b","_a$a","_a$9","_a$8","_a$7","_a$6","_a$5","_a$4","_a$3","_a$2","_a$1","localFromBER","override","octet","bitsStr","setValueHex","toBigInt","fromBigInt","bigIntValue","FromHex","secondInt","retBuffers","LocalStringValueBlock","ToUtf8String","ToBinary","FromUtf8String","ToUtf16String","FromUtf16String","local","dataView","inputData","inputSchema","verified","_result","encodedId","schemaView","admission","_optional","arrayRoot","asn1","algorithmId","defaultValues","algorithmParams","fromSchema","schema","memberName","compareWithDefault","memberValue","algorithmIdentifier","algorithm","toSchema","ECNamedCurves","namedCurves","nameOrId","ECPublicKey","namedCurve","fromJSON","coordinateLength","crv","convertBuffer","convertBufferView","RSAPublicKey","modulus","publicExponent","subjectPublicKey","parsedKey","publicKeyASN1","publicKeyJWK","importKey","publicKey","sequence","exportKey","exportedKey","setName","ECPrivateKey","privateKey","publicKeyData","crvName","privateKeyJSON","publicKeyJSON","coodinateLength","OtherPrimeInfo","prime","exponent","coefficient","RSAPrivateKey","privateExponent","prime1","prime2","exponent1","exponent2","otherPrimeInfos","otherPrimeInfosName","otherPrimeInfo","dp","dq","qi","oth","privateKeyAlgorithm","privateKeyASN1","contentType","contentEncryptionAlgorithm","encryptedContent","constrString","pieceView","_array","_view","sequenceLengthBlock","encryptedValue","_object","RSASSAPSSParams","hashAlgorithm","maskGenAlgorithm","saltLength","trailerField","salt","iterationCount","keyLength","prf","saltPrimitive","saltConstructed","PBES2Params","keyDerivationFunc","encryptionScheme","makePKCS12B2Key","cryptoEngine","passwordViewInitial","passwordTransformed","passwordTransformedView","dView","sLen","sView","saltView","passwordLength","pLen","pView","passwordView","sPlusPLength","iView","internalSequence","_I","dAndI","dAndIView","roundBuffer","digest","bView","iRound","sliceStart","sliceLength","chunk","CryptoEngine","subtle","keyData","extractable","keyUsages","publicKeyInfo","alg","ext","key_ops","privateKeyInfo","convert","inputFormat","outputFormat","encrypt","generateKey","deriveKey","deriveBits","wrapKey","unwrapKey","getAlgorithmByOID","oid","kdf","getOIDByAlgorithm","getAlgorithmParameters","algorithmName","operation","usages","modulusLength","public","iv","iterations","getHashAlgorithm","signatureAlgorithm","encryptEncryptedContentInfo","contentEncryptionOID","pbkdf2OID","hmacOID","hmacHashAlgorithm","ivBuffer","ivView","saltBuffer","contentView","contentToEncrypt","pbkdf2Params","pbes2Parameters","decryptEncryptedContentInfo","encryptedContentInfo","stampDataWithPassword","hmacAlgorithm","contentToStamp","verifyDataStampedWithPassword","signatureToVerify","contentToVerify","getSignatureParameters","paramsObject","hashAlgorithmOID","pssParameters","signWithPrivateKey","signatureBuffer","rBuffer","rInteger","sBuffer","sInteger","createCMSECDSASignature","fillPublicKeyParameters","shaAlgorithm","algorithmObject","algorithmParamsChecked","curveObject","getPublicKey","publicKeyInfoBuffer","publicKeyInfoView","verifyWithPublicKey","signature","signatureValue","cmsSignature","rValue","sValue","correctedLength","rValueView","rValueBufferCorrected","rValueViewCorrected","sValueView","sValueBufferCorrected","sValueViewCorrected","createECDSASignatureFromCMS","hashAlgo","engine","setEngine","pid","pkijs","_engine","stringPrep","isSpace","cuttedResult","engineName","cryptoObject","subtleObject","webkitSubtle","AttributeTypeAndValue","typeValue","compareTo","stringBlockNames","thisName","localeCompare","typesAndValues","repeatedSequence","repeatedSet","typeAndValue","RDN","builtInStandardAttributes","country_name","administration_domain_name","network_address","terminal_identifier","private_domain_name","organization_name","numeric_user_identifier","personal_name","organizational_unit_names","builtInDomainDefinedAttributes","extensionAttributes","directoryName","otherName","rfc822Name","dNSName","x400Address","ediPartyName","uniformResourceIdentifier","iPAddress","registeredID","valueBER","AccessDescription","accessMethod","accessLocation","Accuracy","seconds","millis","micros","intMillis","intMicros","AltName","altNames","Time","utcTimeName","generalTimeName","SubjectDirectoryAttributes","PrivateKeyUsagePeriod","notBefore","notAfter","localNotBefore","localNotAfter","BasicConstraints","cA","pathLenConstraint","IssuingDistributionPoint","distributionPoint","onlyContainsUserCerts","onlyContainsCACerts","onlySomeReasons","indirectCRL","onlyContainsAttributeCerts","distributionPointNames","GeneralNames","generalNames","GeneralSubtree","minimum","valueMinimum","valueMaximum","NameConstraints","permittedSubtrees","excludedSubtrees","DistributionPoint","reasons","cRLIssuer","cRLIssuerNames","CRLDistributionPoints","distributionPoints","PolicyQualifierInfo","policyQualifierId","qualifier","PolicyInformation","policyIdentifier","policyQualifiers","CertificatePolicies","certificatePolicies","PolicyMapping","issuerDomainPolicy","subjectDomainPolicy","PolicyMappings","mappings","AuthorityKeyIdentifier","keyIdentifier","authorityCertIssuer","authorityCertSerialNumber","PolicyConstraints","requireExplicitPolicy","inhibitPolicyMapping","field1","int1","field2","int2","ExtKeyUsage","keyPurposes","InfoAccess","accessDescriptions","ByteStream","fromUint8Array","fromArrayBuffer","fromHexString","hexstring","stub","_buffer","hexString","hexMap","toHexString","realloc","initialSize","streamViewLength","subarrayView","isEqualView","findPattern","pattern","start_","length_","backward_","backward","prepareFindParameters","patternLength","patternArray","equalStart","findFirstIn","valid","findAllIn","patternFound","findAllPatternIn","findFirstNotIn","currentLength","findAllNotIn","findFirstSequence","firstIn","skipNotPatterns","firstNotIn","skipPatterns","findAllSequences","findPairedPatterns","leftPattern","rightPattern","currentPositionLeft","leftPatterns","rightPatterns","findPairedArrays","inputLeftPatterns","inputRightPatterns","replacePattern","searchPattern","findAllResult","searchPatternPositions","replacePatternPositions","patternDifference","changedBuffer","changedView","currentPosition","_stream","_length","_start","appendBlock","prevStart","resetPosition","gap","beforeAppend","appendView","appendChar","char","appendUint16","appendUint24","appendUint32","appendInt16","appendInt32","getBlock","changeLength","block","getUint24","APPEND_BLOCK","SignedCertificateTimestamp","logID","fromStream","seqStream","extensionsLength","signatureLength","toStream","timeBuffer","timeView","baseArray","_hashAlgorithm","_signatureAlgorithm","_signature","logs","publicKeyBase64","log_id","SignedCertificateTimestampList","overallLength","timestampsData","timestampStream","CertificateTemplate","templateID","templateMajorVersion","templateMinorVersion","extnID","CAVersion","certificateIndex","keyIndex","tempValue","keyIndexBuffer","keyIndexView8","keyIndexView16","certificateIndexBuffer","certificateIndexView8","certificateIndexView16","QCStatement","QCStatements","critical","extnValue","parsedValue","parsingError","extension","tbsCertificate","tbsCertificateVersion","tbsCertificateSerialNumber","issuer","tbsCertificateValidity","subject","subjectPublicKeyInfo","tbsCertificateIssuerUniqueID","tbsCertificateSubjectUniqueID","tbs","serialNumber","issuerUniqueID","subjectUniqueID","encodeTBS","encodeFlag","tbsSchema","getKeyHash","issuerCertificate","AttCertValidityPeriod","notBeforeTime","notAfterTime","IssuerSerial","issuerUID","AttributeCertificateInfoV1","baseCertificateID","subjectName","attrCertValidityPeriod","AttributeCertificateV1","acinfo","ObjectDigestInfo","digestedObjectType","otherObjectTypeID","digestAlgorithm","objectDigest","V2Form","issuerName","objectDigestInfo","Holder","entityName","AttributeCertificateInfoV2","holder","RevokedCertificate","userCertificate","revocationDate","crlEntryExtensions","tbsCertList","tbsCertListVersion","tbsCertListThisUpdate","tbsCertListNextUpdate","tbsCertListRevokedCertificates","crlExtensions","thisUpdate","nextUpdate","revokedCertificates","isCertificateRevoked","certificate","revokedCertificate","OtherCertificateFormat","otherCertFormat","otherCert","certificates","initialTagNumber","elementSequence","OtherRevocationInfoFormat","otherRevInfoFormat","otherRevInfo","crls","otherRevocationInfos","issuerNameHash","issuerKeyHash","hashAlgorithmObject","certificateID","createForCertificate","hashOID","issuerKeyBuffer","SingleResponse","certID","certStatus","singleExtensions","lenBlockLength","ResponseData","responderID","producedAt","responses","responseExtensions","ResponseDataByName","ResponseDataByKey","CertificateChainValidationEngine","trustedCerts","certs","ocsps","checkDate","findOrigin","findIssuer","defaultFindOrigin","validationEngine","localCert","trustedCert","defaultFindIssuer","checkCertificate","possibleIssuer","extensionFound","authorityCertSerialNumberEqual","intermediateCert","passedWhenNotRevValues","localCerts","findCRL","issuerCertificates","crlsAndCertificates","crl","findOCSP","getCertificateStatus","isForCertificate","checkForCA","needToCheckCRL","isCA","mustBeCA","keyUsagePresent","cRLSign","resultCode","resultMessage","certificatePath","buildPath","checkUnique","unique","findIssuerResult","buildPathResult","found","shortestLength","shortestIndex","ocspResult","crlResult","basicCheck","compareDNSName","constraint","namePrepared","constraintPrepared","nameSplitted","constraintSplitted","nameLen","constrLen","compareRFC822Name","ns","cs","compareUniformResourceIdentifier","compareIPAddress","nameView","constraintView","compareDirectoryName","nameStart","localResult","initialPolicySet","initialExplicitPolicy","initialPolicyMappingInhibit","initialInhibitPolicy","initialPermittedSubtreesSet","initialExcludedSubtreesSet","initialRequiredNameForms","explicitPolicyIndicator","policyMappingInhibitIndicator","inhibitAnyPolicyIndicator","pendingConstraints","explicitPolicyPending","policyMappingInhibitPending","inhibitAnyPolicyPending","requiredNameForms","pathDepth","allPolicies","policiesAndCerts","anyPolicyArray","ii","policyMappings","certPolicies","explicitPolicyStart","policyIndex","certArray","searchAnyPolicy","issuerDomainPolicyIndex","subjectDomainPolicyIndex","authConstrPolicies","anyPolicyFound","userConstrPolicies","policyResult","subjectAltNames","certPermittedSubtrees","certExcludedSubtrees","formFound","constrGroups","groupPermitted","valueExists","excluded","tbsResponseData","comparisonResult","hashesObject","certIDs","certIDPromises","signerCert","certIndex","cert","checkCA","promiseResults","additionalCerts","promiseResult","verificationResult","promiseError","eContentType","eContent","hashedMessage","encodedValue","signedAttrs","unsignedAttrs","currentSid","TSTInfo","policy","messageImprint","genTime","accuracy","ordering","nonce","tsa","digestAlgorithms","encapContentInfo","signerInfos","certificateSet","signerInfoSchema","ID_DATA","certificateSetSchema","crlSchema","signerInfo","signer","checkChain","extendedMode","messageDigestValue","signerCertificate","timestampSerial","signatureVerified","signerCertificateVerified","keyId","tstInfo","certificateChainValidationEngineParameters","certificateChainEngine","signerInfoHashAlgorithm","contentValue","foundContentType","foundMessageDigest","signerIndex","_crypto","msCrypto","_subtle","_Crypto","Crypto","_SubtleCrypto","SubtleCrypto","isEdge","CryptoKey","Key","isIE","isWebkit","oid2str","str2oid","_fn","kx","ku","b2jwk","jwkAlg","isPrvKeyUse","isPubKeyUse","s2b","a2s","b2der","prv","rsaComp","rsaKey","s2a","b2s","pkcs2jwk","rej","oncomplete","der2b","jwk2pkcs","tl","tagLength","AesGcmEncryptResult","_digest","SyntaxError","rv","xlen","use","VALID_KID_PROTOCOL","KMSError","kmsError","throwError","decodeCert","pem","der","Certificate","caroots","jwt","isUri","parseUrl","protocol","x5c","asn1PublicCert","publicCert","publicExponentHex","modulusHex","kidHostname","hostname","validationSuccessful","validateCommonName","jose","base64url","_ref9","validateCertificatesSignature","contexts","kmsDetails","partialContexts","consoleDebug","KMS","batcher","KMSBatcher","bindKey","kroUri","keyUri","createResource","uris","addAuthorization","authIds","authorizations","listAuthorizations","removeAuthorization","asKey","fetchPublicKey","assignedOrgId","uploadCustomerMasterKey","customerMasterKey","_ref9$awsKms","awsKms","listAllCustomerMasterKey","_ref10","_ref10$awsKms","changeCustomerMasterKeyState","_ref11","keyState","deleteAllCustomerMasterKeys","_ref12","_ref12$awsKms","useGlobalMasterKey","_ref13","fetchKey","_ref14","ping","isECDHRequest","_getContext","Request","requestContext","_contextOnBehalfOf","serverKey","_isECDHEMessage","isECDHMessage","Response","decryptKmsMessage","_getKMSStaticPubKey","kmsStaticPubKey","_ref15","kmsInitialTimeout","ecdhMaxTimeout","nextTimeout","kmsMaxTimeout","_getAuthorization","getUserToken","access_token","_prepareContext","expiresIn","ephemeralKey","expirationDate","_ref16","_ref17","clientInfo","credential","_getKMSDetails","_ref18","kmsCluster","details","rsaPublicKey","_ref19","validateKMS","_ref20","_ref21","clientId","serverInfo","createECDHKey","localECDHKey","_ref22","_ref23","deriveEphemeralKey","originalContext","decryptBinary","cipherScr","createDecrypt","fileUrl","_fetchDownloadUrl","inputBody","endpoints","endpointUrl","pathname","allow","createEncrypt","joseOptions","header","reference","storageKey","keyObject","put","Encryption","errors","description","compact","contentAlg","protect","batcherWait","batcherMaxCalls","batcherMaxWait","Feature","WebexCore","full","updateFeature","setFeature","setBundledFeatures","featureList","partitionedToggles","_partition","featureToggles","llm","pingInterval","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","LLMChannel","llmSocketUrl","deviceUrl","locusUrl","datachannelUrl","connected","Mercury","ConnectionError","UnknownResponse","_ConnectionError","_ConnectionError2","NotAuthorized","_ConnectionError3","_ConnectionError4","sockets","Socket","_EventEmitter","_domain","onclose","binaryType","bufferedAmount","closeTimer","_unused","WebSocket","getWebSocketConstructor","_fixCloseCode","onopen","_authorize","pongTimer","pingTimer","sequenceNumber","expectedSequenceNumber","processedEvent","_acknowledge","messageId","trackingId","logLevelToken","waitForBufferState","_ping","pingTimestamp","latency","calculateLatency","MozWebSocket","normalReconnectReasons","lastError","connecting","hasEverConnected","localClusterServiceUrls","listening","featureToggle","getLastError","_connectWithBackoff","backoffCall","listen","processRegistrationStatusEvent","_applyOverrides","keyPath","_prepareUrl","webSharedMercury","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","multipleConnections","_attemptConnection","socketUrl","attemptWSUrl","_onclose","_onmessage","_emit","defaultMercuryOptions","getNumRetries","retries","force","initialConnectionMaxRetries","maxRetries","strategy_","nextBackoffDelay_","_getEventHandlers","_eventType$split","_eventType$split2","handlers","handlerName","_reconnect","ENABLE_MERCURY_LOGGING","_data$eventType$split","CLIENT_NAME","preDiscoveryServices","metricsServiceUrl","METRICS_SERVICE_URL","appType","batcherRetryPlateau","waitForServiceTimeout","OS_NAME","OSMap","macOS","Windows","iOS","Android","Linux","postTime","handleHttpError","nextDelay","rerequest","enqueue","bounce","CALL_DIAGNOSTIC_LOG_IDENTIFIER","AUTHENTICATION_FAILED_CODE","NETWORK_ERROR","NEW_LOCUS_ERROR_CLIENT_CODE","MEETING_INFO_LOOKUP_ERROR_CLIENT_CODE","UNKNOWN_ERROR","ICE_FAILURE_CLIENT_CODE","MISSING_ROAP_ANSWER_CLIENT_CODE","DTLS_HANDSHAKE_FAILED_CLIENT_CODE","ICE_FAILED_WITH_TURN_TLS_CLIENT_CODE","ICE_FAILED_WITHOUT_TURN_TLS_CLIENT_CODE","ICE_AND_REACHABILITY_FAILED_CLIENT_CODE","WBX_APP_API_URL","WEBEX_SUB_SERVICE_TYPES","PMR","SCHEDULED_MEETING","WEBINAR","BROWSER_MEDIA_ERROR_NAMES","BROWSER_MEDIA_ERROR_NAME_TO_CLIENT_ERROR_CODES_MAP","SDP_OFFER_CREATION_ERROR_MAP","GENERAL","SDP_MUNGE_MISSING_CODECS","ERROR_DESCRIPTIONS","UNKNOWN_CALL_FAILURE","LOCUS_RATE_LIMITED_INCOMING","LOCUS_RATE_LIMITED_OUTGOING","LOCUS_UNAVAILABLE","LOCUS_CONFLICT","TIMEOUT","LOCUS_INVALID_SEQUENCE_HASH","AUTHENTICATION_FAILED","UPDATE_MEDIA_FAILED","FAILED_TO_CONNECT_MEDIA","MEDIA_ENGINE_LOST","MEDIA_CONNECTION_LOST","ICE_FAILURE","MEDIA_ENGINE_HANG","ICE_SERVER_REJECTED","CALL_FULL","ROOM_TOO_LARGE","GUEST_ALREADY_ADDED","LOCUS_USER_NOT_AUTHORISED","CLOUDBERRY_UNAVAILABLE","ROOM_TOO_LARGE_FREE_ACCOUNT","MEETING_INACTIVE","MEETING_LOCKED","MEETING_TERMINATING","MODERATOR_PIN_OR_GUEST_REQUIRED","MODERATOR_PIN_OR_GUEST_PIN_REQUIRED","MODERATOR_REQUIRED","USER_NOT_MEMBER_OF_ROOM","NEW_LOCUS_ERROR","NETWORK_UNAVAILABLE","MEETING_UNAVAILABLE","MEETING_ID_INVALID","MEETING_SITE_INVALID","LOCUS_INVALID_JOINTIME","LOBBY_EXPIRED","MEDIA_CONNECTION_LOST_PAIRED","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_USER_ACCOUNT_LOCKED_OUT","GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","CONVERSATION_NOT_FOUND","SIP_CALLEE_BUSY","SIP_CALLEE_NOT_FOUND","START_RECORDING_FAILED","RECORDING_IN_PROGRESS_FAILED","MEETING_INFO_LOOKUP_ERROR","CALL_FULL_ADD_GUEST","REQUIRE_WEBEX_LOGIN","USER_NOT_ALLOWED_ACCESS_MEETING","USER_NEEDS_ACTIVATION","SIGN_UP_INVALID_EMAIL","NO_MEDIA_FOUND","STREAM_ERROR_NO_MEDIA","CAMERA_PERMISSION_DENIED","FRAUD_DETECTION","E2EE_NOT_SUPPORTED","LOCUS_LOBBY_FULL_CMR","USER_NOT_INVITED_TO_JOIN","MISSING_ROAP_ANSWER","DTLS_HANDSHAKE_FAILED","ICE_FAILED_WITHOUT_TURN_TLS","ICE_FAILED_WITH_TURN_TLS","ICE_AND_REACHABILITY_FAILED","SDP_OFFER_CREATION_ERROR","SDP_OFFER_CREATION_ERROR_MISSING_CODEC","SERVICE_ERROR_CODES_TO_CLIENT_ERROR_CODES_MAP","CLIENT_ERROR_CODE_TO_ERROR_PAYLOAD","_CLIENT_ERROR_CODE_TO","errorDescription","shownToUser","CALL_DIAGNOSTIC_EVENT_FAILED_TO_SEND","_BrowserDetection","BrowserDetection","anonymizeIPAddress","localIp","anonymize","userAgentToString","userAgentOption","browserInfo","clientName","webexVersion","osInfo","clearEmptyKeysRecursively","_isEmpty","isLocusServiceErrorCode","isMeetingInfoServiceError","rawError","_rawError$body","_rawError$body$data","_rawError$body2","_rawError$body2$url","meetingInfo","isNetworkError","isUnauthorizedError","isSdpOfferCreationError","isBrowserMediaErrorName","errorName","getBuildType","webClientDomain","prepareDiagnosticMetricItem","_item$eventPayload","_item$eventPayload$ev","_item$eventPayload$ev2","_item$eventPayload2","_item$eventPayload2$e","_item$eventPayload2$e2","_item$eventPayload3","_item$eventPayload3$e","origin","buildType","eventPayload","eventData","markAsTestEvent","networkType","joinTimes","audioSetupDelay","videoSetupDelay","cdl","callDiagnosticLatencies","downloadTime","getDownloadTimeJMT","otherAppApiReqResp","getOtherAppApiReqResp","exchangeCITokenJMT","getExchangeCITokenJMT","meetingInfoReqResp","getMeetingInfoReqResp","clickToInterstitial","getClickToInterstitial","refreshCaptchaServiceReqResp","getRefreshCaptchaReqResp","downloadIntelligenceModelsReqResp","getDownloadIntelligenceModelsReqResp","showInterstitialTime","getShowInterstitialTime","registerWDMDeviceJMT","getRegisterWDMDeviceJMT","getU2CTime","getReachabilityClustersReqResp","callInitJoinReq","getCallInitJoinReq","joinReqResp","getJoinReqResp","pageJmt","getPageJMT","interstitialToJoinOK","getInterstitialToJoinOK","totalJmt","getTotalJMT","clientJmt","getClientJMT","ICESetupTime","getICESetupTime","audioICESetupTime","getAudioICESetupTime","videoICESetupTime","getVideoICESetupTime","shareICESetupTime","getShareICESetupTime","localSDPGenRemoteSDPRecv","getLocalSDPGenRemoteSDPRecv","joinRespRxStart","getAudioJoinRespRxStart","getVideoJoinRespRxStart","totalMediaJMT","getTotalMediaJMT","interstitialToMediaOKJMT","getInterstitialToMediaOKJMT","callInitMediaEngineReady","getCallInitMediaEngineReady","stayLobbyTime","getStayLobbyTime","joinRespTxStart","getAudioJoinRespTxStart","getVideoJoinRespTxStart","latencies","latencyTimestamps","setMetricTimings","_body$metrics","metric","originTime","triggered","extractVersionMetadata","_version$split","_version$split2","majorVersion","minorVersion","generateClientErrorCodeForIceFailure","signalingState","iceConnected","turnServerUsed","unreachable","generateCommonErrorMetadata","PRE_LOGIN_METRICS_IDENTIFIER","preLoginId","savePreLoginId","batchId","_uniqueId","PreLoginMetricsBatcher","getOSNameInternal","_OSMap$getOSName","clientMetricsBatcher","ClientMetricsBatcher","clientMetricsPreloginBatcher","ClientMetricsPreloginBatcher","getClientMetricsPayload","_this$webex$meetings","_this$webex$meetings$","_this$webex$meetings$2","_webex$config","appName","appVersion","appPlatform","sparkUserAgent","metricName","providedClientVersion","meetings","clientVersion","browser","os","browser_version","os_version","sdk_version","spark_user_agent","client_id","app","locale","aliasUser","CallDiagnosticMetrics","_StatelessWebexPlugin","_buildClientEventFetchRequestOptions","finalEvent","preLoginMetricsBatcher","callDiagnosticEventsBatcher","CallDiagnosticEventsBatcher","meetingId","_meeting$meetingInfo","meetingCollection","enableConvergedArchitecture","webexScheduled","enableEvent","pmr","_this$webex$meetings$3","_this$webex$meetings$4","_this$webex$meetings$5","_this$webex$meetings$6","defaultClientType","clientType","defaultSubClientType","subClientType","defaultSDKClientVersion","versionMetadata","hasLoggedBrowserSerial","_this$webex$meetings$7","_this$webex$meetings$8","_this$webex$meetings$9","_this$webex$meetings$10","_this$webex$meetings$11","publicNetworkPrefix","geoHintInfo","clientAddress","localNetworkPrefix","statsAnalyzer","getLocalIpAddress","osVersion","browserVersion","environment","newEnvironment","clientLaunchMethod","browserLaunchMethod","_meeting$locusInfo","_meeting$meetingInfo2","_meeting$meetingInfo3","_meeting$meetingInfo6","_meeting$meetingInfo8","_meeting$meetingInfo4","_meeting$meetingInfo5","_meeting$meetingInfo7","_meeting$meetingInfo9","_mediaConnections$","_mediaConnections$2","mediaConnections","correlationId","webexConferenceIdStr","globalMeetingId","identifiers","deviceId","machineId","locusInfo","fullState","locusId","locusStartTime","lastActive","confIdStr","confID","siteName","webexSiteName","mediaAgentAlias","mediaAgentGroupId","_this$webex$meetings$12","getOrigin","eventId","senderCountryCode","countryCode","clientEventObject","canProceed","getIdentifiers","intervals","callingServiceType","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","diagnosticEvent","prepareDiagnosticEvent","submitToCallDiagnostics","clientErrorCode","serviceErrorCode","serviceErrorName","rawErrorMessage","payloadOverrides","httpStatusCode","partialParsedError","errorData","_rawError$error","_rawError$error$body","_rawError$body3","_rawError$body3$reaso","getErrorPayloadForClientErrorCode","_rawError$cause","causeType","cause","reasonCode","userType","getCurUserType","loginType","callStateForMetrics","getCurLoginType","isConvergedArchitectureEnabled","getIsConvergedArchitectureEnabled","webexSubServiceType","getSubServiceType","generatedError","generateClientEventErrorPayload","createClientEventObjectInMeeting","createClientEventObjectPreMeeting","prepareClientEvent","submitToCallDiagnosticsPreLogin","clientEvent","prepareFetchOptions","clientErrorPayload","StatelessWebexPlugin","BehavioralMetrics","getDeviceId","language","browserHeight","innerHeight","browserWidth","innerWidth","inIframe","top","product","allTags","getDefaultTags","behavioralEvent","createEventObject","CallDiagnosticLatencies","_WebexPlugin","precomputedLatencies","_ref$value","_ref$options","setMeetingId","saveFirstTimestampOnly","existingValue","accumulate","finally","saveLatency","getDiffBetweenTimestamps","u2cLatency","interstitialJoinClickTimestamp","connectedMedia","lobbyTime","interstitialToJoinOk","joinConfJMT","getJoinConfJMT","_this$getMeeting","getMeeting","allowMediaInLobby","reachablityClusterReqResp","refreshCaptchaReqResp","otherAppApiJMT","Metrics","onReady","behavioralMetrics","clearTimestamps","saveTimestamp","isReadyToSubmitBehavioralEvents","submitBehavioralEvent","submitMQE","submitClientEvent","buildClientEventFetchRequestOptions","isServiceErrorExpected","NewMetrics","statusList","presenceResponse","ids","subjects","PRESENCE_UPDATE","ENVELOPE_TYPE","PresenceWorker","_debounce","checkFetchers","presences","watchers","fetchers","campers","subscribers","subscriptionUpdate","groundskeeper","presence","emitEvent","debouncedFetch","boarding","_Object$entries","camper","renewIds","subscription","expiration","trash","tenMinutesAgo","checkCampers","renewSubscriptions","checkSubscriptions","subscribe","responseCode","subscriptionTtl","cleanPresences","USER_PRESENCE_ENABLED","PresenceBatcher","personId","personIds","batches","includeStatus","idBatches","unsubscribe","dequeue","Presence","getFeedbackUrl","feedbackId","languageCode","getSupportUrl","submitLogs","metadataArray","_constructFileMetadata","sdkBuffer","clientBuffer","formatLogs","callStart","getClientToken","initalOpts","finalOpts","shouldAttemptReauth","tempURL","$body","logFilename","support","atlasServiceUrl","atlas","clientLogs","CLIENT_LOGS_SERVICE_URL","clientLogsServiceUrl","Support","AbstractUserUUIDRequestBatcher","FakeUserUUIDRequestBatcher","RealUserUUIDRequestBatcher","shouldCreateUsers","faker","creator","usersByEmail","usersById","UserUUIDStore","getById","p2","getByEmail","User","UserUUIDBatcher","hasPassword","activate","verificationToken","confirmationCode","activateOptions","activationUrl","client_secret","sendImmediately","supertoken","tokenData","_extractUUID","_extractEmailAddress","getUUID","fetchUUID","generateOTP","generateOtpUrl","userExists","_setUser","setPasswordUrl","setPassword","schemas","updateName","givenName","familyName","validateOTP","oneTimePassword","validateOtpUrl","verifyDefaults","collectPreauthCatalog","preloginId","shouldRefreshAccessToken","sso","getUserCI","lookupCI","verifyOptions","suppressEmail","userEntities","idBrokerUrl","idbroker","identityUrl","reqId","EVENT_TRIGGERS","VOICEA_ANNOUNCEMENT","CAPTION_LANGUAGE_UPDATE","SPOKEN_LANGUAGE_UPDATE","CAPTIONS_TURNED_ON","TRANSCRIBING_ON","TRANSCRIBING_OFF","NEW_CAPTION","EVA_COMMAND","HIGHLIGHT_CREATED","NEW_MANUAL_CAPTION","AIBRIDGE_RELAY_TYPES","ANNOUNCEMENT","CLIENT_ANNOUNCEMENT","TRANSLATION_REQUEST","TRANSLATION_RESPONSE","TRANSCRIPTION","TRANSCRIPTION_TYPE","ANNOUNCE_STATUS","IDLE","JOINED","JOINING","TURN_ON_CAPTION_STATUS","ENABLED","SENDING","millisToMinutesAndSeconds","minutes","VoiceaChannel","seqNum","relayType","vmcDeviceId","announceStatus","processAnnouncementMessage","voiceaPayload","processCaptionLanguageResponse","processTranscription","processManualTranscription","transcriptPayload","isFinal","transcriptId","transcripts","transcript_id","transcript","end_millis","csis","highlight","highlightId","highlight_id","highlightLabel","highlight_label","highlightSource","highlight_source","isListening","command_response","errorMessage","_voiceaPayload$transl","_voiceaPayload$transl2","_voiceaPayload$transl3","_voiceaPayload$transl4","_voiceaPayload$ASR$sp","_voiceaPayload$ASR","voiceaLanguageOptions","captionLanguages","translation","allowed_languages","maxLanguages","max_languages","spokenLanguages","ASR","spoken_languages","listenToEvents","route","getBinding","clientPayload","trackingIdPrefix","getLocusUrl","transcribe","spokenLanguage","isConnected","translationLanguage","captionStatus","caption","areCaptionsEnabled","announce","isAnnounceProcessing","sendAnnouncement","isCaptionProcessing","requestTurnOnCaptions","transcribing","turnOnCaptions","manualCaption","hasSubscribedToEvents","eventProcessor","eventEnvelope","onWebexApiEvent","attachmentAction","createdEvent","getattachmentActionEvent","sdkEvent","actorId","roomId","registerPlugin","AttachmentActions","OAUTH2_CSRF_TOKEN","EMPTY_OBJECT_STRING","isAuthenticating","isAuthorizing","getWindow","_checkForErrors","_parseHash","_cleanUrl","initiateLogin","csrf_token","_generateSecurityToken","initiateAuthorizationCodeGrant","initiateImplicitGrant","buildLoginUrl","response_type","requestAccessTokenFromJwt","hydraUri","token_type","expires_in","initServiceCatalogs","noRedirect","buildLogoutUrl","createJwt","secretId","secret","jwtToken","grantErrors","history","replaceState","sessionStorage","setItem","_verifySecurityToken","refresh_token_expires_in","sessionToken","getItem","removeItem","proxies","Space","spaceId","passType","verificationInitiation","removeAllDevices","verifyOccupant","occupantId","getCurrentBindings","bindConversation","_bindConversation","unbindConversation","deleteBinding","bindingId","getAudioState","putAudioState","audioState","mute","unmute","increaseVolume","decreaseVolume","setVolume","getAdvertisedEndpoint","Lyra","lyra","queryString","bindSearchKey","resActivities","includeRemoteClusterReferences","breadcrumbs","editedCluster","clusterActivityUrls","activityUrl","bulkActivitiesPromise","clusterResults","accumulator","clusterResult","Search","DeviceCollection","devices","existingDevice","DeviceManager","_devicePendingPinChallenge","_pairedDevice","_boundSpace","_receiveDeviceUpdates","_updateDeviceMetadata","deviceInfo","machineType","searchQuery","searchId","searchEntity","includePeople","includeRooms","upsert","auxDevice","_decryptDeviceName","advertiser","requestPin","dev","occupants","pinChallenge","pair","pin","unpair","bindSpace","unbindSpace","deviceArray","deviceClass","updatedDevice","inDevice","encryptedUserAssignedName","decryptedDeviceName","userAssignedName","productName","precedence","groupEnd","levels","fallbacks","LOG_TYPES","authTokenKeyPattern","walkAndFilter","visited","_Object$entries2","_Object$entries$_i","getCurrentLevel","client_level","getCurrentClientLevel","groupLevel","shouldPrint","shouldBuffer","bufferLogLevel","clientLevel","clientIndex","sdkIndex","separateLogBuffers","makeLoggerMethod","neverPrint","alwaysBuffer","historyLength","logType","clientHistoryLength","filtered","stringified","returnItem","_console","toPrint","logDate","impls","client_logToBuffer","logToBuffer","asyncGeneratorStep","_next","_throw","toPropertyKey","_mergeNamespaces","EventHandlers","EventEmitter$6","$getMaxListeners","_addListener$3","emitWarning","_onceWrap$3","listenerCount$3","arrayClone$3","usingDomains","active","domainEmitter","domainThrown","isFn","emitNone","arg1","emitOne","emitTwo","arg3","emitThree","emitMany","spliceOne$3","unwrapListeners$3","EventEmitter$5","DeviceKinds","LEVELS","currentLevel","log$3","logDetails","ID","mediaType","errorText","logFormat","logger$4","logInfo","TrackEventNames","TrackStatus","TrackKind","ErrorCode","MediaConnectionError","ownKeys$9","enumerableOnly","SdpError","_objectSpread$9","ownKeys$8","IceGatheringError","_objectSpread$8","ownKeys$7","SdpAnswerHandlingError","_objectSpread$7","ownKeys$6","SdpOfferCreationError","_objectSpread$6","ownKeys$5","SdpOfferHandlingError","_objectSpread$5","Error$1","global$1","defaultSetTimout","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","runTimeout","fun","currentQueue","queue$2","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","once$4","performance$1","performanceNow","mozNow","msNow","oNow","webkitNow","browser$1","cwd","chdir","dir","umask","previousTimestamp","clocktime","nanoseconds","uptime","_mergeNamespaces$1","commonjsGlobal$1$1","logger$1$1","DeviceKind$1","DeviceKind","Logger$2","logger$3","getUserMedia","constraints","mediaDevices","getDisplayMedia","enumerateDevices","checkDevicePermissions","deviceKinds","permissions","permissionRequests","VideoInput","AudioInput","checkNavigatorPermissions","permission","ensureDevicePermissions","audio","callbackRes","WebrtcCoreErrorType","media","setOnDeviceChangeHandler","ondevicechange","WebrtcCoreError","getDevices","deviceKind","DEVICE_PERMISSION_DENIED","ReflectOwnKeys$1$1","events$1$1","R$1$1","ReflectApply$1$1","NumberIsNaN$1$1","EventEmitter$1$1","eventTargetAgnosticAddListener$1$1","addErrorHandlerIfEventEmitter$1$1","_a$2$1","StreamEventNames","defaultMaxListeners$1$1","checkListener$1$1","_getMaxListeners$1$1","_addListener$1$1","onceWrapper$1$1","_onceWrap$1$1","_listeners$1$1","unwrapListeners$1$1","arrayClone$1$1","listenerCount$1$1","spliceOne$1$1","EventEmitter$2$1","TypedEvent$1","AddEvents","Ended","_a$1$1","LocalStreamEventNames","Stream","handleTrackEnded","addTrackHandlersForStreamEvents","addTrackHandlers","removeTrackHandlers","UserMuteStateChange","SystemMuteStateChange","ConstraintsChange","OutputTrackChange","EffectAdded","_a$6$1","RemoteMediaState","RemoteStreamEventNames","LocalStream","effects","loadingEffects","handleTrackMutedBySystem","handleTrackUnmutedBySystem","addTrackHandlersForLocalStreamEvents","userMuted","systemMuted","setUserMuted","isMuted","changeOutputTrack","newTrack","disposeEffects","addEffect","effect","ADD_EFFECT_FAILED","handleEffectTrackUpdated","effectIndex","handleEffectDisposed","existingEffectIndex","existingEffect","getEffectById","getEffectByKind","getEffects","LocalAudioStream","applyConstraints","LocalVideoStream","contentHint","getNumActiveSimulcastLayers","LocalCameraStream","LocalDisplayStream","LocalMicrophoneStream","LocalSystemAudioStream","MediaStateChange","RemoteStream","handleMediaStarted","handleMediaStopped","Started","Stopped","addTrackHandlersForRemoteStreamEvents","mediaState","replaceTrack","oldTrack","getDefaultExportFromCjs$1","es5$1","getFirstMatch","getSecondMatch","matchAndReturnConst","getWindowsVersionName","getMacOSVersionName","getAndroidVersionName","getVersionPrecision","compareVersions","getBrowserAlias","BROWSER_ALIASES_MAP","getBrowserTypeByAlias","BROWSER_MAP","ENGINE_MAP","OS_MAP","PLATFORMS_MAP","Bada","BlackBerry","Chrome","Chromium","Electron","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","amazon_silk","android","bada","blackberry","chrome","chromium","electron","epiphany","firefox","focus","generic","googlebot","google_search","k_meleon","maxthon","edge","mz","naver","opera","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","safari","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","tablet","mobile","desktop","tv","WindowsPhone","MacOS","WebOS","ChromeOS","PlayStation4","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","getParser","getResult","_ua","parsedResult","getUA","parseBrowser","describe","getBrowser","getOS","parseOS","getPlatform","parsePlatform","getPlatformType","getEngine","parseEngine","getEngineName","satisfies","isOS","isPlatform","compareVersion","isEngine","versionName","vendor","BrowserName$1","CapabilityState$1","Bowser$1","BrowserName","BrowserInfo$1","getBrowserDetails","getOSDetails","getPlatformDetails","getEngineDetails","isChrome","CHROME","isFirefox","FIREFOX","EDGE","isSafari","SAFARI","isVersionGreaterThan","checkTree","isVersionGreaterThanOrEqualTo","isVersionLessThan","isVersionLessThanOrEqualTo","isSubVersionOf","CapabilityState","ReflectOwnKeys$2","events$2","R$2","ReflectApply$2","NumberIsNaN$2","EventEmitter$1$2","eventTargetAgnosticAddListener$2","addErrorHandlerIfEventEmitter$2","ConnectionState","ConnectionStateEvents","defaultMaxListeners$2","checkListener$2","_getMaxListeners$2","_addListener$2","onceWrapper$2","_onceWrap$2","_listeners$2","unwrapListeners$2","arrayClone$2","listenerCount$2","spliceOne$2","EventEmitter$4","ConnectionStateHandler","getCurrentStatesCallback","onPeerConnectionStateChange","getPeerConnectionState","PeerConnectionStateChanged","onIceConnectionStateChange","getIceConnectionState","IceConnectionStateChanged","evaluateMediaConnectionState","mediaConnectionState","connectionState","iceState","connectionStates","New","Closed","Failed","Disconnected","Connected","Connecting","getConnectionState","logDisabled_$1","deprecationWarnings_$1","extractVersion$1","uastring","expr","wrapPeerConnectionEvent$1","eventNameToWrap","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","disableLog$1","disableWarnings$1","log$2","deprecated$1","oldMethod","newMethod","isObject$1","compactObject$1","isObj","isEmptyObject","walkStats$1","stats","resultSet","filterStats$1","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","trackId","logging$1","shimGetUserMedia$2$1","browserDetails","constraintsToChrome_","mandatory","cc","ideal","exact","oldname_","prefix","oc","mix","advanced","shimConstraints_","remap","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraintName","onSuccess","onError","webkitGetUserMedia","origGetUserMedia","DOMException","shimMediaStream$1","webkitMediaStream","shimOnTrack$1$1","_ontrack","origSetRemoteDescription","setRemoteDescription","_ontrackpoly","getReceivers","Event","transceiver","streams","dispatchEvent","shimGetSendersWithDtmf$1","shimSenderWithDtmf","dtmf","_dtmf","createDTMFSender","_pc","getSenders","_senders","origAddTrack","sender","origRemoveTrack","idx","origAddStream","addStream","origRemoveStream","removeStream","RTCRtpSender","origGetSenders","senders","shimGetStats$1","origGetStats","getStats","selector","onSucc","onErr","fixChromeStats_","standardReport","report","standardStats","localcandidate","remotecandidate","makeMapStats","shimSenderReceiverGetStats$1","RTCRtpReceiver","origGetReceivers","receivers","srcElement","shimAddTrackRemoveTrackWithNative$1","getLocalStreams","_shimmedLocalStreams","streamId","existingSenders","newSenders","newSender","shimAddTrackRemoveTrack$1","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","oldStream","methodObj","replaceInternalStreamId","origSetLocalDescription","sdp","internalId","externalStream","internalStream","RTCSessionDescription","replaceExternalStreamId","origLocalDescription","streamid","shimPeerConnection$1$1","webkitRTCPeerConnection","RTCIceCandidate","fixNegotiationNeeded$1","getConfiguration","sdpSemantics","chromeShim$1","shimMediaStream","shimOnTrack","shimGetSendersWithDtmf","shimGetStats","shimSenderReceiverGetStats","shimAddTrackRemoveTrackWithNative","shimAddTrackRemoveTrack","shimPeerConnection","fixNegotiationNeeded","shimGetUserMedia","shimGetDisplayMedia","getSourceId","sourceId","widthSpecified","heightSpecified","frameRateSpecified","chromeMediaSource","chromeMediaSourceId","maxFrameRate","shimGetUserMedia$1$1","nativeGetUserMedia","nativeGetSettings","nativeApplyConstraints","shimOnTrack$2","RTCTrackEvent","shimPeerConnection$2","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","shimSenderGetStats$1","shimReceiverGetStats$1","shimRemoveStream$1","shimRTCDataChannel$1","DataChannel","RTCDataChannel","shimAddTransceiver$1","origAddTransceiver","addTransceiver","setParametersPromises","sendEncodings","shouldPerformCheck","encodingParam","rid","scaleResolutionDownBy","maxFramerate","getParameters","encodings","setParameters","shimGetParameters$1","origGetParameters","shimCreateOffer$1","origCreateOffer","shimCreateAnswer$1","origCreateAnswer","createAnswer","firefoxShim$1","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","shimAddTransceiver","shimGetParameters","shimCreateOffer","shimCreateAnswer","preferredMediaSource","mediaSource","shimLocalStreamsAPI$1","_localStreams","_addTrack","tracks","shimRemoteStreamsAPI$1","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","shimCallbacksAPI$1","addIceCandidate","successCallback","failureCallback","withCallback","shimGetUserMedia$3","_getUserMedia","shimConstraints$1","errcb","shimRTCIceServerUrls$1","OrigPeerConnection","pcConfig","pcConstraints","iceServers","newIceServers","server","urls","generateCertificate","shimTrackEventTransceiver$1","shimCreateOfferLegacy$1","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","setDirection","offerToReceiveVideo","videoTransceiver","shimAudioContext$1","webkitAudioContext","safariShim$1","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimCallbacksAPI","shimConstraints","shimRTCIceServerUrls","shimTrackEventTransceiver","shimCreateOfferLegacy","shimAudioContext","sdp$1$1","SDPUtils","localCName","generateIdentifier","splitLines","line","splitSections","part","getDescription","sections","getMediaSections","matchPrefix","parseCandidate","foundation","component","ip","relatedAddress","relatedPort","tcpType","ufrag","usernameFragment","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","numChannels","writeRtpMap","codec","preferredPayloadType","parseExtmap","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","parseSsrcMedia","sp","ssrc","colon","parseSsrcGroup","semantics","ssrcs","getMid","mediaSection","mid","parseFingerprint","getDtlsParameters","sessionpart","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","writeIceParameters","iceLite","parseRtpParameters","codecs","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","caps","maxptime","parseRtpEncodingParameters","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","maxMessageSize","parseMLine","maxSizeLine","sctpPort","fmt","sctpMapLines","writeSctpDescription","sctp","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","getDirection","getKind","isRejected","parseOLine","sessionVersion","netType","addressType","isValidSDP","SDPUtils$1","sdp$2","shimRTCIceCandidate$1","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","augmentedCandidate","sdpMid","sdpMLineIndex","shimMaxMessageSize$1","_sctp","mLine","sctpInDescription","getRemoteFirefoxVersion","canSendMMS","remoteIsFirefox","canSendMaxMessageSize","remoteMMS","getMaxMessageSize","POSITIVE_INFINITY","shimSendThrowTypeError$1","origCreateDataChannel","dataChannel","wrapDcSend","dc","origDataChannelSend","shimConnectionState$1","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","newEvent","removeExtmapAllowMixed$1","nativeSRD","_sdp","shimAddIceCandidateNullOrEmpty$1","nativeAddIceCandidate","shimParameterlessSetLocalDescription$1","nativeSetLocalDescription","MediaStreamTrackKind","PeerConnectionEvents","commonShim$1","shimRTCIceCandidate","shimMaxMessageSize","shimSendThrowTypeError","shimConnectionState","removeExtmapAllowMixed","shimAddIceCandidateNullOrEmpty","shimParameterlessSetLocalDescription","shimChrome","shimFirefox","shimSafari","logging","mozGetUserMedia","isSecureContext","supportsUnifiedPlan","RTCRtpTransceiver","detectBrowser$1","adapter","commonShim","extractVersion","disableLog","disableWarnings","browserShim","adapterFactory$1","PeerConnection","configuration","createRTCPeerConnection","connectionStateHandler","PeerConnectionStateChange","IceConnectionStateChange","oniceconnectionstatechange","onconnectionstatechange","IceGatheringStateChange","IceCandidate","onicecandidateerror","IceCandidateError","getUnderlyingRTCPeerConnection","trackOrKind","answer","CreateAnswerOnSuccess","CreateOfferOnSuccess","mediaLine","SetLocalDescriptionOnSuccess","SetRemoteDescriptionOnSuccess","getLocalDescription","localDescription","getRemoteDescription","remoteDescription","getCurrentConnectionType","succeededLocalCandidateIds","localCandidateStatsReports","localCandidateId","localCandidate","relayProtocol","commonjsGlobal$2","logger$2","MediaFamily","MediaContent","Policy","MediaType","Logger$1","generateSceneId","randomInteger","generateCsi","mediaFamily","sceneId","Audio","getMediaFamily","VideoMain","VideoSlides","getMediaContent","AudioMain","Main","Slides","HomerMsgType","JmpMsgType","JmpSessionEvents","WcmeErrorType","truthyOrZero","arraysAreEqual","ActiveSpeakerInfo","crossPriorityDuplication","crossPolicyDuplication","preferLiveVideo","namedMediaGroups","isValidActiveSpeakerInfo","areActiveSpeakerInfosEqual","areNamedMediaGroupArraysEqual","HomerMsg","msgType","fromJson","JmpMsg","mediaContent","isValidJmpMsg","maybeJmpMsg","maybeJmpMsgPayload","isValidJmpMsgPayload","MediaRequestMsg","requests","MediaRequestAckMsg","mediaRequestSeqNum","compareStreamIds","id1","id2","keys1","keys2","isValidStreamInfo","maybeStreamInfo","maybeStreamId","isValidStreamId","MediaRequestStatusMsg","streamStates","MediaRequestStatusAckMsg","mediaRequestStatusSeqNum","H264Codec","maxFs","maxFps","maxMbps","CodecInfo$1","h264","areCodecInfosEqual","areH264CodecsEqual","ReceiverSelectedInfo","csi","isValidReceiverSelectedInfo","SourceAdvertisementMsg","numTotalSources","numLiveSources","videoContentHint","SourceAdvertisementAckMsg","sourceAdvertisementSeqNum","StreamRequest$1","policySpecificInfo","maxPayloadBitsPerSecond","codecInfos","areStreamRequestsEqual","areReceiverSelectedInfosEqual","arePolicySpecificInfosEqual","areStreamIdArraysEqual","areCodecInfoArraysEqual","RetransmitHandler","maxNumRetransmits","retransmitIntervalMs","transmitCallback","expirationCallback","timerHandle","numRetransmitsLeft","scheduleTimer","onTimer","cancel","JmpSession","currMediaRequestSeqNum","currSourceAdvertisementSeqNum","currMediaRequestStatusSeqNum","txCallback","lastSentMediaRequest","lastSentMediaRequestAck","lastReceivedMediaRequest","getLogger","sendRequests","mediaRequestMsg","areStreamRequestArraysEqual","sendJmpMsg","MediaRequest","expiredJmpMsg","sendSourceAdvertisement","sourceAdvertisementMsg1","sourceAdvertisementMsg2","sourceAdvertisementMsg","lastSentSourceAdvertisement","namedMediaGroups1","namedMediaGroups2","compareNamedMediaGroupArrays","SourceAdvertisement","expiredMsg","sendMediaRequestStatus","filteredStreamStates","streamState","mediaRequestStatus","lastSentMediaRequestStatus","streamStates1","streamStates2","compareStreamStateArrays","MediaRequestStatus","receive","jmpMsg","maybeMediaRequestMsg","handleIncomingMediaRequest","MediaRequestAck","mediaRequestAckMsg","isValidMediaRequestAckMsg","handleIncomingMediaRequestAck","ActiveSpeakerNotification","activeSpeakerNotification","maybeActiveSpeakerNotificationMsg","isValidActiveSpeakerNotificationMsg","handleIncomingActiveSpeakerNotification","sourceAdvertisement","maybeSourceAdvertisementMsg","isValidSourceAdvertisementMsg","handleIncomingSourceAdvertisement","SourceAdvertisementAck","sourceAdvertisementAck","isValidSourceAdvertisementAckMsg","handleIncomingSourceAdvertisementAck","maybeMediaRequestStatusMsg","streamInfo","isValidMediaRequestStatusMsg","handleIncomingMediaRequestStatus","MediaRequestStatusAck","mediaRequestStatusAck","isValidMediaRequestStatusAckMsg","handleIncomingMediaRequestStatusAck","setTxCallback","homerMsg","Multistream","mediaRequestAck","MediaRequestReceived","ActiveSpeaker","lastReceivedSourceAdvertisement","lastSentSourceAdvertisementAck","SourceAdvertisementReceived","lastReceivedMediaRequestStatus","lastSentMediaRequestStatusAck","MediaRequestStatusReceived","WcmeError","commonjsGlobal$1","MediaCodecMimeType","logErrorAndThrow","errorType","RecommendedOpusBitrates","maxFrameSizeToMaxBitrateMap","areCodecsCompatible","senderCodec","receiverCodec","fmtpForSender","fmtpForReceiver","levelAsymmetryAllowed","senderFmtpParamKey","senderProfileLevelId","receiverProfileLevelId","senderProfile","recvProfile","senderProfileIdc","recvProfileIdc","senderProfileIop","recvProfileIop","areProfileLevelIdsCompatible","gcd","getFrameHeightByMaxFs","sourceAspectRatio","requestedMaxFs","_gcd","minNumberRatiosForWidth","minNumberRatiosForHeight","rtcstats","__generator","trys","ops","rtcStats_1","rtcStats","deepCopy$1","deepEqual","dumpStream","persistedKeys","deltaCompression","oldStats","newStats","updatedStats","hasNonMetadata","makeEvent","intervalTime","statsPreProcessor","origPeerConnection","transportEventsPreviouslyAdded","_loop_1","transport","errorDetail","iceTransport","getSelectedCandidatePair","remoteCandidate","remote","pairString","bundlePolicy","senders_1","sctpEventsPreviouslyAdded","origGetUserMedia_1","origGetDisplayMedia_1","getStatsReport","statsMap","map2obj","compressed","interval","clearInterval","forceStatsReport","_a$5$1","_a$4$1","_a$3$1","_a$2$2","_a$1$2","NUM$1","SDP_TOKEN$1","ANY_NON_WS$1","REST$1","Line$1","BandwidthLine$1","bandwidthType","fromSdpLine","regex","tokens","toSdpLine","BW_TYPE_REGEX","BundleGroupLine$1","mids","CandidateLine$1","componentId","connectionAddress","candidateType","relAddr","relPort","candidateExtensions","ICE_CHARS","ConnectionLine$1","addrType","ipAddr","ContentLine$1","DirectionLine$1","ExtMapLine$1","EXTMAP_DIRECTION","FingerprintLine$1","fingerprint","FmtpLine$1","fmtpParams","fmtpObj","paramArr","parseFmtpParams$1","fmtParams","IceOptionsLine$1","IcePwdLine$1","IceUfragLine$1","MaxMessageSizeLine$1","MediaLine$1","formats","MEDIA_TYPE","MidLine$1","OriginLine$1","RidLine$1","RID_ID","RID_DIRECTION","RtcpMuxLine$1","RtcpFbLine$1","feedback","RtpMapLine$1","encodingName","encodingParams","NON_SLASH_TOKEN","SctpPortLine$1","SessionInformationLine$1","SessionNameLine$1","SetupLine$1","setup","SimulcastLayer$1","paused","SimulcastLayerList$1","layers","addLayer","layer","addLayerWithAlternatives","alternatives","layerList","ridTokens","ridToken","altArray","SimulcastLine$1","sendLayers","recvLayers","sendLayerList","recvLayerList","bidirectional","firstDirection","layerList1","layerList2","SsrcLine$1","ssrcId","attributeValue","attributeData","SsrcGroupLine$1","ssrcStr","TimingLine$1","stopTime","VersionLine$1","UnknownLine$1","IceInfo$1","candidates","addLine","toLines","MediaDescription$1","iceInfo","otherLines","findOtherLine","ty","connection","ApplicationMediaDescription$1","fmts","CodecInfo$2","primaryCodecPt","AvMediaDescription$1","pts","extMaps","rids","rtcpMux","ssrcGroups","extMap","simulcast","getCodecByPt","removePt","associatedPts","ci","allPtsToRemove","ptToRemove","existingPt","addExtension","extId","freeId","getFirstFreeId","SessionDescription$1","sessionName","information","timing","Sdp$1","avMedia","mi","Grammar$1","parsers","addParser","lineType","getParsers","DefaultSdpGrammar$1","isValidLine$1","parse$1","grammar","lineValue","parseToLines$1","currBlock","mediaInfo","parseToModel$1","disableTwcc","sdpOrAv","rtcpFbValue","disableRtcpFbValue","retainCodecs","av","codecInfo","retainCodecsByCodecName","allowedCodecNames","allowedLowerCase","retainCandidatesByTransportType","sdpOrMedia","allowedTransportTypes","mediaDescriptions","retainCandidates","getDefaultExportFromCjs$2","es5$2","BrowserName$2","OSName$1","CapabilityState$2","Bowser$2","OSName","BrowserInfo","isWindows","WINDOWS","isMac","MAC","isLinux","LINUX","simulcastMaxFrameSizes","JmpLine","JmpStreamIdModeLine","streamIdMode","JmpSourceLine","deepCopy","ipv4Regex","ipv6Regex","matchMediaDescriptionsInAnswer","parsedOffer","parsedAnswer","offerMediaDescription","OFFER_ANSWER_MISMATCH","answerMediaDescription","startingMediaDescription","fakeCorrespondingDescription","setupBundle","parsedSdp","midMap","audioMainMids","videoMainMids","audioContentMids","AudioSlides","videoContentMids","injectDummyCandidates","mediaDescription","maskIp","maskedSdp","firstOctets","removeMidRidExtensions","extMapLine","generateSsrc","EgressSdpMunger","streamIds","customCodecParameters","egressMungerOptions","mungeLocalDescription","forceSoftwareEncoder","isH264Cbp","profileLevelId","simulcastEnabled","vlaExtensionUri","addVlaExtension","numStreams","ssrcLine","sg","SDP_MUNGE_FAILED","rtxSsrcGroups","rtxSsrc","simulcastSsrcs","newStreamId","rtxEnabled","rtpSsrc","paramsMap","applyFormatParameters","twccDisabled","mungeLocalDescriptionForRemoteServer","injectContentType","streamSignalingMode","injectJmpAttributes","doFullIce","ssrcGroup","mungeRemoteDescription","getSenderIds","getEncodingIndexForStreamId","currStreamId","setCodecParameters","deleteCodecParameters","ReflectOwnKeys$1","events$1","R$1","ReflectApply$1","NumberIsNaN$1","EventEmitter$3","eventTargetAgnosticAddListener$1","addErrorHandlerIfEventEmitter$1","OveruseState","ReceiveSlotEvents","defaultMaxListeners$1","checkListener$1","_getMaxListeners$1","_addListener$1","onceWrapper$1","_onceWrap$1","_listeners$1","unwrapListeners$1","arrayClone$1","listenerCount$1","spliceOne$1","EventEmitter$2","IngressSdpMunger","getReceiverId","codecName","MidPredictor","currentMid","getNextMid","allocateMidForDatachannel","getMidMap","OveruseStateManager","monitors","lastOverallOveruseState","NOT_OVERUSED","isRunning","overuseUpdateCallback","addMonitor","monitor","startMonitoring","onMonitorOveruseUpdate","stopMonitoring","overallOveruseState","getLastOveruseState","overuseState","OVERUSED","ReceiveSlot","idGetter","_idGetter","handleStreamMediaStateChange","handleStreamEnded","_sourceState","MediaStopped","MediaStarted","MediaEnded","_replaceTrack","_updateSource","_currentRxCsi","SourceUpdate","currentRxCsi","sourceState","getCurrentTimestamp","timeOrigin","StatsManager","statsGetter","statsPreprocessor","statsReport","Transceiver","rtcRtpTransceiver","_rtcRtpTransceiver","replaceTransceiver","newRtcRtpTransceiver","ReceiveOnlyTransceiver","munger","isRequested","isActiveSpeaker","_receiveSlot","receiveSlot","calliopeMediaType","requestedBitrate","requestedFrameSize","lastRequestedUpdateTimestamp","lastActiveSpeakerUpdateTimestamp","receiverId","resetSdpMunger","handleRequested","streamRequest","handleUnrequested","handleActiveSpeakerUpdate","TypedEvent","hasQueueMicrotask","queueMicrotask","hasSetImmediate","hasNextTick","setImmediate$1","asyncify","isAsync","_len7","_key7","handlePromise","invokeCallback","wrapAsync","asyncFn","awaitify","arity","_len8","_key8","_len9","cbArgs","_key9","_asyncMap","eachfn","iteratee","_iteratee","iterCb","isArrayLike","breakLoop","callFn","_len10","_key10","createIterator","createArrayIterator","okeys","getIterator","createES2015Iterator","onlyOnce","_len11","_key11","asyncEachOfLimit","canceled","awaiting","running","replenish","iterDone","iterateeCallback","handleError","eachOfLimit","isAsyncIterable","nextElem","looping","elem","eachOfLimit$2","eachOfArrayLike","iteratorCallback","eachOfGeneric","eachOf$1","map$1","eachOfSeries$1","DLL","removeLink","insertAfter","newNode","setInitial","cur","testFn","curr","dll","concurrency","_worker","numRunning","workersList","saturated","unsaturated","_len12","_key12","processingScheduled","_insert","insertAtFront","rejectOnError","promiseCallback","_len13","_key13","_createTaskItem","_tasks","_createCB","tasks","_len14","_key14","idle","_maybeDrain","eventMethod","handleAndRemove","isProcessing","datum","pushAsync","kill","unshiftAsync","pause","mapLimit$1","concatLimit$1","_len15","_key15","mapResults","_createTester","testResult","testPassed","_withoutIndex","_test","_len16","_key16","truth","eachLimit$2","eachSeries$1","filterArray","truthValues","filterGeneric","processTasks","finishedCallback","errback","_len17","_key17","_len18","innerArgs","_key18","ensureAsync","newObj","taskCb","_len19","_key19","criteria","_len20","_key20","_len21","_key21","taskIndex","nextTask","_len22","_key22","AsyncQueue","OfferAnswerType","SendOnlyTransceiver","streamMuteStateChange","streamPublishStateChange","negotiationNeeded","namedMediaGroupsChange","requestedIdEncodingParamsMap","updateSendParametersQueue","lastRequestedUpdateTimestampsMap","handleTrackChange","handleStreamConstraintsChange","handleStreamMuteStateChange","replaceSenderSource","trackOrNull","requested","publishedStream","updateSendParameters","replacePublishedStream","setNamedMediaGroups","SET_NMG_FAILED","publishStream","unpublishStream","currentDirection","Remote","senderId","encodingIndex","isNoiseReductionEffect","noiseReductionMode","isVirtualBackgroundEffect","virtualBackgroundMode","targetFrameRate","sendParameters","scaleDownRatio","sourceWidth","sourceHeight","getScaleDownRatio","oldRequested","newRequested","isSimulcastEnabled","senderIds","numActiveSimulcastLayers","LocalOnly","SendSlot","sendTransceiver","clearNamedMediaGroups","MultistreamConnectionEventNames","toMediaStreamTrackKind","defaultMultistreamConnectionOptions","disableSimulcast","disableContentSimulcast","disableAudioTwcc","MultistreamConnection","userOptions","sendTransceivers","recvTransceivers","jmpSessions","pendingJmpTasks","metricsCallback","midPredictor","offerAnswerQueue","currentCreateOfferId","initializePeerConnection","overuseStateManager","statsManager","preProcessStats","mainSceneId","slidesSceneId","videoMainEncodingOptions","getVideoEncodingOptions","videoSlidesEncodingOptions","createSendTransceiver","propagatePeerConnectionEvents","attachMetricsObserver","PeerConnectionStateUpdate","IceConnectionStateUpdate","IceGatheringStateUpdate","getIceGatheringState","sendEncodingsOptions","rtcTransceiver","offerAnswerType","NegotiationNeeded","queueLocalOfferAnswer","createJmpSession","createSendSlot","getSendTransceiverOrThrow","jmpSession","DATA_CHANNEL_SEND_FAILED","prevNumTotalSources","prevNumLiveSources","VideoSourceCountUpdate","AudioSourceCountUpdate","getReceiveSlotById","updateRequestedStreams","transceivers","activeCsi","rsRequests","INVALID_STREAM_REQUEST","validId","ordered","maxRetransmits","getVideoStreamStates","createReceiveTransceiver","transceiverMid","recvOnlyTransceiver","createReceiveSlot","createReceiveSlots","createReceiveSlotsResolve","createdReceiveOnlyTransceivers","doLocalOfferAnswer","receiveSlots","getIngressPayloadType","requestedMediaCodecType","requestedMid","senderCodecs","flat","receiverCodecs","GET_PAYLOAD_TYPE_FAILED","targetCodec","waitForIceGatheringComplete","setAnswerResolve","createOfferId","createOfferResolve","createOfferReject","CREATE_OFFER_FAILED","preProcessLocalOffer","sdpToSend","prepareLocalOfferForRemoteServer","setAnswer","preProcessRemoteAnswer","SET_ANSWER_FAILED","getRecvTransceiverByMidOrThrow","getSendTransceiverByMidOrThrow","filteredMids","GET_TRANSCEIVER_FAILED","requestMedia","streamRequests","requestedReceiveSlotIds","sr","_toJmpStreamRequest","relevantRequest","renewPeerConnection","receiveSlotId","getTransceiverStats","screenShareAudio","screenShareVideo","localTrackLabel","senderStats","receiverStats","forceRtcMetricsCallback","setMetricsCallback","setOveruseUpdateCallback","getCsiByMediaType","getAllCsis","audioMain","audioSlides","videoMain","videoSlides","StreamRequest","rs","defaultLogger","currentLogger","configureWcmeLogger","debugId","logMessages","getErrorDescription","NUM","SDP_TOKEN","ANY_NON_WS","REST","Line","BandwidthLine","BundleGroupLine","CandidateLine","ConnectionLine","ContentLine","DirectionLine","ExtMapLine","FingerprintLine","FmtpLine","parseFmtpParams","IceOptionsLine","IcePwdLine","IceUfragLine","MaxMessageSizeLine","MediaLine","MidLine","OriginLine","RidLine","RtcpMuxLine","RtcpFbLine","RtpMapLine","SctpPortLine","SessionInformationLine","SessionNameLine","SetupLine","SimulcastLayer","SimulcastLayerList","SimulcastLine","SsrcLine","SsrcGroupLine","TimingLine","VersionLine","UnknownLine","IceInfo","MediaDescription","ApplicationMediaDescription","CodecInfo","AvMediaDescription","SessionDescription","Sdp","Grammar","MediaConnectionEventNames","RemoteTrackType","ErrorType","DefaultSdpGrammar","isValidLine","parseToLines","parseToModel","getLocalTrackInfo","localTrack","hasH264Codec","_codec$name","AnyLine","disableExtmap","mungeLocalSdpForBrowser","disableRtx","payloadTypesToRemove","codecPt","mungeLocalSdp","convertCLineToIPv4","convertConnectionProp","bandwidthLimits","addBandwidthLimits","periodicKeyframes","addPeriodicKeyframes","convertPort9to0","addContentSlides","videoMediaDescriptions","setContentSlides","h264MaxFs","maxFsValue","maxFsForProfileLevel","_codec$name3","profileLevelIdValue","levelId","newLevelId","newLevelIdHex","adjustH264Profile","mungeRemoteSdp","startBitrate","paramsToUpdate","_codec$name2","updateH264fmtpParams","setStartBitrate","removeXtlsIceCandidates","ownKeys$4","_objectSpread$4","localTrackTypes","MediaConnection","mediaConnectionConfig","mediaDirection","localTracks","remoteQualityLevel","ontrack","onTrack","ICE_CANDIDATE","ICE_CANDIDATE_ERROR","createTransceivers","trackType","transceiverType","trackInfo","skipInactiveTransceivers","setupTransceiverListeners","initializeTransceivers","incomingOffer","addLocalTracks","getSendReceiveOptions","updateRemoteQualityLevel","updateTransceivers","newOfferNeeded","identifyTransceivers","updateLocalTracks","updateDirection","sdpNegotiationNeeded","_transceiver$sender","_transceiver$sender$t","_transceiver$sender2","_transceiver$sender2$","insertDTMF","tones","interToneGap","_this$transceivers$au","_this$transceivers$au2","ontonechange","onToneChange","tone","DTMF_TONE_CHANGED","_event$transceiver","_this$transceivers$au3","_this$transceivers$au4","_this$transceivers$au5","_this$transceivers$vi","_this$transceivers$vi2","_this$transceivers$vi3","_this$transceivers$sc","_this$transceivers$sc2","_this$transceivers$sc3","MEDIA_ID","trackMediaID","REMOTE_TRACK_ADDED","AUDIO","VIDEO","SCREENSHARE_VIDEO","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","rtcPcConnectionState","createSdpMungingConfig","maxFsValues","sdpMunging","createLocalOffer","sdpMungingConfig","mungedDescription","waitForIceCandidates","_this$pc$localDescrip","mungedSdp","LOCAL_SDP_OFFER_GENERATED","handleRemoteOffer","mungedRemoteSdp","REMOTE_SDP_OFFER_PROCESSED","mungedAnswer","_this$pc$localDescrip2","mungedLocalSdp","LOCAL_SDP_ANSWER_GENERATED","handleRemoteAnswer","REMOTE_SDP_ANSWER_PROCESSED","timeoutId","runSdpCheckForErrors","_this$pc$localDescrip3","allowPort0","requireH264","checkSdpForErrors","milliseconds","_this$pc$localDescrip4","sdpError","iceCandidatesTimeout","ICE_GATHERING_STATE_CHANGED","_evt$candidate","_evt$candidate2","logDisabled_","deprecationWarnings_","wrapPeerConnectionEvent","log$1","compactObject","walkStats","filterStats","shimGetUserMedia$2","shimOnTrack$1","shimPeerConnection$1","chromeShim","shimGetUserMedia$1","firefoxShim","safariShim","sdp$1","detectBrowser","adapterFactory","ActionTypes","SpecialTargets","__rest","__values","__read","ar","__spreadArray","start$1","Start","stop$1","Stop","raise$1","Raise","send$1","Send","cancel$1","Cancel","nullEvent","NullEvent","assign$2","Assign","After","DoneState","Log","Invoke","ErrorExecution","errorPlatform","ErrorPlatform","error$1","ErrorCustom","Update","choose","Choose","pure","Pure","EMPTY_ACTIVITY_MAP","DEFAULT_GUARD_TYPE","IS_PRODUCTION","NODE_ENV","matchesState","parentStateId","childStateId","delimiter","parentStateValue","toStateValue","childStateValue","getEventType","toStatePath","stateId","stateValue","isStateLike","pathToStateValue","statePath","mapValues","collectionKeys","mapFilterValues","e_1","e_1_1","e_2","props_1","props_1_1","e_2_1","toStatePaths","subStateValue","subPath","toArrayStrict","mapContext","_event","e_5","subMapper","e_5_1","isPromiseLike","partition","e_6","truthy","falsy","items_1","items_1_1","e_6_1","updateHistoryStates","hist","subHist","current","updateContext","assignActions","updatedContext","assignAction","e_7","assignment","partialUpdate","propAssignment","e_7_1","toGuard","condition","guardMap","symbolObservable","observable","isMachine","toEventObject","toSCXMLEvent","scxmlEvent","$$type","eventObject","toTransitionConfigArray","configLike","transitionLike","evaluateGuard","machine","guard","guards","guardMeta","cond","condFn","toInvokeSource$1","toObserver","nextHandler","errorHandler","completionHandler","isObserver","createInvokeId","stateNodeId","initEvent","getActionFunction","actionType","actionFunctionMap","toActionObject","actionObject","toActionObjects","subAction","toActivityDefinition","raise","doneInvoke","DoneInvoke","resolveActions","currentState","currentContext","predictableExec","preserveActionOrder","otherActions","preservedContexts","resolvedActions","sendAction","delaysMap","resolvedDelay","resolvedEvent","configDelay","resolvedTarget","resolveSend","delays","resolved","resolveLog","matchedActions","conds","resolvedActionsFromChoose","resolvedContextFromChoose","resolvedActionsFromPure","resolvedContext","actorRefOrString","resolvedActorRef","resolveStop","resolvedActionObject","exec_1","contextIndex_1","_ctx","provide","createNullActor","getSnapshot","createDeferredActor","entity","tempActor","deferred","initialState_1","withContext","initialState","isLeafNode","stateNode","getAllChildren","getChildren","sn","getAllStateNodes","stateNodes","prevStateNodes","e_3","e_4","prevAdjList","getAdjList","configuration_1","configuration_1_1","adjList","configuration_2","configuration_2_1","initialStateNodes","e_3_1","configuration_3","configuration_3_1","e_4_1","getValueFromAdj","baseNode","childStateNodes","childStateNode","csn","configuration_4","configuration_4_1","rootNode","member","isInFinalState","getTagsFromConfiguration","stateValuesEqual","aKeys","bKeys","State","_sessionid","historyValue","toStrings","transitions","ownEvents","nextEvents","inert","valueKeys","jsonValues","hasTag","can","transitionData","getTransitionData","deferEvents","Scheduler","processingEvent","schedule","flushEvents","nextCallback","sessionIdIndex","registry","getGlobal","registerService","devTools","__xstate__","getDevTools","spawnBehavior","behavior","observers","mailbox","flushing","actorRefLike","toActorRef","event_1","transition","actorCtx","observer","InterpreterStatus","DEFAULT_SPAWN_OPTIONS","autoForward","Interpreter","delayedEventsMap","contextListeners","stopListeners","doneListeners","eventListeners","sendListeners","NotStarted","forwardTo","batch","Running","scheduler","forward","nextState","_state","sendTo","isParent","Parent","_exec","actionOrExec","predictableActionArguments","sendId","invokeSource","serviceCreator","resolvedData","spawn","spawnActivity","stopChild","resolvedOptions","clock","resolvedId","_initialState","actionsConfig","contextListener","finalChildStateNode","doneData","_stop","onTransition","nextListenerOrObserver","completeListener","completeOnce","onDone","onStop","onEvent","onSend","_init","resolvedState","isStateConfig","resolveState","attachDev","e_8","e_9","e_10","e_8_1","e_9_1","_q","e_10_1","exitActions","newState","e_11","batchChanged","batchedActions","bindActionToState","events_1","events_1_1","e_11_1","_nextState","nextEvent","e_12","e_12_1","childId","spawnPromise","spawnCallback","isActor","spawnActor","isObservable","spawnObservable","spawnMachine","childService","doneEvent","actorRef","errorEvent","originalError","currentError","originalStackTrace","stackTrace","reportUnhandledExceptionOnInvocation","strict","unsubscribed","emitted","callbackStop","spawnEffect","__REDUX_DEVTOOLS_EXTENSION__","devToolsOptions","autoPause","stateSanitizer","jump","_setTimeout","ms","_clearTimeout","_x3","interpret","toInvokeSource","simpleSrc","toInvokeDefinition","invokeConfig","invokeDef","NULL_EVENT","WILDCARD","EMPTY_OBJECT","isStateId","StateNode","_stateInfo","__xstatenode","__cache","relativeValue","initialStateValue","delayedTransitions","idMap","parallel","stateConfig","dfs","_transient","always","onEntry","invokeId","withConfig","getDelayedTransitions","formatTransitions","getCandidates","transient","sameEventType","afterConfig","mutateEntryExit","delayRef","idSuffix","configTransition","resolvedTransition","delayedTransition","formatTransition","getStateNodes","getStateNode","subStateKeys","subStateNodes","subStateKey","handles","stateFromConfig","transitionLeafNode","transitionCompoundNode","_transition","transitionParallelNode","transitionMap","stateTransitions","enabledTransitions","entryNodes","entrySet","exitSet","selectedTransition","nextStateNodes","stateIn","isInState","getStateNodeById","guardPassed","allNextStateNodes","getRelativeStateNodes","isInternal","reentryNodes","targetNode","getExternalReentryNodes","possibleAncestor","getActions","resolvedConfig","isDone","prevState","prevConfig","resolvedConfig_1","resolvedConfig_1_1","prevConfig_1","prevConfig_1_1","doneEvents","grandparent","entryStates","exitStates","activityDef","entryActions","stopActions","resolvedStateValue","getResolvedPath","stateTransition","resolveTransition","resolveRaisedTransition","originalEvent","currentActions","willTransition","resolvedConfiguration","actions_1","actions_1_1","raisedEvents","nonRaisedActions","invokeActions","invokeDefinition","invokeSrc","createInvocableActor","didUpdateContext","hasAlwaysTransitions","maybeNextState","raisedEvent","stateKey","resolvedStateId","STATE_IDENTIFIER","getStateNodeByPath","arrayStatePath","currentStateNode","subStateNode","stateIdentifier","getInitialState","historyConfig","relativeStateId","resolveHistory","initialPath","getFromRelativePath","relativePath","childStatePath","relativeStateValue","historyTarget","relativeChildPath","accessorProp","subHistoryValue","props_2","props_2_1","subStatePath","childStateIds","stateIds","resolveTarget","_target","isInternalTarget","transitionConfig","normalizedTarget","normalizeTarget","onConfig","wildcardConfigs","strictTransitionConfigs_1","transitionConfigArray","hasNonLastUnguardedTarget","eventText","validateArrayifiedTransitions","eventlessConfig","doneConfig","settleTransitions","formattedTransitions","delayedTransitions_1","delayedTransitions_1_1","ownKeys$3","_objectSpread$3","WEB_TIEBREAKER_VALUE","Roap","createLocalOfferCallback","handleRemoteOfferCallback","handleRemoteAnswerCallback","initialSeq","initiateOfferPromises","fsm","createMachine","tsTypes","seq","pendingLocalOffer","isHandlingOfferRequest","retryCounter","isOkInTransaction","browserError","ROAP_FAILURE","remoteError","INITIATE_OFFER","REMOTE_OFFER_ARRIVED","REMOTE_OFFER_REQUEST_ARRIVED","REMOTE_ANSWER_ARRIVED","REMOTE_OK_ARRIVED","creatingLocalOffer","waitingForAnswer","ERROR_ARRIVED","settingRemoteAnswer","settingRemoteOffer","waitingForOK","enqueueNewOfferCreation","resetPendingLocalOffer","increaseSeq","updateSeq","increaseRetryCounter","resetRetryCounter","setOfferRequestFlag","resetOfferRequestFlag","handleGlare","tieBreaker","sendErrorMessage","DOUBLECONFLICT","CONFLICT","sendRoapOfferMessage","sendRoapOfferResponseMessage","sendRoapOKMessage","sendRoapOkMessage","sendRoapAnswerMessage","sendStartedEvent","sendDoneEvent","sendGenericError","FAILED","sendInvalidStateError","INVALID_STATE","sendOutOfOrderError","OUT_OF_ORDER","sendRetryAfterError","retryAfter","ignoreDuplicate","resolvePendingInitiateOfferPromises","rejectPendingInitiateOfferPromises","updateIsOkInTransaction","_event$headers","resetOkInTransaction","isPendingLocalOffer","isSameSeq","shouldErrorTriggerOfferRetry","RETRY","stateMachine","ROAP_MESSAGE_TO_SEND","roapMessage","messageType","ROAP_DONE","ROAP_STARTED","getStateMachine","initiateOffer","validateIncomingRoapMessage","errorToSend","roapMessageReceived","errorCause","getSeq","ownKeys$2","_objectSpread$2","RoapMediaConnection","sdpNegotiationStarted","mediaConnection","createMediaConnection","roap","createRoap","forwardEvent","eventSource","onRemoteTrack","closeMediaConnection","stopRoapSession","reconnect","ownKeys$1","MultistreamRoapMediaConnection","closeCallback","sendMetricsCallback","multistreamConnection","createMultistreamConnection","_objectSpread$1","ACTIVE_SPEAKERS_CHANGED","AUDIO_SOURCES_COUNT_CHANGED","VIDEO_SOURCES_COUNT_CHANGED","onNegotiationNeeded","forceRtcMetricsSend","_this$multistreamConn","Errors","getDefaultExportFromCjs","es5","NetworkType","MediaDevices","MediaDirection","IpType","Bowser","CpuInfo","getNumLogicalCores","StatsAnalyzerEventNames","STATS_DEFAULT","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytesSent","speed","connectionType","systemNetworkType","systemIpAddress","resolutions","DEFAULT_GET_STATS_FILTER","types","MQA_INTERVAL","_UNKNOWN_","emptyMqaInterval","audioReceive","audioTransmit","intervalMetadata","peerReflexiveIP","peripherals","cpuInfo","numberOfCores","architecture","processAverageCPU","processMaximumCPU","systemAverageCPU","systemMaximumCPU","screenWidth","screenHeight","screenResolution","appWindowWidth","appWindowHeight","appWindowSize","intervalNumber","videoReceive","videoTransmit","emptyAudioReceive","isMain","mariFecEnabled","mariRtxEnabled","mariQosEnabled","mariLiteEnabled","multistreamEnabled","dtlsBitrate","dtlsPackets","fecBitrate","fecPackets","mediaHopByHopLost","rtcpBitrate","rtcpPackets","rtpBitrate","rtpHopByHopLost","rtpPackets","rtpRecovered","rtxBitrate","rtxPackets","srtcpUnprotectErrors","srtpUnprotectErrors","stunBitrate","stunPackets","transportType","emptyAudioReceiveStream","concealedFrames","maxConcealRunLength","optimalBitrate","optimalFrameRate","receivedBitrate","receivedFrameRate","renderedFrameRate","requestedFrameRate","rtpEndToEndLost","maxRtpJitter","meanRtpJitter","ssci","emptyAudioTransmit","availableBitrate","queueDelay","remoteJitter","remoteLossRate","roundTripTime","emptyAudioTransmitStream","requestedFrames","transmittedBitrate","transmittedFrameRate","emptyVideoReceive","emptyVideoReceiveStream","h264CodecProfile","optimalFrameSize","receivedFrameSize","receivedHeight","receivedKeyFrames","receivedKeyFramesForRequest","receivedKeyFramesSourceChange","receivedKeyFramesUnknown","receivedWidth","requestedKeyFrames","emptyVideoTransmit","emptyVideoTransmitStream","duplicateSsci","isHardwareEncoded","localConfigurationChanges","maxFrameQp","maxNoiseLevel","minRegionQp","remoteConfigurationChanges","transmittedFrameSize","transmittedHeight","transmittedKeyFrames","transmittedKeyFramesClient","transmittedKeyFramesConfigurationChange","transmittedKeyFramesFeedback","transmittedKeyFramesLocalDrop","transmittedKeyFramesOtherLayer","transmittedKeyFramesPeriodic","transmittedKeyFramesSceneChange","transmittedKeyFramesStartup","transmittedKeyFramesUnknown","transmittedWidth","emptySender","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","emptyReceiver","bytesReceived","getTotalValueFromBaseType","sendrecvType","baseMediaType","mt","_stats$mt","_stats$mt$sendrecvTyp","getAudioReceiverMqa","_statsResults$mediaTy","audioReceiver","statsResults","lastMqaDataSent","isMultistream","RECEIVE","getLastTotalValue","getTotalValue","lastPacketsReceived","lastPacketsLost","lastBytesReceived","lastFecPacketsReceived","lastFecPacketsDiscarded","totalPacketsReceived","packetsLost","totalBytesReceived","totalFecPacketsReceived","totalFecPacketsDiscarded","mediaTypeKey","totalPacketsLost","fecRecovered","getAudioReceiverStreamMqa","_lastMqaDataSent$medi","_lastMqaDataSent$medi2","_lastMqaDataSent$medi3","_lastMqaDataSent$medi4","_lastMqaDataSent$medi5","_lastMqaDataSent$medi6","_lastMqaDataSent$medi7","_lastMqaDataSent$medi8","audioReceiverStream","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","fecPacketsReceived","fecPacketsDiscarded","framesDropped","framesReceived","getAudioSenderMqa","_statsResults$mediaTy2","audioSender","SEND","lastPacketsSent","lastPacketsLostTotal","totalPacketsLostOnReceiver","totalPacketsSent","maxRemoteJitter","availableOutgoingBitrate","totalPacketsLostForaMin","maxRemoteLossRate","maxRoundTripTime","totalBytesSentInaMin","getAudioSenderStreamMqa","_lastMqaDataSent$medi9","_lastMqaDataSent$medi10","_lastMqaDataSent$medi11","_lastMqaDataSent$medi12","audioSenderStream","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","getVideoReceiverMqa","_statsResults$mediaTy3","videoReceiver","lastRtxPacketsReceived","lastRtxBytesReceived","totalRtxPacketsReceived","totalRtxBytesReceived","totalBytesReceivedInaMin","totalRtxBytesReceivedInaMin","getVideoReceiverStreamMqa","_lastMqaDataSent$medi13","_lastMqaDataSent$medi14","_lastMqaDataSent$medi15","_lastMqaDataSent$medi16","_lastMqaDataSent$medi17","_lastMqaDataSent$medi18","_lastMqaDataSent$medi19","_lastMqaDataSent$medi20","_statsResults$mediaTy4","_statsResults$mediaTy5","videoReceiverStream","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalFrameReceivedInaMin","totalFrameDecodedInaMin","lastActiveSpeakerTimestamp","getVideoSenderMqa","_statsResults$mediaTy6","videoSender","lastRtxPacketsSent","lastRtxBytesSent","totalRtxPacketsSent","totalRtxBytesSent","totalRtxBytesSentInaMin","getVideoSenderStreamMqa","_lastMqaDataSent$medi21","_lastMqaDataSent$medi22","_lastMqaDataSent$medi23","_lastMqaDataSent$medi24","_lastMqaDataSent$medi25","videoSenderStream","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","isStreamRequested","_statsResults$mediaTy7","_statsResults$mediaTy8","lastUpdateTimestamp","StatsAnalyzer","networkQualityMonitor","isLocal","_this$lastEmittedStar","_this$lastEmittedStar2","lastEmittedStartStopEvents","lastEmittedEvent","LOCAL_MEDIA_STARTED","REMOTE_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STOPPED","emittedEvent","successfulCandidatePairId","newIpAddress","localIpAddress","isSender","isRemote","_this$successfulCandi","successfulCandidatePair","sendRecvType","ipType","REMOTE","LOCAL","ipAddress","portNumber","VPN","totalRoundTripTime","statsStarted","lastStatsResults","mqaSentCount","resetStatsResults","recv","updateMediaStatus","_this$meetingMediaSta","_this$meetingMediaSta2","meetingMediaStatus","actual","expected","sendMqaData","newMqa","structuredClone","audioShareSender","audioShareReceiver","videoShareSender","videoShareReceiver","_audioSenderStream","_audioReceiverStream","_videoSenderStream","_videoReceiverStream","SPEAKER","MICROPHONE","existingVideoSender","CAMERA","screen","MEDIA_QUALITY","startAnalyzer","getStatsAndParse","statsInterval","analyzerInterval","mqaInterval","stopAnalyzer","sendOneLastMqa","parseGetStatsResult","getStatsResult","processOutboundRTPResult","processInboundRTPResult","compareSentAndReceived","parseAudioSource","filterAndParseGetStatsResults","statsItem","_this$successfulCandi2","_this$successfulCandi3","_this$statsResults","videoSenderIndex","shareVideoEncoderImplementation","encoderImplementation","extractAndSetLocalIpAddressInfoForDiagnostics","audioLevel","totalAudioEnergy","compareLastStatsResult","getCurrentStatsTotals","keyPrefix","_this$statsResults$cu","getPreviousStatsTotals","_this$lastStatsResult","_this$lastStatsResult2","currentStats","previousStats","sendAudio","emitStartStopEvents","currentAudioPacketsReceived","previousAudioPacketsReceived","currentTotalPacketsSent","previousTotalPacketsSent","currentFramesEncoded","previousFramesEncoded","currentFramesSent","previousFramesSent","sendVideo","currentVideoFramesDecoded","previousVideoFramesDecoded","_currentStats","_previousStats","sendShare","framesEncoded","currentShareFramesDecoded","previousShareFramesDecoded","transceiverStats","frameWidth","frameHeight","hugeFramesSent","keyFramesEncoded","packetsSent","totalNackCount","nackCount","pliCount","firCount","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","retransmittedBytesSent","headerBytesSent","kilobytes","midAndCsi","currentPacketsLost","packetsReceivedDiff","packetsReceived","currentPacketLossRatio","lastPacketReceivedTimestamp","decoderImplementation","headerBytesReceived","retransmittedPacketsReceived","retransmittedBytesReceived","jitter","currentPacketLoss","packetsLostOnReceiver","reportsReceived","overAllPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","LocalMicrophoneStreamEventNames","LocalCameraStreamEventNames","_LocalMicrophoneStrea","ServerMuted","_LocalMicrophoneStream","_WcmeLocalMicrophoneS","allowed","unmuteAllowed","isUnmuteAllowed","WcmeLocalMicrophoneStream","_LocalCameraStreamEve","_LocalCameraStream","_WcmeLocalCameraStrea","WcmeLocalCameraStream","createMicrophoneStream","CREATE_STREAM_FAILED","wcmeCreateMicrophoneStream","createCameraStream","wcmeCreateCameraStream","createDisplayStream","localDisplayStream","wcmeCreateDisplayStream","createDisplayStreamWithAudio","displayStreamConstructor","systemAudioStreamConstructor","localSystemAudioStream","wcmeCreateDisplayStreamWithAudio","FacingMode","DisplaySurface","PresetCameraConstraints","successCallbackWrapper_","shimRTCIceCandidateRelayProtocol","getCanSendMaxMessageSize","metricFields","metricTags","propName","prepareMetricFields","LoggerConfig","verboseEvents","StaticConfig","LoggerProxy","LogsRequest","_uploadLogs","locussessionid","autoupload","_args","AUDIO_STATUS","ALERT","ANSWER","CALL","CORRELATION_ID","MEETINGNUMBER","CONVERSATION_URL","CALENDAR","CALENDAR_EVENTS_API","CMR_MEETINGS","CLAIM","CONTROLS","COMPLETE","WHITEBOARD","GATHERING","DEVELOPMENT","DECLINE","ENDED","HECATE","HOST","JOIN","LIVE","LOCI","LOCUS_URL","END","MAX_RANDOM_DELAY_FOR_MEETING_INFO","MEETINGINFO","MEET","MEET_M","MEDIA","MEET_CO","MEET_CISCO","OFFLINE","ONLINE","PARTICIPANT","PROVISIONAL_TYPE_DIAL_IN","PROVISIONAL_TYPE_DIAL_OUT","READY","SEND_DTMF_ENDPOINT","SENDRECV","SIP_URI","VIDEO_STATUS","LANGUAGE_ENGLISH","_ANSWER_","_ACTIVE_","_CALL_","_CREATED_","_CONFLICT_","_CONVERSATION_URL_","_ERROR_","_FORCED_","_IDLE_","_IN_LOBBY_","_IN_MEETING_","_INCOMING_","_IN_","_ID_","_JOIN_","_JOINED_","_LOCUS_ID_","_LEFT_","_MOVED_","_ON_HOLD_LOBBY_","_MEETING_LINK_","_MEETING_UUID_","_MEETING_","_MEETING_CENTER_","_MEETING_ID_","_NOT_IN_MEETING_","_NONE_","_OBSERVE_","_PERSONAL_ROOM_","_PEOPLE_","_REQUESTED_","_RESOURCE_ROOM_","_RECEIVE_ONLY_","_REMOVE_","_ROOM_","_SIP_BRIDGE_","_SIP_URI_","_SEND_RECEIVE_","_SEND_ONLY_","_INACTIVE_","_SLIDES_","_S_LINE","_USER_","_WEBEX_MEETING_","_WAIT_","_MOVE_MEDIA_","PARTICIPANT_DELTAS","TARGETS","STATES","MUTED","UNMUTED","ALTERNATE_REDIRECT_TRUE","HTTPS_PROTOCOL","MEETINGS","MEDIA_PEER_CONNECTION_NAME","SHARE_PEER_CONNECTION_NAME","USE_URI_LOOKUP_FALSE","WWW_DOT","WEBEX_DOT_COM","CONVERSATION_SERVICE","WBXAPPAPI_SERVICE","DEFAULT_EXCLUDED_STATS","LAYOUT_TYPES","MODERATOR_TRUE","MODERATOR_FALSE","INTENT_TO_JOIN","ICE_TIMEOUT","ICE_FAIL_TIMEOUT","RETRY_TIMEOUT","ICE_AND_DTLS_CONNECTION_TIMEOUT","ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT","DIALER_REGEX","SIP_ADDRESS","PHONE_NUMBER","E164_FORMAT","IPV4_REGEX","VALID_EMAIL_ADDRESS","VALID_PMR_ADDRESS","VALID_PMR_LINK","VALID_PIN","UUID_REG","API","CALLIOPEDISCOVERY","LOCUS","CALENDAR_EVENTS","CREATE_MINIMAL","UPDATE_MINIMAL","ASSIGN_ROLES_ERROR_CODES","ReclaimHostNotSupportedErrorCode","ReclaimHostNotAllowedErrorCode","ReclaimHostEmptyWrongKeyErrorCode","ReclaimHostIsHostAlreadyErrorCode","RECORDING_STATE","RECORDING","PAUSED","RESUMED","SHARE_STATUS","NO_SHARE","REMOTE_SHARE_ACTIVE","LOCAL_SHARE_ACTIVE","WHITEBOARD_SHARE_ACTIVE","MEETINGS_READY","MEETINGS_REGISTERED","MEETINGS_UNREGISTERED","MEDIA_READY","MEDIA_STOPPED","MEDIA_UPDATE","MEDIA_CODEC_MISSING","MEDIA_CODEC_LOADED","MEETING_STARTED_SHARING_LOCAL","MEETING_STOPPED_SHARING_LOCAL","MEETING_STARTED_SHARING_REMOTE","MEETING_STOPPED_SHARING_REMOTE","MEETING_UPDATE_ANNOTATION_INFO","MEETING_STARTED_SHARING_WHITEBOARD","MEETING_STOPPED_SHARING_WHITEBOARD","MEETING_MEDIA_LOCAL_STARTED","MEETING_MEDIA_REMOTE_STARTED","MEETING_STARTED_RECORDING","MEETING_STOPPED_RECORDING","MEETING_RECEIVE_REACTIONS","MEETING_PAUSED_RECORDING","MEETING_RESUMED_RECORDING","MEETING_ADDED","MEETING_REMOVED","MEETING_RINGING","MEETING_RINGING_STOP","MEETING_SELF_LOBBY_WAITING","MEETING_SELF_GUEST_ADMITTED","MEETING_SELF_VIDEO_MUTED_BY_OTHERS","MEETING_SELF_VIDEO_UNMUTED_BY_OTHERS","MEETING_SELF_MUTED_BY_OTHERS","MEETING_SELF_UNMUTED_BY_OTHERS","MEETING_SELF_REQUESTED_TO_UNMUTE","MEETING_SELF_PHONE_AUDIO_UPDATE","MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST","MEETING_SELF_IS_SHARING_BLOCKED","MEETING_SELF_ROLES_CHANGED","MEETING_CONTROLS_LAYOUT_UPDATE","MEETING_ENTRY_EXIT_TONE_UPDATE","MEETING_BREAKOUTS_UPDATE","MEETING_BREAKOUTS_CLOSING","MEETING_BREAKOUTS_MESSAGE","MEETING_BREAKOUTS_ASK_RETURN_TO_MAIN","MEETING_BREAKOUTS_LEAVE","MEETING_BREAKOUTS_ASK_FOR_HELP","MEETING_BREAKOUTS_PRE_ASSIGNMENTS_UPDATE","MEETING_INTERPRETATION_UPDATE","MEETING_INTERPRETATION_SUPPORT_LANGUAGES_UPDATE","MEETING_INTERPRETATION_HANDOFF_REQUESTS_ARRIVED","MEMBERS_UPDATE","MEMBERS_CLEAR","MEMBERS_CONTENT_UPDATE","MEMBERS_HOST_UPDATE","MEMBERS_SELF_UPDATE","MEETING_RECONNECTION_STARTING","MEETING_RECONNECTION_SUCCESS","MEETING_RECONNECTION_FAILURE","MEETING_UNLOCKED","MEETING_INFO_AVAILABLE","MEETING_INFO_UPDATED","MEETING_LOG_UPLOAD_SUCCESS","MEETING_LOG_UPLOAD_FAILURE","MEETING_ACTIONS_UPDATE","MEETING_STATE_CHANGE","MEETING_MEETING_CONTAINER_UPDATE","MEETING_EMBEDDED_APPS_UPDATE","MEETINGS_NETWORK_DISCONNECTED","MEETINGS_NETWORK_CONNECTED","MEETING_SELF_LEFT","NETWORK_QUALITY","MEDIA_NEGOTIATED","ACTIVE_SPEAKER_CHANGED","REMOTE_VIDEO_SOURCE_COUNT_CHANGED","REMOTE_AUDIO_SOURCE_COUNT_CHANGED","REMOTE_MEDIA_AUDIO_CREATED","REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED","REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED","REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED","MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED","MEETING_CONTROLS_SHARE_CONTROL_UPDATED","MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED","MEETING_CONTROLS_REACTIONS_UPDATED","MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED","MEETING_CONTROLS_RAISE_HAND_UPDATED","MEETING_CONTROLS_VIDEO_UPDATED","MEETING_LOCUS_URL_UPDATE","MEETING_STREAM_PUBLISH_STATE_CHANGED","MEETING_TRANSCRIPTION_CONNECTED","MEETING_STARTED_RECEIVING_TRANSCRIPTION","MEETING_STOPPED_RECEIVING_TRANSCRIPTION","MEETING_MANUAL_CAPTION_UPDATED","MEETING_CAPTION_RECEIVED","EVENT_TYPES","SELF","OTHER","REMOTE_AUDIO","REMOTE_VIDEO","REMOTE_SHARE","REMOTE_SHARE_AUDIO","MEETING_REMOVED_REASON","SELF_REMOVED","FULLSTATE_REMOVED","MEETING_INACTIVE_TERMINATING","CLIENT_LEAVE_REQUEST","CLIENT_LEAVE_REQUEST_TAB_CLOSED","USER_ENDED_SHARE_STREAMS","NO_MEETINGS_TO_SYNC","MEETING_CONNECTION_FAILED","LOCUS_DTO_SYNC_FAILED","MISSING_MEETING_INFO","CALL_REMOVED_REASON","CALL_INACTIVE","PARTNER_LEFT","SELF_LEFT","SHARE_STOPPED_REASON","SELF_STOPPED","MEETING_REJOIN","MEDIA_RECONNECTION","TRACK_ENDED","EVENTS","SELF_UNADMITTED_GUEST","SELF_ADMITTED_GUEST","MEDIA_INACTIVITY","CONVERSATION_URL_UPDATE","DESTROY_MEETING","REQUEST_UPLOAD_LOGS","REMOTE_RESPONSE","LOCUS_INFO_UPDATE_PARTICIPANTS","LOCUS_INFO_UPDATE_HOST","LOCUS_INFO_UPDATE_MEDIA_SHARES","LOCUS_INFO_UPDATE_SELF","LOCUS_INFO_UPDATE_URL","LOCUS_INFO_CAN_ASSIGN_HOST","DISCONNECT_DUE_TO_INACTIVITY","MEDIA_STATE","inactive","ERROR_DICTIONARY","PARAMETER","CODE","JOIN_MEETING","RECONNECTION","PERMISSION","STATS","PASSWORD","CAPTCHA","BREAKOUT_EDIT","NO_MEETING_INFO","RECLAIM_HOST_ROLE_NOT_SUPPORTED","RECLAIM_HOST_ROLE_NOT_ALLOWED","RECLAIM_HOST_ROLE_EMPTY_OR_WRONG_KEY","RECLAIM_HOST_ROLE_IS_ALREADY_HOST","RECONNECTION_NOT_STARTED","FLOOR_ACTION","GRANTED","RELEASED","ACCEPTED","FULL_STATE","INITIALIZING","INACTIVE","TERMINATING","HTTP_VERBS","PUT","GET","PATCH","ICE_GATHERING_STATE","NEW","ICE_STATE","CHECKING","CONNECTED","CLOSED","COMPLETED","DISCONNECTED","CONNECTION_STATE","CONNECTING","STATE","SEQUENCE","UN_DEF","DEF","NA","RANGE_START","RANGE_END","SYNCDEBUG","ANNOTATION","ANNOTATION_ON_SHARE_SUPPORTED","BREAKOUTS","CLOSING","PENDING","OPEN","BREAKOUTS_CLOSING","ASK_RETURN_TO_MAIN","LEAVE_BREAKOUT","ASK_FOR_HELP","PRE_ASSIGNMENTS_UPDATE","SESSION_TYPES","MAIN","BREAKOUT","SESSION_STATES","ASSIGNED","ALLOWED","ASSIGNED_CURRENT","REQUESTED","BREAKOUTS_SUPPORTED","ACTION","START","CLOSE","ERROR_CODE","EDIT_LOCK_TOKEN_MISMATCH","EDIT_NOT_AUTHORIZED","EDIT_LOCK_STATUS","NOT_LOCKED","DEFAULT_TTL","INTERPRETATION","SUPPORT_LANGUAGES_UPDATE","HANDOFF_REQUESTS_ARRIVED","ACTION_TYPE","OFFERED","DECLINED","RESOURCE_TYPE","LOCUSINFO","CONTROLS_MEETING_LAYOUT_UPDATED","CONTROLS_RECORDING_UPDATED","CONTROLS_MEETING_TRANSCRIBE_UPDATED","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","CONTROLS_MEETING_BREAKOUT_UPDATED","CONTROLS_MEETING_CONTAINER_UPDATED","CONTROLS_MEETING_INTERPRETATION_UPDATED","CONTROLS_ENTRY_EXIT_TONE_UPDATED","CONTROLS_MUTE_ON_ENTRY_CHANGED","CONTROLS_SHARE_CONTROL_CHANGED","CONTROLS_DISALLOW_UNMUTE_CHANGED","CONTROLS_REACTIONS_CHANGED","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","CONTROLS_RAISE_HAND_CHANGED","CONTROLS_VIDEO_CHANGED","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","SELF_REMOTE_MUTE_STATUS_UPDATED","LOCAL_UNMUTE_REQUESTED","LOCAL_UNMUTE_REQUIRED","SELF_MODERATOR_CHANGED","SELF_ROLES_CHANGED","MEETING_UPDATE","MEDIA_STATUS_CHANGE","FULL_STATE_TYPE_UPDATE","FULL_STATE_MEETING_STATE_CHANGE","MEETING_STATE_CHANGE_TO_ACTIVE","SELF_OBSERVING","EMBEDDED_APPS_UPDATED","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","SELF_IS_SHARING_BLOCKED_CHANGE","SELF_MEETING_BREAKOUTS_CHANGED","SELF_MEETING_INTERPRETATION_CHANGED","LINKS_SERVICES","LOCUSEVENT","LOCUS_MERCURY","CONTROLS_UPDATED","DIFFERENCE","BREAKOUT_ROSTER","FLOOR_GRANTED","FLOOR_RELEASED","MESSAGE_ROAP","PARTICIPANT_JOIN","PARTICIPANT_LEFT","PARTICIPANT_DECLINED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","RECORDING_STARTED","RECORDING_START_FAILED","RECORDING_STOPPED","SELF_CHANGED","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","MOTION","NEVER","MEETING_ERRORS","METRICS_NOT_SERVER_OR_CLIENT_EXCEPTION","BIDIRECTIONAL_ROSTER_NOT_ALLOWED","INVALID_LOCUS_URL","ARGUMENT_NULL_OR_EMPTY","INVALID_USER","INVALID_PHONE_NUMBER_OR_COUNTRY_CODE","PHONE_NUMBER_INVALID_COUNTRY_CODE","PHONE_NUMBER_TOO_SHORT_NSN","INVALID_MEETING_LINK","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","INVALID_LOCUS_ID","EMPTY_SCHEDULED_MEETING_START_TIME","INVALID_SCHEDULED_MEETING_DURATION_MINUTES","INVALID_SCHEDULED_MEETING_REMINDER_DURATION_MINUTES","EMPTY_SCHEDULED_MEETING_ORGANIZER","INVALID_MEETING_ID_FORMAT","INVALID_SIP_URL_FORMAT","EMPTY_INVITEE_RECORD","EMPTY_INVITEE_ADDRESS","DESKPHONE_NOTHING_DIALABLE_FOUND","INVALID_ATTENDEE_ID","INVALID_IN_LOBBY","MISSING_REQUESTING_PARTICIPANT_ID","INVALID_REQUESTING_PARTICIPANT_ID","SUPPLEMENTARY_USER_INFO_NOT_FOUND","UNAUTHORIZED","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","CREATE_MEDIA_RESTRICTED_USER","DUPLICATE_RESOURCE_CREATION_REQUEST","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_SCHEDULED_MEETING_ORGANIZER","FREE_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_JOINED_EXCEEDED","SERVICE_MAX_PARTICIPANTS_ROSTER_EXCEEDED","SERVICE_INITIAL_PARTICIPANTS_ROSTER_EXCEEDED","RESOURCE_GUEST_FORBIDDEN","SERVICE_NO_MACHINE_OR_SERVICE_ACCOUNT","MODERATOR_ROLE_REMOVAL_NOT_ALLOWED","RECORDING_CONTROL_NOT_SUPPORTED","HOST_PIN_LOCKED","INVALID_HOST_PIN","REQUESTING_PARTICIPANT_NOT_MODERATOR","MEETING_INFO_NOT_FOUND","SCHEDULED_MEETING_NOT_FOUND","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","RECORDING_USER_STORAGE_FULL","RECORDING_SITE_STORAGE_FULL","NO_SCHEDULED_MEETING","MEETING_FULL_UPDATE_NOT_ALLOWED","MODERATOR_ROLE_REMOVAL_NOT_VALID","MODERATOR_ROLE_ADDITION_NOT_VALID","INVALID_CALL_START_TIME","MEETING_STARTED_UPDATE_NOT_ALLOWED","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","PMR_ACCOUNT_LOCKED","INVALID_JOIN_TIME","REQUIRES_WEBEX_LOGIN","TOO_MANY_REQUESTS","UNABLE_TO_LOOK_UP_DEVICE_INFORMATION","UNABLE_TO_LOOK_UP_CONVERSATION","UNABLE_TO_LOOK_UP_CI_USER","UNABLE_TO_CREATE_CONFLUENCE","SERVICE_UNAVAILABLE","SOCKET_TIMEOUT","NO_HTTP_RESPONSE","MEETING_END_REASON","MEDIA_RELEASED","SELF_POLICY","DISPLAY_HINTS","ADD_GUEST","ROSTER_WAITING_TO_JOIN","RECORDING_CONTROL_START","RECORDING_CONTROL_PAUSE","RECORDING_CONTROL_STOP","RECORDING_CONTROL_RESUME","LOCK_CONTROL_UNLOCK","LOCK_CONTROL_LOCK","LOCK_STATUS_LOCKED","LOCK_STATUS_UNLOCKED","RAISE_HAND","LOWER_ALL_HANDS","LOWER_SOMEONE_ELSES_HAND","LEAVE_TRANSFER_HOST_END_MEETING","LEAVE_END_MEETING","CAPTION_START","CAPTION_STATUS_ACTIVE","MANUAL_CAPTION_START","MANUAL_CAPTION_STOP","MANUAL_CAPTION_STATUS_ACTIVE","DISPLAY_REAL_TIME_TRANSLATION","ENABLE_CAPTION_PANEL","DISPLAY_NON_ENGLISH_ASR","TRANSCRIPTION_CONTROL_START","TRANSCRIPTION_CONTROL_STOP","SAVE_TRANSCRIPTS_ENABLED","WEBEX_ASSISTANT_STATUS_ACTIVE","WAITING_FOR_OTHERS","ENABLE_REACTIONS","DISABLE_REACTIONS","REACTIONS_ACTIVE","REACTIONS_INACTIVE","SHARE_CONTROL","ENABLE_MUTE_ON_ENTRY","ENABLE_SHOW_DISPLAY_NAME","DISABLE_SHOW_DISPLAY_NAME","DISABLE_MUTE_ON_ENTRY","ENABLE_HARD_MUTE","DISABLE_HARD_MUTE","MUTE_ALL","UNMUTE_ALL","PRESENTER_CONTROL","CAN_RENAME_SELF_AND_OBSERVED","CAN_RENAME_OTHERS","BREAKOUT_MANAGEMENT","BROADCAST_MESSAGE_TO_BREAKOUT","UCF_SUPPRESS_BREAKOUTS_SUPPORT","DISABLE_ASK_FOR_HELP","DISABLE_BREAKOUT_PREASSIGNMENTS","DISABLE_LOBBY_TO_BREAKOUT","DISABLE_VIEW_THE_PARTICIPANT_LIST","ENABLE_VIEW_THE_PARTICIPANT_LIST","DISABLE_RAISE_HAND","ENABLE_RAISE_HAND","DISABLE_VIDEO","ENABLE_VIDEO","SHARE_FILE","SHARE_APPLICATION","SHARE_CAMERA","SHARE_DESKTOP","SHARE_CONTENT","SHARE_WHITEBOARD","VOIP_IS_ENABLED","INTERSTITIAL_DISPLAY_HINTS","SELF_ROLES","COHOST","MODERATOR","ATTENDEE","PANELIST","MEETING_STATE","INCOMING","DIALING","NOTIFIED","ON_GOING","LEFT","MEETING_STATE_MACHINE","TRANSITIONS","FAIL","RING","RESET","RINGING","ANSWERED","MEETING_AUDIO_STATE_MACHINE","TOGGLE","INIT","MUTE_SELF","UNMUTE_SELF","MEETING_VIDEO_STATE_MACHINE","PEER_CONNECTION_STATE","IN_PROGRESS","FAILURE","DEFAULT_STATUS","CLUSTERS","REACHABILITY","localStorageResult","localStorageJoinCookie","ROAP","ROAP_TYPES","OFFER","OK","TURN_DISCOVERY_REQUEST","TURN_DISCOVERY_RESPONSE","ROAP_MERCURY","ROAP_VERSION","slides","NETWORK_STATUS","RECONNECTING","NETWORK_TYPE","WIFI","ETHERNET","SEND_DIRECTION","RECEIVE_DIRECTION","MQA_STATS","MQA_SIZE","CA_TYPE","DEFAULT_IP","DEFAULT_SHARE_SENDER_STATS","memoryUsage","cpuBitWidth","mainProcessMaximumMemoryBytes","osBitWidth","processAverageMemoryUsage","processMaximumMemoryBytes","processMaximumMemoryUsage","systemAverageMemoryUsage","systemMaximumMemoryUsage","QUALITY_LEVELS","AVAILABLE_RESOLUTIONS","MEDIA_DEVICES","PSTN_STATUS","TRANSFERRING","SUCCESS","PASSWORD_STATUS","NOT_REQUIRED","REQUIRED","VERIFIED","MEETING_INFO_FAILURE_REASON","WRONG_PASSWORD","WRONG_CAPTCHA","POLICY","BNR_STATUS","SHOULD_ENABLE","SHOULD_DISABLE","NOT_ENABLED","EMBEDDED_APP_TYPES","SLIDO","DEFAULT_MEETING_INFO_REQUEST_BODY","supportHostKey","supportCountryList","IP_VERSION","unknown","only_ipv4","only_ipv6","ipv4_and_ipv6","LOCAL_SHARE_ERRORS","DEVICE_NOT_JOINED","NO_MEDIA_FOR_DEVICE","NO_CONFLUENCE_ID","CONTENT_SHARING_DISABLED","LOCUS_PARTICIPANT_DNE","CONTENT_REQUEST_WHILE_PENDING_WHITEBOARD","MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC","MEETING_PERMISSION_TOKEN_REFRESH_REASON","NAMED_MEDIA_GROUP_TYPE_AUDIO","DESTINATION_TYPE","MEETING_LINK","PERSONAL_ROOM","ONE_ON_ONE_CALL","LOCUS_ID","MEETING_ID","MEETING_UUID","ParameterError","MEETINGCONSTANTS","sdkMessage","EventsUtil","argString","scopeString","function","TriggerProxy","getScopeLog","getEventLog","mediaSettings","pstn","reconnection","autoRejoin","detection","iceReconnectionTimeout","maxRejoinAttempts","enableStatsAnalyzer","autoDowngradeEnabled","historyMax","videoPacketLossRatioThreshold","rttThreshold","jitterThreshold","mqaMetricsInterval","autoSendMQA","resolution","idealWidth","idealHeight","screenFrameRate","videoShareFrameRate","aspectRatio","autoUploadLogs","enableRtx","receiveTranscription","enableExtmap","enableAutomaticLLM","installedOrgID","enableMediaNegotiatedEvent","enableUnifiedMeetings","enableAdhocMeetings","enableTcpReachability","enableTlsReachability","degradationPreferences","maxMacroblocksLimit","RTC_METRICS","RtcMetrics","intervalId","sendMetricsInQueue","setNewConnectionId","metricsQueue","sendMetrics","anonymizeIp","parsedPayload","parseJsonPayload","CallDiagnosticUtils","connectionId","appId","Media","sharePreferences","isSharing","getMedia","forceSendRecv","_audioStream$outputSt","_videoStream$outputSt","_shareVideoStream$out","_shareAudioStream$out","mediaProperties","turnServerInfo","rtcMetrics","addMetrics","closeMetrics","audioStream","videoStream","shareVideoStream","shareAudioStream","receiveAudio","receiveVideo","receiveShare","customResolution","customShareFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","cursor","mediaConfig","getDisplayMediaParams","defaultWidth","defaultHeight","fake","mediaSetting","audioVideo","getLocalMedia","localStream","shareStream","WebexMeetingsError","WebExMeetingsErrors","MeetingNotActiveError","_WebexMeetingsError","UserNotJoinedError","_WebexMeetingsError2","NoMediaEstablishedYetError","_WebexMeetingsError3","UserInLobbyError","_WebexMeetingsError4","SpaceIDDeprecatedError","_WebexMeetingsError5","IceGatheringFailed","_WebexMeetingsError6","AddMediaFailed","_WebexMeetingsError7","IntentToJoinError","joinIntentRequired","JoinMeetingError","joinOptions","PermissionError","PasswordError","CaptchaError","MeetingUtil","parseLocusJoin","locus","selfId","mediaId","remoteUpdateAudioVideo","audioMuted","videoMuted","locusMediaRequest","selfUrl","muteOptions","_response$body","hasOwner","owner","isOwnerSelf","isPinOrGuest","_err$body","getIpVersion","_webex$internal$devic","joinMeeting","getWebexObject","meetingRequest","inviteeAddress","meetingJoinUrl","sipUri","meetingNumber","locusClusterUrl","reachability","permissionToken","resourceId","moveToResource","preferTranscoding","asResourceOccupant","breakoutsSupported","deviceCapabilities","liveAnnotationSupported","ipVersion","cleanUp","breakouts","simultaneousInterpretation","closeRemoteStreams","closePeerConnections","cleanupLocalStreams","unsetRemoteStreams","unsetPeerConnections","reconnectionManager","stopKeepAlive","_meeting$config","updateLLMConnection","disconnectPhoneAudio","phoneUrl","meetingState","prepareLeaveMeetingOptions","leaveMeeting","isUserInLeftState","leaveOptions","moveMeeting","declineMeeting","_locusInfo$parsedLocu","_locusInfo$parsedLocu2","parsedLocus","isUserInIdleState","_locusInfo$parsedLocu3","_locusInfo$parsedLocu4","isUserInJoinedState","_locusInfo$parsedLocu5","_locusInfo$parsedLocu6","isMediaEstablished","currentMediaStatus","joinMeetingOptions","requiredCaptcha","passwordStatus","setLocus","buildLeaveFetchRequestOptions","buildLeaveMeetingRequestOptions","getTrack","audioTracks","videoTracks","_audioTracks","_videoTracks","getModeratorFromLocusInfo","getPolicyFromLocusInfo","getUserDisplayHintsFromLocusInfo","_locusInfo$parsedLocu7","_locusInfo$parsedLocu8","userDisplayHints","canInviteNewParticipants","displayHints","canAdmitParticipant","canUserLock","canUserUnlock","canUserRaiseHand","canUserLowerAllHands","canUserLowerSomeoneElsesHand","bothLeaveAndEndMeetingAvailable","canManageBreakout","canBroadcastMessageToBreakout","policies","SUPPORT_BROADCAST_MESSAGE","isSuppressBreakoutSupport","canAdmitLobbyToBreakout","isBreakoutPreassignmentsEnabled","canUserAskForHelp","lockMeeting","canLock","lock","unlockMeeting","canUnlock","handleAudioLogging","LOG_HEADER","settings","handleVideoLogging","handleDeviceLogging","endMeetingForAll","endOptions","canEnableClosedCaption","isSaveTranscriptsEnabled","canStartTranscribing","canStopTranscribing","isClosedCaptionActive","canStartManualCaption","canStopManualCaption","isManualCaptionActive","isWebexAssistantActive","canViewCaptionPanel","isRealTimeTranslationEnabled","canSelectSpokenLanguages","waitingForOthersToJoin","canSendReactions","originalValue","canUserRenameSelfAndObserved","canUserRenameOthers","canShareWhiteBoard","addSequence","requestBody","updateLocusWithDelta","_response$body2","handleLocusDelta","generateBuildLocusDeltaRequestOptions","originalMeeting","meetingRef","WeakRef","originalOptions","deref","generateLocusDeltaRequest","buildLocusDeltaRequestOptions","selfSupportsFeature","userPolicies","parseInterpretationInfo","_meetingInfo$meetingS","siInfo","updateMeetingSIEnabled","turnOnSimultaneousInterpretation","currentSIInterpreter","hostSIEnabled","meetingSiteSetting","enableHostInterpreterControlSI","updateHostSIEnabled","_meeting$simultaneous","_meeting$simultaneous2","lanuagesInfo","siLanguages","renameKey","updateInterpretation","Trigger","oldKey","newKey","getChangeMeetingFloorErrorPayload","errorPayload","BEHAVIORAL_METRICS","MeetingInfoCollection","_Collection","meetingInfos","sipUrl","meetingLink","MeetingInfoUtil","_generateOptions","dest","parsedUrl","hostNameBool","pathNameBool","getParsedUrl","clusterId","company","userIndex","companyIndex","sipString","phoneNumber","_deconstructHydraId","room","hydraId","serviceUrl","getHydraId","isMeetingLink","isSipUri","isPhoneNumber","isConversationUrl","getSipUriFromHydraPersonId","wasHydraPerson","resourceOptions","requestParams","lookupType","MeetingInfoRequest","resourceUrl","getResourceUrl","getRequestParams","MeetingInfo","meetingInfoRequest","meetingInfoCollection","sendCAevents","fetchMeetingInfo","_info$body","_info$body2","_info$body3","meetingLookupUrl","setMeetingInfo","sipMeetingUri","generateOptions","fetchInfoOptions","extractDestination","infoOptions","requestFetchInfo","convertLinkToSip","_getDestinationType","_res$items$","disableHydraId","meetingInfoError","_destination$info","_destination$info2","captchaInfo","extraParams","meetingKey","webExMeetingId","meetingUrl","meetingUUID","captchaID","captchaVerifyCode","_uri$match","site","isExceptedDomain","_destination$info3","preferredWebexSite","getWebexSite","webExSite","CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES","POLICY_ERROR_CODES","MeetingInfoV2PasswordError","wbxAppApiErrorCode","wbxAppApiCode","MeetingInfoV2AdhocMeetingError","_Error2","MeetingInfoV2PolicyError","_Error3","MeetingInfoV2CaptchaError","_Error4","isPasswordRequired","MeetingInfoV2","_err$body2","_err$body3","_err$body4","_err$body4$data","_err$body5","sendBehavioralMetric","_fetchMeetingInfo","_createAdhocSpaceMeeting","getDestinationType","getInvitees","particpants","invitees","ciUserUuid","_conversation$partici","kroUrl","requestResult","_err$body6","_err$body7","handlePolicyError","destinationType","_destinationType$info","_destinationType$info2","requestOptions","directURI","_args2","createAdhocSpaceMeeting","getRequestBody","_difference","getDirectMeetingInfoURI","_response$body3","_err$body8","_err$body9","_err$body9$data","_err$body10","captchaId","verificationImageURL","verificationAudioURL","refreshURL","getSpeakerFromProxyOrStore","_meetingMember$partic","_meetingMember$partic2","csisKey","meetingMembers","transcriptData","needsCaching","speakerProxy","speaker","meetingMember","members","_member$participant$s","memberCSIs","getSpeaker","speakerId","EventsScope","_ChildEmitter","ChildEmitter","NetworkQualityMonitor","_EventsScope","indicatorTypes","_Object$freeze","PACKETLOSS","LATENCY","JITTER","frequencyTypes","UPLINK","DOWNLINK","networkQualityScore","networkQualityStatus","emitNetworkQuality","roundTripTimeInMilliseconds","jitterInMilliseconds","_this$indicatorTypes","determineIfUndefined","acceptable","updateNetworkQualityStatus","RoapRequest","_sendRoap","_attachReachabilityData","localSdp","joinCookie","reachabilityResult","joinCookieRaw","getReachabilityResults","boundedStorage","locusSelfUrl","_yield$this$attachRea","localSdpWithReachabilityData","attachReachabilityData","roapSeq","TurnDiscoverySkipReason","TurnDiscovery","roapRequest","turnInfo","_doTurnDiscovery","_isSkipped","_getSkipReason","_handleTurnDiscoveryHttpResponse","_generateTurnDiscoveryRequestMessage","responseTimer","TURN_DISCOVERY_TIMEOUT","expectedHeaders","headerName","field","foundHeaders","receivedHeader","expectedHeader","isOkRequired","isForced","turnDiscoverySkippedReason","getSkipReason","correlation_id","locus_id","httpResponse","parseHttpTurnDiscoveryResponse","handleTurnDiscoveryResponse","sendRoapOK","handleTurnDiscoveryFailure","_x4","_httpResponse$mediaCo","_httpResponse$mediaCo2","turnDiscoveryResponse","remoteSdp","_remoteSdp$roapMessag","isReconnecting","sendRoap","updateMediaConnections","handleTurnDiscoveryHttpResponse","_x5","isAnyPublicClusterReachable","_x6","skipReason","_x7","turnDiscoveryResult","sendRoapTurnDiscoveryRequest","waitForTurnDiscoveryResponse","_x8","_x9","_x10","turnDiscovery","getByKey","sdps","roapAnswer","answerSeq","doTurnDiscovery","generateTurnDiscoveryRequestMessage","MediaConnectionAwaiter","webrtcMediaConnection","retried","onTimeoutCallback","onTimeout","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","isFailed","clearCallbacks","peerConnectionState","connectionStateChange","isIceGatheringCompleted","MediaProperties","remoteShareStream","remoteAudioStream","remoteVideoStream","videoDeviceId","_getCurrentConnectionInfo","mediaPeerConnection","unsetRemoteMedia","unsetRemoteShareStream","waitForMediaConnectionConnected","allStatsReports","transports","selectedCandidatePairChanges","numTransports","successfulCandidatePairs","_report$state","foundConnectionType","_localCandidate$proto","candidatePairStates","_this$getTransportInf","getConnectionType","getTransportInfo","MeetingStateMachine","StateMachine","remoteAnswered","remoteDeclined","onRemote","onRing","onEnterError","onAfterTransition","plugins","StateMachineHistory","createMuteState","MuteState","_meeting$remoteVideoM","_meeting$unmuteVideoA","ignoreMuteStateChange","client","localMute","remoteMute","remoteMuted","remoteVideoMuted","unmuteVideoAllowed","syncToServerInProgress","_meeting$mediaPropert","_meeting$mediaPropert2","applyUnmuteAllowedToStream","muteLocalStream","initialMute","applyClientStateToServer","_meeting$mediaPropert3","_meeting$mediaPropert4","setServerMuted","newMuteState","userMuteState","systemMuteState","_meeting$mediaPropert5","_meeting$mediaPropert6","_meeting$mediaPropert7","_meeting$mediaPropert8","_meeting$mediaPropert9","_meeting$mediaPropert10","localMuteState","getClientLocalMuteState","localMuteRequiresSync","remoteMuteRequiresSync","sendLocalMuteRequestToServer","sendRemoteMuteRequestToServer","remoteUpdateError","muteMember","_meeting$mediaPropert11","_meeting$mediaPropert12","setUnmuteAllowed","_meeting$mediaPropert13","_meeting$mediaPropert14","InfoUtils","roles","isJoined","parsePolicy","parseModerator","coHost","parseCoHost","displayHintKey","parseDisplayHintSection","oldInfo","newInfo","updates","isLocked","isUnlocked","FullState","locked","oldFullState","newFullState","isMeetingEnded","isMeetingTerminating","meetingTypeChangedTo","isTypeChanged","meetingStateChangedTo","meetingStateChange","SelfUtils","_joinedWith$intent","joinedWith","pstnDevices","getRemoteVideoMuted","getRemoteMuted","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequestedTimeStamp","getLocalAudioUnmuteRequestedTimeStamp","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","getLastModified","modifiedBy","getModifiedBy","guest","mediaStatus","getStatus","getMediaStatus","mediaSessions","isCreator","selfIdentity","getSelfIdentity","removed","getRoles","isUserUnadmitted","intent","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakoutSessions","breakout","getBreakout","interpretation","getInterpretation","_self$controls","_self$controls$breako","controls","sessions","_self$controls2","_self$controls3","_self$controls4","layouts","_self$controls5","_self$controls5$role","hasRole","getSelves","oldSelf","newSelf","isUserAdmitted","isVideoMutedByOthersChanged","videoMutedByOthersChanged","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isRolesChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","videoStateChange","shareStateChange","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","interpretationChanged","previousMediaStatus","_self$controls6","_self$controls6$audio","requestedToUnmute","_self$controls7","_self$controls7$audio","lastModifiedRequestedToUnmute","disallowUnmute","_self$controls8","_self$controls8$audio","audioStatus","videoStatus","videoSlidesStatus","changedSelf","isLocusUserUnadmitted","_check$joinedWith","_check$joinedWith$int","isLocusUserAdmitted","_check$joinedWith2","_check$joinedWith2$in","_oldSelf$joinedWith","_oldSelf$joinedWith$i","_changedSelf$joinedWi","_changedSelf$joinedWi2","getSipUrl","partner","getReplacedBreakoutMoveId","_joinedDevice$replace","joinedDevice","replaces","breakoutMoveId","HostUtils","hostId","oldHost","newHost","isNewHost","isDifferentHosts","previousId","currentId","ControlsUtils","parsedControls","recording","meetingContainer","meetingContainerUrl","manualCaptionControl","entryExitTone","videoEnabled","muteOnEntry","shareControl","control","showDisplayNameWithReactions","viewTheParticipantList","raiseHand","getControls","oldControls","newControls","_current$muteOnEntry","_previous$muteOnEntry","_current$shareControl","_previous$shareContro","_current$disallowUnmu","_previous$disallowUnm","_current$reactions","_previous$reactions","_current$reactions2","_previous$reactions2","_current$viewTheParti","_previous$viewThePart","_current$raiseHand","_previous$raiseHand","_current$video","_previous$video","_previous$record","_previous$record2","_current$record","_previous$record3","_current$record2","_previous$record4","_current$record3","_previous$meetingCont","_current$meetingConta","_previous$transcribe","_current$transcribe","_previous$transcribe2","_current$transcribe2","_previous$manualCapti","_current$manualCaptio","_previous$manualCapti2","_current$manualCaptio2","_newControls$video","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasRecordingPausedChanged","hasRecordingChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasInterpretationChanged","hasVideoEnabledChanged","isNeedReplaceMembers","groupId","getSessionSwitchStatus","isReturnToMain","isJoinToBreakout","sessionType","isMainSessionDTO","_locus$controls","_locus$controls$break","EmbeddedAppsUtils","SLIDO_REGEX","parseApp","embeddedApp","_parsedApp$instanceIn","parsedApp","instanceInfo","appInstanceUrl","areSimilar","apps1","apps2","embeddedApps","MediaSharesUtils","mediaShares","beneficiaryId","getContentBeneficiaryId","disposition","getContentDisposition","annotation","getContentAnnotation","getContentUrl","shareInstanceId","getShareInstanceId","deviceUrlSharing","getContentBeneficiaryDeviceUrl","resourceType","getContentResourceType","whiteboard","getWhiteboardBeneficiaryId","getWhiteboardDisposition","getWhiteboardResourceUrl","oldShare","newShare","contentFloor","extractContentFloor","whiteboardFloor","extractWhiteboardFloor","mediaStream","extractContent","extractFloor","extractWhiteboard","beneficiary","_taggedTemplateLiteral","SortedQueue","compareFunc","existingItem","Parser","_Parser$loci","loci","LT","GT","extractComparisonState","isSequenceEmpty","compareSequence","baseSequence","onDeltaAction","workingCopy","syncTimer","incomingFullDto","isLoci","compareFullDtoSequence","USE_INCOMING","newLoci","processDeltaEvent","triggerSync","stopSyncTimer","DESYNC","_Parser$loci2","WAIT","LOCUS_URL_CHANGED","isValidLocus","lociComparison","needToWait","startSyncTimer","locus2string","_locus$sequence","comparison","currentIsNotUnique","incomingIsNotUnique","currentTotalRange","incomingTotalRange","EQ","currentIsUnique","incomingIsUnique","currentUniqueMin","incomingUniqueMin","currentHasNoRange","incomingHasNoRange","neitherSeqHasRange","hasUniqOverlap","currentUniqOverlap","incomingUniqOverlap","debugInfo","packComparisonResult","compareDelta","compareToAction","_Parser$loci3","USE_CURRENT","getMetaData","delta","getUniqueSequences","_rules","checkSequenceOverlap","checkUnequalRanges","checkForUniqueEntries","checkIfOutOfSync","rule","_Parser$loci4","lociComparisonResult","rangeStart","rangeEnd","baseLoci","otherLoci","getNumbersOutOfRange","_sequence$entries","hasEmptyEntries","hasEmptyRange","hasProp","newData","oldData","debugCode","mStr","resolutionMap","debugObj","SO001","_templateObject","logic","SO002","_templateObject2","UR001","_templateObject3","UR002","_templateObject4","UR003","_templateObject5","UE001","_templateObject6","UE002","_templateObject7","OOS001","_templateObject8","OOS002","_templateObject9","OOS003","_templateObject10","LocusInfo","updateMeeting","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","isDelta","syncUrl","getLocusDTO","onFullLocus","_LocusDeltaParser$loc","onDeltaLocus","doLocusSync","parsedLoci","applyLocusDeltaData","onDeltaEvent","_locus$links","scheduledMeeting","aclUrl","membership","identities","deltaParticipants","updateLocusCache","updateParticipants","updateConversationUrl","updateControls","updateLocusUrl","updateFullState","updateMeetingInfo","updateEmbeddedApps","updateSelf","updateHostInfo","updateMediaShares","updateServices","getTheLocusToUpdate","isNewFullLocus","updateParticipantDeltas","isReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","emitScoped","_locus$self","_locus$self2","_locus$links2","updateCreated","updateParticipantsUrl","updateReplace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","getLocusPartner","shouldLeave","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","canAssignHost","existingParticipant","findParticipant","deltas","generateDelta","isReplace","_this$parsedLocus$con","recordingId","_ControlsUtils$getCon","_ControlsUtils$getCon2","getFullState","previousState","parsedHosts","getHosts","_this$parsedLocus$sel","parsedInfo","getInfos","isInitializing","parsedEmbeddedApps","parsedMediaShares","getMediaShares","parsedSelves","_parsedSelves$previou","_parsedSelves$current","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","selfParticipantId","oldRoles","newRoles","shareStatus","updateMainSessionLocusCache","newLocus","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","mainSessionLocusCache","clearMainSessionLocusCache","sourceParticipants","existIndex","mainLocus","locusClone","_assignWith","objValue","srcValue","mergeParticipants","ReconnectionError","ReconnectionNotStartedError","_ReconnectionError","NeedsRetryError","NeedsRejoinError","wasSharing","_ref$error","ReconnectionManager","disconnected","timeoutDuration","rejoinAttempts","autoRejoinEnabled","_reconnectMercuryWebSocket","_reconnectMedia","_rejoinMeeting","_executeReconnection","_stopLocalShareStream","resetReconnectionTimer","unpublishStreams","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","canStartReconnection","startReachability","executeReconnection","t1","rejoinMeeting","recoveredBy","t2","_ref3$networkDisconne","stopLocalShareStream","reconnectMercuryWebSocket","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","reconnectMedia","_args4","rejoin","_turnServerResult$tur","turnServerResult","mediaRequestManagers","mediaRequestManager","clearPreviousRequests","commit","_objectWithoutProperties","sourceKeys","sourceSymbolKeys","MeetingRequest","_joinMeeting","otherAttrs","_excluded","locusDeltaRequest","changeVideoLayoutDebounced","changeVideoLayout","leading","trailing","ensureConversation","_options$deviceCapabi","clusterUrl","getJoinCookie","usingResource","moveMediaToResource","respOnlySdp","allowMultiDevice","supportsNativeLobby","clientMediaPreferences","ipver","regionCode","invitee","callPreferences","requestedMedia","localMedias","captchaRefreshUrl","dialInUrl","clientUrl","provisionalType","dialOutUrl","dialoutAddress","prepareLeaveMeetingRequestOptions","floorReq","personUrl","requester","resourceToken","annotationInfo","layoutType","renderInfoMain","renderInfoContent","layoutParams","renderInfo","keepAliveUrl","reactionChannelUrl","participantId","requestingParticipantId","ServerRoles","MemberUtil","canReclaimHostRole","_participant$controls","_participant$controls2","controlRole","_MemberUtil$getContro","getControlsRoles","Cohost","Moderator","Presenter","cohost","hasCohost","hasModerator","presenter","hasPresenter","moderatorAssignmentNotAllowed","associatedUsers","isGuest","_participant$controls3","_participant$controls4","hand","raised","doesNotSupportBreakouts","doesNotSupportSiInterpreter","annotatorAssignmentNotAllowed","statusAccessor","controlsAccessor","_participant$controls5","_participant$controls6","_participant$status","localStatus","localRecord","isSelf","isDevice","_participant$status2","_participant$status3","Member","canReclaimHost","isAudioMuted","isVideoMuted","isHandRaised","supportsBreakouts","supportLiveAnnotation","isHost","isInLobby","isNotAdmitted","isContentSharing","isUser","associatedUser","isRecording","isMutable","isRemovable","isModeratorAssignmentProhibited","processParticipant","processParticipantOptions","processMember","extractId","extractName","isBreakoutsSupported","supportsInterpretation","isInterpretationSupported","isLiveAnnotationSupported","processStatus","processRoles","processIsSelf","processIsHost","processIsContentSharing","contentSharingId","processType","processIsRecording","extractMediaStatus","extractStatus","sharingId","isSame","isAssociatedSame","extractControlRoles","ReclaimHostEmptyWrongKeyError","ReclaimHostNotSupportedError","ReclaimHostNotAllowedError","ReclaimHostIsHostAlreadyError","MembersCollection","MembersUtil","generateAddMemberOptions","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","getAdmitMemberRequestBody","sessionLocusUrls","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","mainLocusUrl","getAddMemberRequestParams","isInvalidInvitee","getRemoveMemberRequestParams","memberId","generateTransferHostMemberOptions","transfer","generateRemoveMemberOptions","removal","generateMuteMemberOptions","isAudio","generateRaiseHandMemberOptions","generateRoleAssignmentMemberOptions","generateLowerAllHandsMemberOptions","generateEditDisplayNameMemberOptions","getMuteMemberRequestParams","getAddedRoleShape","roleShape","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","generateSendDTMFRequestParams","cancelPhoneInviteOptions","generateCancelInviteRequestParams","MembersRequest","_options$invitee","Members","membersRequest","membersCollection","mediaShareContentId","mediaShareWhiteboardId","receiveSlotManager","newSelfId","oldSelfId","theSelf","setIsSelf","notSelf","activeSelfId","endedSelfId","newHostId","oldHostId","theHost","setIsHost","notHost","activeHostId","endedHostId","_this$receiveSlotMana","clearMembers","handleLocusInfoUpdatedParticipants","handleMembersUpdate","updateMemberIds","_payload$current","_payload$previous","_payload$current2","_payload$previous2","currentContent","previousContent","currentWhiteboard","previousWhiteboard","whoSharing","whoStopped","shareMember","setIsContentSharing","stopMember","activeSharingId","endedSharingId","setLocusUrl","setType","membersUpdate","updated","constructMembers","added","contentId","contentMediaShare","mediaShare","whiteboardId","whiteboardMediaShare","hideInRoster","whiteboardSharingId","addMembers","cancelPhoneInvite","admitMember","removeMember","assignRolesMember","_error$body","raiseOrLowerHandMember","requestingMemberId","lowerAllHandsMember","transferHostToMember","sendDialPadKey","_member$participant","_member$participant$d","_device$csis","memberCsi","_this$membersCollecti","_this$membersCollecti2","_this$membersCollecti3","_device$mediaSessions","deviceCsis","mediaSession","editDisplayNameMember","MEETING_KEY","MeetingsUtil","_data$message","message_type","error_type","error_cause","_data$message$sdps","mediaServer","foundDevice","userPreferences","_userPreferences$site","sites","defaultSite","siteUrl","hasCodec","checkH264Support","_checkH264Support","firstChecked","disableNotifications","shouldTrigger","shouldStopChecking","getThisDevice","_newLocus$self","_newLocus$self$device","joinedOnThisDevice","thisDevice","isBreakoutLocusDTO","_newLocus$controls","_newLocus$controls$br","isValidBreakoutLocus","_locus$fullState","inActiveStatus","isLocusAsBreakout","selfJoined","RecordingAction","canUserStart","SUPPORT_NETWORK_BASED_RECORD","canUserPause","canUserResume","canUserStop","deriveRecordingStates","Resume","Pause","extractLocusId","Setting","Control","Utils","requiredHints","requiredPolicies","_config$policies","properties","hasHints","determinant","canUpdateAudio","canUpdateRaiseHand","canUpdateReactions","canUpdateShareControl","canUpdateVideo","canUpdateViewTheParticipantsList","MediaUtil","filtredTracks","Reactions","smile","codepoints","shortcodes","sad","wow","haha","celebrate","clap","thumb_up","thumb_down","heart","fire","prayer","speed_up","slow_down","SkinTones","normal","light","medium_light","medium","medium_dark","dark","_classExtractFieldDescriptor","privateMap","receiveSlotCounter","_memberId","_csi","mcReceiveSlot","findMemberIdCallback","_classPrivateFieldInitSpec","_classPrivateFieldSet","setupEventListeners","_classPrivateFieldGet","newFs","WcmeReceiveSlotEvents","ReceiveSlotManager","createSlotCallback","findMemberIdByCsiCallback","allocatedSlots","freeSlots","_allocateSlot","availableSlot","wcmeReceiveSlot","allocatedSlot","numAllocatedSlots","numFreeSlots","findMemberId","_r$wcmeReceiveSlot","_r$wcmeReceiveSlot$id","SendSlotManager","_deleteCodecParameters","_setCodecParameters","_unpublishStream","_publishStream","slots","codecParameters","RemoteMediaEvents","getMaxFs","paneSize","remoteMediaCounter","RemoteMedia","_this$receiveSlot","setMaxFs","_this$receiveSlot2","cancelMediaRequest","mediaRequestId","addRequest","policyInfo","cancelRequest","_this$receiveSlot3","_this$receiveSlot4","_this$receiveSlot5","_this$receiveSlot6","_this$receiveSlot7","CODEC_DEFAULTS","MediaRequestManager","sendMediaRequestsCallback","clientRequests","trimRequestsToNumOfSources","sourceUpdateListener","debouncedSourceUpdateListener","maxFsLimits","totalMacroblocksRequested","mr","preferredMaxFs","slotsWithLiveSource","streamRequestA","streamRequestB","newRequests","previousStreamRequests","mediaRequest","FB_MONO_MUSIC","GET_MAX_BITRATE_FAILED","expectedHeight","getRecommendedMaxBitrateForFrameSize","getPreferLiveVideo","numStreamsAvailable","trimmedCount","cloneClientRequests","trimRequests","getDegradedClientRequests","ReceiverSelected","getMaxPayloadBitsPerSecond","WcmeCodecInfo","getH264MaxMbps","checkIsNewRequestsEqualToPrev","newId","handleMaxFs","RemoteMediaGroup","commitMediaRequest","unpinnedRemoteMedia","pinnedRemoteMedia","sendActiveSpeakerMediaRequest","remoteMediaCsis","remoteMedia","unpinId","sendMediaRequest","pinId","cancelActiveSpeakerMediaRequest","targetCsi","_this$options","_this$options$namedMe","_this$options2","namedMediaGroup","getUnderlyingReceiveSlot","DefaultConfiguration","numOfActiveSpeakerStreams","numOfScreenShareStreams","initialLayoutId","AllEqual","activeSpeakerVideoPaneGroups","numPanes","OnePlusFive","Single","Stage","memberVideoPanes","ScreenShareView","RemoteMediaManager","_addMemberVideoPane","_updateVideoReceiveSlots","_refillRequiredSlotsIfNeeded","_createScreenShareReceiveSlots","_createInterpretationAudioMedia","_createAudioMedia","_setReceiveNamedMediaGroup","_setLayout","_preallocateVideoReceiveSlots","si","activeSpeakerGroups","memberPanes","screenShare","checkConfigValidity","unused","activeSpeaker","receiverSelected","receiveSlotAllocations","_layout$activeSpeaker","_layout$memberVideoPa","groupIds","paneIds","groupPriorites","pane","createAudioMedia","createScreenShareReceiveSlots","createScreenShareAudioMedia","preallocateVideoReceiveSlots","setLayout","_this$slots$video$unu","_this$slots$video$unu2","invalidateCurrentRemoteMedia","releaseSlot","releaseUnusedVideoSlots","currentLayout","currentLayoutId","_layout$activeSpeaker2","_layout$memberVideoPa2","paneGroup","maxNumVideoPanesRequired","maxValue","getRequiredNumVideoSlotsForLayout","allocateSlot","layoutId","updateVideoReceiveSlots","updateVideoRemoteMediaObjects","updateScreenShareVideoRemoteMediaObject","emitVideoLayoutChangedEvent","activeSpeakerGroup","setPreferLiveVideo","remoteMediaGroup","groupRemoteMediaCsis","setActiveSpeakerCsis","languageId","_this$config$namedMed","createInterpretationAudioMedia","setNamedMediaGroup","AudioCreated","commitRequest","_this$config$namedMed2","_this$config$namedMed3","InterpretationAudioCreated","ScreenShareAudioCreated","_this$currentLayout","_this$currentLayout$m","_this$slots$video$unu3","requiredCsis","memberVideoPane","notNeededReceiverSelectedSlots","_remove","_this$currentLayout2","_this$currentLayout2$","_this$currentLayout2$2","paneIndex","freeSlot","_this$currentLayout3","_this$currentLayout3$","memberPane","existingSlot","isExistingSlotAlreadyAllocated","requiredNumSlots","totalNumSlots","numSlotsToCreate","_this$slots$video$unu4","logMessage","groupName","logString","_this$slots$screenSha","logMainVideoReceiveSlots","logMainAudioReceiveSlots","logSlidesVideoReceiveSlots","logSlidesAudioReceiveSlots","trimActiveSpeakerSlots","trimReceiverSelectedSlots","refillRequiredSlotsIfNeeded","allocateSlotsToActiveSpeakerPaneGroups","allocateSlotsToReceiverSelectedVideoPaneGroups","_this7$currentLayout","_this7$currentLayout$","paneGroupInCurrentLayout","groupInLayout","mediaGroup","_this7$currentLayout2","_this7$currentLayout3","_Object$entries3$_i","_Object$entries3","_i2","paneId","paneInCurrentLayout","paneInLayout","_this$currentLayout4","_this$media$screenSha","VideoLayoutChanged","activeSpeakerVideoPanes","getRemoteMedia","newPane","_this$currentLayout5","_this$currentLayout$m2","_this$currentLayout$m3","unpin","isPinned","BreakoutEditLockedError","boServiceErrorHandler","_throwError","_BREAKOUTS$ERROR_CODE","BreakoutRequest","recipientRoles","cohosts","presenters","getBroadcastRoles","breakoutEvent","onBreakoutMoveRequest","eventInfo","postMoveCallAnalyzer","onBreakoutMoveResponse","onBreakoutJoinResponse","_eventInfo$meeting$me","_eventInfo$currentSes","_eventInfo$currentSes2","breakoutSessionId","currentSession","breakoutGroupId","Breakout","breakoutRequest","assigned","assignedCurrent","requestedLastModifiedTime","breakoutRosterLocus","mainSession","askForHelp","initMembers","isNeedHandleRoster","_this$breakoutRosterL","_this$breakoutRosterL2","_this$breakoutRosterL3","_locus$sequence$entri","prevSequence","parseRoster","locusParticipantsUpdate","broadcast","Breakouts","BreakoutCollection","allowBackToMain","delayCloseTime","enableBreakoutSession","hasBreakoutPreAssignments","breakoutServiceUrl","manageGroups","preAssignments","editLock","intervalID","canManageBreakouts","currentBreakoutSession","isInMainSession","isActiveBreakout","_this$manageGroups","breakoutStatus","_this$groups","_this$groups$","shouldQueryPreAssignments","queryPreAssignments","debouncedQueryRosters","queryRosters","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBreakoutRosters","listenToBreakoutHelp","hasSubscribedToMessage","locusUrlUpdate","listenToBroadcastMessages","updateCanManageBreakouts","breakoutServiceUrlUpdate","rosters","handleRosterUpdate","newSessionType","isSessionTypeChangedFromSessionToMain","_event$data","senderUserId","sentTime","_event$data2","isBreakoutInProgress","_this$groups2","_this$groups2$","currentStatus","isBreakoutIClosing","_this$groups3","_this$groups3$","updateBreakout","clearBreakouts","updateBreakoutSessions","modifiedAt","getMainSession","askAllToReturn","enableBreakouts","toggleBreakout","doToggleBreakout","editlock","_setManageGroups","breakoutInfo","_breakoutInfo$body","_clearEditLockInfo","clearSessions","allowToJoinLater","unlockEdit","_this13$editLock","_breakout$body","_breakout$body$editlo","keepEditLockAlive","enableAndLockBreakout","lockBreakout","hasBreakoutLocked","_breakout$body2","unLockEditBreakout","internalSessions","assignedEmails","anyoneCanJoin","anyone","_result$body","dynamicAssign","updatedSessions","targetState","languageName","SILanguage","SimultaneousInterpretation","SILanguageCollection","approvalUrl","originalLanguage","sourceLanguage","targetLanguage","receiveLanguage","isActive","canManageInterpreters","supportLanguages","meetingSIEnabled","selfIsInterpreter","shouldQuerySupportLanguages","querySupportLanguages","listenToHandoffRequests","approvalUrlUpdate","updateCanManageInterpreters","updateSelfInterpretation","preTargetLanguage","getTargetLanguageCode","_this$siLanguages$get","getInterpreters","updateInterpreters","interpreters","changeDirection","_event$data$approval","approval","_receivers$","_event$data$approval2","initiator","isReceiver","handoffInterpreter","requestHandoff","acceptRequest","declineRequest","ANNOTATION_RESOURCE_TYPE","ANNOTATION_RELAY_TYPES","ANNOTATION_REQUEST_TYPE","ANNOTATION_ACTION_TYPE","AnnotationChannel","requestData","toUserId","toDeviceUrl","strokeData","publishEncrypted","decryptedContent","_e$data","_e$data2","_e$data2$approval","_e$data3","_e$data3$approval","_e$data4","processStrokeMessage","eventCommandProcessor","eventDataProcessor","sendAnnotationAction","CANCELED","requesterId","filterMessage","WebinarCollection","webinarInfo","webinar","webcastUrl","webinarAttendeesSearchingUrl","canManageWebcast","webcastUrlUpdate","webinarAttendeesSearchingUrlUpdate","updateCanManageWebcast","InMeetingActions","canSetMuteOnEntry","canUnsetMuteOnEntry","canSetDisallowUnmute","canSetMuted","canUnsetMuted","canSetPresenter","canUnsetPresenter","canUnsetDisallowUnmute","canStartRecording","canPauseRecording","canResumeRecording","canStopRecording","canRaiseHand","canLowerAllHands","canLowerSomeoneElsesHand","canMuteAll","canUnmuteAll","canEnableHardMute","canDisableHardMute","canEnableMuteOnEntry","canDisableMuteOnEntry","canEnableReactions","canDisableReactions","canEnableReactionDisplayNames","canDisableReactionDisplayNames","canEnableViewTheParticipantsList","canDisableViewTheParticipantsList","canEnableRaiseHand","canDisableRaiseHand","canEnableVideo","canDisableVideo","canShareFile","canShareApplication","canShareCamera","canShareDesktop","canShareContent","canTransferFile","canChat","canDoVideo","canAnnotate","canUseVoip","enforceVirtualBackground","supportHQV","supportHDV","actionKey","actionValue","REACTION_RELAY_TYPES","RecordingController","Util","hints","selfUserPolicies","setServiceUrl","setSessionId","setDisplayHints","locusSessionId","recordingService","recordingControls","recordingFacade","ControlsOptionsManager","canUpdate","setting","shouldSkipCheckToMergeBody","setControls","mutedEnabled","disallowUnmuteEnabled","muteOnEntryEnabled","InternalRequestInfo","pendingPromise","sendRequestFn","pendingPromises","_this$pendingPromises","isRequestAffectingConfluenceState","LocusMediaRequest","isRequestInProgress","queuedRequests","confluenceState","addPendingPromises","getPendingPromises","nextRequest","executeNextQueuedRequest","latestAudioMuted","latestVideoMuted","_this$getLatestMuteSt","getLatestMuteState","_request$muteOptions","newRequest","sendHttpRequest","addToQueue","_defer","ConnectionStateEvent","handleConnectionStateChange","newConnectionState","DEFAULT_ICE_PHASE_CALLBACK","logRequest","_ref$logText","logText","MEDIA_UPDATE_TYPE","ScreenShareFloorStatus","Meeting","_handleDeviceLogging","_unpublishStreams","_publishStreams","_enableMusicMode","_updateMedia","_addMediaInternal","_cleanUpBeforeRetryWithTurnServer","_cleanUpOnAddMediaFailure","_establishMediaConnection","_handleWaitForMediaConnectionConnectedError","_retryWithForcedTurnDiscovery","_retryEstablishMediaConnectionWithForcedTurnDiscovery","_waitForRemoteSDPAnswer","_waitForMediaConnectionConnected","_setUpLocalStreamReferences","_createMediaConnection","_updateLLMConnection","_join","_startTranscription","_joinWithMedia","_setLocalShareAudioStream","_setLocalShareVideoStream","_setLocalVideoStream","_setLocalAudioStream","_refreshPermissionToken","_fetchMeetingInfoInternal","_injectMeetingInfo","_attrs$callStateForMe","_this$locusInfo","_this$locusInfo$links","_this$locusInfo$links2","_this$locusInfo$links3","_this$locusInfo2","_this$locusInfo2$full","_this$locusInfo3","_this$locusInfo4","VOICEAEVENTS","transcription","languageOptions","_data$text","commandText","_data$transcripts","transcriptsPerCsis","_transcriptsPerCsis$g","_transcriptsPerCsis$g2","currentSpokenLanguage","transcript_language_code","csisMember","newCaption","interimTranscriptionIds","_meeting$transcriptio","_meeting$transcriptio2","_meeting$transcriptio3","_meeting$transcriptio4","_data$transcripts$","_step2$value","_getSpeakerFromProxyO","interimId","captionData","translations","currentCaptionLanguage","interimCaptions","innerInterimId","interimTranscriptIndex","captions","processNewCaptions","receiveReactions","isReactionsSupported","processedReaction","handleLLMOnline","_error$cause","getMediaServer","deferSDPAnswer","sdpResponseTimer","setupSdpListeners","isRoapInProgress","mediaNegotiatedEvent","processNextQueuedMediaUpdate","handleRoapFailure","sendRoapMediaRequest","CALL_DIAGNOSTIC_CONFIG","sendRoapAnswer","sendRoapError","mediaTrack","remoteStream","createMediaStream","setRemoteAudioStream","setRemoteVideoStream","setRemoteShareStream","connectionFailed","networkStatus","hasMediaConnectionConnectedAtLeastOnce","uploadLogs","icePhase","setNetworkStatus","iceReconnected","waitForIceReconnect","_this$members$findMem","findMemberByCsi","setNumCurrentSources","iceCandidateErrors","iceCandidatesCount","localShareInstanceId","remoteShareInstanceId","callFrom","_this$mediaProperties","_this$mediaProperties2","canUpdateMedia","queuedMediaUpdates","_this$queuedMediaUpda","pendingPromiseResolve","pendingPromiseReject","mediaUpdateType","mediaUpdate","updateTranscodedMediaConnection","requestScreenShareFloor","updateMedia","wirelessShare","_this$statsAnalyzer","triggerStoppedSharing","hasLocalShareStream","screenShareFloorState","stopTranscription","_this$joinedWith","_this$joinedWith2","keepAliveTimerId","keepAliveSecs","keepAliveInterval","keepAlive","Annotation","Webinar","_this$mediaProperties3","_this$members$findMem2","mediaRequests","meetingFiniteStateMachine","fetchMeetingInfoTimeoutId","inMeetingActions","callEvents","floorGrantPending","dialInDeviceStatus","dialOutDeviceStatus","updateMeetingObject","deferJoin","hasWebsocketConnected","lastVideoLayoutInfo","showCaptionBox","transcribingRequestStatus","isCaptioning","meetingInfoFailureReason","meetingInfoFailureCode","recordingController","controlsOptionsManager","setUpLocusInfoListeners","hasJoinedOnce","remoteMediaManager","localAudioStreamMuteStateHandler","_this$audio","handleLocalStreamMuteStateChange","localVideoStreamMuteStateHandler","_this$video","localOutputTrackChangeHandler","addMediaData","retriedWithTurnServer","icePhaseCallback","joinWithMediaRetryInfo","isRetry","prevJoinResponse","_this$joinedWith3","updateMeetingActions","fetchParams","prepForFetchMeetingInfo","parseMeetingInfo","caller","_ref7$password","_ref7$captchaCode","captchaCode","_ref7$extraParams","meetingInfoExtraParams","_ref8$password","_ref8$captchaCode","_ref8$extraParams","_ref8$sendCAevents","meetingInfoProvider","refreshCaptcha","_this$meetingInfo","isStartingSpaceInstantV2Meeting","permissionTokenExpiryInfo","timeLeft","expiryTime","getPermissionTokenExpiryInfo","fetchMeetingInfoInternal","isPasswordValid","failureReason","setUpLocusInfoSelfListener","setUpLocusInfoMeetingListener","setUpLocusServicesListener","setUpLocusFullStateListener","setUpLocusUrlListener","setUpLocusHostListener","setUpLocusSelfListener","setUpLocusParticipantsListener","setupLocusControlsListener","setUpLocusMediaSharesListener","setUpLocusEmbeddedAppsListener","setUpLocusInfoMeetingInfoListener","setUpLocusInfoAssignHostListener","setUpLocusInfoMediaInactiveListener","setUpBreakoutsListener","setUpInterpretationListener","messageEvent","helpEvent","voicea","voiceaListenerCallbacks","areVoiceaEventsSetup","locusFullStateTypeUpdate","locusSelfUpdate","pstnUpdate","requestScreenShareFloorIfPending","_payload$newSelf","_payload$newSelf2","dialInPstnDevice","dialOutPstnDevice","_dialInPstnDevice$dia","newStatus","dialingStatus","_dialOutPstnDevice$di","dialIn","attendeeId","dialOut","locusHostUpdate","startTranscription","contentShare","previousContentShare","whiteboardShare","previousWhiteboardShare","newShareStatus","oldShareStatus","sendStartedSharingRemote","_this14$mediaProperti","triggerAnnotationInfoEvent","locusMediaSharesUpdate","_this15$locusUrl","_payload$services","_payload$services$rec","_this16$locusInfo","_this16$locusInfo$ful","_payload$services2","_payload$services2$br","_payload$services3","_payload$services3$ap","_payload$services4","_payload$services4$ap","_payload$services5","_payload$services5$we","_payload$services6","_payload$services6$we","webcast","webinarAttendeesSearching","_ref24","setUserPolicy","handleDataChannelUrlChange","handleServerLocalUnmuteRequired","_payload$muted","_payload$unmuteAllowe","isRemotelyMuted","handleServerRemoteMuteUpdate","_this19$audio","startKeepAlive","_ref25","_this19$mediaProperti","_this19$audio2","_this19$mediaProperti2","_this19$video","_this19$mediaProperti3","_this19$mediaProperti4","_this19$mediaProperti5","_this19$mediaProperti6","targetChanged","setSendNamedMediaGroup","_payload$newRoles","_payload$newRoles2","_payload$newRoles3","_payload$newRoles4","isModeratorOrCohost","_ref26","setLocalShareVideoStream","setLocalShareAudioStream","addMember","locusUrls","_this$breakouts","admitMembers","locusMeetingObject","_locusMeetingObject","_locusMeetingObject2","_locusMeetingObject3","_locusMeetingObject4","_locusMeetingObject6","_locusMeetingObject7","_locusMeetingObject5","setSipUri","setPermissionTokenPayload","setSelfUserPolicies","_this$meetingInfo2","_this$meetingInfo3","_this$meetingInfo4","_this$meetingInfo4$vi","_this$meetingInfo5","_this$meetingInfo5$vi","supportVoIP","ControlsOptionsUtil","hasPolicies","SUPPORT_VOIP","arePolicyRestrictionsSupported","SUPPORT_VIDEO","SUPPORT_HDV","ENFORCE_VIRTUAL_BACKGROUND","SUPPORT_HQV","RecordingUtil","SUPPORT_FILE_SHARE","SUPPORT_FILE_TRANSFER","SUPPORT_CHAT","SUPPORT_APP_SHARE","SUPPORT_CAMERA_SHARE","SUPPORT_DESKTOP_SHARE","SUPPORT_ANNOTATION","_this$permissionToken","_this$permissionToken2","_this$permissionToken3","_this$permissionToken4","permissionTokenPayload","enforceVBGImagesURL","jwtDecode","permissionTokenReceivedLocalTime","mtgLocus","initialSetup","_this$mediaProperties4","stopStream","_this$audio2","setLocalAudioStream","handleLocalStreamChange","_x11","_callee12","_this$video2","setLocalVideoStream","_x12","_callee13","handleShareVideoStreamMuteStateChange","handleShareVideoStreamEnded","_x13","_callee14","_context14","handleShareAudioStreamEnded","_x14","functionName","isPublished","_this$mediaProperties5","emitPublishStateChangeEvent","sendSlotManager","unsetPeerConnection","enqueueMediaUpdate","handleClientRequest","_callee15","mediaOptions","_options$joinOptions","_this$joinWithMediaRe","joined","joinResponse","forceTurnDiscovery","turnDiscoveryRequest","_yield$this$roap$hand","mediaResponse","_this$locusUrl","_leaveError","leaveError","shouldRetry","_args15","_context15","abortTurnDiscovery","addMediaInternal","leaveErrorReason","joinWithMedia","_callee16","_context16","waitForRemoteSDPAnswer","_this$locusInfo$contr","_this$locusInfo5","_this$locusInfo5$cont","isTranscriptionSupported","voiceaListenerCaptionUpdate","requestLanguage","voiceaListenerLanguageUpdate","setSpokenLanguage","_callee17","_context17","setUpVoiceaListeners","_x15","triggerStopReceivingTranscriptionEvent","_callee18","joinFailed","joinSuccess","_errorMessage","_error","_errorMessage2","_error2","_args18","_context18","setCorrelationId","joinTrigger","isRoapCallEnabled","pstnAudioType","ring","meetingQuality","setRemoteQualityLevel","enableMultistream","checkAndRefreshPermissionToken","setupLocusMediaRequest","_this32$meetingInfo","_error$error","_callee19","_this$locusInfo6","_this$locusInfo6$info","_context19","getDatachannelUrl","disconnectLLM","processRelayEvent","registerAndConnect","registerAndConnectResult","dialOutPstn","dialInPstn","pstnStatus","isPhoneProvisioned","_error$error2","dial_in_url","client_url","_error$error3","dial_out_url","mediaCapabilities","share_audio","tx","_callee20","_context20","releaseScreenShareFloor","setMediaDirection","addMedia","audioEnabled","shareVideoEnabled","isMoveToInProgress","oldCorrelationId","_callee21","mc","shareEnabled","_context21","getMediaConnectionDebugId","setMediaPeerConnection","setupMediaConnectionListeners","createSlot","_x16","_x17","eventEmitter","eventTypeToForward","meetingEventType","_this38","_callee22","localStreams","_localStreams$microph","_localStreams$camera","_localStreams$screenS","_localStreams$screenS2","_localStreams$screenS3","_localStreams$screenS4","_localStreams$screenS5","_localStreams$screenS6","setUpStreamPromises","_context22","microphone","camera","_x18","_callee23","_this$mediaProperties6","_this$mediaProperties7","_this$mediaProperties8","_this$mediaProperties9","_this$mediaProperties10","_this$mediaProperties11","_this$mediaProperties12","_context23","t3","t4","t5","t6","t7","t8","isWebexMediaBackendUnreachable","t9","t10","t11","t12","t13","t14","t15","t16","t17","setupStatsAnalyzerEventHandlers","sendNetworkQualityEvent","_callee24","_this39","_context24","_callee25","remoteMediaManagerConfig","_context25","establishMediaConnection","_x19","_x20","_callee26","_context26","cleanUpBeforeRetryWithTurnServer","retryEstablishMediaConnectionWithForcedTurnDiscovery","_x21","_x22","_callee27","_context27","retryWithForcedTurnDiscovery","_x23","_x24","_x25","_callee28","_context28","getTurnDiscoveryTime","_x26","_x27","_callee29","_this$locusMediaReque","_yield$this$doTurnDis","_context29","isConfluenceCreated","RemoteMediaManagerEvent","handleMediaLogging","handleWaitForMediaConnectionConnectedError","_x28","_x29","_x30","_x31","_callee30","_context30","forceSendStatsReport","_callee31","_context31","_this40","_callee32","_options$audioEnabled","_options$videoEnabled","_options$shareAudioEn","shareAudioEnabled","_options$shareVideoEn","_this$remoteMediaMana","_yield$this$mediaProp","reachabilityStats","_this$mediaProperties13","_this$mediaProperties14","_this$mediaProperties15","_this$mediaProperties16","_this$mediaProperties17","_this$mediaProperties18","_this$mediaProperties19","_this$mediaProperties20","_this$mediaProperties21","_this$mediaProperties22","_this$mediaProperties23","_this$mediaProperties24","_this$mediaProperties25","_this$mediaProperties26","_this$mediaProperties27","_this$mediaProperties28","_this$mediaProperties29","_this$mediaProperties30","_this$mediaProperties31","_this$mediaProperties32","_this$mediaProperties33","reachabilityMetrics","_yield$this$mediaProp2","_selectedCandidatePairChanges","_numTransports","_args32","_context32","setUpLocalStreamReferences","setMercuryListener","createStatsAnalyzer","enqueueScreenShareFloorRequest","getCurrentConnectionInfo","getReachabilityMetrics","isJoinWithMediaRetry","logAllReceiveSlots","cleanUpOnAddMediaFailure","_x32","_x33","_x34","_this41","canUpdateMediaNow","queueItem","_callee33","_this$audio3","_this$video3","_context33","checkMediaConnection","setActive","_x35","_this42","acknowledgeMeeting","_this43","decline","_this44","leaveReason","submitLeaveMetric","clientEventLeaveReason","clearMeetingData","channelUrl","_this45","changeMeetingFloor","board","_this46","_this47","_this48","_content$floor","_this49","startRecording","setMuteOnEntry","setDisallowUnmute","setMuteAll","stopRecording","pauseRecording","resumeRecording","enableDTMF","sendDTMF","rejectWithErrorLog","_this50","_this$mediaProperties34","layoutInfo","mainWidth","mainHeight","contentWidth","contentHeight","_this51","reactionType","skinToneType","_this$locusInfo7","_this$locusInfo7$cont","_this$locusInfo7$cont2","reactionData","skinToneData","_this$locusInfo8","_this$locusInfo8$cont","_this$locusInfo8$cont2","toggleReactions","_this$mediaProperties35","_callee34","shouldEnableMusicMode","_context34","maxaveragebitrate","maxplaybackrate","_x36","_this$mediaProperties36","_this$mediaProperties37","_this$mediaProperties38","_this$mediaProperties39","_this$mediaProperties40","_this$mediaProperties41","_this$mediaProperties42","_this$mediaProperties43","_this52","_callee35","_context35","_x37","_x38","_callee36","_context36","_x39","_x40","_callee37","_streams$screenShare","_streams$screenShare2","_streams$microphone","_streams$camera","_streams$screenShare3","_streams$screenShare4","_streams$screenShare5","_streams$screenShare6","_streams$screenShare7","_streams$screenShare8","floorRequestNeeded","_streams$screenShare9","_context37","_x41","_callee38","_context38","_x42","permissionTokenExpiryFromServer","permissionTokenIssuedTimeFromServer","iat","shiftInTime","_this$getPermissionTo","refreshPermissionToken","_callee39","_context39","PersonalMeetingRoomUtil","pmrLink","hostPin","passcode","preferred","meetingAddress","PersonalMeetingRoomRequest","validPin","getClaimPmrPin","validLink","getClaimPmrLink","getClaimedRequestParams","PersonalMeetingRoom","personalMeetingRoomRequest","claimPmr","webExMeetingLink","meetingName","isPmr","ReachabilityRequest","measureLatency","JCSupport","_res$body","clusters","_res$body$clusterClas","_res$body$clusterClas2","isVideoMesh","clusterClasses","hybridMedia","localSDPList","offers","convertStunUrlToTurn","stunUrl","searchParams","convertStunUrlToTurnTls","ClusterReachability","clusterInfo","numUdpUrls","udp","numTcpUrls","tcp","numXTlsUrls","xtls","createPeerConnection","startTimestamp","udpIceServers","tcpIceServers","urlString","turnTlsIceServers","iceCandidatePoolSize","iceTransportPolicy","buildPeerConnectionConfig","peerConnectionError","closePeerConnection","finishReachabilityCheck","publicIP","ipAdded","clientMediaIPs","publicIp","latencyInMilliseconds","addPublicIP","CANDIDATE_TYPES","getElapsedTime","saveResult","haveWeGotAllResults","gatherIceCandidates","registerIceGatheringStateChangeListener","registerIceCandidateListener","Reachability","_performReachabilityChecks","_storeResults","_sendMetric","_isWebexMediaBackendUnreachable","_isAnyPublicClusterReachable","_getReachabilityResults","_getReachabilityMetrics","_gatherReachability","videoMesh","reachabilityRequest","clusterReachability","_yield$this$reachabil","getClusters","reachabilityDefer","performReachabilityChecks","updateStats","resultsJson","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","clusterType","outcome","transportResult","reachable","untested","allClusterResults","_mapValues","mapTransportResultToBackendDataFormat","reachabilityData","reachabilityResults","_result$udp","_result$tcp","protocols","tested","_result$protocol","_result$protocol2","unreachableList","getUnreachableClusters","expectedResultsCount","resultsCount","_this$reachabilityDef","vmnTimer","publicCloudTimer","logUnreachableClusters","average","_mean","vmn","getStatistics","areAllPublicClusterResultsReady","resolveReachabilityPromise","VIDEO_MESH_TIMEOUT","DEFAULT_TIMEOUT","overallTimer","abortClusterReachability","sendMetric","OVERALL_TIMEOUT","clusterList","isFirstResult","resetResultCounters","startTimers","storeResults","areAllResultsReady","determineRedirections","fetchClientRegionInfo","getMeetingPreferences","responseBody","remoteLocusClusterUrls","runWhitelistedDomains","MeetingCollection","breakoutUrl","_meeting$breakouts","_meeting$breakouts2","mediaLogger","NoMeetingInfoError","MediaLogger","_LoggerProxy$logger","_LoggerProxy$logger2","_LoggerProxy$logger3","_LoggerProxy$logger4","_LoggerProxy$logger5","_LoggerProxy$logger6","Meetings","_createMeeting","mediaHelpersModule","mediaHelpers","loggerRequest","LoggerRequest","personalMeetingRoom","_newLocus$self2","_newLocus$self3","_breakoutLocus$joined","_newLocus$self4","breakoutLocus","getActiveBreakoutLocus","isSelfJoined","isSelfMoved","deviceFromNewLocus","isResourceMovedOnThisDevice","isNewLocusJoinThisDevice","isBreakoutLocusJoinThisDevice","_breakoutLocus$joined2","_deviceFromNewLocus$r","breakoutReplaceAt","replaceAt","newLocusReplaceAt","_newLocus$self5","_newLocus$self6","_newLocus$self7","_newLocus$self7$devic","_newLocus$self7$devic2","_newLocus$self8","_newLocus$self8$devic","_newLocus$self8$devic2","_newLocus$fullState","_newLocus$self9","isNewLocusAsBreakout","isSelfMovedToLobby","isNeedHandleMainLocus","_data$locus$info","_data$locus","_data$locus$info2","checkForCorrelationId","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","_data$locus2","_data$locus2$replaces","useRandomDelayForInfo","getCorrespondingMeetingByLocus","isNeedHandleLocusDTO","newMeeting","checkHandleBreakoutLocus","handleLocusEvent","handleLocusMercury","handleRoapMercury","handleMercuryOffline","changeState","_this$config","_this$config$experime","_this$config2","_this$config2$experim","fetchUserPreferredWebexSite","getGeoHint","uploadResult","uploadError","getReachability","gatherReachability","fetchGeoHint","parseDefaultSiteFromMeetingPreferences","_getCatalog","addAllowedDomains","_user$userPreferences","_user$userPreferences2","userPreferencesItems","preferredWebExSite","infoExtraParams","failOnMissingMeetingInfo","targetDest","foundMeeting","setCallStateForMetrics","createMeeting","createdMeeting","_createdMeeting$locus","_createdMeeting$locus2","_createdMeeting$locus3","_createdMeeting$locus4","_createdMeeting$locus5","_createdMeeting$locus6","meetingInstance","_meetingInstance$locu","_meetingInstance$locu2","_meetingInstance$locu3","_meetingInstance$locu4","_meetingInstance$locu5","_meetingInstance$locu6","_destination$fullStat","waitingTime","startTimeDate","startTimeDatestamp","timeToStart","maxWaitingTime","meetingInfoOptions","meetingAddedType","_args3","injectMeetingInfo","getMeetingAddedType","_ref3$keepOnlyLocusMe","getActiveMeetings","locusArray","activeLocusUrl","sortLocusArrayToUpdate","meetingsCollection","_Object$values2","mainLoci","breakoutLoci","breakoutLocusForHandleLater","lociToUpdate","associateMainLocus","_mainLocus$controls","_mainLocus$controls$b","_breakoutLocus$contro","_breakoutLocus$contro2","existCorrespondingMeeting","newCreatedLocus","_breakoutLocus$contro3","_breakoutLocus$contro4","_newCreatedLocus$cont","_newCreatedLocus$cont2","associateBreakoutLocus","getActiveWebrtcMeeting","rateLimitExpiryTime","LocusRetryStatusInterceptor","hasRetriedLocusRequest","retryAfterTime","handleRetryRequestLocusServiceError","listWithReadStatus","deconstructedId","participantAckFilter","roomUUID","lastReadInfo","roomType","myId","isRoomHidden","participantInfo","personEmail","entryEmailAddress","personDisplayName","personOrgId","isMonitor","lastSeenId","lastSeenActivityUUID","lastSeenDate","lastSeenActivityDate","updateLastSeen","ack","getMembershipEvent","membershipCreatedEventData","membershipDeletedEventData","membershipUpdatedEventData","membershipSeenEventData","Memberships","verbToType","getRoomType","roomTags","altMessage","getMessageEvent","_activity$actor","objectId","roomUrl","combinedEvent","Messages","personResponse","notFoundIds","uuidOrHydraId","inferPersonIdFromUuid","showAllTypes","PeopleBatcher","_getMe","peopleIds","People","maxRecent","computeTitleIfEmpty","buildRoomInfoList","getWithReadStatus","buildRoomInfo","roomCreatedEvent","getRoomEvent","roomUpdatedEvent","creatorId","lastActivity","creatorUUID","_buildRoomInfo","lastActivityDate","roomInfo","computedTitle","lastReadableActivityDate","lastRelevantActivityDate","_buildRoomInfoList","roomReadInfo","roomInfoPromises","roomInfoList","Rooms","TeamMemberships","team","Teams","webhook","Webhooks","NotFoundError","_StorageError","StorageError","decider","initializeArgs","changeEvent","prepareInitialize","_Set","blockingKeys","waitFor","inited","identifyTarget","_identity","bindings","makeWebexStore","_class","WebexStore","storage","_getBinding","del","_binding","defers","serialized","makeWebexPluginStorage","WebexPluginStorage","_context$webex","initValue","_bind","makeWebexPluginStore","_this$webex","_this$webex2","when","_filterSetParameters","AuthInterceptor","requiresCredentials","requires","addAuthHeader","validateDomains","hasAllowedDomains","isAllowedDomainUrl","detectedUrl","canRefresh","replay","replayCount","maxAuthenticationReplays","NetworkTimingInterceptor","networkEnd","PayloadTransformerInterceptor","noTransform","requestHeaderName","responseHeaderName","RedirectInterceptor","samlUrl","tokenUrl","authorizeUrl","$redirectCount","_clone","maxAppLevelRedirects","maxLocusRedirects","RequestEventInterceptor","RequestLoggerInterceptor","onRequest","RequestTimingInterceptor","requestEnd","requestFail","ResponseLoggerInterceptor","printResponseHeader","_HttpError","writeable","_HttpError$BadRequest","UserAgentInterceptor","sequenceNumbers","WebexTrackingIdInterceptor","sq","requiresTrackingId","tid","WebexUserAgentInterceptor","libName","libVersion","_this$webex$config","idBrokerRegex","RateLimitInterceptor","isRateLimited","setRateLimitExpiry","extractRetryAfterTime","milliMultiplier","apiName","getApiName","expiry","currTimeMilli","dict","getRateLimitStatus","EmbargoInterceptor","loggerMessage","DefaultOptionsInterceptor","defaultRequestOptions","maxReconnectAttempts","trackingIdSuffix","AlternateLogger","authorizationString","WEBEX_AUTHORIZATION_STRING","AUTHORIZATION_STRING","WEBEX_AUTHORIZE_URL","WEBEX_CLIENT_ID","COMMON_IDENTITY_CLIENT_ID","CLIENT_ID","WEBEX_CLIENT_SECRET","COMMON_IDENTITY_CLIENT_SECRET","CLIENT_SECRET","redirect_uri","WEBEX_REDIRECT_URI","COMMON_IDENTITY_REDIRECT_URI","REDIRECT_URI","WEBEX_SCOPE","WEBEX_SCOPES","COMMON_IDENTITY_SCOPE","SCOPE","cisService","TOKEN_URL","revokeUrl","REVOKE_URL","logoutUrl","fedramp","ENABLE_FEDRAMP","discovery","hydra","u2c","servicesNotNeedValidation","allowedDomains","hydraServiceUrl","boundedAdapter","MemoryStoreAdapter","unboundedAdapter","_union","ENABLE_NETWORK_LOGGING","ServiceInterceptor","KmsDryErrorInterceptor","ConversationInterceptor","preInterceptors","postInterceptors","WebexInternalCore","_unset","bearerValidator","_this$credentials","shouldTransform","applyNamedTransform","onLoaded","addInterceptor","requestDefaults","_setTimingsAndFetch","setConfig","refresh_token","plugin","_this5$credentials","invalidate","_this5$authorization","measure","_this$metrics","sendUnstructured","_defaultsDeep","uploadProtocol","_uploadPhaseInitialize","_uploadPhaseUpload","_uploadPhaseFinalize","fileUploadSizeLimitInBytes","fileUploadSizeLimit","currentFileSizeInBytes","_uploadAbortSession","_uploadApplySession","abortErrorDetails","fileUploadSizeLimitInMB","phaseOptions","phaseKey","_State$prototype$_der","mixinWebexInternalCorePlugins","mixinWebexCorePlugins","wrapConsoleMethod","OAuthError","error_description","errorUri","error_uri","InvalidRequestError","_OAuthError","InvalidClientError","_OAuthError2","InvalidGrantError","_OAuthError3","UnauthorizedClientError","_OAuthError4","UnsupportGrantTypeError","_OAuthError5","InvalidScopeError","_OAuthError6","invalid_request","invalid_client","invalid_grant","unauthorized_client","unsupported_grant_type","invalid_scope","errorString","SCOPE_SEPARATOR","sortScope","filterScope","toFilter","toFilterArr","diffScopes","scopeA","scopeB","_scopeA$split","_scopeB$split","processGrantError","Token","isExpired","canDownscope","refreshCallback","expires","_isExpired","_string","refresh_token_expires","previousToken","downscope","grant_type","self_contained_token","revoke","token_type_hint","_this$_filterSetParam","_this$_filterSetParam2","_attrs$access_token$s","_attrs$access_token$s2","_dec6","userTokens","TokenCollection","jwtRefreshCallback","user_type","isRefreshing","getOrgId","extractOrgIdFromJWT","_this$supertoken","extractOrgIdFromUserToken","decodedJWT","realm","goto","calcRefreshTimeout","_reason$body","failReason","requestedScope","scheduleRefresh","updateCredentialsConfig","invalidScopes","tokenScope","timeoutLength","SERVICE_CATALOGS","SERVICE_CATALOGS_ENUM_TYPES","COMMERCIAL_ALLOWED_DOMAINS","defaultUrl","hosts","_generateHostUrl","hostUri","Url","_getHostUrls","_getPriorityHostUrl","filteredHosts","homeCluster","aliveHosts","failed","failHost","foundHost","hostObj","priorityHost","ServiceCatalog","serviceGroups","preauth","postauth","signin","collecting","_getUrl","serviceGroup","_listServiceUrls","_loadServiceUrls","_unloadServiceUrls","existingService","clean","findClusterId","serviceUrlObj","incomingUrlObj","_Object$keys2","findServiceFromClusterId","_ref$priorityHost","identifiedServiceUrl","findServiceUrlFromUrl","alternateUrl","findAllowedDomain","urlObj","allowedDomain","getAllowedDomains","serviceUrls","noPriorityHosts","setAllowedDomains","newAllowedDomains","updateServiceUrls","serviceHostmap","unusedUrls","serviceObj","ServiceUrl","ServiceHost","pto","catalog","defaultUri","hostGroup","replaced","ServiceRegistry","hostReference","removing","failing","catalogs","catalogId","mapCatalogName","currentHost","filterActive","filterCatalog","filterCluster","filterLocal","filterPriority","filterService","filterUrl","_this$hosts","validHosts","loadableHost","replacing","resetting","hostCatalog","serviceLinks","catalogIndex","ServiceState","generateCatalogState","trailingSlashes","CLUSTER_SERVICE","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","Services","registries","initFailed","_catalogs","_serviceUrls","_hostCatalog","getRegistry","getState","hasService","_updateServiceUrls","_updateHostCatalog","formattedQuery","forceRefresh","queryKey","emailhash","_fetchNewServiceHostmap","validateUser","_ref2$reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","sendUserActivation","userObj","activated","exists","_this$webex$credentia","idbrokerService","tokenObj","collectSigninCatalog","rto","timezone","clientRegionInfo","timeZone","_this$list","_this$webex$config$cr","_ref8$timeout","priorityUrl","priorityUrlObj","service_name","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","_formatReceivedHostmap","formattedHostmap","_formattedHost$hosts","matchingCatalogEntry","formattedHost","defaultHost","serviceId","otherHosts","entryHost","getServiceFromClusterId","_ref9$cluster","isServiceUrl","requestObject","initConfig","fedRampServices","formattedDiscoveryServices","formattedOverrideServices","ServerErrorInterceptor","success","normalizeOptions","validateOptions","generateUri","formattedService","formattedResource","webexs","_descriptor","readonly","AmpEvents","deferreds","cappedDebounce","executeQueue","didFail","itemsMap","linksMap","webexsMap","parseLinkHeaders","getLink","hasLink","linkHeaders","linkHeader","_Symbol$iterator2","namespaces","loggers","StorageAdapterLocalStorage","basekey","Bound","localStorage","_getRawData","allData","_load","_save","storageConfig","Webex","sdkType","Backoff","ExponentialBackoffStrategy","FibonacciBackoffStrategy","FunctionCall","FibonacciStrategy","fibonacci","exponential","vargs","precond","backoffStrategy","backoffStrategy_","maxNumberOfRetry_","backoffNumber_","backoffDelay_","timeoutID_","onBackoff_","inherits","maxNumberOfRetry","checkArgument","checkState","checkIsFunction","checkIsArray","function_","arguments_","callback_","lastResult_","numRetries_","backoff_","failAfter_","retryPredicate_","DEFAULT_RETRY_PREDICATE_","state_","State_","RUNNING","ABORTED","isPending","isCompleted","isAborted","strategy","retryIf","retryPredicate","getLastResult","doCallback_","backoffFactory","doCall_","handleBackoff_","eventArgs","handleFunctionCallback_","BackoffStrategy","getInitialDelay","factor_","DEFAULT_FACTOR","factor","next_","getMaxDelay","reset_","backoffDelay","isDef","initialDelay_","maxDelay_","randomisationFactor","randomisationFactor_","randomisationMultiple","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","pad_string_1","padLength","paddedStringLength","SlowBuffer","bufferEq","install","origBufEqual","origSlowBufEqual","restore","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","encodingOrOffset","isEncoding","arrayView","isInstance","fromArrayLike","fromArrayView","checked","numberIsNaN","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","poolSize","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","_arr","hexSliceLookupTable","checkOffset","checkInt","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","readUintBE","readUIntBE","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","writeIntBE","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","targetStart","getMessage","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","received","INVALID_BASE64_RE","leadSurrogate","base64clean","dst","alphabet","table","i16","BufferBigIntNotDefined","GetIntrinsic","callBind","allowMissing","intrinsic","setFunctionLength","$TypeError","$apply","$call","$reflectApply","$max","originalFunction","applyBind","handleDescriptor","lazyInitialize","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_initDefineProp","decorators","decorator","entryArgs","isDescriptor","Meta","META_KEY","staticProps","FUNCTION_REGEXP","SyntaxErrorReporter","parentKlass","childKlass","parentDescriptor","childDescriptor","topic","_extractFunctionSignature","parentPropertySignature","childPropertySignature","_getTopic","_extractTopicSignature","parentTopic","childTopic","parentNotation","childNotation","labels","sliceIterator","profileEnd","_ref2$","_ref2$2","onceThrottleOrFunction","_ref2$3","__enabled","__warned","profileLastRan","CryptoJS","cryptoSecureRandomInt","subtype","C_lib","lib","overrides","mixIn","$super","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","C_algo","Hasher","cfg","_doReset","messageUpdate","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","HmacSHA256","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","isPrime","sqrtN","getFractionalBits","nPrime","SHA256","_hash","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","nBitsTotal","nBitsLeft","plural","msAbs","isPlural","long","fmtLong","fmtShort","formatArgs","useColors","humanize","lastC","save","__nwjs","WebkitAppearance","firebug","$1","localstorage","colors","formatters","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","coerce","selectColor","newDebug","toNamespace","skips","hasPropertyDescriptors","$SyntaxError","gopd","nonEnumerable","nonWritable","nonConfigurable","loose","getParamBytesForAlg","MAX_OCTET","signatureAsBuffer","countPadding","derToJose","paramBytes","maxEncodedParamLength","seqLength","TAG_INT","rLength","rOffset","sLength","sOffset","rPadding","sPadding","joseToDer","signatureBytes","rsBytes","shortLength","getParamSize","keySize","paramBytesForAlg","ES256","ES384","ES512","objectOrFunction","vertxNext","customSchedulerFn","asap","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","browserGlobal","BrowserMutationObserver","isWorker","useNextTick","useVertxTimer","useSetTimeout","useMutationObserver","useMessageChannel","globalSetTimeout","attemptVertx","vertx","runOnLoop","runOnContext","onFulfillment","onRejection","PROMISE_ID","makePromise","resolve$1","FULFILLED","REJECTED","selfFulfillment","cannotReturnOwn","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","_subscribers","settled","detail","hasCallback","succeeded","initializePromise","nextId","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","enumerator","reject$1","needsResolver","needsNew","polyfill","promiseToString","_setScheduler","_setAsap","_asap","ifd0","exif","makerNote","userComment","gps","interop","ifd1","jfif","xmp","iptc","icc","_swapDataView","_swapArrayBuffer","_swapBuffer","_lengthToEnd","toUint8","getUint8Array","getLatin1String","getUnicodeString","getDouble","getUintBytes","getUint64","getUint","ensureChunk","keyList","onloadend","tagKeys","allKeys","tagValues","allValues","translate","translateKeys","reviveValues","needed","applyInheritables","canBeFiltered","translateTagSet","pick","finalizeFilters","tiff","ihdr","multiSegment","sanitize","mergeOutput","silentErrors","chunked","firstChunkSize","firstChunkSizeNode","firstChunkSizeBrowser","chunkSize","chunkLimit","useCached","setupFromTrue","setupFromUndefined","setupFromArray","setupFromObject","filterNestedSegmentTags","traverseTiffDependencyTree","checkLoadedPlugins","setupGlobalFilters","batchEnableWithBool","batchEnableWithUserValue","onlyTiff","fileParser","canHandle","executeParsers","pushToErrors","assignToOutput","extractThumbnail","jpeg","getOrFindSegment","ensureSegmentChunk","Exifr","fileParsers","segmentParsers","fileReaders","tagRevivers","createDictionary","extendDictionary","fetchUrlAsArrayBuffer","readBlobAsArrayBuffer","chunkedProps","otherSegments","segments","tiffBlocks","segmentsAndBlocks","tiffExtractables","inheritables","allFormatters","Options","available","readChunk","extendOptions","injectSegment","createParser","createParsers","readSegments","findPosition","headerLength","normalizeInput","globalOptions","localOptions","canTranslate","translated","translateBlock","translateValue","assignObjectToOutput","findAppSegments","appSegments","mergeMultiSegments","mergedAppSegments","setupSegmentFinderArgs","findAll","wanted","unfinishedMultiSegment","readWhole","findAppSegmentsInRange","canReadNextChunk","nextChunkOffset","readNextChunk","chunkNumber","chunkCount","recordUnknownSegments","unknownSegments","stopAfterSos","recordJpegSegments","jpegSegments","handleMultiSegments","getSegment","parseHeader","headerParsed","parseTags","parseTag","parseTagValue","parseIfd0Block","safeParse","findIfd0Offset","ifd0Offset","findIfd1Offset","ifd1Offset","parseBlock","exifOffset","interopOffset","gpsOffset","parseExifBlock","parseGpsBlock","parseInteropBlock","parseThumbnailBlock","ifd1Parsed","latitude","longitude","dimensionSwapped","scaleX","scaleY","deg","rad","PI","rotateCanvas","rotateCss","css","ranges","_tryExtend","_extend","uintView","readChunked","fullyRead","chunksRead","safeWrapAddress","_readChunk","gpsOnlyOptions","thumbnailOnlyOptions","thumbnailUrl","orientationOnlyOptions","rotations","rotation","httpHeaders","parseBoxes","parseBoxHead","parseSubBoxes","boxes","findBox","parseBoxFullHead","findIcc","findExif","registerSegment","findExifLocIdInIinf","findExtentInIloc","get8bits","setHours","setMinutes","setSeconds","extended","unpackMatch","attrString","innerXml","isPrimitive","isListContainer","isList","isListItem","strtok3","supported","minimumBytes","tokenizer","fromTokenizer","_check","_fromTokenizer","EndOfStreamError","checkString","stringToBytes","fileInfo","peekBuffer","mayBeLess","id3HeaderLen","readToken","uint32SyncSafeToken","readBuffer","zipHeader","compressedSize","uncompressedSize","filenameLength","extraFieldLength","StringType","nextHeaderIndex","brandMajor","maxBufferSize","readField","msb","peekNumber","ic","readElement","lenField","nrLen","readChildren","readChunkHeader","INT32_BE","readHeader","guid","UINT64_LE","typeId","jsonSize","tarHeaderChecksumMatches","readableStream","PassThrough","pipeline","pipe","fromFile","character","readSum","isCallable","toStr","forEachString","forEachObject","concatty","arrLike","slicy","boundLength","joiner","joiny","$Function","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","hasProto","needsEval","INTRINSICS","AggregateError","decodeURI","encodeURI","EvalError","FinalizationRegistry","ReferenceError","URIError","WeakMap","errorProto","doEval","LEGACY_ALIASES","$concat","$spliceApply","$strSlice","$exec","rePropName","reEscapeChar","getBaseIntrinsic","intrinsicName","quote","subString","stringToPath","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","win","hasArrayLengthDefineBug","origSymbol","hasSymbolSham","symObj","syms","$hasOwn","isLE","superCtor","super_","TempCtor","isIPv4","ipString","octets","isIPv6","chunks","isIPv64","v6","splitIPv64","padRight","padLeft","toBinary","fromBinary","binaryString","binaryIPv4","toHex","separatorIndex","binaryIPv64","chunkStrings","fromBinaryIPv4","fromBinaryIPv6","compressedChunks","bestRunLength","bestRunStart","currentlyRun","runLength","runStart","compressIPv6","anonymizeIPv6","maskLength","binary","binaryIPv6","anonymizedBinary","anonymizeIPv64","v4MaskLength","v6MaskLength","anonymizeIPv4","isIPv4MappedIPv6","hasToStringTag","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","strClass","confirm","prompt","isFnRegex","generatorFunc","getGeneratorFunc","whichTypedArray","modules","installedModules","moduleId","__webpack_require__","camelize","prepended","past","future","back","canBack","canForward","addTransitionLifecycleNames","lifecycle","_fsm","transit","sources","mixin","hook","additional","configureLifecycle","configureInitTransition","configureData","configureMethods","wildcard","configureTransitions","configurePlugins","addState","addStateLifecycleNames","onEnter","onLeave","addTransition","onBefore","onAfter","mapTransition","builtin","transitionFor","transitionsFor","allStates","allTransitions","UNOBSERVED","JSM","pending","seek","cannot","observeUnchangedState","onPendingTransition","beginTransit","observeEvents","observersForEvent","onInvalidTransition","endTransit","failTransit","doTransit","previousEvent","previousResult","pluggable","PublicMethods","PublicProperties","cstor","jws","decoded","JsonWebTokenError","NotBeforeError","TokenExpiredError","inner","expiredAt","semver","ASYMMETRIC_KEY_DETAILS_SUPPORTED","RSA_PSS_KEY_DETAILS_SUPPORTED","allowedAlgorithmsForKeys","allowedCurves","asymmetricKeyType","allowedAlgorithms","keyCurve","asymmetricKeyDetails","allowedCurve","mgf1HashAlgorithm","timespan","PS_SUPPORTED","validateAsymmetricKey","isBoolean","isNumber","isPlainObject","KeyObject","createSecretKey","createPrivateKey","SUPPORTED_ALGS","sign_options_schema","audience","jwtid","noTimestamp","keyid","mutatePayload","allowInsecureKeySizes","allowInvalidAsymmetricKeyTypes","registered_claims_schema","nbf","allowUnknown","parameterName","options_to_payload","options_for_objects","secretOrPrivateKey","isObjectPayload","typ","failure","validatePayload","invalid_options","opt","claim","createSign","createPublicKey","PUB_KEY_ALGS","EC_KEY_ALGS","RSA_KEY_ALGS","HS_ALGS","jwtString","secretOrPublicKey","clockTimestamp","decodedToken","getSecret","secretCallback","hasSignature","algorithms","ignoreNotBefore","clockTolerance","ignoreExpiration","audiences","aud","targetAudience","iss","jti","maxAge","maxAgeTimestamp","bufferEqual","formatEcdsa","MSG_INVALID_SECRET","MSG_INVALID_VERIFIER_KEY","MSG_INVALID_SIGNER_KEY","supportsKeyObjects","checkIsPublicKey","typeError","export","checkIsPrivateKey","errMsg","thing","createHmacSigner","checkIsSecretKey","createHmac","createHmacVerifier","computedSig","createKeySigner","createKeyVerifier","verifier","createVerify","createPSSKeySigner","constants","RSA_PKCS1_PSS_PADDING","RSA_PSS_SALTLEN_DIGEST","createPSSKeyVerifier","createECDSASigner","createECDSAVerifer","createNoneSigner","createNoneVerifier","signerFactories","hs","ps","es","verifierFactories","SignStream","VerifyStream","ALGORITHMS","DataStream","readable","jwa","jwsSign","secretOrKey","securedInput","encodedHeader","encodedPayload","jwsSecuredInput","secretStream","JWS_REGEX","safeJsonParse","headerFromJWS","jwsSig","signatureFromJWS","isValidJws","jwsVerify","securedInputFromJWS","jwsDecode","payloadFromJWS","KeyTreeStore","keypath","getGrouped","baseCopy","arrayCopy","arrayEach","baseAssign","baseFor","argsTag","boolTag","dateTag","funcTag","numberTag","objectTag","regexpTag","stringTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reFlags","cloneableTags","objectProto","objToString","baseForOwn","bufferClone","baseClone","isDeep","customizer","stackA","stackB","isArr","initCloneArray","isFunc","Ctor","initCloneByTag","initCloneObject","subValue","fromRight","keysFunc","argCount","reIsHostCtor","fnToString","reIsNative","isObjectLike","isNative","reIsUint","getLength","isLength","isIndex","bindCallback","isIterateeCall","INFINITY","MAX_INTEGER","NAN","genTag","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","baseIsNaN","baseValues","arrayMap","objectToString","nativeKeys","nativeMax","arrayLikeKeys","inherited","isArrayLikeObject","isArguments","baseTimes","skipIndexes","baseKeys","isBinary","toFinite","remainder","baseFindIndex","baseIndexOf","nativeIsArray","funcProto","funcToString","objectCtorString","getPrototype","isHostObject","getNative","shimKeys","isProto","keysIn","propsLength","allowIndexes","FUNC_ERROR_TEXT","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","LodashWrapper","chainAll","__chain__","__index__","__values__","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","resIndex","isTypedArray","isArg","isBuff","isType","initAccum","reAsciiWord","baseAssignValue","baseEach","copyObject","lower","upper","assignValue","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","isMap","bitmask","isFlat","isFull","stacked","objectCreate","arrayIncludesWith","baseUnary","cacheHas","isCommon","valuesLength","outer","computed","valuesIndex","createBaseEach","arrayPush","isFlattenable","baseFlatten","isStrict","createBaseFor","castPath","toKey","symbolsFunc","getRawTag","symToStringTag","strictIndexOf","nativeMin","othLength","othIndex","caches","seen","baseGetTag","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","matchData","noCustomizer","COMPARE_PARTIAL_FLAG","isMasked","toSource","typedArrayTags","baseMatches","baseMatchesProperty","isPrototype","nativeKeysIn","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","baseSum","assignMergeValue","baseMergeDeep","safeGet","baseMerge","srcIndex","cloneTypedArray","toPlainObject","mergeFunc","isTyped","baseGet","baseIteratee","baseMap","baseSortBy","compareMultiple","iteratees","orders","basePickBy","baseSet","baseUnset","eachFunc","overRest","setToString","metaMap","baseSetData","constant","baseSetToString","comparer","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","createSet","setToArray","seenIndex","baseSlice","freeExports","freeModule","cloneArrayBuffer","symbolValueOf","symbol","typedArray","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareAscending","objCriteria","othCriteria","ordersLength","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","getSymbolsIn","coreJsData","placeholder","arrayAggregator","baseAggregator","baseRest","assigner","createCtor","isBind","castSlice","hasUnicode","stringToArray","strSymbols","chr","deburr","reApos","thisBinding","createHybrid","createRecurry","getHolder","replaceHolders","findIndexFunc","composeArgs","composeArgsRight","countHolders","reorder","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","isLaziable","setData","setWrapToString","wrapFunc","isCurry","createBind","createCurry","createPartial","mergeData","customDefaultsMerge","deburrLetter","basePropertyOf","isPartial","arrStacked","othStacked","arrValue","othValue","compared","mapToArray","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","escapeHtmlChar","freeGlobal","baseGetAllKeys","realNames","otherFunc","isKeyable","baseIsNative","overArg","nativeObjectToString","unmasked","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","reWrapDetails","reSplitDetails","hasFunc","reHasUnicode","reHasUnicodeWord","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","reWrapComment","spreadableSymbol","isConcatSpreadable","reIsDeepProp","reIsPlainProp","getFuncName","lodash","funcName","maskSrcKey","assocIndexOf","getMapData","memoize","PLACEHOLDER","WRAP_ARY_FLAG","srcBitmask","newBitmask","isCombo","freeProcess","nodeUtil","otherArgs","oldArray","freeSelf","shortOut","getWrapDetails","insertWrapDetails","updateWrapDetails","nativeNow","lastCalled","stamp","pairs","LARGE_ARRAY_SIZE","asciiToArray","unicodeToArray","memoizeCapped","reWhitespace","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsModifier","rsEmoji","reUnicodeWord","wrapFlags","createAssigner","assignWith","createWrap","capitalize","camelCase","createCompounder","word","upperFirst","CLONE_DEEP_FLAG","curry","lastArgs","lastThis","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","reLatin","reComboMark","propsIndex","mergeWith","defaultsDeep","baseDelay","baseDifference","difference","reUnescapedHtml","reHasUnescapedHtml","baseFill","baseFilter","createFind","castFunction","baseHas","hasPath","baseHasIn","baseIntersection","castArrayLikeObject","intersection","mapped","baseIsArguments","stubFalse","baseIsDate","nodeIsDate","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","baseKeysIn","baseMean","memoized","Cache","customOmitClone","flatRest","partial","partialRight","createAggregator","basePick","baseProperty","basePropertyDeep","baseReduce","basePullAt","baseSome","baseOrderBy","sortBy","baseClamp","baseTrim","baseUniq","idCounter","createCaseFirst","asciiWords","hasUnicodeWord","unicodeWords","wrapperClone","Yallist","MAX","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","doUse","hit","isStale","unshiftNode","walker","Entry","forEachStep","thisp","lc","stale","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lengthCalculator","lC","itemCount","rforEach","dump","dumpLru","peek","expiresAt","prune","Mime","_types","_extensions","typeMap","forge","registerAlgorithm","cipher","aes","Algorithm","startEncrypting","_createCipher","createEncryptionCipher","startDecrypting","createDecryptionCipher","inBlock","outBlock","_updateBlock","putByte","encryptOp","_expandKey","modes","ecb","cbc","cfb","ofb","ctr","gcm","sbox","isbox","rcon","imix","Nb","xtime","e2","e4","e8","sx","sx2","ime","ei","iNk","Nk","m0","m1","m2","m3","wnew","wi","b2","Nr","createDecipher","createCipher","_checkBufferLength","Class","UNIVERSAL","APPLICATION","CONTEXT_SPECIFIC","PRIVATE","Type","INTEGER","BITSTRING","OCTETSTRING","NULL","OID","ODESC","REAL","ENUMERATED","EMBEDDED","UTF8","ROID","SET","PRINTABLESTRING","IA5STRING","UTCTIME","GENERALIZEDTIME","BMPSTRING","constructed","composed","bitStringContents","excludeBitStringContents","obj1","obj2","includeBitStringContents","getBerValueLength","getByte","_fromDer","b1","longFormBytes","_getValueLength","getBytes","decodeBitStrings","savedRead","savedRemaining","used","tc","asn1Options","fromDer","parseAllBytes","byteCount","toDer","useBitStringContents","putBytes","putBuffer","putInt16","lenBytes","oidToDer","valueBytes","derToOid","utcTimeToDate","utc","MM","DD","hh","mm","ss","setUTCFullYear","setUTCHours","generalizedTimeToDate","gentime","YYYY","fff","dateToUtcTime","dateToGeneralizedTime","integerToDer","putSignedInt","derToInteger","getSignedInt","captureAsn1","captureBitStringContents","captureBitStringValue","_nonLatinRegex","prettyPrint","indentation","indent","subvalues","pki","oids","bytesToHex","decodeUtf8","_reverseAlphabets","maxline","carry","_encodeWithByteBuffer","getAlgorithm","BlockCipher","_finish","_input","_op","_decrypt","unpad","overflow","afterFinish","transformIV","blocks","inc32","from64To32","_ints","_inBlock","_outBlock","putInt32","fillWithByte","truncate","_prev","_iv","_partialBlock","_partialOutput","_partialBytes","partialBytes","_R","additionalData","_cipherLength","_tagLength","_tag","_hashBlock","_hashSubkey","componentBits","generateHashTable","ivLength","_j0","ghash","_aDataLength","lengths","z_i","v_i","lsb","tableMultiply","x_i","ah","perInt","shft","generateSubHashTable","half","m_i","m_j","des","_keys","pc2bytes0","pc2bytes1","pc2bytes2","pc2bytes3","pc2bytes4","pc2bytes5","pc2bytes6","pc2bytes7","pc2bytes8","pc2bytes9","pc2bytes10","pc2bytes11","pc2bytes12","pc2bytes13","shifts","lefttmp","righttmp","_createKeys","spfunction1","spfunction2","spfunction3","spfunction4","spfunction5","spfunction6","spfunction7","spfunction8","endloop","loopinc","right1","right2","usePureJavaScript","_md","_ipadding","_opadding","md","keylen","getMac","dbits","jsbn","BigInteger","nbi","am3","xh","am","DB","DM","DV","FV","F1","F2","rr","vv","BI_RM","BI_RC","int2char","intAt","nbv","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","Barrett","r2","q3","dlShiftTo","mu","revert","divRemTo","mulTo","multiplyTo","sqrTo","squareTo","subTo","copyTo","u0","drShiftTo","fromRadix","lShiftTo","bs","cbs","bm","ds","rShiftTo","pm","ts","nsh","ys","y0","yt","d1","d2","qd","toRadix","km","bitLength","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","lowprimes","lplim","signum","intValue","dMultiply","testBit","bitwiseTo","isProbablePrime","nextBytes","changeBit","addTo","modInt","millerRabin","n1","getLowestSetBit","prng","modPow","byteValue","shortValue","andNot","bitCount","setBit","clearBit","flipBit","divideAndRemainder","k1","g2","is1","modInverse","ac","mgf","mgf1","generate","seed","maskLen","digestLength","_IN","_I_","pbe","encryptedPrivateKeyValidator","PBES2AlgorithmsValidator","pkcs12PbeParamsValidator","prfOidToMessageDigest","prfOid","prfAlgorithm","prfAlgorithmToMessageDigest","sha512","encryptPrivateKeyInfo","saltSize","dkLen","encryptionAlgorithm","encryptedData","getBytesSync","countBytes","ivLen","encOid","cipherFn","dk","pkcs5","pbkdf2","hexToBytes","createPbkdf2Params","saltBytes","generatePkcs12Key","decryptPrivateKeyInfo","encryptionOid","getCipher","encryptionParams","encrypted","encryptedPrivateKeyToPem","epki","encryptedPrivateKeyFromPem","headerType","procType","encryptRsaPrivateKey","legacy","wrapRsaPrivateKey","privateKeyToAsn1","opensslDeriveBytes","dekInfo","decryptRsaPrivateKey","rc2","privateKeyFromAsn1","sha1","passBuf","Slen","Plen","Inew","setAt","getCipherForPBES2","getCipherForPKCS12PBE","supportedOids","kdfOid","kdfSalt","kdfIterationCount","encIv","dIvLen","md5","digests","isNodejs","pbkdf2Sync","hLen","u_c","u_c1","int32ToBytes","xorBytes","foldHeader","contentDomain","encode64","rMessage","rHeader","rCRLF","decode64","li","nl","vi","pkcs1","rsa_mgf1","encode_rsa_oaep","mgf1Md","lHash","PS","PS_length","seedLength","dbMask","maskedDB","seedMask","decode_rsa_oaep","em","maskedSeed","db","lHashPrime","in_ps","p12","pkcs12","contentInfoValidator","pfxValidator","safeBagValidator","attributeValidator","certBagValidator","_getBagsByAttribute","safeContents","bagType","safeBags","bag","_decodePkcs7Data","_decryptSafeContents","pkcs7","encryptedDataValidator","encAlgorithm","encParameter","encryptedContentAsn1","_decodeSafeContents","safeBag","decoder","bagId","_decodeBagAttributes","bagAttributes","bagAsn1","bagValue","pkcs8ShroudedKeyBag","keyBag","certBag","certId","x509Certificate","certAsn1","certificateFromAsn1","decodedAttrs","pkcs12FromAsn1","pfx","getBags","localKeyId","localKeyIdHex","friendlyName","getBagsByFriendlyName","getBagsByLocalKeyId","mac","macKeyBytes","macAlgorithm","sha384","macSalt","macIterations","macKey","macDigest","authSafe","contentInfo","_decodeAuthenticatedSafe","toPkcs12Asn1","useMac","generateLocalKeyId","bagAttrs","pairedCert","certificateFromPem","certificateToAsn1","contents","certSafeBags","certBagAttrs","certSafeBag","certSafeContents","certCI","pkAsn1","keySafeContents","keyCI","macData","macValue","p7","_recipientFromAsn1","recipientInfoValidator","RDNAttributesAsArray","serial","encKey","_recipientsToAsn1","distinguishedNameToAsn1","_signerToAsn1","authenticatedAttributesAsn1","unauthenticatedAttributes","attrsAsn1","_attributeToAsn1","messageDigest","signingTime","jan_1_1950","jan_1_2050","_fromAsn1","rawCapture","_decryptContent","ciph","messageFromPem","messageFromAsn1","messageToPem","pemObj","toAsn1","envelopedData","createEnvelopedData","createEncryptedData","signedData","createSignedData","fromAsn1","signers","digestAlgorithmIdentifiers","signedDataValidator","addSigner","privateKeyFromPem","authenticatedAttributes","rsaEncryption","encodeUtf8","detached","detachedContent","mds","ai","_signersToAsn1","addSignerInfos","addDigestAlgorithmIds","addCertificate","addCertificateRevokationList","envelopedDataValidator","infos","_recipientsFromAsn1","recipientInfos","ec","findRecipient","sAttr","rAttr","recipient","privKey","desCBC","addRecipient","keyLen","ciphFn","p7v","pkcs7asn1","encryptedContentInfoValidator","signerValidator","pemToDer","privateKeyToPem","privateKeyInfoToPem","GCD_30_DELTA","THIRTY","generateProbablePrime","primeincFindPrimeWithoutWorkers","generateRandom","numWorkers","workers","workLoad","workerScript","estimateCores","cores","workerMessage","primeincFindPrimeWithWorkers","primeincFindPrime","mrTests","getMillerRabinTests","millerRabinTests","maxBlockTime","_primeinc","deltaIdx","bits1","reseeds","generated","keyBytes","pools","_reseedSync","messageLength","_seed","collect","seedFileSync","_2powK","seedBytes","formatKey","formatSeed","defaultSeedFile","globalScope","entropy","QuotaExceededError","generateSync","increment","seedFile","_reseed","collectInt","registerWorker","pss","salt_","pssobj","modBits","emBits","emLen","mHash","m_","checkLen","jQuery","prng_aes","_prng_aes_output","_prng_aes_buffer","spawnPrng","_navBytes","mousemove","clientX","clientY","keypress","charCode","createInstance","piTable","rol","ror","expandKey","effKeyBits","T1","T8","TM","mixRound","mashRound","_output","getInt16Le","runPlan","plan","putInt16Le","ptr","rsa","privateKeyValidator","rsaPrivateKeyValidator","rsaPublicKeyValidator","publicKeyValidator","digestInfoValidator","emsaPkcs1v15encode","oidBytes","digestInfo","_modPow","pub","dQ","qInv","xp","xq","_encodePkcs1_v1_5","bt","padByte","padNum","numZeros","padBytes","_decodePkcs1_v1_5","ml","_bnToBytes","_getMillerRabinTests","_detectNodeCrypto","_detectSubtleCrypto","_detectSubtleMsCrypto","_intToUint8Array","yhex","ed","zeros","xhex","createKeyPairGenerationState","eInt","qBits","pBits","pqState","stepKeyPairGenerationState","q1","phi","setPrivateKey","setPublicKey","generateKeyPair","publicKeyEncoding","privateKeyEncoding","priv","publicKeyFromPem","pkcs8","setRsaPublicKey","genOp","exportOp","keypair","generateKeyPairSync","getPrime","_generateKeyPair","scheme","schemeOptions","_parseAllDigestBytes","md2","sha224","setRsaPrivateKey","privateKeyModulus","privateKeyPublicExponent","privateKeyPrivateExponent","privateKeyPrime1","privateKeyPrime2","privateKeyExponent1","privateKeyExponent2","privateKeyCoefficient","privateKeyToRSAPrivateKey","publicKeyFromAsn1","publicKeyOid","publicKeyModulus","publicKeyExponent","publicKeyToAsn1","publicKeyToSubjectPublicKeyInfo","publicKeyToRSAPublicKey","_padding","fullMessageLength","messageLengthSize","messageLength64","int32s","h0","h1","h2","h3","h4","_update","finalBlock","s2","h5","h6","h7","s0","_states","messageLength128","hlen","t1_hi","t1_lo","t2_hi","t2_lo","s0_hi","s0_lo","s1_hi","ch_hi","maj_hi","maj_lo","a_hi","a_lo","b_hi","b_lo","c_hi","c_lo","d_hi","d_lo","e_hi","e_lo","f_hi","f_lo","g_hi","g_lo","h_hi","h_lo","w2","w7","w15","w16","baseN","_checkBitsParam","ByteStringBuffer","isArrayBuffer","isArrayBufferView","_constructedStringLength","callbacks","stopPropagation","oldSetImmediate","_optimizeConstructedString","putString","putInt24","putInt24Le","putInt32Le","putInt","getInt24","getInt24Le","getInt32Le","DataBuffer","readOffset","growSize","writeOffset","accommodate","amount","utf16","s1","s3","_base64","_base64Idx","_base58","base58","deflate","inflate","_setStorageObject","_getStorageObject","_setItem","_getItem","_removeItem","_clearItems","_callStorageFunction","clearItems","argi","formatNumber","decimals","dec_point","thousands_sep","formatSize","bytesFromIP","bytesFromIPv4","bytesFromIPv6","blanks","bytesToIP","bytesToIPv4","bytesToIPv6","zeroGroups","zeroMaxGroup","blobUrl","sample","samples","avg","overlaps","r1","overlap","_shortNames","x509CertificateValidator","rsassaPssParameterValidator","certificationRequestInfoValidator","certificationRequestValidator","_getAttribute","shortName","rdn","valueTagClass","CRIAttributesAsArray","extensionRequest","certificateExtensionFromAsn1","_readSignatureParameters","fillDefaults","algorithmOid","hashOid","maskGenOid","maskGenHashOid","_createSignatureDigest","signatureOid","_verifySignature","sha1WithRSAEncryption","sha1WithRSASignature","signatureParameters","_dnToAsn1","_fillMissingFields","valueConstructed","certificateExtensionToAsn1","_fillMissingExtensionFields","b3","digitalSignature","nonRepudiation","keyEncipherment","dataEncipherment","keyAgreement","keyCertSign","encipherOnly","decipherOnly","objsign","sslCA","emailCA","objCA","altName","ski","generateSubjectKeyIdentifier","subjectKeyIdentifier","subSeq","fullNameGeneralNames","_signatureParametersToAsn1","_CRIAttributesToAsn1","csr","computeHash","certificateToPem","publicKeyToPem","publicKeyToRSAPublicKeyPem","getPublicKeyFingerprint","certificationRequestFromPem","certificationRequestFromAsn1","certificationRequestToPem","certificationRequestToAsn1","createCertificate","siginfo","validity","getField","addField","setSubject","setIssuer","setExtensions","exts","getTBSCertificate","issued","expectedIssuer","actualIssuer","isIssuer","iattr","sattr","verifySubjectKeyIdentifier","certVersion","certSerialNumber","certSignatureOid","certSignatureParams","certinfoSignatureOid","certinfoSignatureParams","certSignature","certValidity1UTCTime","certValidity2GeneralizedTime","certValidity3UTCTime","certValidity4GeneralizedTime","imd","ibytes","certIssuer","certIssuerUniqueId","smd","sbytes","certSubject","certSubjectUniqueId","certExtensions","certificateExtensionsFromAsn1","extseq","gn","createCertificationRequest","csrVersion","csrSignatureOid","csrSignatureParams","csrSignature","certificationRequestInfo","certificationRequestInfoSubject","getAttribute","addAttribute","certificationRequestInfoAttributes","setAttributes","getCertificationRequestInfo","cri","_dateToAsn1","certificateExtensionsToAsn1","dn","createCaStore","caStore","getBySubject","ensureSubjectHasHash","getIssuer","hasCertificate","der1","listAllCertificates","certList","removeCertificate","certificateError","bad_certificate","unsupported_certificate","certificate_revoked","certificate_expired","certificate_unknown","unknown_ca","verifyCertificateChain","validityCheckDate","selfSigned","keyUsage","basicConstraints","bcExt","keyUsageExt","vfd","helpers","sha","checkIv","commonCbcEncryptFN","setupFallback","pdata","nodeCrypto","createCipheriv","subtleCrypto","commonCbcDecryptFN","createDecipheriv","checkKey","cbcHmacEncryptFN","commonEncrypt","eKey","adata","aad","mdata","int64ToBuffer","cbcHmacDecryptFN","commonDecrypt","EncryptionLabel","IntegrityLabel","DotLabel","generateCek","masterKey","epu","epv","masterSize","cekSize","int32ToBuffer","generateCik","cikSize","concatKdfCbcHmacEncryptFN","cek","cik","kdata","concatKdfCbcHmacDecryptFN","aesCbcHmacSha2","CONSTANTS","GCM","gcmEncryptFN","commonChecks","prepareResults","setAAD","getAuthTag","tagStart","amt","CHUNK_SIZE","clen","poff","doChunk","plen","gcmDecryptFN","setAuthTag","coff","aesGcm","A0","longToBigEndian","kwEncryptFN","jdx","kwDecryptFN","aesKw","concatDeriveFn","hashLen","HASHLENGTH","otherInfo","okm","derive","ENCLENGTH","KEYLENGTH","NONCELENGTH","direct","ecc","EC_KEYSIZES","convertToObj","isPublic","asBuffer","UNCOMPRESSED","EC_OID","ERR_MSG","convertToForge","asPublicKey","asPrivateKey","convertToJWK","convertToBuffer","curveSize","derToConcat","rPad","sPad","concatToDer","convertToPEM","isPrivate","curveNameToOid","ecUtil","hkdf","idealHash","curve","ecdh","doEcdhesCommonDerive","pubKey","prependLen","algId","apu","apv","validatePublic","ECDH","pk","createECDH","computeSecret","algParams","kw","epk","ecrypt","idealCurve","ecdsaSignFN","nodejs","nodeHash","getHashes","ecdsaVerifyFN","ecdsa","MAX_INT32","getCryptoSubtle","getCryptoNodeJS","webcrypto","fallback","NOT_SUPPORTED_ERR","hkdfDeriveFn","hmacSignFN","checkKeyLength","sig","hmacVerifyFN","vrfy","implementations","ALGS_DIGEST","ALGS_DERIVE","ALGS_SIGN","ALGS_VRFY","ALGS_ENC","ALGS_DEC","KW","NULL_BUFFER","fixSalt","pbkdf2Fn","prepareProps","itrs","keyval","mainAlgo","pbes2EncryptFN","deriveAlg","p2s","p2c","pbes2","pbes2DecryptFN","convertToPem","rsaUtil","nodeSupport","RSA1_5","nodeSupportCheck","rsaesEncryptFn","publicEncrypt","rsaesDecryptFn","privateDecrypt","rsaes","nodePSSsupport","rsassaV15SignFn","rsassaV15VerifyFn","rsassaPssSignFn","rsassaPssVerifyFn","rsassa","createHash","E1","E1L","E1B","LOOKUP","generateLookup","srcPos","destPos","arrayEqual","asBytes","intToBigEndian","asInts","bigEndianToInt","oneAsInts","shiftRightN","nInv","r0","multiplyP","multiplyP8","multipliers","cipherHelpers","Gcm","bufLength","bufBlock","zeroBlock","J0","gHASH","gHASHBlock","SAt","SAtPre","atBlock","atBlockPos","atLength","atLengthPre","bufOff","totalLength","processAADBytes","inV","inOff","outOff","resultLen","inLen","outputBlock","initCipher","gCTRPartial","gHASHPartial","gCTRBlock","getNextCounterBlock","outb","multiplyH","Gcm8KMultiplier","inb","bigEndianToLong","X9ECParameters","fromHex","getCurve","getG","getN","getH","CURVES","ECCurveFp","decodePointHex","secp384r1","secp521r1","secp256r1","hex2bn","bn2bin","bn","bin2bn","keySizeBytes","normalizeEcdsa","log2n","mdLen","ECPointFp","fromBigInteger","contains","u1","u2","multiplyTwo","getX","toBigInteger","toPublicKey","getY","keysize","pubkey","privkey","ECFieldElementFp","zinv","infinity","reducer","square","isInfinity","twice","getInfinity","THREE","x1","y1","v2","v3","x1v2","zu2","x3","y3","z3","y1z1","y1sqz1","hBit","both","getP","getA","getB","xHex","yHex","encodePointHex","oLen","modeRaw","_blocks","originalModInverse","JWS","JWA","JWE","JWK","canYouSee","AlgConfig","pako","DEFAULT_OPTIONS","JWEDecrypter","ks","globalOpts","assumedKey","keystore","isKeyStore","extraHandlers","handlerKeys","algSpec","protected","encrypted_key","algKey","rcptList","crit","unprotected","jwe","processKey","rcpt","algPromise","prekey","processing","enkKey","zip","inflateRaw","decrypter","generateCEK","DEFAULTS","JWEEncrypter","finalized","protectAll","encAlg","rcpts","single","one","tks","rpromise","algAlg","MODE_ENCRYPT","rjwe","procR","lenProtect","unprotect","lenUnprotect","deflateRaw","flattened","encrypter","rcptStart","MODE_WRAP","ref","createKeyStore","uuidv4","uniq","HELPERS","UTIL","prints","INTERNALS","THUMBPRINT_KEY","included","COMMON_PROPS","private","THUMBPRINT_HASH","thumbprint","MODE_SIGN","MODE_VERIFY","MODE_DECRYPT","MODE_UNWRAP","algs","signKey","signProps","verifyKey","verifyProps","encryptKey","encryptProps","decryptKey","decryptProps","wrapProps","unwrapProps","ecutil","depsecc","BaseKey","SIG_ALGS","WRAP_ALGS","oidToCurveName","JWKEcCfg","unpackProps","validators","embeddedPrivateKey","JWKEcFactory","import","keyOid","keyValue","X509CertificateValidator","JWKStore","KeyStore","JWKRegistry","GLOBAL_REGISTRY","importFrom","processCert","commonName","x5t","keysets","keytype","extras","factors","fromPEM","supports","asKeyStore","createKey","KeyRegistry","ENC_ALGS","adjustDecryptProps","adjustEncryptProps","JWKOctetCfg","mins","JWKOctetFactory","rsau","JWKRsaCfg","JWKRsaFactory","outgoing","JWSSigner","signatories","sigs","signatures","signs","signStart","signList","allFields","signatory","allowEmbeddedKey","JWSVerifier","sigList","processSig","prot","quoteRE","algspec","specAllowed","specDisallowed","ptnAllowed","ptnDisallowed","ptn","suffix","makeRE","DEFAULT_GROW_SIZE","getBuffer","orig","putNative","ctors","typedArrayCtors","findTypedArrayFor","Deflate","gzip","Inflate","ungzip","zlib_deflate","ZStream","Z_NO_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFAULT_STRATEGY","Z_DEFLATED","windowBits","memLevel","ended","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","deflator","flush_mode","_flush_mode","next_in","avail_in","next_out","onData","deflateEnd","onEnd","flattenChunks","zlib_inflate","GZheader","Z_NEED_DICT","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","inflateInit2","inflateGetHeader","inflateSetDictionary","inflator","last_avail_out","inflateReset","next_out_utf8","utf8border","utf8str","buf2string","inflateEnd","STR_APPLY_UIA_OK","__","_utf8len","TextEncoder","m_pos","str_len","buf_len","utf16buf","c_len","buf2binstring","adler","Z_PARTIAL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","crcTable","makeTable","crc","_tr_init","_tr_stored_block","_tr_flush_block","_tr_tally","_tr_align","adler32","crc32","MAX_MATCH","MIN_LOOKAHEAD","INIT_STATE","BUSY_STATE","FINISH_STATE","rank","slide_hash","wsize","w_size","hash_size","HASH","hash_shift","hash_mask","flush_pending","pending_buf","pending_out","total_out","flush_block_only","block_start","strstart","put_byte","putShortMSB","read_buf","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","more","window_size","ins_h","deflate_stored","have","min_block","pending_buf_size","bi_valid","high_water","deflate_fast","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH","sym_next","deflate_slow","max_insert","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","configuration_table","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","HEAP_SIZE","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","MAX_BITS","heap","heap_len","heap_max","sym_buf","lit_bufsize","sym_end","opt_len","static_len","bi_buf","deflateStateCheck","deflateResetKeep","data_type","deflateReset","deflateInit","old_flush","level_flags","hcrc","beg","gzhead_extra","bstate","deflate_huff","deflate_rle","dictLength","tmpDict","avail","deflateInfo","xflags","extra_len","BAD","_in","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","inflate_fast","inflate_table","HEAD","DICT","TYPEDO","COPY_","LEN_","LEN","CHECK","MEM","zswap32","InflateState","havedict","wbits","ncode","nlen","ndist","work","lendyn","distdyn","was","inflateStateCheck","inflateResetKeep","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","inf_leave","dictid","inflateInfo","MAXBITS","lbase","lext","dbase","dext","lens_index","codes","table_index","incr","drop","huff","offs","LITERALS","L_CODES","D_CODES","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","gen_codes","next_code","init_block","END_BLOCK","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","LENGTH_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","block_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","_nil","_parse","_v2","_v3","_v4","_version","_interopRequireDefault","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","cnt","md5ff","md5gg","md5hh","md5ii","_default","length32","hexTab","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","bytesToWords","ROTL","_rng","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","msecs","nsecs","tmh","DNS","hashfunc","generateUUID","_namespace","_native","_sha","_regex","KMSContext","sharedKey","rep","createDate","lkey","cloneDeep","KMSKeyObject","bindDate","KMSRequest","KMSResponse","waiting","_rnds8","_rnds","_byteToHex","_hexToByte","unparse","bth","_seedBytes","v1","oct","SCRObject","fromJWE","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setSize","setForEach","weakMapHas","weakSetHas","weakRefDeref","booleanValueOf","functionToString","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","bigIntValueOf","symToString","hasShammedSymbols","isEnumerable","gPO","addNumericSeparator","sepRegex","int","intStr","dec","utilInspect","inspectCustom","custom","inspectSymbol","wrapQuotes","defaultStyle","quoteChar","quoteStyle","inspect_","maxStringLength","customInspect","numericSeparator","inspectString","bigIntStr","maxDepth","baseIndent","getIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","HTMLElement","xs","singleLineValues","indentedJoin","isError","mapParts","collectionOf","setParts","isWeakMap","weakCollectionOf","isWeakSet","isWeakRef","isBigInt","protoTag","trailer","lowbyte","lineJoiner","symMap","headersArr","row","Deferred","defaultMessages","StreamReader","EndOfFileStream_1","Deferred_1","EndOfFileStream_2","endOfStream","peekQueue","uint8Array","bytesRead","peekData","lenCopy","reqLen","chunkLen","readFromStream","readDeferred","StreamReader_1","failCheck","ExceptionConstructor","messageFormat","failArgumentCheck","IllegalArgumentError","typeOf","typeCheck","expect","IllegalStateError","failStateCheck","checkIsDef","checkIsDefAndNotNull","checkIsString","checkIsNumber","checkIsBoolean","checkIsObject","BufferSourceConverter","toView","isBufferSource","aView","STRING_TYPE","HEX_REGEX","BASE64_REGEX","BASE64URL_REGEX","Utf8Converter","uintArray","encodedString","Utf16Converter","Convert","isHex","isBase64","isBase64Url","ToString","ToBase64","ToBase64Url","FromString","FromBinary","FromBase64","FromBase64Url","formatted","formatString","Base64Padding","DEFAULT_UTF8_ENCODING","padCount","percentTwenties","Format","RFC1738","RFC3986","allowDots","allowPrototypes","allowSparse","arrayLimit","charset","charsetSentinel","comma","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","$0","numberStr","parseArrayValue","parseKeys","givenKey","valuesParsed","leaf","cleanRoot","normalizeParseOptions","tempObj","cleanStr","skipIndex","bracketEqualsPos","maybeMap","encodedVal","combine","parseValues","getSideChannel","arrayPrefixGenerators","brackets","pushToArray","valueOrArray","toISO","defaultFormat","addQueryPrefix","encodeValuesOnly","serializeDate","skipNulls","sentinel","generateArrayPrefix","commaRoundTrip","sideChannel","tmpSc","findFlag","objKeys","adjustedPrefix","valueSideChannel","normalizeStringifyOptions","arrayFormat","hexTable","arrayToObject","refs","compacted","compactQueue","strWithoutPlus","defaultEncoder","mergeTarget","targetItem","sep","maxKeys","kstr","vstr","stringifyPrimitive","objectKeys","createErrorType","NodeError","subClass","superClass","oneOf","determiner","this_len","Duplex","Readable","Writable","allowHalfOpen","onend","_writableState","onEndNT","highWaterMark","_readableState","destroyed","Transform","_transform","ReadableState","EElistenerCount","OurUint8Array","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","consume","endReadable","endReadableNT","wState","finished","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","ondrain","ondata","cleanedUp","needDrain","pipeOnDrain","dests","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","_transformState","transforming","writecb","writechunk","needTransform","writeencoding","_flush","prefinish","_write","err2","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","_final","doWrite","onwriteDrain","allBuffers","isBuf","callFinal","need","rState","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","prim","_toPrimitive","_toPropertyKey","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","_defineProperties","hasStrings","_getString","_getBuffer","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","setHeader","isRequest","ERR_MISSING_ARGS","popCallback","destroys","closed","destroyer","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","copyProps","SafeBuffer","wildcardRtcpFb","existingFeedback","ANY","Comparator","parseOptions","operator","COMPARATORLOOSE","COMPARATOR","SemVer","cmp","intersects","Range","includePrerelease","safeRe","parseRange","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","pr","replaceCaret","CARETLOOSE","CARET","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","anyX","STAR","GTE0PRE","GTE0","incPr","fM","fm","fpr","tM","tm","tp","tpr","prerelease","major","minor","patch","MAX_LENGTH","compareIdentifiers","LOOSE","FULL","compareMain","comparePre","compareBuild","identifier","identifierBase","rtl","COERCERTL","COERCE","versionA","versionB","version1","version2","v1Higher","highVersion","lowVersion","highHasPre","throwErrors","internalRe","rcompare","compareLoose","rsort","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","simplifyRange","subset","SEMVER_SPEC_VERSION","RELEASE_TYPES","rcompareIdentifiers","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","NODE_DEBUG","numeric","anum","bnum","looseOption","emptyOpts","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","LONETILDE","LONECARET","maxSV","rangeObj","minSV","minver","setMin","compver","hilo","gtfn","ltefn","ltfn","ecomp","simplified","minimumVersionWithPreRelease","minimumVersion","simpleSubset","dom","eqSet","gtltComp","higher","hasDomLT","hasDomGT","higherGT","lowerLT","needDomLTPre","needDomGTPre","sawNonNull","OUTER","simpleSub","simpleDom","isSub","hasDescriptors","functionLengthIsConfigurable","functionLengthIsWritable","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","$wm","$m","$o","objects","listGet","listHas","listSet","EE","_isStdio","didOnEnd","cleanup","nenc","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","utf8CheckExtraBytes","utf8CheckIncomplete","AbstractTokenizer","peek_readable_1","numBuffer","peekToken","readNumber","bytesLeft","BufferTokenizer","AbstractTokenizer_1","normOptions","bytes2read","FileTokenizer","sourceFilePath","isFile","writeFileSync","writeFile","createReadStream","pathExists","existsSync","ReadStreamTokenizer","streamReader","getFileInfo","skipBytes","skipBuffer","bufSize","totBytesRead","ReadStreamTokenizer_1","BufferTokenizer_1","FileTokenizer_1","core_1","AnsiStringType","BufferType","Uint8ArrayType","IgnoreType","Float80_LE","Float80_BE","Float64_LE","Float64_BE","Float32_LE","Float32_BE","Float16_LE","Float16_BE","INT64_BE","UINT64_BE","INT64_LE","INT32_LE","INT24_BE","INT24_LE","INT16_LE","INT16_BE","UINT32_BE","UINT32_LE","UINT24_BE","UINT24_LE","UINT16_BE","UINT16_LE","dv","getBigUint64","setBigUint64","getBigInt64","setBigInt64","until","codePointToString","singleByteDecoder","inRange","cp","windows1252","punycode","maxInt","tMin","tMax","skew","damp","initialBias","initialN","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","mapDomain","ucs2decode","ucs2encode","digitToBasic","digit","adapt","numPoints","firstTime","basic","oldi","baseMinusT","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","slashes","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","urlParse","parseQueryString","slashesDenoteHost","queryIndex","uSplit","simplePath","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","bit","toASCII","esc","qm","relative","resolveObject","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","up","isAbsolute","isArgumentsObject","uncurryThis","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","working","isDataViewToString","isDataView","isPromise","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isBoxedPrimitive","isAnyArrayBuffer","descriptors","formatRegExp","isNull","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","debugEnv","stylize","stylizeNoColor","showHidden","isUndefined","stylizeWithColor","formatValue","styleType","recurseTimes","primitive","simple","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","numLinesEst","reduceToSingleString","isNullOrUndefined","isNativeError","months","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promiseReject","callbackify","callbackified","maybeCb","bytesToUuid","is_uri","is_iri","is_http_uri","is_http_iri","is_https_uri","is_https_iri","is_web_uri","is_web_iri","isHttpUri","isHttpsUri","isWebUri","splitUri","splitted","authority","fragment","allowHttps","availableTypedArrays","typedArrays","superProto","trySlices","tryTypedArrays","inserted","pushNode","forEachReverse","getReverse","mapReverse","reduceReverse","toArrayReverse","sliceReverse","deleteCount","_Object$getPrototypeOf","_Object$setPrototypeOf","possibleNames","ctz32","INT_CACHE","UINT_CACHE","cachedObj","TWO_PWR_64_DBL","TWO_PWR_63_DBL","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","radixToPower","power","TWO_PWR_16_DBL","TWO_PWR_24","LongPrototype","radixLong","rem1","remDiv","thisNeg","otherNeg","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtrahend","b00","divisor","approx","approxRes","approxRem","countLeadingZeros","clz","countTrailingZeros","ctz","numBits","rotateLeft","rotl","rotateRight","rotr","_setPrototypeOf","unsupportedIterableToArray","arrayLikeToArray","cachedModule","nmd","__webpack_exports__"],"sourceRoot":""}